目的

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


参照サイト

以下のサイトを参考にしましたが。。。
minimalab : ipa ファイルを再署名する
Qiita : iOSアプリの署名を付け替える
上の方のサイトはtypoでエラーとなり、下の方もうまく署名ができません。
両者のハイブリッドです。


必要なもの

自分の場合は、プロファイル(mobileprovision)の更新を行いたく、以下が必要となりました。
重要なこととして、開発者証明書をPCに取り込んでおく必要があります。

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

更新方法

まず、以下コマンドで現在使われているipaファイルを展開します。

$ unzip XXX.ipa 



以下コマンドより、現在の署名をplist形式で出力します。

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

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



アプリバージョンなどを変更したい場合
XXXX.appを右クリックでパッケージの内容を表示
配下にInfo.plistがあるので、開いて
Bundle versions string, shortBundle versionを変更


以下コマンドより、署名ディレクトリを削除します。

rm -rf ./Payload/XXXX.app/_CodeSignature/



以下コマンドより、プロビジョニングプロファイルを新しいものに上書きします。

cp -p YYY.mobileprovision ./Payload/XXXX.app/embedded.mobileprovision 



以下コマンドより、再署名を行います。

codesign --force --sign 'iPhone Distribution: ZZZ' --entitlements ./enetitlements.plist --timestamp=none 'Payload/XXXX.app'
  • --force --sign 'iPhone Distribution: ZZZ'は開発者証明書で強制的に署名ということらしい

  • enetitlements.plistは、上で作ったplistのこと

  • timestamp=noneはタイムスタンプ確認をしないとのことですが、このオプション無くても実施はできるようです。参照で入れてたので、入れている程度

  • 実行するMacで、指定の開発者証明書がインストールされていないと、エラーno identity foundになる

  • 参照サイトQiitaのresource-rulesで実行すると、Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!と表示されます。Warning表記かつ、うまくファイルができている感もあるのですが、
    この方法だとアプリのインストールが失敗する


    以下コマンドより、zipアーカイブしてipaファイルにする。

zip -ry newXXX.ipa Payload



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