アプリ開発用のマシンのセットアップ - 証明書の自動セットアップ -


はじめに

iOSアプリを開発するためには、マシンのセットアップをやらないといけません。

どのようなことをやらないといけないかと言うと、iOSアプリ開発におけるCI/CDという記事を書いた時に必要なことを以下のように列挙しました。

 - 環境用意(Macのセットアップ周り)
   1. iOSアプリ開発用の証明書インストール
   2. Apple Dev Centerへの登録
     1. デバイスの追加
     2. Provisioning Profileの更新
   3. Provisioning Profileの設置

上記に関しての更新タイミングは以下のとおりです。

  • 1 「新しいマシンが追加」「証明書が更新(少なくとも1年に1回はある)」
  • 2-1 「新しい端末が追加」
  • 2-2 「2-1が行われた」「新しいアプリを作成」
  • 3 「2-2が行われた」

このように定期的におこなわれる作業なので、自動化しておかないと面倒です。
2と3については別の記事で書いたので今回は1について書きます。

証明書のセットアップ

Apple DeveloperのMember Centerから証明書をダウンロードするのは、cupertinoを使っています。

証明書をダウンロードし、セットアップするまでのサンプルコードは以下のとおりです。

サンプルコード
bundle exec ios certificates:download "$NAME" --type development -u "$DEVELOPER_USER_ID" -p "$DEVELOPER_PASSWORD"
bundle exec ios certificates:download "$NAME" --type distribution -u "$DEVELOPER_USER_ID" -p "$DEVELOPER_PASSWORD"

echo $DISTRIBUTON_KEY_BASE64 | base64 -D > $(PWD)/dist.p12

KEYCHAIN=~/Library/Keychains/ios.keychain
KEYCHAIN_PASSWORD="$PASSWORD"

security create-keychain -p "$KEYCHAIN_PASSWORD" ios.keychain
#unlock-keychainをしないとiOSアプリのビルド時などパスワードを聞かれてしまうので注意
#これをしていてもビルド時にはパスワードをきかれることがあるので、ビルド前にunlock-keychainをするのが良い。
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN

security import $(PWD)/ios_development.cer -k $KEYCHAIN -T /usr/bin/codesign
security import $(PWD)/ios_distribution.cer -k $KEYCHAIN -T /usr/bin/codesign
security import $(PWD)/dist.p12 -k $KEYCHAIN -T /usr/bin/codesign -P "$KEY_PASSWORD"
#これをしないと一覧に表示されません
security list-keychains -s ios.keychain

rm -rf $(PWD)/dist.p12
rm -rf $(PWD)/ios_*.cer

環境変数についての説明

key 説明
NAME Member CenterのiOS Certificatesに書かれているName
DEVELOPER_USER_ID Apple DeveloperのUserID
DEVELOPER_PASSWORD Apple Developerのパスワード
DISTRIBUTON_KEY_BASE64 秘密鍵を書きだしたp12ファイルをbase64エンコードした値

DISTRIBUTON_KEY_BASE64についての補足説明

キーチェーンアクセスから、iPhone Developer/iPhone Distribution証明書の秘密鍵を書き出し、保存したp12ファイルに対して以下のコマンドを用いて取得します。

cat dist.p12|base64|pbcopy

Jenkinsでの対応方法

注意するべき点は以下の2つぐらいです。

  • ジョブは"マルチ構成プロジェクトのビルド"で作成し対象となるマシンに対して一括で更新できるようにします。
  • 環境変数は、"ビルド環境"の"環境変数としてパスワードをインジェクト"で設定します。

おわりに

今回の対応と以前の記事のコードがあれば、iOSアプリ開発におけるセットアップは自動化できます。

参考