fabric の Crashlytics に dsym の情報をアップロードしていない状態でクラッシュが発生させると ほんやらかんにゃら Missing dSYMs ほんやらかんにゃら
という警告が表示されます。
この状態だとクラッシュの詳細が見れないのでちゃんと dsym をアップロードすべきです。
しかしながら手動でアップロードするのは非常に面倒な作業です。
なので、 fastlane を使ってアップロードするようにしましょう。 具体的な方法はリンク先にあります。
https://krausefx.com/blog/download-dsym-symbolication-files-from-itunes-connect-for-bitcode-ios-apps
もうちょっと説明
これだけだと URL を貼り付けただけの記事になってしまうので、自分の作っているアプリの lane のコードと fastlane の中身に関する説明を少し書きます。
アプリの概要としては1つのプロジェクトに有料版と無料版の複数のターゲットがあります。
それら2つのアプリに対して dsym を iTunesConnect からダウンロードして crashlytics にアップロード、後片付けを行う lane のコードが以下になります。 コードの説明はその下に書きます。
lane :refresh_dsym do |options|
version = options[:version] || get_info_plist_value(path: "path/to/Info.plist", key: "CFBundleShortVersionString")
# 有料版
download_dsyms(
version: version,
app_identifier: "hoge.huga.app"
)
# 無料版
download_dsyms(
version: version,
app_identifier: "hoge.huga.app-free"
)
upload_symbols_to_crashlytics(
api_token: '<crashlytics token>'
)
clean_build_artifacts
end
download_dsyms
この action で dsym をダウンロードしています。
version
でアプリのバージョンを指定しています。 指定しないと全部ダウンロードするのかどうかはちょっとわからないですが凄く時間かかると思います。 ちなみに build_number
を指定することもできます。
app_identifier
は他の action と同様なので説明不要だと思います。
ダウンロードした結果ってどうなってるの??? と思いませんか?
ダウンロードした dsym ファイルのパスは Actions.lane_context[SharedValues::DSYM_PATHS]
に保存して他のアクションから参照できるようになっています。
https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/download_dsyms.rb#L58
upload_symbols_to_crashlytics
この action で dsym を crashlytics にアップロードしています。
api_token
は"Info.plist" という名前でアプリの "Info.plist" があるなら勝手に探してくれるが別の名前 (ex: hoge-Info.plsit)にしている場合は明示的に指定する必要があります。
dsym の path は 先程述べた SharedValues::DSYM_PATHS
に格納されているのでどれをアップロードするかは特に指定する必要がありません。 この辺が fastlane 最高です。
ちなみに自前で path を指定したり追加したりすることもできます。
clean_build_artifacts
ダウンロードした dsym のファイルを削除しています。
この action は汎用的で他にも色々削除する機能があるのですが、全て状況に合わせていい感じに削除してくれるので非常に賢いです。
実際の運用
このアクションを CI で定期的に稼働させれば問題ないと思います。
ただし現状、そんなに高頻度でやる必要性を感じていないので手動でこのアクションを実行させています。
TestFlight で配布するときや新しいバージョンを AppStore で配布したときなどです。
ただし、割と時間がかかるのでお昼に外出する前に動かしてたりします。