ipaファイルの再署名とBundleIDの変更方法
XCodeなしでipaの再署名や ipaのBundleIDの変更をしたい!という方に。参考になれば🤗
1. 登場人物
-
再署名したいipaファイル: ここでは名前を
sample.ipa
とする。 -
差し替え用のProvisioning Profile: ここでは名前を
new.mobileprovision
とする。
予めDeveloperのサイトから入手しておく。
2. コンソールを開く
sample.ipa
を持つディレクトリまで移動する。
3. ipaファイルをunzipする
コンソール上で以下のコマンドを打つ。
unzip sample.ipa
するとsample.ipa
と同じ階層に、Payload
という名前のディレクトリができる。
4. Entitlements.plist の書き出しをする
3.の操作で出来たPayload
ディレクトリ内にappファイルがある(ここではその名前がsampleApp
であるとする)。
コンソール上でPayload/sampleApp/に移動し以下のコマンドを打つ。
codesign -d --entitlements - sampleApp > entitlements.plist
するとsampleApp
のディレクトリの中に、entitlements.plist
が作られる。
このファイルは再署名を行うときに使う。
(Optional) 5.BundleIDを変更
再署名したいだけであれば、この5.の手順は不要。
5-1. 各ファイルのBundleIDを書き換える
entitlements.plist
-
entitlements.plist
と同じ階層に存在するInfo.plist
のBundleIDを書き換える。書き換えるには各ファイルをクリックして開けば良いが、
クリックした際以下の写真のような表示が出ることがある。

もしこのように言われたら、以下の手順でファイルを修正すると良い。👇
- ファイルの上で右クリックをして、「このアプリケーションで開く」から「その他」を選んで、「テキストエディット」などから開く。
- 私の場合は
entitlements.plist
の最初の4文字が文字化けしていた。
文字化けしている箇所を消去する。
entitlements.plist
の最初の1行がこのようになっていれば正しく文字化け部分を消去できている。
<?xml version="1.0" encoding="UTF-8"?>
上記の手順を踏んで、entitlements.plist
をクリックで開き直すと、XCodeを使って開くことができた。
5-2. _Codesignatureディレクトリの削除
entitlements.plist
と同じ階層に存在する _Codesignature
ディレクトリを削除する。
rm -r _Codesignature
6. Provisioning Profileの差し替え
sampleApp
のディレクトリの中に存在しているProvisioning Profileembedded.mobileprovision
を、新しいProvisioning Profilenew.mobileprovision
に置き換える。
cp -p new.mobileprovision embedded.mobileprovision
7. 再署名
codesign --force --sign "証明書の名前" --entitlements entitlements.plist --timestamp=none "sampleApp"
"証明書の名前"
のところのフォーマットは、キーチェーンアクセスを開いて適用したい証明書を見つけ、証明書のタイトル部分をコピーするとよい。
上の証明書の写真でいうと、"証明書の名前"
のところを
"iPhone Developer: 左の緑の四角(右の青の四角)"
に置き換えれば良い。
codesign
のコマンドが成功すると、
sampleApp: replacing existing signature
というメッセージが表示される。🎉
8. zipファイルに圧縮する
Payloadフォルダを持つディレクトリに移動する。
ipaファイルの実態はzipなので、zip
コマンドを使って圧縮する。
ipaファイルとして出力したいファイルの名前をsample_new.ipa
とする。
zip -ry sample_new.ipa Payload
これで、sample_new.ipa
という再署名されたipaファイルが完成🎉🎉
おしまい🤗
Discussion