🍏

ipaファイルの再署名とBundleIDの変更方法

2021/07/10に公開

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を書き換える。書き換えるには各ファイルをクリックして開けば良いが、
クリックした際以下の写真のような表示が出ることがある。



もしこのように言われたら、以下の手順でファイルを修正すると良い。👇

  1. ファイルの上で右クリックをして、「このアプリケーションで開く」から「その他」を選んで、「テキストエディット」などから開く。
  2. 私の場合は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