如何重新签名ipa文件?

时间:2011-03-01 21:55:26

标签: ios ios-provisioning ipa

在使用不同的配置文件生成如下所示的IPA后,如何使用配置文件签署.ipa文件?我想在IPA上签署一个用于beta测试的临时配置文件,然后使用应用商店的应用提交配置文件重新签署确切的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}"

10 个答案:

答案 0 :(得分:188)

从命令行执行起来非常简单。为了做到这一点,我有一个脚本的要点。它现在已被合并到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" --resource-rules Payload/*.app/ResourceRules.plist Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload

您的新签名应用程序名为resigned.ipa

答案 1 :(得分:35)

检查iResign以获取有关如何执行此操作的简单工具!

经过一番骚动后,我找到了一个解决钥匙串感知问题的解决方案。您可以在https://gist.github.com/Weptun/5406993

查看

答案 2 :(得分:13)

有点老问题,但使用最新的XCode,codesign很简单:

$ codesign -s my_certificate example.ipa 

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

答案 3 :(得分:7)

我已经为我的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

答案 4 :(得分:6)

这里发布的答案对我来说都没有用。他们主要是跳过签署嵌入式框架(或包括权利)。

这里有什么对我有用(它假设一个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/

答案 5 :(得分:5)

  1. 通过使用.zip
  2. 更改其扩展名来解压缩.ipa文件
  3. 转到有效负载。你会找到.app文件
  4. 右键单击.app文件,然后单击“显示包内容”
  5. 删除_CodeSigned文件夹
  6. embedded.mobileprovision文件替换为新的配置文件
  7. 转到KeyChain Access并确保与临时配置文件关联的证书存在
  8. 执行以下命令: /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  9. 现在再次压缩Payload文件夹并使用.ipa更改.zip扩展名

  10. 希望这有用。

    供参考,请参阅以下链接: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/

答案 6 :(得分:5)

Fastlane的sigh为辞职的IPA提供了相当强大的解决方案。

来自他们的自述文件:

  

辞职

     

如果您生成了ipa文件但想要在ipa文件上应用其他代码签名,则可以使用sigh resign

     

fastlane sigh resign

     

sigh会找到ipa文件和配置文件,如果它们位于当前文件夹中。

     

您可以使用命令行传递更多信息:

     

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

它甚至会处理provisioning profiles for nested applications(例如,如果你有watchkit应用程序)

答案 7 :(得分:1)

试试这个应用 http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/

它应该可以帮助您重新签名IPA文件。我自己尝试过,但无法通过Entitlements.plist传递错误。可能只是我的项目的问题。你应该试一试。

答案 8 :(得分:0)

我一直在使用 https://github.com/xndrs/XReSign 并且效果很好。

答案 9 :(得分:-2)

您应该尝试this new OSX app : AirSign

这将帮助您重新签署您的IPA并直接与您的Beta版测试人员分享。 如果您选择手动重新签名,尤其是修改应用程序的Bundle ID时,您应该特别注意应用程序的权利 (在某些情况下,它可能很复杂......)。

此致

罗曼