ipaファイルに再署名する方法は?


107

別のプロビジョニングプロファイルで次のようなIPAを生成した後、プロビジョニングプロファイルで.ipaファイルに署名するにはどうすればよいですか?ベータテスト用のアドホックプロビジョニングプロファイルを使用してIPAに署名し、その後、アプリストアのアプリ送信プロビジョニングプロファイルを使用して正確なIPAに再署名します。

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}"

回答:


207

コマンドラインから実行するのは本当に簡単です。これを行うためのスクリプトの要点がありました。これは、私が毎日使用するhttps://github.com/RichardBronosky/ota-toolsのipa_signスクリプトに組み込まれています。これらのツールの使用について質問がある場合は、遠慮なく質問してください。

その中心はこれです:

CODESIGN_ALLOCATE=`xcrun --find codesign_allocate`; export CODESIGN_ALLOCATE
IPA="/path/to/file.ipa"
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in keychain
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# sign with the new certificate (--resource-rules has been deprecated OS X Yosemite (10.10), it can safely be removed)
/usr/bin/codesign -f -s "$CERTIFICATE" Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload

新しい署名済みアプリはresigned.ipaと呼ばれます


31
単一の質問ではなく7票。私のbashはそのようにはっきりしていると思います。
ブルーノブロノスキー2013

4
確かに親切です。
Rui Peres 2013年

3
@RahmathullahMPulikkal要点のパスを誤ってハードコード化したようです。要点の代わりにgithub.com/RichardBronosky/ota-tools/blob/master/ipa_signを実際に使用する必要があります。それは維持されたコードです。
Bruno Bronosky 2013年

5
OS X Yosemite(10.10)で廃止された--resource-rulesパラメーターで警告/エラーが発生する場合があります。このパラメーターを削除するだけでこの問題が解決します。
ıɾuǝʞ

4
ちょっとしたメモ:フォルダーCodeResourcesあるように見えるので、そのフォルダーを削除するだけです。_CodeSignature
dadude999 2015年

36

これを行うための簡単なツールについては、iResignをチェックしてください!

[編集]いじくり回した後、キーチェーンを意識した辞任の解決策を見つけました。https://gist.github.com/Weptun/5406993で確認できます。


辞任中にバンドルIDとともに表示名を変更できるツールはありますか?これは、環境ごとに異なる表示名を持つのに役立ちます。App-Dev、App-QA、App-Stageなど
Nishanth Nair 2013

1
はい、floatsign.shはまさにそれを行います。
Blitz

動作します。シンプルで美しい。
アルジュンカリダス

13

古い質問のようなものですが、最新のXCodeを使用するcodesignと簡単です。

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement

2
@Pavelこの質問は、iOS 6.xが最新バージョンのときに返答されました。それ以来、2つのメジャーリリースがあり、明らかに多くのことを変更しました。現在のテクノロジーをターゲットとする回答に検索を制限したい場合があります。
BryanH 2015年

それは私のために働いた。「my_certificate」をキーチェーン内のキーの名前に置き換える必要があります。
Franziskus Karsunke

2
codesignコマンドは@BrunoBronosky応答でも使用されます。「* .ipa」ファイルで直接使用することはできません。「-vv」オプションcode object is not signed at allは、署名されていることがわかっているファイルで常に返されます...
Mariano Paniga

12

ここに投稿された回答はすべて私にとってはうまくいきませんでした。彼らは主に埋め込みフレームワークへの署名をスキップしました(または資格を含みます)。

これは私のために働いています(1つのipaファイルが現在のディレクトリにあると仮定しています):

PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in the keychain

unzip -q *.ipa
rm -rf Payload/*.app/_CodeSignature/

# Replace embedded provisioning profile
cp "$PROVISION" Payload/*.app/embedded.mobileprovision

# Extract entitlements from app
codesign -d --entitlements :entitlements.plist Payload/*.app/

# Re-sign embedded frameworks
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/Frameworks/*

# Re-sign the app (with entitlements)
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/

zip -qr resigned.ipa Payload

# Cleanup
rm entitlements.plist
rm -r Payload/

(リッチ)上記ポストから有用なコメント:stackoverflow.com/questions/5160863/...
Serzas

9

Fastlaneの溜息は、IPAを辞任するためのかなり堅牢なソリューションを提供します。

彼らのREADMEから:

辞任

ipaファイルを生成したが、別のコード署名をipaファイルに適用したい場合は、以下を使用できますsigh resign

fastlane sigh resign

sigh 現在のフォルダにある場合は、ipaファイルとプロビジョニングプロファイルが見つかります。

コマンドラインを使用して、より多くの情報を渡すことができます。

fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"

ネストされたアプリケーションのプロビジョニングプロファイルも処理します(例:ウォッチキットアプリがある場合)


8

私のSierra iMacのブライアンのコードを更新しました:

# this version was tested OK vith macOs Sierra 10.12.5 (16F73) on oct 0th, 2017
# original ipa file must be store in current working directory 

IPA="ipa-filename.ipa"
PROVISION="path-to.mobileprovision"
CERTIFICATE="hexadecimal-certificate-identifier" # must be in keychain
# identifier maybe retrieved by running: security find-identity -v -p codesigning

# unzip the ipa
unzip -q "$IPA"

# remove the signature
rm -rf Payload/*.app/_CodeSignature

# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision

# generate entitlements for current app
cd Payload/
codesign -d --entitlements - *.app > entitlements.plist
cd ..
mv Payload/entitlements.plist entitlements.plist

# sign with the new certificate and entitlements
/usr/bin/codesign -f -s "$CERTIFICATE" '--entitlements' 'entitlements.plist'  Payload/*.app

# zip it back up
zip -qr resigned.ipa Payload

次のエラーを取得しますentitlements.plist:認識できないblobタイプ(ブラインドで受け入れます)entitlements.plist:無効な長さのエンタイトルメントblob
Amr Angry

資格ファイルのコンテンツを共有できますか?
Pierre Priot 2017

魅力のように働いた!
ルイスE.プラド

5
  1. 拡張子を.zipに変更して、.ipaファイルを解凍します。
  2. ペイロードに移動します。あなたは.appファイルを見つけるでしょう
  3. .appファイルを右クリックし、[パッケージの内容を表示]をクリックします。
  4. _CodeSignedフォルダを削除する
  5. embedded.mobileprovisionファイルを新しいプロビジョニングプロファイルに置き換えます
  6. KeyChain Accessに移動し、暫定プロファイルに関連付けられた証明書が存在することを確認します
  7. 以下のコマンドを実行します。 /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. 次に、ペイロードフォルダーを再度圧縮し、.zip拡張子を.ipaに変更します。

これがお役に立てば幸いです。

下記のリンクを参照してください:http : //www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.