7
6

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 5 years have passed since last update.

SilbirdAdvent Calendar 2017

Day 20

IPAファイルのProvisioning Profileを差し替える feat.Jenkins氏

Last updated at Posted at 2017-12-20

#まえがき
この記事は Silbird Advent Calendar 2017:tada:20日目:tada:の記事です。

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ファイルを受け取るようにします。
image.png

次に、本命の差し替え、再署名処理を追加します
シェルスクリプトとして追加するので、シェルの実行から
image.png

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へのアクセスを許可しておきます。
image.png

最後に、ZIPで固めたIPAファイルを成果物として保存します
image.png

#実行
https://developer.apple.com/account/ios/device/create から開発端末を追加or削除し、
https://developer.apple.com/account/ios/profile/ から更新するProvisioning Profileを選択し、中のDevicesを適宜更新し、
image.png
ダウンロードします。

その後、Jenkinsで作ったJobを実行し、ダウンロードしたプロファイルを渡してやれば、再署名されたIPAファイルが成果物として保存されます。
Awesome.png

YATTA!
ちなみに、ファイルを渡さずにビルドを実行することも可能で、その場合前回のビルドで使われたものが使いまわされるので毎回IPAファイルを渡してあげなくても大丈夫です。

成果物として保存しているので、ほかのJobから参照できますので、このJobのあとにOTAInstallサイトのIPA更新とかも頑張れば自動化出来ちゃいますね!

#あとがき
これで、毎回ビルド職人にお願いしなくてもWebですべての処理を完結させることができるようになり、主にビルド職人さんと僕がすこしハッピーになりました!
皆さんも是非自動化を進めてハッピーになりましょう!

7
6
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
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?