はじめに
この記事は株式会社Diverse Advent Calendar2021 22日目の記事です。
直近、社内で扱っている複数のiOSアプリの証明書の管理方法を整えたのでその内容を共有しようと思います。
弊社ではプロダクトごとにチームが別れており、それぞれのチームのエンジニアが手動で証明書の更新などの対応をしていました。
そのため証明書の管理が属人化してしまい、管理者が特定の人に偏っていました。
また新しくジョインしたメンバーは誰がどのように証明書を管理しているのか分かりづらい状況でもありました。
この課題を解決するために導入したのが fastlane match です。
※この記事ではfastlaneの詳しい使い方については触れません。
詳細については公式ドキュメントと以下の記事をご覧ください。
・公式ドキュメント
・fastlane match を使用して iOS の証明書管理を行う
・[iOS]大規模プロダクトにfastlane matchを導入した話
fastlane matchとは
簡単に説明するとfastlane matchは証明書の作成と削除がコマンドのみで行うことができるツールです。
作成した証明書は以下のストレージに保存され、開発者はここからfastlane matchを使って証明書を取得します。
・Git repo
・Google Cloud
・Amazon S3
社内の複数のアプリの証明書をどう管理するのか
###1. App Store Connectに共有アカウントを作成する
fastlane matchで証明書を作成する際に使うアカウントを作成します。
ここで使用するアカウントは社内の誰にも依存しないアカウントを使用するのが望ましいです。
※作成するアカウント権限はApp Manager以上の権限が必要です。
###2. GitHubに証明書管理用のリポジトリを作成する
社内のiOSアプリの証明書を1つのリポジトリで管理することにしました。
ios-certificates
のような名前でプライベートリポジトリを作成します。
###3. 各アプリごとにfastlane matchを導入する
社内の各iOSアプリのリポジトリをクローンしてそれぞれのプロジェクトでfastlane matchを導入します。
※ fastlane matchだけを導入することも可能ですが、先にfastlaneを導入し、作成されたfastlaneディレクトリでmatchの導入をすることでfastlaneに関連するファイルが集約されるのでわかりやすいかなと思います。
fastlane init
cd /fastlane
fastlane match init
Matchfileは以下のようになります。
// 2で作成したGitHubのリポジトリのURL
git_url("git@github.com:xxx/ios-certificates.git")
storage_mode("git")
type("development")
app_identifier(["アプリのBundleID"])
// 1で作成したアカウントのAppleID
username("apple developerのアカウント")
app_identifierは各プロジェクトごとに違いますが、それ以外は同じです。
###4. 各アプリごとにfastlane matchを実行する
Matchfileの作成を終えたらfastlane matchを実行して証明書の作成を行います。
弊社では開発用証明書はAutomatically manage signingを使っているので
adhoc, appstore用の証明書だけをmatchで作成しました。
※ 作成時に設定するパスワードは他の人がmatchで証明書を取得する際に必要なので忘れないようにしてください。
※ 1passwordなどのセキュアに社内のメンバーに共有できるツールで管理するのが良いと思います。
// 配布用証明書の作成
fastlane match adhoc
// 申請用証明書の作成
fastlane match appstore
上記を実行すると指定したGitHubのリポジトリに作成した証明書とプロビジョニングプロファイルが保存されます。
証明書の更新
更新は削除と作成を組み合わせて行います。
###1. 期限切れの証明書を削除
fastlane match nuke distribution
上記のコマンドで期限切れの証明書を削除します。
###2. 各プロジェクトごとに証明書,プロビジョニングプロファイルを作成
nukeで削除した証明書を参照しているプロビジョニングプロファイルも再度作り直す必要があるので各プロジェクトで以下の対応を行います。
// 配布用証明書の作成
fastlane match adhoc
// 申請用証明書の作成
fastlane match appstore
デバイスの追加
新しいデバイス追加した際は --force_for_new_devices
オプションをつけることで更新が可能です。
fastlane match adhoc --force_for_new_devices
おわりに
fastlane matchを使うことで煩わしい証明書の管理をとても楽にすることができます。
fastlneを導入したことでコマンドを叩くだけで作成、更新、削除ができるので、READMEなどに手順を記載しておけば開発に関わるエンジニアなら誰でも楽に証明書の管理ができるようになったと思います。
またCIを組む際にもこのfastlane matchはとても便利なので積極的に使っていきたいツールですね!!