TL;DR
- dSYMの取得とアップロードをするlane作成
- BitriseにWorkflow作成
- Workflowをスケジューリングする
前書き
Crashlyticsを利用していると, FabricへのdSYMのアップロードを求められることになります.
これをAppStoreConnectへのリリースの度に手動で行ってもいいのですが, 上げ漏れが起きたり, めんどくさかったり, めんどくさかったり, めんどくさかったりしますよね.
なので, 日次でdSYMのアップロードを行うようにBitrise上でスケジューリングすることで, 煩わしさから解放されましょう.
FastfileにdSYM関連の処理をするlane作成
desc "Refresh dSYMs"
lane :refresh_dsyms do
download_dsyms(
app_identifier: "tihimsm.my_app",
version: "latest" # 最新のdSYMを取得するように指定
)
upload_symbols_to_crashlytics # dSYMをCrashlyticsへアップロード
clean_build_artifacts # ローカルのdSYMを削除
slack(message: "dSYMs are refreshed!")
end
download_dsyms
でAppStoreConnectにあるdSYMをダウンロードするのですが, オプションでversion: "latest"
を指定しています.
なにも指定しないとすべてのdSYMを取得して, けっこう時間がかかってしまうので要注意です.
あとでBitriseの方でスケジューリングをするのですが, 毎日このlaneが走るようにしておけば, よほどリリースの頻度が高くない限りは漏れなくアップロードできるはずです.
追記(2019/12/02)
download_dsymsのversionに、"live"を指定すると、
公開中アプリのDSYMをStoreからダウンロードできるようになったようです。
公開版よりも新しいアプリがTest Flightに存在しても、そのDSYMは無視してくれます。
(fastlaneの2.134.0以降)
@zigenin さんより情報提供いただきました, ありがとうございます!
clean_build_artifacts
はローカルにあるdSYMファイルを削除してくれるもので, Bitriseでlaneを走らせる限りはあまり意味がないのですが, ローカルでlane叩く可能性も考えて削除するようにしてます.
ちなみに, 今回はdSYMを削除してくれるclean_build_artifacts
ですが, 実はとても汎用性の高いactionで, 状況にあわせてよしなに削除してくれるとても賢いやつです.
詳しくは公式ドキュメントをご参照ください.
BitriseにWorkflowを設定
Workflowはとても簡単です.
リポジトリをCloneしてきてfastlaneでrefresh_dsyms
を起動させるだけです.
Workflowをスケジューリングしよう
Builds
タブの画面右上の方にStart/Schedule a Build
というボタンがあるので, そこからスケジューリングの設定を行います.
上のような画面で設定が行えます.
- 時間
- 曜日
- ブランチ
- Workflow
を設定することで, 自動でWorkflowが起動できます.
上の例だと毎日AM01:00
に起動するようになっています.
これで毎日AppStoreConnectの最新のdSYMを取得して, Crashlyticsへアップロードを自動で行うことができるようになります.
まとめ
いかがでしょうか?
地味な内容でしたが, 毎度手作業でやってると意外とめんどくさかったり漏れがあったりしますし, 人がやらなきゃいけない作業でもないので, こういう類のものは自動化してしまうに限ります.
簡単に設定できるわりに, 毎日SlackにdSYMがアップロードされた通知が来るので「うんうん, 今日もdSYMアップロードご苦労」という気分になれます笑
コスパ良くてけっこうおすすめなので, 設定してない方はぜひやってみてください!