Timers Tech Blog

グローバルな家族アプリFammを運営するTimers inc (タイマーズ) の公式Tech Blogです。弊社のエンジニアリングを支える記事を随時公開。エンジニア絶賛採用中!→ https://timers-inc.com/engineering

iOS Auto Provisionで証明書更新の苦悩からの解放 #cloudmobiletest #gogobitrise #bitrise #iOSAutoProvision

f:id:fromkk:20200130191943p:plain

1月末に行った福岡で食べた美味しいものがまた食べたいiOSチームのかっくん(@fromkk)です。

CIにおけるiOSの証明書に苦しめられた方はどのくらいいますでしょうか?
そもそもiOSの証明書の仕組み自体が複雑で理解が難しいのにCI上で正しく動作させるのも至難の技ですよね。

ここでは2/7にGA Technologies社で開催された「クラウドモバイルビルド/テスト Meetup」というイベントで「iOS Auto Provisionで証明書更新の苦悩からの解放」というタイトルで登壇してきたものを文字にしてお伝えしますのでBitriseのiOS Auto Provision Step便利さが伝わればと思います。

connpass.com

iOSアプリにおける証明書の管理に関する問題がいくつかあります。

  • 基本的には開発用、リリース用など複数の証明書が必要
  • 更に、アプリにExtension(拡張機能)毎にも証明書が必要

ということで必要な証明書の数は、アプリ本体に加えて、Extensionの数を環境の種類の数でかけたものになります。
登録端末を増やすなどして変更する度にDevelopmentやAd-hocの証明書を更新する必要があるということです。

これってとても大変では?😵

この大変さを解決するための案としてパッと思いつくのは2あります。

  1. fastlane match
  2. Bitrise iOS Auto Provision Step

ですね。ただ、fastlane matchは証明書の管理を解決してくれる優れた機能ではありますが、証明書をアップロードするために新たにGitHubリポジトリを作成する必要があります。
これは作業者の権限によっては難しい場合もあるので多少面倒かもしれないです。
Bitrise iOS Auto Provision StepはBitrise上でApple Developer Accountにログインしておけば利用できるので個人的にはこちらの方が手軽に利用できるなと感じたのでこちらを利用しています。

前提準備としてAccount settingsからApple Developer Accoutにログインにログインします。

f:id:fromkk:20200130193023p:plain

まだの人はConnectからApple IDとパスワードを入力して、2FAのコード入力をしてログイン完了です。

f:id:fromkk:20200203110912p:plain

f:id:fromkk:20200203110954p:plain

続いてアプリのTeamタブからConnected Apple Developer Portal Accountを先ほど設定したアカウントを選択して保存します。念のためにTest the apple developer portal connection of XXXをクリックしてみて接続確認を実行しておきましょう。エラーが起きなければ成功です。

f:id:fromkk:20200203111057p:plain

既に登録してあるProvisioning Profileファイルがあれば全て削除しておきます。

f:id:fromkk:20200203111217p:plain

続いてWorkflow EditorXcode Archive & Export for iOSステップの手前で新たにステップを追加し、iOS Auto Provisionを検索してクリックします。

f:id:fromkk:20200203111304p:plain

必要な設定をしておきます。

f:id:fromkk:20200203111343p:plain

これでビルドを実行してみてビルドができれば成功です🎉
失敗した場合は頑張って解消しましょう😓

YouTubeにも動画を上げたので良ければそちらもご覧ください。

youtu.be

Bitrise iOS Auto Provision Stepの仕組み

こちらがどういう仕組みになってるかというと、アプリをビルドする際に保存しているログイン情報に対して必要な分の証明書を作成し、それらをダウンロードして使うようにしているみたいです。
命名規則が整っていれば確かに可能そうですね。

注意点

xcodebuild コマンドでExportOptions.plistを明示的に指定するとBitrise iOS Auto Provision Stepが生成したものとずれてしまい失敗することがあります。
明示的な指定を止める必要があるので注意しましょう。

まとめ

CI上での証明書の管理から解放されて、余った時間をアプリの更なる改善に割くことができるようになります。
また、証明書管理の属人性を排除できるので、開発する人が入れ替わっても問題が起こることは少ないかと思います。
可能なところからなるべく自動化して快適な開発作業に注力していきましょう💪🏻

積極採用中!!

子育て家族アプリFammを運営するTimers inc.では、現在エンジニアを積極採用中!
急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください!
採用HP: http://timers-inc.com/engineerings

Timersでは各職種を積極採用中!

急成長スタートアップで、最高のものづくりをしよう。

募集の詳細をみる