.ipaバイナリをApp Store Connectにアップロードするのに、数秒から最大1時間もかかる場合があるということで、評判がよくありません。これは、アップロードに長い時間がかかるからではなく、アップル社がアップロードされたビルドをApp Store Connectで利用可能にする前に、ビルドを処理し、起こりうる問題の確認を行う必要があるからです。アップル社が処理を完了して、私たちがビルドでさらなる様々なアクションができるようになるのを待っていると、ビルド分が大幅に取られてしまい、ビルドに関するフィードバックを得るのが遅くなります。CodemagicとMagic Actionsがこれらの問題をどのように解決するのかについて、引き続きお読みください。
問題1。アップロードされたビルドはすぐには利用できない
ビルドをテスターに配布したり、リリースノートをアップロードしたりするためには、ビルドのアップロード後にApp Store Connectでアクションをいくつか実行する必要があります。例えば
- ベータ審査用のアプリケーションを承認
- リリースノートを多言語でアップロード
- アプリケーションを外部のテスターにリリース
問題は、これらのアクションを実行するために、TestFlightでビルドが利用可能になる前に、アップル社がそれを処理する必要があり、これには長い時間がかかることがあります。これらの作業を手動で行っているか、CIに任せているかに関わらず、アップル社が処理を終えるまでは、リリースノートをアップロードしたり、テスターにビルドを利用可能にすることはできません。
問題2。アップル社を待っているとコストがかかる
アップル社がビルドを処理するのを待っていると、時間とお金の両方がかかってしまいます。ビルドがApp Store Connectに正常にアップロードされたという、App Store Connectからのメールを待って、リリースノートをアップロードするためにクリックし始めるか、あるいはCIワークフローでタスクを自動化して、アップル社の処理が終わるまでビルドマシンをビジー状態にしておくことが可能です。もし、使用したビルド分を対象に料金を支払っている場合、これはCIコストを一気に上昇させることになります。
ネタバレ注意:Codemagicでは、手動でのアクションや処理時間を対象にお支払いいただく必要はございません。
問題3:長いフィードバックサイクル
最後になりますが、もう1つ大事なことは、処理時間が長いと、CI上でテストが合格したかどうか、コンパイルやコード署名が成功したかどうかに関わらず、チームがフィードバックを得るまでの時間が長くなります。手動アクションに頼らずに、CIからビルド状況のフィードバックが早く得られるほど、チームの開発者の方々の生産性や幸福度が向上することは明らかです。
解決策:Magic Actions
これらの問題を解決するために、Codemagicチームは、**App Store配布ジョブの後処理(略してMagic Actions)**をリリースいたしました。
マジックアクションはかなりイケてます。ビルドがApp Store Connectにアップロードされると、macOSの仮想マシン外で非同期に後処理を開始します。iOSのビルドプロセスにはmacOSが必要です。なぜなら、macOSにはXcodeがあるからです。これは、.ipaアーティファクトをコンパイルするのに必要です。また、インスツルメンテーションテスト用のxOSランタイムも必要です。パイプラインの他のすべての部分は、他のどのOSでも実行可能です。
つまり、グリーンビルドを取得して開発を続けるために、アップル社がビルドを処理するのを待ったり、そのためにお金を払ったりする必要はないということです。アプリのアーティファクトがアップロードされた直後にビルドが終了し、ビルドステータスのアップデートが表示されます。それ以降のすべてのステップ、例えば、アップル社がビルドを処理するのを待つ、ビルドをベータ審査に提出する、リリースノートをアップロードする、ビルドをベータグループに配布するといったステップはすべて、非同期で行われます。
後処理ステップのタイムアウトは120分に設定されていますが、これはビルド分やコンカレンシー(同時並行数)にはカウントされず、完全に無料です。
さらに、チームが成長するにつれて、テスターにデプロイするたびに、ビルド時間を20分も短縮できれば大勝利です。というのも、リソースがすぐに空くので、チームで新しいmacOSマシンをたくさん購入したり、CIプロバイダーを使って容量を増やしたりするのに、お金を使う必要がなくなるからです。Magic Actionsを使ってどれだけ時間を短縮できるのか、以下の実際の例をご覧ください。
Magic Actionsによるビルド時間短縮の実例
Magic Actionsがどのくらいビルド時間を短縮するのかを知るために、Codemagicで使用するのと同じビルドスクリプトを使い、複数のCI/CDプロバイダーを使ってテストをすることにしました。これを可能にしたのは、Codemagicの各種オープンソースCLIツールです。これらは、あらゆるビルドインフラでiOSアプリのビルド、コード署名、公開に使用することができます。
テスト1。Codemagic CI/CD
最初のテストでは、Codemagic標準のmacOSインスタンス上で、シンプルなiOSアプリのワークフローを実行しました。Magic Actionsを使用した場合、全体のビルド時間は3分25秒(205秒)でした。合計*1分49秒もの時間が短縮されました。つまり、使用しなかった場合に比べて、ビルドが153%**高速化されました。
テスト2。Bitrise
2回目のテストでは、Codemagicのテストで使用したのと同じビルドスクリプトを使用して、Bitrise標準のmacOSマシンを使用しました。合計ビルド時間は7分15秒(435秒)で、Codemagicの方が**212%**速かったことになります。
テスト3。GitHub Actions
最後のテストでは、CodemagicとBitriseで使用したのと同じビルドスクリプトを使用して、Github Actionsで同じアプリケーションを設定しました。合計ビルド時間は9分27秒(567秒)で、CodemagicのビルドはGithubよりも、Magic Actionsを活用して277%速かったことになります。
テストに使用したサンプルプロジェクトは、 GitHubで公開しています。
動画
同じスクリプトを使って3つのサービスをテストしたKevinの動画も以下でご覧ください。
Discussion about this post