【ISSUE】Fastlaneを使ったiOSの証明書/プロファイル管理
2024年12月23日 17:28
iOSアプリの複数人開発で一番厄介なのが「証明書」周りですよね。
新しい開発メンバーがJoinしてくると、最小限でも以下の作業が発生してきます。
基本的には、AutomaticSigningによって自動的に証明書・プロビジョニングファイル周りが設定されますが、厳密なプロジェクトだと証明書を新規作成してはならない。などの制約がある場合があります。
また、CI/CDを運用している場合、どうやってCI上で証明書・プロビジョニングファイルを扱うかといった問題も発生してきます。
そこで、今回は fastlane
の match
を使って証明書を管理するようにして、簡単に証明書・プロビジョニングファイルの共有・更新を行えるようにします。
FastlaneとはiOS/Androidで必要な様々な作業を自動化してくれる便利ツールです。
Fastlaneのmatchとは、開発チームで共有の証明書・プロビジョニングファイル作成や更新を行い、プライベートリポジトリに格納して、全メンバーで共有できるようにするものです。
メンバーが追加されたら、fastlane matchを使って、管理されている証明書・プロビジョニングファイルを自動で登録・更新してくれるようになるため、AppleDeveloperアカウントを作成したりなどの、面倒な作業をする必要がなくなります。
ざっとしたフローは以下のような感じになります。
:::note info
フロー図では、makeコマンドを実行していますが、この記事ではfastlaneコマンド実行用のmakeファイルを作成しているので、記事に合わせたコマンドとなっています。
:::
fastlane導入には、homebrewやrubyGemを使う方法など、いくつかありますが、今回はrubyGemを利用する方法とします。
また、各バージョン管理には asdf
を利用していますので、各環境に合わせて読み替えください🙇♀
:::note info
個人的には asdf のみで様々なツールのVersion管理ができるので、この際に入れてみるのも良いかと思います。
:::
fastlaneでは証明書をリポジトリで管理するため、Privateの専用リポジトリを先に準備しておく必要があります。
rubyは 2.7.2
を使用します。
システムで利用するrubyのバージョンを変更する必要はないので、local(ワーキングディレクトリ直下のみ適用)で2.7.2を動かすようにします。
rubyの設定が終わったら、bundlerをインストールします。
fastlaneをrubyGem経由でインストールするため、Gemfileを作成します。以下の内容をコピペしてもらえば大丈夫です。
Gemfileは、<project_name>.xcodeproj
があるディレクトリに作成してください。
Gemfileを作成したら、以下のコマンドを実行して、fastlaneをインストールします。
以下のコマンドでfastlaneを使用するための初期設定を行います。
コマンドを実行すると、どのようにfastlaneを初期設定するかの選択肢が表示されますので、「4」の手動設定を選択しておきます。
証明書管理はfastlaneのmatchを使って行うため、fastlaneの設定が終わったら、matchの初期設定を行います。
どの環境で証明書を管理するか聞かれるため、「1」のGitを選択します。
選択すると、リポジトリのURLを聞かれるので、https or sshのコピペします。
fastlaneのみで証明書・プロビジョニングファイルを作成・削除・更新ができるわけではありません。
AppStoreConnectのAPIを利用することで、TestFlight配信・ユーザーの追加などを行うことができます。
App Store Connect にアクセスし、「ユーザとアクセス」から「キー」タブをクリックします。
:::note warn
権限がない場合「キー」タブは表示されていません
:::
新しいAPIキーを生成する場合には、確認画面が表示されるので、内容を確認して「提出」ボタンをクリックすると、上記画面に遷移します。
「APIキーを生成」をクリックすると、以下のAPIキー登録画面が表示されます。
「名前」にはどこで利用されているAPIキーなのかなど、識別しやすい名前を入力します。
「アクセス」では、APIキーに付与する権限を設定します。fastlaneでは「App Manager」の権限を付与します。
APIキーが生成されると、APIへ接続するために必要な情報が表示されます。APIキーをダウンロードをクリックして、キーをダウンロードします。
また、
は、fastlaneの処理を記述する際に必要になるため、メモしておきます。
fastlaneでは、APIに接続するために必要な情報を変数に渡す必要があります。
各接続情報をハードコードしてしまうと、Githubに掲載されてしまうため、万が一のときにインシデントになってしまう場合があります。
そのため、接続情報などは全てenvファイルで管理するようにします。
先程ダウンロードした、キー情報もenvファイルに記述する必要がありますが、そのままの内容を記述するわけではなく、base64化したものをenvファイルへ記述します。
以下のコマンドを実行して、APIキー情報をbase64化します。出力された結果をメモしておきます。
作成するファイルは2つです。
.env
は実際に値が入っているもの、.env.skel
はどのようなキーを設定する必要があるのかのSkeletonファイルとなります。
ひとまず .env.skel
を作成します。
そして .env
ファイルも作成して、AppStoreConnect APIの情報(ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_CONTENT)を含む設定値を設定します。
MATCH_PASSWORD
は証明書に設定するPasswordになりますので、各自任意で設定してもらって大丈夫です。
FASTLANE_USER
はAppleIdになります。
また .env
は Github で管理しませんが、.env.skel
は管理したいため、以下の内容を .gitignore
ファイルに追記します。
fastlaneフォルダにある、Fastfileにfastlaneで実行したいlaneを記述します。
今回のFastfileでは、以下のことが実行できるようになっています。
できること | 実行コマンド |
---|---|
Development証明書・プロビジョニングファイルの作成・更新 | make match_force_development |
Development証明書・プロビジョニングファイルの取得 | make fetch_development_profiles |
Development証明書・プロビジョニングファイルの削除 | make delete_development_profiles |
Distribution証明書・プロビジョニングファイルの作成・更新 | make match_force_appstore |
Distribution証明書・プロビジョニングファイルの取得 | make fetch_appstore_profiles |
Distribution証明書・プロビジョニングファイルの削除 | make delete_appstore_profiles |
以下をFastfileへコピペします。初期化後の既存で書かれている内容は削除して問題ありません。
の2項目については、各自プロジェクトに合わせてください。
毎回fastlaneコマンドを打つのは面倒。かつ、様々な処理を実行した後にfastlaneを実行したい。という場合を想定して、Makefileを作成します。
MakefileはXcodeプロジェクトファイルと同じ階層に配置します。(Gemfileとかと同じ階層)
基本的には、makeコマンドを実行してもらうこととなります。
以上で、iOSプロジェクトでのFastlane組み込みが終わりました。
全てのプロジェクトでFastlaneを導入して、ストレスフリーな開発環境を作りましょう!
[cv:issue_marketplace_engineer]
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。