SurfTideΔで、ダークモード化も終わりベータ公開しようと思った矢先に原因不明のクラッシュ…
それも、再現できないやつ
しょうがないので、クラッシュログをチェックすることにしました。release版ではなくdebug版で動かした場合のクラッシュログからの問題特定です。
以下、忘れそうなので備忘録
clashファイルの抽出
デバイスをUSBで接続して
Xcode -> Window -> Organizer からターゲットデバイスの対象アプリのクラッシュログ「.crash」をEXPORTする。
EXPORTしたファイルから「Binary Images:」の行を探す
Binary Images: 0x104d34000 - 0x10527ffff SurfTideDelta arm64 <8267be10a1c13ae5aca23824a8718b62> /var/containers/Bundle/Application/5A178E33-927C-4E39-
直下にあるアドレス(上記だと「0x104d34000」)で「.crash」ファイルを検索する
8 SurfTideDelta 0x0000000104df0d48 0x104d34000 + 773448 9 SurfTideDelta 0x0000000104df26f0 0x104d34000 + 780016 10 SurfTideDelta 0x0000000104db68e0 0x104d34000 + 534752
こんな感じの行がみつかるので以下のコマンドを実行
atos -o SurfTideDelta.app.dSYM/Contents/Resources/DWARF/SurfTideDelta -arch arm64 -l 0x104d34000 0x0000000104df0d48
ある程度何処でクラッシュしたか絞り込める(ハズ)
+[FIRInstanceIDTokenOperation requestWithAuthHeader:FISAuthToken:] (in SurfTideDelta) (FIRInstanceIDTokenOperation.m:206)
ちなみに、SurfTideDeltaはどうもADMOBのインプリメントで Firebase/Admob を使っていたのだけど、どうもそのあたりの障害だったようです。
なので、実装を替えて問題を解決(たぶん)しました。
以下、おまけ
たぶんrelease版からだともう1手間必要みたいです。
以下それのメモ
適当なワークフォルダ(ここでは dbg_work)を作成する。
必要ファイルの抽出
Xcode -> Window -> Organizer からターゲットアプリをCtrl+クリックでFinderに表示して以下の2ファイルを「dbg_work」フォルダにコピーしておく。
{buildAppName}.xcarchive/Products/Applications/{AppName}.app {buildAppName}.xcarchive/dSYMs/{AppName}.dSYM
dSYMからUUIDを抽出
「dbg_work」フォルダをルートにしてターミナルを開く
以下コマンドでUUIDを調べる
xcrun dwarfdump --uuid {AppName}.app.dSYM/Contents/Resources/DWARF/{AppName}
以下、「SurfTideDelta」アプリでのサンプルで説明
> UUID: 468864FD-FDD2-308B-B51F-57EE5F99XXZZ (arm64) SurfTideDelta.app.dSYM/Contents/Resources/DWARF/{AppName}
468864FD-FDD2-308B-B51F-57EE5F99XXZZ が固有のUUID
(arm64) がアーキテクチャ
これから先は先述と同じです。ただ「Binary Images:」を探すのに UUID をキーに使うのが違います。(たぶん)
Comments