試行錯誤してたどり着いた現在のiOSアプリ自動デプロイ環境(Bitrise、fastlane、Crashlytics、たまにbuddybuild)
前の会社の技術ブログに書いたやつだけど、技術ブログ閉鎖されたっぽいんで、前もってバックアップしといたやつを転記。
仙台iOS開発者勉強会へ参加
実は私、東北出身ということもあり、新卒から十数年ほど過ごした首都圏を離れて仙台にJターンしてきたわけですが、仙台に引っ越してきたのは2016年8月なので、まだ仙台で住んで1年にも満たないのですよ。
で、社内もWeb系メインだし、まだ仙台に知り合いの社外エンジニアも多くなく、iOSアプリの開発話や苦労話などする相手がいないなぁと思っていたこともあって、先日「SWWDC - 仙台iOS開発者勉強会#30」に参加してきました!
いざ参加してみると、仙台の敏腕エンジニアの方々が揃っており発表のレベルも高く、(懇親会も飲みすぎて二日酔いになるほど)とても楽しかったです!
今回のエントリはその勉強会で発表した内容の紹介となります。
発表内容
標題の通り、iOSアプリのCI環境構築についてお話しさせていただきました。(ネタ自体は過去に自分が書いたブログ記事の焼き直し感ありますが...)
発表してみて印象的だったのはCarthageやCocoaPodsなどを使って導入する外部ライブラリを、元から自プロジェクトのリポジトリに含んでいる方が思ったより多かったことです。
これまで自分がやってきたWeb系開発では、ComposerやRubyGems、npmで導入するような外部ライブラリはリポジトリには含まず、環境セットアップ時に設定ファイル(Gemfile
, Gemfile.lock
など)より各自がWebから導入する形が普通だったので、基本的にiOSアプリ開発でも同じような形を取っていました。
ただ、今回のスライドにあるように、iOSアプリ開発ではこの辺りそれぞれメリット・デメリットあるので、状況に応じて柔軟に対応したいところです。 社外での発表だとこういった外からの意見を知れるのが良いですね!
ちなみにスライドについてちょっと補足しますと、昔はCode Signing周りにfastlaneのsighを使っていました。ただ、今回スライドに記載したfastlaneのmatchがだいぶ便利だったのでこちらに乗り換えています。CI上だけでなくローカルの開発環境構築にもこれ単体で割と使えるので、時間あればこれだけ別エントリ書こうかなという気持ちです。
追記:matchについて別エントリ書きました! asmz.hatenablog.jp
後日談
上記発表資料の構成で、ひとまず自動デプロイ環境は整った!、、、と思ってしばらく運用してたんですが、その後使ってたらちょっと以下の問題が起きました...。
ProductionビルドのみBitriseの10分制限に引っかかる
開発版、AdHoc版のビルドでは最後にCrashlyticsへアップロードしますが、ProductionビルドではCrashlyticsではなくfastlane deliverでiTunesConnectへアップロードします。
Xcode OrganizerでiTunesConnectへアップロードするときもそうですが、このアップロードは結構時間がかかります。この処理はfastlane内で行っているので当然ながらBitriseのbuild時間に含まれ、この処理中に10分経過してしまっていました。。
とりあえずの対応策
実はこのBitriseによる自動化フローを用意しつつも、もしBitrise自体が障害発生して使用できない場合を考えて、バックアップラインとしてbuddybuildでのデプロイ処理(スライド30参照)を裏で回していました。
buddybuildは元より20min/buildなので時間的な問題はないのと、buddybuildの仕様上ビルド処理は申請用Archive作成までとなっており、その後のiTunesConnectへのアップロードはbuddybuildのダッシュボードから手動でボタンを押すことで行います。
つまりこのボタン押下後のアップロード処理は、20min/build制限の対象となりません。
なので、直近のリリース作業はこれを使うことで事なきを得ましたが、開発期間中はBitrise、Apple申請時のみbuddybuildを使用するという少々いびつなデプロイ構成となっています。
というわけで、なんとか無料でここまでやってはきましたが、さすがにそろそろ諦めてBitrise有料版に逃げちゃおうかな、という感じです...。
逃げるは恥だが...
み「また良さげな別のCIサービスとか出てきたらどうします?」
平「それに合わせて開発スタイルを変えていくしかありません。模索は続きます。」
み「そうですね。続けていきましょう。」
おわりに
(この辺に採用情報とか載せてたけど削除)