目的

ipaファイルの署名を変更したい時や、プロファイル(mobileprovision)の更新を ターミナル操作で付け替える方法メモです。





環境

  • Xcode 12.4
    (Xcode自体は利用しませんが、一応記載)




参照サイト

参照にしたサイトがありましたが、
2021年現在クローズされていたので未記載となります。





必要なもの

自分の場合は、プロファイル(mobileprovision)の更新を行いたく、以下が必要となりました。
開発者証明書はすでにMac内に取り込んでいて、キーチェーンアクセスから確認できるものとします。

  • 新しいプロビジョニングプロファイル(mobileprovision)
  • 現在使われているipaファイル
  • 開発者証明書(p12ファイル)




更新方法

今回は、バージョン値の更新最新のプロビジョニングプロファイルへの書き換えを行いたいと思います。

Payload展開

まず、以下コマンドでipaファイルからPayloadフォルダを展開します。
※XXX.ipaは現在利用しているipaファイルのこと

Payload展開
$ unzip XXX.ipa 

以下コマンドより、
上記Payloadフォルダ内のファイルを利用し、現在の署名をplist形式で現在の作業フォルダに出力します。
※Payloadフォルダ内にもenetitlements.plistがあるので取り間違いないように注意

plist出力
codesign -d --entitlements :- Payload/XXXX.app > enetitlements.plist

->Executable=..と表示される

アプリバージョンの変更

上記Payloadフォルダ内にある、XXXX.appを右クリックしてパッケージの内容を表示を選択する。
※XXXXはアプリ名など

その配下にInfo.plistがあるので、Xcode等で開く。
※plistファイルをダブルクリックすれば、Xcodeで開くようになっているはず。

バージョンを変更する場合は、Bundle versions string, shortBundle versionを変更





新しいプロビジョニングプロファイルを適用し、再署名

以下コマンドより、署名ディレクトリを削除します。
※-rfオプションを利用しているので、入力ミスにきをつけてください
※XXXXはアプリ名など

対象ファイル削除
rm -rf ./Payload/XXXX.app/_CodeSignature/

以下コマンドより、プロビジョニングプロファイルを新しいものに上書きします。
※YYY.mobileprovisionは今回用に準備した新しいプロビジョニングプロファイル
※XXXXはアプリ名など

プロビジョニングプロファイル上書き
cp -p YYY.mobileprovision ./Payload/XXXX.app/embedded.mobileprovision 

以下コマンドより、再署名を行います。
--force --signは開発者証明書で強制的に署名ということらしい
※「iPhone Distribution: ZZZ」は準備した開発者証明書に置き換える。キーチェーンアクセスアプリなどで確認
enetitlements.plistは、上の項目で作ったplistのこと
timestamp=noneはタイムスタンプ確認をしないとのことですが、このオプション無くても実施はできるようです。今は消えている参照サイトで入れてたので、入れている程度
※実行するMacで、指定の開発者証明書がインストールされていないと、エラーno identity foundになる
※XXXXはアプリ名など

再署名
codesign --force --sign 'iPhone Distribution: ZZZ' --entitlements ./enetitlements.plist --timestamp=none 'Payload/XXXX.app'





再度ipaファイル化

以下コマンドより、zipアーカイブしてipaファイルにする。
※WWW.ipaは今回用に作成する新しいファイル名。

ipaファイル化
zip -ry WWW.ipa Payload

あとはデバイスにインストール確認後、うまくいけば完了です。