WantedlyのUser Growthチームで開発をしている@hedjirogです。
これは、Wantedly Advent Calendar 2015 19日目の記事です。
はじめに
この記事では、iOSアプリ開発に必要な証明書とプロビジョニングプロファイル(以下、プロファイル)をGitHubのリポジトリで一括管理する方法を紹介します。
iOSアプリのチーム開発をしている現場では、メンバー間での証明書やプロファイルの管理が煩雑になりがちです。この記事で紹介する内容は、チーム開発の現場で特に有効です。
Wantedlyでは、iOS開発の様々なワークフローを定義して自動化してくれるツールであるfastlaneを積極的に利用しています。過去に、fastlaneの利用事例について発表を行なって来ました。
fastlaneには様々なワークフローが簡単に実行できるように、いくつかのツールが用意されています。例えば、**申請作業などでiTunes Connectを操作可能なdeliver**や、アプリのスクリーンショットの撮影が可能なsnapshot、**ビルド支援をしてくれるgym**などがあります。
そんなfastlaneに、**Gitを用いてチーム内で証明書やプロファイルを管理可能なmatch**が新たに加わりました
今回は、matchを利用して証明書とプロファイルをGitHubのリポジトリで管理するまでを試してみます。また、fastlaneと併用したアプリ自動配布の際のコード署名を試したので、併せて記事の後半で紹介します。
matchとは
従来のXcodeによる管理方法などでは、チームの各メンバーが異なる証明書やプロファイルを保持することになり管理が煩雑になります。
この問題を解決するmatchのアプローチはシンプルで、Gitのプライベートリポジトリにチーム内で共通の証明書やプロファイルを管理して、メンバー間で共有して利用するというものです。
証明書やプロファイルの生成、Gitのリポジトリへのプッシュなど、管理に必要な操作は全てコマンドラインからmatchを利用して実行することが可能です。
さらに詳しい説明は、以下のリンク先から確認すると良いでしょう。
【基礎編】matchを利用してみる
実際にmatchを利用してみましょう。
1. インストール
インストールの方法はいくつかあります。
matchを直接インストールする場合は以下のコマンドを実行します。
sudo gem install match
もしくは、fastlaneをインストールする (sudo gem install fastlane
) ことで、付属するmatchをインストールすることもできます。また、Bundlerを利用すれば、チームで利用するmatchのバージョンを揃えることも可能です。
最新のXcodeのコマンドラインツールがインストールされていることも確認してください。以下のコマンドでインストールすることが可能です。
xcode-select --install
2. プライベートリポジトリの作成
GitHubでプライベートリポジトリを作成します。リポジトリ名はcertificates
などとします。
ここでは、必ずリポジトリの種別としてPrivate
を選択するように注意してください。
3. Apple Developer Potalの共有アカウントの作成
matchでは、チームで共有するApple Developer Portalのアカウントを作成することを推奨しています。
招待ページから適切なメールアドレスに招待メールを送付して、アカウントの作成を行ないましょう。
共有アカウントに付与する権限は、Roles Overviewのページを参考にします。
Distribution用の証明書やプロファイルをmatchで生成する場合は、Admin
の権限を付与する必要があります。状況に応じて、Admin
とMember
のいずれの権限を付与するかを検討してください。
3. 初期コマンドの実行
以下の初期コマンドを実行して、作業ディレクトリに設定ファイル (Matchfile
) を配置します。
match init
基本的に設定ファイルは作業ディレクトリ直下に配置されますが、fastlaneを既に利用していればfastlane
ディレクトリに配置されます。
コマンドを実行すると、先程作成したプライベートリポジトリのURLの入力を求められます。コマンドラインからGitHubにsshでアクセスしている場合は、git@github.com:wantedly/hoge.git
といったURLを指定する必要があります。
配置される設定ファイルは以下のようになります。
git_url "git@github.com:wantedly/hoge.git"
type "development"
app_identifier "com.wantedly.app"
username "hoge@wantedly.com"
4. 証明書とプロファイルの生成
ここまで準備ができると、後はコマンドにより自由に証明書とプロファイルの生成が可能です。
例えば、以下のコマンドを実行すると、Development用の証明書とプロファイルが生成されます。生成された証明書とプロファイルは自動的にGitHubのプライベートリポジトリにpushされます。
match development
この際、証明書とプロファイルはopensslを利用して暗号化されます。暗号化のためのパスフレーズの入力を求められます。他のマシンでもmatchを利用できるようにパスフレーズは忘れないようにしましょう。
【応用編】fastlaneと併用してコード署名したアプリの自動配布を行なう
ここからは応用編です。
Wantedlyでfastlaneと併用したアプリの自動配布の際のコード署名を試したので、手順を紹介します。
1. AdHoc用の証明書とプロファイルを生成する
以下のコマンドを実行してAdHoc用の証明書とプロファイルを生成します。
bundle exec match adhoc -a com.wantedly.app-qa
Apple Developer Portalにアクセスすると、自動的にプロファイルが追加されたのがわかります。
GitHubの管理用のプライベートリポジトリにも自動的にコミットされたのが確認できます。
2. Fastfileに証明書とプロファイルの取得処理を追加する
fastlaneと併用してmatchによる証明書とプロファイルの取得が可能です。ワークフローを記述するためのFastfile
に変更を加えましょう。
ここでは、以下のmatchのアクションをFastfile
に追加します。
match type: "adhoc", app_identifier: "com.wantedly.app-qa"
Wantedlyではアプリ配布を実行するためにbeta
というレーンを用意しています。gymでビルドする直前で、matchによる証明書とプロファイルの取得処理を実行しましょう。
以下は、Fastfile
に記述されたWantedlyのアプリ配布用レーンのイメージです。
lane :beta
match type: "adhoc", app_identifier: "com.wantedly.app-qa"
gym(
scheme: "app",
configuration: "QA",
use_legacy_build_api: true
)
crashlytics(
crashlytics_path: "./Pods/Crashlytics/Crashlytics.framework",
groups: "Developers",
notifications: "true"
)
end
3. CIによるアプリ配布の実現
fastlaneと併用したアプリ配布の処理は、CircleCIやTravis CIなどのCIサービスでも実行可能です。
各CIサービスの設定に従って、openssl用のパスフレーズのMATCH_PASSWORD
、Apple Developer PortalにログインするためのFASTLANE_USER
やFASTLANE_PASSWORD
などの環境変数を適切に設定しましょう。
keychainの操作やopensslによる暗号化や復号化の操作は全てmatchが行なってくれます。matchの登場によってfastlaneがますます便利になりました
最後に
Wantedlyではモバイルのエンジニアも積極採用中です!fastlaneの情報交換をしに、是非一度、Wantedlyに話を聞きに来てください!!