1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【iOS】fastlane matchのセットアップ

Posted at

はじめに

普段の開発では既に構築されているCI/CD環境を使用しているせいか、fastlane matchについての理解が不足しており少し危機感を感じているので、セットアップを一から行ってみることにしました。
せっかくなのでざっくり内容まとめてみます。

内容

基本はドキュメントの内容通りです

fastlaneのmatchとは

match は、必要なすべての証明書とプロビジョニング プロファイルを作成し、それらを別の git リポジトリ、Google Cloud、または Amazon S3 に保存します。選択したストレージにアクセスできるすべてのチーム メンバーは、これらの資格情報をコード署名に使用できます。

使う前に👇を読むように書いてありましたので確認していきます

アプリを App Store やベータ テスト サービスに展開したり、デバイスにインストールしたりする場合でも、ほとんどの開発チームはメンバーごとに個別のコード署名 ID を持っています。これにより、重複を含む多数のプロファイルが生成されます。
fastlane match を使うことで開発チームはコード署名IDを共有することで、セットアップを簡略化し、コード署名の問題を解消できます

コードサイニングにGitを使う方法:
基本的な要件は、チーム全体で共有するコード署名用のIDをひとつにすることです。そのための最も簡単な方法は、チーム用に新しいApple IDを作成し、今後はそれを使うことです。

  1. まず、プロファイルを保存するための新しいプライベートな Git リポジトリを作成します。
  2. 次に、「Distribution」と「Development」のような環境ごとに、新しい秘密鍵と証明書を作成します。そして、これらの秘密鍵と証明書をGitリポジトリに保存します。
  3. 次に、「Development」、「App Store」、「Ad hoc」などのさまざまなターゲットに対して、一致する証明書とともに新しいプロビジョニングプロファイルを作成し、これらをGit repoに格納します。
  4. Gitにファイルをコミットする前に、それらのファイルを暗号化することをお勧めします(例:opensslを使用)。
  5. これで、各マシンがGitリポジトリにアクセスし、最新の証明書とプロビジョニング・プロファイルをインストールすることができます:
  • 証明書と秘密鍵は、Finderを使うか、「security import」コマンドを使って、Keychainにインポートする必要があります。
  • プロビジョニングプロファイルは、「~/Library/MobileDevice/Provisioning Profiles/」にコピーしておく必要があります。

考慮すべきこと
プロビジョニングプロファイルが正しい証明書を使用して作成されていることを確認します。
アプリに複数のターゲットがある場合(例:Todayウィジェット)、各ターゲットに対して上記を繰り返す必要があります。
Xcodeプロジェクトのプロビジョニングプロファイルは、常に正しいプロファイルを選択するわけではないので、Automaticに設定しないでください

設定ステップ

まずは共通アカウントとレポジトリを作ります

  • matchをチームで使うにあたって共通アカウントを作成
  • 証明書管理用のプライベートGitHubレポジトリを作成

作成したら早速matchを使っていきます

match init実行

(今回は)gitを選択

作成したプライベートレポジトリのURLを入力

完了するとMatchfileがfastlaneファイルの中に生成される

app_identifier, usernameに適当な値を入れる
(以下は生成直後の状態)

Matchfile
git_url("https://github.com/...")

storage_mode("git")

type("development") # The default type, can be: appstore, adhoc, enterprise or development

# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
# username("user@fastlane.tools") # Your Apple Developer Portal username

# For all available options run `fastlane match --help`
# Remove the # in the beginning of the line to enable the other options

# The docs are available on https://docs.fastlane.tools/actions/match

fastlane match appstoreを実行

実行の過程でMATCH_PASSWORDの入力を求められるので保存しておくこと
このPASSWORDは証明書を取得するときに必要になるのでBitriseのSecretsにも入れておきます

Matchの実行Summary

証明書生成のSummary(Matchで実行される)

ここで実行される内容は

  • 新しい秘密鍵を作成する
  • 新しい署名依頼を作成する
  • 証明書を生成し、ダウンロードし、インストールする
  • 生成されたすべてのファイルをキーチェーンにインポートする

プロビジョニングプロファイル生成のSummary(Matchで実行される)

ここで実行される内容は

  • アプリの最新のプロビジョニング プロファイルをダウンロードする
  • プロビジョニング プロファイルの有効期限が切れたら更新する
  • プロビジョニング プロファイルが壊れている場合は修復する
  • 新しいプロビジョニング プロファイルが存在しない場合は作成します。
  • 複数の Apple アカウントのサポート、認証情報をキーチェーンに安全に保存

生成したプロビジョニングプロファイルをローカル(Library/MobileDevice/ProvisioningProfiles)取得

fastlane match developmentを実行

流れはfastlane match appstoreと同じなので省略

実行後の状態確認

にて証明書が正しく追加されているか確認

証明書とプロビジョニングプロファイルがローカル取得できているか確認

  • キーチェーンに証明書(Distribution、Development)が取得できているか
  • Library/MobileDevice/ProvisioningProfilesにプロビジョニングプロファイル(Distribution、Development)が取得できてるか

これで設定は完了

証明書、プロビジョニングプロファイルの取得

別のマシンに証明書とプロビジョニングプロファイルをセットする場合

fastlane match appstore --readonly
fastlane match development --readonly

を実行する

一度で実行したいのでFastfileからfastlane fetch_certificatesとしても

Fastfile
  desc "Fetch certificates"
  lane :fetch_certificates do
    match(type: "development", readonly: true)
    match(type: "appstore", readonly: true)
  end

動作確認

試しにリリースを実行していきますが、早速エラーが出ました

Error cloning certificates repo, please make sure you have read access to the repository you want to use

どうやらBitriseのマシンから証明書レポジトリへのアクセス権がなく、エラーになっているようです。

BitriseのApp settingsIntegrationsから確認できるSSH public keyをGitHubのSecurityDeploy keysに保存することでBitriseのマシンからプライベートリポジトリへのアクセスができるようになりますが、複数のリポジトリ(iOSアプリのリポジトリと証明書のリポジトリなど)に登録ができません。

対応としては

Githubでmachine userを作成して証明書のレポジトリへアクセスできるようにします。

個人用アカウントは人間が使用するものですが、GitHub のアクティビティを自動化するアカウントを作成できます。 この種類のアカウントは、マシン ユーザーと呼ばれます。 たとえば、継続的インテグレーション (CI) ワークフローを自動化するマシン ユーザー アカウントを作成できます。

この設定をしたことで、BitriseからAppStoreConnectへのリリース配布ができるようになりました🎉

おわりに

証明書の更新など定期的にメンテナンスが必要なので、この辺りの理解は深めていきたいと思います

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?