Ad
1: 2018-05-26 (Sat) 13:46:46 njf source Edit Backup No.1 as current. Cur: 2018-05-26 (Sat) 16:10:03 njf source Edit
Line 2: Line 2:
App Storeに申請して審査でリジェクトされたとき、もし原因がアプリのクラッシュなら、クラッシュレポートが送られてくるときがあります。 App Storeに申請して審査でリジェクトされたとき、もし原因がアプリのクラッシュなら、クラッシュレポートが送られてくるときがあります。
-中を見ても、+しかし、中を見ても、
 Thread 0 name:  Dispatch queue: com.apple.main-thread  Thread 0 name:  Dispatch queue: com.apple.main-thread
Line 16: Line 16:
[[https://developer.apple.com/library/content/technotes/tn2151/_index.html]] [[https://developer.apple.com/library/content/technotes/tn2151/_index.html]]
-上のページにはありませんが、「symbolicatecrash」というxcode付属のコマンドを使うとクラッシュレポートが見やすくなります。+しかし、上のページにはありませんが、「symbolicatecrash」というxcode付属のコマンドを使うとクラッシュレポートが見やすくなります(その使い方も書いておけよと全力で思いますが)。
-ここでは、その「symbolicatecrash」の使い方を簡単に説明します。また、このページの記述はbitcodeには対応していません。+ここでは、その「symbolicatecrash」の使い方を簡単に説明します。 
 + 
 +ただし、このページの記述はbitcodeには対応していません。 
 +また、xcodeで開発したアプリを対象としています。 
 + 
 +*symbolicatecrashを使うための準備 [#dd0baf85] 
 + 
 +**symbolicatecrashの場所を確認する [#m9613a06] 
 + 
 +symbolicatecrashの入っているディレクトリはxcodeのバージョンによって変わります。 
 +しかし、「/Applications/Xcode.app/Contents/」以下のどこかにあるのは間違いなさそうなので、findで検索して場所を確認します。 
 + 
 + find /Applications/Xcode.app/Contents/ -name "symbolicatecrash" 
 + 
 +ver.9.3.1では以下の四カ所にあります。 
 + 
 + /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash 
 + /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash 
 + /Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash 
 + /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash 
 + 
 +多分全て同じ物でどれを使ってもかまわないと思いますが、最初の3つはシミュレーター付属のようなので4つめのものを使います。 
 + 
 +このままいちいち長いコマンドを使うのも面倒なので、作業するコンソールで変数に入れておきます。 
 +このディレクトリにパスを通すのでもかまいません。 
 +ただ、前述のようにxcodeのバージョンによって場所が変わるので、ログインシェルの環境変数などに固定でパスを入れてもあまりありがたみはありません。 
 + 
 + CRASH="/Applications/Xcode.app/Contents//SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash" 
 + 
 +これで「$CRASH」と入力するだけで、コマンドが実行されます。 
 + 
 +**DEVELOPER_DIRを設定する [#i8be294d] 
 + 
 +このままsymbolicatecrashを実行しても 
 + 
 + Error: "DEVELOPER_DIR" is not defined 
 + 
 +というエラーが出て正常に実行されません。 
 +環境変数に「DEVELOPER_DIR」を入れる必要があります。 
 +そのために以下のコマンドを実行します。 
 + 
 + export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" 
 + 
 +もしxcodeのインストールの場所がわからず、xcodeのコマンドラインツールをインストールしている場合は、 
 + 
 + xcode-select -p 
 + 
 +を実行するとDEVELOPER_DIRが表示されます。 
 + 
 +**dSYMファイルを取得する [#p63fca33] 
 + 
 +注意:以下の記述はxcodeからアップロードしたアプリの場合です。 
 +そうでない場合は各アプリ制作ツールなどでdSYMファイルなどの場所は異なります。 
 + 
 +xcodeを立ち上げ、上のメニューバーから「Window->Organizer」と選択します。 
 + 
 +ウインドウ上部のボタンを「Archives」を選択し(おそらく起動時にすでに選択されています)、クラッシュしたアプリのクラッシュしたビルドを右クリック(shift+クリック)します。 
 +そして、「Show in Finder」を選択します。 
 + 
 +表示されたアーカイブファイルをさらに右クリック(shift+クリック)し、「パッケージの内容を表示」を選択します。 
 + 
 +すると「dSYMs」の中に「アプリ名.app.dSYM」というファイルがあるので、これを作業用のディレクトリにコピーするか、パスを取得しておきます。この場所はxcodeのバージョンによって変わる可能性があります。 
 + 
 +**appファイルを取得する [#wa20c1dc] 
 + 
 +先ほど表示させたアーカイブファイルの中には「Product/Application」以下にappファイルもあります。こちらも作業用のディレクトリにコピーするか、、パスを取得しておきます。 
 + 
 +* symbolicatecrashを実行する [#a7c0a1f5] 
 + 
 +CRASH変数にsymbolicatecrashを代入しているなら、 
 + 
 + $CRASH 「クラッシュレポートファイル」 「dSYMファイル」 「appファイル」 
 + 
 +を実行するとクラッシュレポートが出力されます。ファイルに保存するなら、 
 + 
 + $CRASH 「クラッシュレポートファイル」 「dSYMファイル」 「appファイル」 > 「出力ファイル」 
 + 
 +とします 
 + 
 +上では「dSYMファイル」「appファイル」と書いていますが、finder上でファイルに見えるだけで、実際はディレクトリです。 
 + 
 +*レポートの解析 [#g24c2b7b] 
 + 
 +symbolicatecrashを実行すると、以下のようにそれまで数値だったレポートの4列目にシンボル名が入ります。 
 + 
 + Thread 0 name:  Dispatch queue: com.apple.main-thread 
 + Thread 0: 
 + 0  libsystem_kernel.dylib        0x000000018167fe5c semaphore_timedwait_trap + 8 
 + 1  libdispatch.dylib            0x000000018150f0b0 _dispatch_sema4_timedwait$VARIANT$mp + 60 
 + 2  libdispatch.dylib            0x000000018150f924 _dispatch_semaphore_wait_slow + 72 
 + 
 +クラッシュしたスレッドの横には「Crashed」と言う文字列が入っています。 
 +そのスレッドの一番上がクラッシュしたとき最後に実行されていた関数やメソッドになります。 
 + 
 + Thread 34 Crashed: 
 + 0  MyApp                    0x0000000100a95ac4 curl_easy_cleanup + 24 
 + 1  MyApp                    0x000000010081bfec cocos2d::extension::CURLRaii::~CURLRaii() + 180204 (HttpClient.cpp:288) 
 + 2  MyApp                    0x000000010081b644 cocos2d::extension::networkThread(void*) + 177732 (HttpClient.cpp:192) 
 + 
 +上の例だとcurl_easy_cleanupという関数でアプリが落ちています。


Front page   Edit Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 2066, today: 1, yesterday: 2
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF