OTOBANK Engineering Blog

オトバンクはコンテンツが大好きなエンジニアを募集しています!

iOSアプリのデプロイ自動化にbuddybuildを使ってみた話

この記事はモバイルDevOps Advent Calendar 2015の9日目の記事です。

どうも、酔っ払った勢いでAdvent Calendarに登録してしまったasmzです。ちなみに翌日は二日酔いで終日具合悪かったです。

ここ最近会社ブログに書いてたエントリがiOSアプリのCI/CD関係で、割とこのAdvent Calendarの趣旨に近いかなと思ったので、とりあえず書いてみます。(会社ブログ的には似たようなエントリばかり増えてしまってアレですが :p

buddybuildとは?

www.buddybuild.com

どうやらサービス開始が今年の9月くらい?らしく(未確認)、ググっても日本の解説記事とか見当たらないのでご存じない方が多いかと思うのですが(自分もこないだまで知らなかった)、buddybuildとはモバイルに特化したCIサービスです。

CIサービスとしてはCircleCIやTravisCIなどが有名ですが、こちらはモバイルアプリ専用となっていて、iOSアプリとAndroidアプリのビルド、配布が行えます。 つまり先日書いたこちらのエントリの「Bitrise」と同じ位置付けのサービスですね。

engineering.otobank.co.jp

あ、ちなみに、Webサイト上では料金に関する情報が見当たらなかったのですが、来年に料金プラン発表するそうですよ。無料プランも用意する予定だそうです。(Twitterで公式アカウントから聞いた)

サインアップ&アプリ登録

こちらから。

https://dashboard.buddybuild.com/signup

GitHubアカウントでサインアップすればリポジトリ情報とかが連携されるので、その後対象アプリ選択とかが楽になります。

で、具体的な内容は以下に丁寧なドキュメントがあるので、この通りに行えばOKです!(キャプチャ撮り忘れたので…)

http://docs.buddybuild.com/docs/getting-started

これによって対象リポジトリのデフォルトブランチがクローンされ、自動的に初回ビルド(Debug)が行われます。ちなみにCocoaPodsなどにもちゃんと対応されているようです。

初回ビルドが成功するとこんな感じのダッシュボード画面になります。割と綺麗なUI!

f:id:asmz0:20151205234512p:plain

AdHoc版ビルド設定

この後は普通に開発してリポジトリにpushすれば、GitHubからhookされて自動でDebug版のビルドが回るのですが、やっぱりiOSアプリでめんどくさいのはRelease版のビルド(特にCode signingやProvisioning周り)ですよねー。

というわけで、まずはAdHocのProvisioning ProfileでReleaseビルドを行えるよう設定してみます。

やることは大きく分けて以下のような感じです。

  • Build Configuration設定
  • 開発用証明書をbuddybuildに登録
  • Provisioning ProfileをiTunes Connectと同期

それぞれについて以下で説明します。

Build Configuration設定

ビルド設定はダッシュボードの「Build」タブにある「Build Settings」から行います。

f:id:asmz0:20151205235645p:plain

メニューから「Scheme and Build Configuration」を選択します。

「Default Build Configuration for all branches:」でデフォルトのビルドを「Release」にするか、「Branches using the default scheme and build configuration」で指定したブランチのビルドだけを「Release」にすることで、push時のビルド設定を変えることが可能です。

f:id:asmz0:20151206004657p:plain

開発用証明書をbuddybuildに登録

「Build Settings」のメニューから「Signing Identities & Provisioning Profiles」を選択します。

「Automatically upload Code Signing Identities and Provisioning Profiles」に記載のコマンドで自動でMac内の開発証明書とProvisioning Profileをアップするか、「Code Signing Identities」欄で手動で開発証明書ファイル(.p12)を指定してアップするかを選んでアップロードすることができます。

Provisioning ProfileをiOS Dev Centerと同期

Provisioning ProfileについてはテスターのUDID追加とかで更新しないといけないことが多いので、できればiOS Dev Centerで管理してるやつを自動でダウンロードして使いたいですよね。

buddybuildではiOS Dev Centerとの同期機能があり、これを設定しておくとビルドの際に自動的にbuddybuild専用のProvisioning Profileの生成、ダウンロードができます。

「Deployments」タブの「Deployments Settings」をクリックします。

f:id:asmz0:20151206003707p:plain

「Apple Developer Portal Sync」で入力したアカウント情報でApple側と接続し、問題なければ以下のような画面になります。このチェックがONになっていれば同期設定された状態となります。


ここまでの設定をした状態で新たなpushなどしてビルドを回せば、AdHoc版がビルドできるはずです!

ビルド結果画面ではこのような感じになっています。

またビルド結果画面の「Deploy」タブで、ビルドしたipaをそのままテスター向けに配布することができます。

f:id:asmz0:20151206010346p:plain

今回スペースの関係でこの先の配布手順は割愛しますが、ここでテスター配布するとCrashlytics Betaのような感じでInviteメールが届き、そのメールからiOS実機にProvisioning設定を行う感じになるようです。

AppStore版ビルド&iTunes Connectへのアップ

実はここまでの手順でReleaseビルドができていれば、そのままiTunes Connectへもアップできます。

先ほどのキャプチャのビルド結果画面で、ちらっと「iTunes Connect」というタブがあったのお気づきでしょうか?

f:id:asmz0:20151206011259p:plain

この画面ではiTunes Connectへの実際のアップロードの他に、Xcodeでいつもやる申請前のValidationも行うことができます。とっても簡単ですね!

ちなみにこのValidationを実行すると、buddybuildが自動的にAppStore用のProvisioning ProfileをiOS Dev Centerに作成して、そのProvisioning Profileを使って裏でAppStore版ビルドを行っているようです。

手順のカスタマイズ

これでiOSアプリの一通りのリリース手順は行えたことにはなるんですが、例えば「ビルド終わったらそのipaファイルをDeployGateやCrashlytics Betaなどでテスター配布したい」などデフォルトの手順では用意されていないことをやりたい、などの要望ありますよねー。

buddybuildでは一部だけ手順をカスタマイズすることができます。具体的には以下の3タイミングで独自のシェルスクリプトを流すことができるので、そこでやりたいことをやる、という感じです。

  • リポジトリからソースクローン後(buddybuild_postclone.sh
  • ビルド直前(buddybuild_prebuild.sh
  • ビルド直後(buddybuild_postbuild.sh

リポジトリのルートディレクトリに↑のシェルスクリプト名で置いておけば、勝手に拾って実行してくれる、というわけです。

使える環境変数などはこちらをご参照ください。

Custom Build Steps · buddybuild

なお、ビルド処理自体を別な仕組み(例えばfastlaneのgymとか)で行う、といった手順の「差し替え」のようなカスタマイズはできないようで、あくまでbuddybuildの既存フローへ手順の「追加」のみとなります。

その他特記事項

  • 若干動作に不具合あるっぽくて、設定画面のプルダウンとかがうまく反映されない(変更しても元の設定値に戻される)ことがある
  • 専用のSDKを導入することで、Crashlyticsのようなクラッシュレポート機能が使えるらしい
  • Androidのビルドはまだα機能としてのリリースの模様(公式Twitterアカウントより)

まとめ

以上がbuddybuildでデプロイしてみた一連の作業になります。使い方自体はとても簡単ですね。

個人的な感想としては、もうちょっとカスタマイズに自由度が欲しいところです。ある程度buddybuildの標準手順に則ってデプロイさせるならいいんですが、もともとfastlaneとかCrashlyticsとか使っていたので、自分でその辺の手順へ差し替えとかできるといいなぁとか。

その辺もあって、実運用でbuddybuildを採用しようか、前回のエントリで書いたBitriseを採用しようかまだ迷っていたり。

まぁまだ新しいサービスなので、これからフィードバックなど受けていろんな機能付くことを期待してます。