115

在使用不同的配置文件生成如下 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}"
4

9 回答 9

211

从命令行很容易做到。我有一个这样做的脚本的要点。它现在已被合并到我每天使用的https://github.com/RichardBrnosky/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

于 2012-06-05T22:25:05.590 回答
37

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

[编辑] 经过一番折腾,我找到了钥匙串感知辞职的解决方案。您可以在https://gist.github.com/Weptun/5406993查看

于 2012-01-02T13:40:17.010 回答
15

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

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
于 2013-05-07T19:15:17.347 回答
14

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

这对我有用(假设当前目录中存在一个 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/
于 2018-05-17T13:16:55.277 回答
13

Fastlane 的叹息为辞去 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"

它甚至可以处理嵌套应用程序的配置文件(例如,如果您有 watchkit 应用程序)

于 2017-08-28T18:00:02.700 回答
8

我已经为我的 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
于 2017-10-11T08:05:07.397 回答
6
  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. 现在再次压缩 Payload 文件夹并将 .zip 扩展名更改为 .ipa

希望这有帮助。

参考下面提到的链接: http ://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/

于 2015-09-11T08:01:31.570 回答
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 传递错误。可能只是我的项目的问题。你应该试一试。

于 2011-04-25T15:15:44.023 回答
0

我一直在使用https://github.com/xndrs/XReSign,它运行得非常好。

于 2021-04-12T07:45:15.467 回答