web-dev-qa-db-ja.com

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

別のプロビジョニングプロファイルで次のような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}"
101
Johnny

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

その中心は次のとおりです。

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と呼ばれます

189
Bruno Bronosky

これを行う方法の簡単なツールについては、 iResign を確認してください。

[編集]少しいじってから、キーチェーンを意識した辞任の解決策を見つけました。 https://Gist.github.com/Weptun/540699 で確認できます。

35
LordT

ちょっと古い質問ですが、最新のXCodeでは、codesignは簡単です。

$ codesign -s my_certificate example.ipa 

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

Sierra iMacのBryanのコードを更新しました。

# 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
7
Pierre Priot

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

私のために働いたものは次のとおりです(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/
7
simonseyer

Fastlaneの sigh は、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"

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

5
mattliu
  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で.Zip拡張子を変更します

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

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

5

このアプリを試してください http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload /

IPAファイルの再署名に役立つはずです。自分で試してみましたが、Entitlements.plistでエラーを渡すことができませんでした。私のプロジェクトに問題があるだけかもしれません。試してみてください。

1
honcheng