読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

ipaファイルを再署名(resign)する

現在出力しているipaファイルを新しいProvisioning Profileを使って再署名することができます。利用用途としては、新しいIPAファイルは作成したくないがProvisioning Profileが失効してしまったり対応するUDIDが増えた時に、Provisioning Profileのみを入れ替えたいという時によく使います。

コマンドラインで再署名する

# ipaを解凍
unzip -d /PATH/unzipdirectory "/APP_PATH/MyApplication.ipa"

cd /PATH/unzipdirectory

# 現在の署名を`enetitlements.plist` として出力する
codesign -d --entitlements :- Payload/MyApplication.app > ../enetitlements.plist

# 署名ディレクトリ(消さなくてもいいけど念のため)
rm -rf ./Payload/MyApplication.app/_CodeSignature

# mobileprovisionファイルを差し替える
cp -p /PROVISIONING_PATH/xxxx.mobileprovision \
    ./Payload/MyApplication.app/embedded.mobileprovision

# 再署名
codesign --force --sign "${CODE_SIGN_ID}" \
    --entitlements ../enetitlements.plist \
    --timestamp=none "./Payload/MyApplication.app/"

# 再圧縮(ipaを作る)
zip -ry "${APP_PATH}" Payload

再署名ツール「iResign」使う

ipaファイルの再署名は前述の通りそこまでで難しいものではありませんが、コマンドラインで作業することに慣れていないと倦厭しがちです。それに手作業にするとミスが混入してしまいます。そこでオススメなのがGUIツールです。

自分でビルドする必要があります。

再署名ツール「iResignShell」を使う

iResignをコマンドラインで使えるようにしたiResignShellというクローンもあります(別作者)

iResignShellを使った場合の再署名は下記のようにおこないます。

iResignShell -s "iPhone Distribution: CH3COOH INC." \
    -m /PROVISIONING_PATH/xxxx.mobileprovision 
    "/APP_PATH/MyApplication.app"

JenkinsなどのCIツールを使用している場合、こちらのiResignShellの方が使い勝手が良いでしょう。

関連記事

xcodebuildについての関連記事はこちらでも確認することができます。