auto

iOS Developer Enterprise Program で社内配布用のアプリケーションを作っている時に、証明書の期限が切れると使えなくなってしまいます。

再ビルドすればいいのですが、その時の環境が再現できないとか、再ビルドするのが面倒な場合があります。(特に後者) そういう時は ipa ファイルの再署名を行うことで、ビルドせずとも使えるようになります。

再署名の手順

ipa ファイルを解凍する

ipa ファイルは zip ファイルなので、unzip コマンドを使って解凍します。

$ unzip -d hogehoge hogehoge.ipa

Entitlements.plist の書き出し

Entitlements.plist をファイルに出力します。このファイルは再署名を行うときに使います。

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

バンドル ID の変更 (必要であれば)

バンドル ID を変更したい場合、entitlements.plisthogehoge.app/Info.plist のバンドル ID を書き換えます。

再署名したいだけであれば、書き換えは不要です。他の ipa ファイルと重複しているからこの際書き換えたいなあ、という場合とかに行ってください。

プロビジョニングプロファイルの差し替え

新しいプロビジョニングプロファイルに置き換えます。新しいプロビジョニングプロファイルは、あらかじめ Apple Developer の Web サイトで作ってダウンロードしておきます。

$ cp -p new.mobileprovision ./Payload/hogehoge.app/embedded.mobileprovision

再署名

codesign を使って再署名します。以下は実行例です。

$ codesign --force --sign 'iPhone Distribution: xxxxxxxxxxx' --entitlements entitlements.plist --timestamp=none 'Payload/Hogehoge.app/'
  • --sign の値は、署名に使う証明書の名称です。 (名称は、キーチェーンアクセス.app から確認できます)
  • --entitlements の値は、最初に出力した entitlements.plist のパスになります。
  • --timestamp=none を指定すると、タイムスタンプの存在証明を行いません。

上記のコマンドを実行すると、Payload/hogehoge.app/: replacing existing signature というようなメッセージが表示されます。それ以外のメッセージが出力される場合、再署名できていない可能性があります。

zip で固める

ipa ファイルの実態は zip なので、zip コマンドを使って固めます。

$ zip -ry hogehoge_new.ipa Payload
  • -r を指定すると、ディレクトリを再帰的に圧縮します。
  • -y を指定すると、シンボリックリンクをそのまま (実ファイルとせず) 圧縮します。

これで、これまで通り Xcode なり、OTA なりで ipa ファイルをデバイスにインストールすることができるようになります。