いろいろな事情で、iOS 用アプリの再署名 (resign) をしないといけないケースが発生することがあります。開発とパブリッシャが違うとか。
数年前とは少し変わっている様子だったので、基本的な処理をまとめます。
あらかじめ証明書はマシンに設定しておきます。
手元の PC なり、Jenkins などを動かすビルドマシンなりに設定しておきましょう。
指定した証明書を使用してくれない事があるので、古いものは削除してからやったほうが良いです。
一度証明書を全部消して、必要なものだけをインストールしておくと確実かなと思います。
ここでは、作業ディレクトリを準備して置くことにします。
% mkdir workdir
% cd workdir
% mv /path/to/xxx.ipa ./
% unzip xxx.ipa
以下のファイルを作成して実行します。
最初の変数を適宜書き換えてください。
#!/bin/sh -ex
bundleId=com.example.app
mobileprovision=example.mobileprovision
certificate='iPhone XXXX: Xxxxxxx'
teamId=XXXXXXXXXX
# change Bundle ID
plutil -replace 'CFBundleIdentifier' -string $bundleId Payload/*.app/Info.plist
# generate entitlement.plist
codesign -d --entitlements :- Payload/*.app > entitlements.plist
plutil -replace 'application-identifier' -string "${teamId}.${bundleId}" entitlements.plist
plutil -replace 'com\.apple\.developer\.team-identifier' -string $teamId entitlements.plist
# resign
rm -rf Payload/*.app/_CodeSignature/
cp $mobileprovision ./Payload/*.app/embedded.mobileprovision
codesign -f -v -s "${certificate}" --entitlements entitlements.plist Payload/*.app
# zip
zip -qr RESIGNED.ipa Payload/
実行すると、再署名された IPA が生成されます。
適切な端末にインストールできるか確認しましょう。
上記手順は差し替えだけですが、再署名後のフォルダ名を変更したりとかそういった事が必要なケースもあるかもしれません。
スクリプト内に処理を追加すれば対応できます。