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