2011-03-01 135 views
86

在使用不同的配置文件生成IPA之后,如何使用配置文件签署.ipa文件?我想用临时供应配置文件签署IPA进行beta测试,然后使用应用商店的应用提交供应配置文件重新签署确切的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}" 
+0

[重新签署IPA(iPhone)](http:// stackoverflo w.com/questions/6896029/re-sign-ipa-iphone) – grez 2016-05-11 22:20:18

回答

32

检查iResign如何做到这一点的简单工具!

[编辑]一些欺骗之后,我发现了一个解决钥匙串感知调整大小。你可以在https://gist.github.com/Weptun/5406993

+1

这对我有用。 – zekel 2013-01-07 12:47:25

+0

是否有任何工具可以在退出时更改显示名称以及软件包ID?这将有助于为不同的环境显示不同的名称。像App-Dev,App-QA,App-Stage等。 – Whizkid747 2013-04-15 16:10:23

+1

是的,floatsign.sh就是这样做的。 – LordT 2013-04-18 21:24:13

168

查看它在命令行中很容易做到。我有一个脚本要做到这一点。现在它已被合并到我每天使用的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老问题

+21

7个投票,而不是一个单一的问题。我想我的bash就是那么清楚。 – 2013-02-05 20:35:15

+4

事实上,这是一位先生。 – Peres 2013-03-07 14:12:32

+0

即时通讯错误消息说:“安全:无法打开”/var/folders/74/kpcwmb6j1pn92kr8mtvm2mwh0000gn/T/./resign.I9DrKi7B/Payload/AtlantaJournal.app/embedded.mobileprovision“阅读:没有这样的文件或目录” 。 – 2013-03-14 06:00:34

12

类,但与最新的XCode,codesign很简单:

$ codesign -s my_certificate example.ipa 

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

尝试过,但没有工作:“无效的参数” – dwery 2015-03-18 23:03:03

+0

真的,不起作用 – Pavel 2015-05-20 14:26:06

+2

@Pavel当iOS 6.x是最新版本时,回答此问题。从那以后,我们有两个主要版本,这显然改变了很多事情。您可能希望将搜索限制为针对当前技术的答案。 – BryanH 2015-06-01 16:16:55

-1

您应该尝试this new OSX app : AirSign

这将帮助您辞职您的IPA并直接与您的Beta测试人员无线共享。 如果您选择手动重新签名,尤其是如果您修改应用程序的Bundle ID,则应真正关注应用程序的权利 (在某些情况下,它可能会很复杂......)。

问候,

罗曼

4
  1. 解压用的.zip
  2. 去改变它的扩展有效载荷的.ipa文件。你会发现.app文件
  3. 右键单击.app文件,然后单击显示包内容
  4. 删除_CodeSigned文件夹
  5. 新规定轮廓
  6. 去替换embedded.mobileprovisin文件钥匙串访问,并确保与临时文件相关联的证书是目前
  7. 执行下面的命令中提到: 在/ usr/bin中/协同设计-f -s“iPhone分布:证书名称” --resource规则“有效载荷/ Application.app/ResourceRules.plist“”Payload/Application.app“

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

希望这有帮助。

仅供参考请遵循以下提到的链接: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/

-1

如何产生在Xcode新的IPA文件?

  • 选择Xcode-> Preferences-> Accounts-> View Details...并下载最新的设置配置文件。
  • 然后选择Window-> Organizer挑选您的存档并重新导出。
1

FASTLANE的sigh提供投资促进机构辞职了相当强大的解决方案。

从他们的自述:

辞职

如果您生成ipa文件,但要应用不同的代码签名到IPA文件,你可以使用sigh resign

fastlane sigh resign

sigh会为您找到ipa文件和供应配置文件,如果它们位于当前的fo lder连续。

你可以通过使用命令行的更多信息:

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

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

2

我已经更新Bryan的代码我的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 

# 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 
+0

我git以下错误entitlements.plist:无法识别的blob类型(盲目接受) entitlements.plist:无效的权利blob中的长度 – 2017-12-10 15:05:20

+0

您能分享您的权利文件内容吗? – 2017-12-11 17:09:30

+0

工作就像一个魅力! – 2018-01-10 22:32:32