#まえがき
この記事は Silbird Advent Calendar 2017 の20日目の記事です。
iOSの開発端末の指定をまれによくつけたり外したりしてて、そのたびにリビルドをお願いするのがめんどくさい申し訳ないので、なんとか署名とかProvisioningProfileだけ無理やり差し替えられないか、ついでにWebからボタン一発ぐらいでできないかと試行錯誤してみました。
肝心の再署名部は偉大なる先駆者様を参考にさせて頂きました。
(http://www.minimalab.com/blog/2016/04/14/resign-ipa/)
#前提条件
OSX機(MBPなりなんなり)にXCodeを導入し、必要な証明書(コード署名に使用可能なDevelopment or Distribution証明書)を導入します。
また、security find-identity -p codesigning -v
でちゃんと導入できているかの確認と、証明書の名前を控えておきます
("iPhone Developer: fumitti (0A1B2C3D4E)"
)
また、Jenkinsを用意します。今回は既存のJenkinsのスレーブとして用意しました。
#JenkinsのJob作成
とりあえず、更新するProvisioning ProfileをWebUIからアップロードして、IPAを成果物として受け取るスタイルにしたいと思います。
なので、ビルドのパラメータ化でファイルを受け取るようにします。
更新するProvisioningProfileと、差し替えるIPAファイルを受け取るようにします。
次に、本命の差し替え、再署名処理を追加します
シェルスクリプトとして追加するので、シェルの実行から
rm -rf ./Payload
rm -f ./entitlements.plist
unzip AwesomeApp.ipa
codesign -d --entitlements :- ./Payload/AwesomeApp.app > entitlements.plist
cat entitlements.plist
cp -p new.mobileprovision ./Payload/AwesomeApp.app/embedded.mobileprovision
codesign --force --sign "iPhone Developer: fumitti (0A1B2C3D4E)" --timestamp=none --entitlements entitlements.plist Payload/AwesomeApp.app
zip -ry AwesomeApp.ipa Payload
を追加します。
また、このままだとキーチェーンアクセスの認証を求められてしまうので、security unlock-keychain -p <キーチェーンのパスフレーズ>
を先頭に追加し、キーチェーンへのアクセスを確保するか、キーチェーンアクセスAppより、該当秘密錠の情報より、codesignへのアクセスを許可しておきます。
最後に、ZIPで固めたIPAファイルを成果物として保存します
#実行
https://developer.apple.com/account/ios/device/create から開発端末を追加or削除し、
https://developer.apple.com/account/ios/profile/ から更新するProvisioning Profileを選択し、中のDevicesを適宜更新し、
ダウンロードします。
その後、Jenkinsで作ったJobを実行し、ダウンロードしたプロファイルを渡してやれば、再署名されたIPAファイルが成果物として保存されます。
YATTA!
ちなみに、ファイルを渡さずにビルドを実行することも可能で、その場合前回のビルドで使われたものが使いまわされるので毎回IPAファイルを渡してあげなくても大丈夫です。
成果物として保存しているので、ほかのJobから参照できますので、このJobのあとにOTAInstallサイトのIPA更新とかも頑張れば自動化出来ちゃいますね!
#あとがき
これで、毎回ビルド職人にお願いしなくてもWebですべての処理を完結させることができるようになり、主にビルド職人さんと僕がすこしハッピーになりました!
皆さんも是非自動化を進めてハッピーになりましょう!