fastlaneを使ったiOSアプリのCI/CDにおける最低限作っておいた方が良いワークフロー
目次
- はじめに
- CIのワークフロー
- CDのワークフロー
- DSYMのアップロード
- 終わりに
はじめに
普段iOSアプリの開発をしておりGitHubActionとfastlaneを使ってCI/CD環境を作る機会があったため、そのときに最低限あった方が良いと思ったワークフローをまとめました。
※ 証明書周りの管理はそれだけで文量が多くなるので今回は割愛します。
CIのワークフロー
CIとは
CIとは、Continuous Integrationの略で、継続的インテグレーションと呼ばれています。 CI(継続的インテグレーション)では、開発者が自分のコード変更を頻繁にセントラルリポジトリにマージし、その度に自動化されたビルドとテストを実行します。
このときに主に必要なワークフローは以下の2つです
1 lint設定
lane: lint do swiftlint(strict: true) end
swiftlintだけではCIが失敗しないため注意が必要です。
CIで静的解析をちゃんと行いたい場合は strict: true のオプションをつけましょう。
その他のオプション: https://docs.fastlane.tools/actions/swiftlint/
2 Test設定
lane: test do scan end
その他オプション: https://docs.fastlane.tools/actions/scan/
途中から導入しようとすると修正が必要なところが出てきて無駄に時間がかかってしまうため、
CIは開発を始める前に作ることを強くおすすめします。
CDのワークフロー
CDとは
CDとは、Continuous Deliveryの略で、継続的デリバリーと呼ばれています。 継続的デリバリー(CD)は、継続的インテグレーション(CI)を拡張した手法で、ビルドやテストだけでなく、リリースプロセス全体を自動化します。
Stagingアプリの配布
lane :deploy_staging do gym # deploygate や firebase_app_distribution など end
ビルドをし、できたipaファイルを Deploygate や Firebase App Distribution でテスターに配布をします
Productionアプリの配布
lane :deploy_production do gym deliver end
ビルドをし、できたipaファイルを AppStoreConnectにアップロードします。
DSYMのアップロード
昨今のiOSアプリではクラッシュレポートとして、FirebaseCrashlyticsを使っていると思います。
その場合どこでクラッシュが起きたのかわかりやすくするために、AppStoreConnectにアップロードした後にFirebaseにdSYMファイルをアップロードする必要があります。
いままでプリの運用をしてきましたがアップロードは手動だと忘れがちなのでCIサービスを使って自動化をするべきです。
デプロイのフローに入れるとまだdSYMファイルがダウンロードできない場合があるため、CIサービスの設定などで1日1回定期実行すると失敗しなくなります。
lane :refresh_dsyms do |options| download_dsyms( app_identifier: 'xxxx', version: 'latest', username: 'xxxx' ) upload_symbols_to_crashlytics( gsp_path: './xxxx/GoogleService-Info.plist' ) clean_build_artifacts end
終わりに
最低限必要なワークフローとしては以下の5つがあるとよいです
- Lint実行
- テスト実行
- Stagingアプリの配布
- Productionアプリの配布
- dSYMファイルのアップロード
これだけ設定するだけでも開発体験が大幅に改善します。
CIサービスには特に触れませんでしたが、iOSアプリではBitriseを使うと証明書のアップロードができたり、手順が丁寧にドキュメントにまとめられているのでおすすめです。