別のプロビジョニングプロファイルで次のような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}"
コマンドラインから実行するのは本当に簡単です。これを行うためのスクリプトの要点がありました。 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と呼ばれます
これを行う方法の簡単なツールについては、 iResign を確認してください。
[編集]少しいじってから、キーチェーンを意識した辞任の解決策を見つけました。 https://Gist.github.com/Weptun/540699 で確認できます。
ちょっと古い質問ですが、最新のXCodeでは、codesign
は簡単です。
$ codesign -s my_certificate example.ipa
$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
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
ここに投稿された回答はすべて私にはうまくいきませんでした。彼らは主に埋め込みフレームワークへの署名をスキップしました(または資格を含みます)。
私のために働いたものは次のとおりです(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/
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"
ネストされたアプリケーションのプロビジョニングプロファイル (たとえば、ウォッチキットアプリがある場合)も処理します。
_CodeSigned
フォルダーを削除しますembedded.mobileprovision
ファイルを新しいプロビジョニングプロファイルに置き換えます以下のコマンドを実行します:/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"
ペイロードフォルダーを再度Zipし、.ipaで.Zip拡張子を変更します
これが役に立てば幸いです。
参照については、下記のリンクを参照してください: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-Apple-accounts/
このアプリを試してください http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload /
IPAファイルの再署名に役立つはずです。自分で試してみましたが、Entitlements.plistでエラーを渡すことができませんでした。私のプロジェクトに問題があるだけかもしれません。試してみてください。