构建IPA时出现Xcode 6.1错误

问题描述:

今天刚刚升级到Xcode 6.1,并猜测:现在我在使用TestFlight桌面应用程序提交构建时遇到问题。下面是我得到的错误,而应用程序启动建设IPA:构建IPA时出现Xcode 6.1错误

The error

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules=/tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist /tmp/QYFSJIvu7W/Payload/XX.app failed with error 1. Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)! Warning: --resource-rules has been deprecated in Mac OS X >= 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: cannot read resources

的“支持文章”根本不知道是怎么回事。

它似乎不是一个TestFlight问题,因为同样的事情发生在使用xcrun或类似工具的Jenkins等CI环境中。

该应用程序未更新几个月,所以我知道我不应该期待任何更新来解决这个问题。它曾经为我和我的客户工作得很好,所以我并不热衷于放弃其他的东西。

任何有关这个错误是什么的想法,以及如何解决它将非常感激。

+4

它似乎不是一个TestFlight问题,因为同样的事情发生在使用xcrun命令的CI环境中,例如:'xcrun -sdk iphoneos PackageApplication -v -o --sign --embed '。使用Xcode 6.0.1,一切正常。 – 2014-10-22 07:09:52

我希望我知道为什么它的工作原理,但here's a fix为我工作:

Found the fix !

Click on your project > Targets > Select your target > Build Settings >

Code Signing Resource Rules Path

and add :

$(SDKROOT)/ResourceRules.plist

+7

谢谢!坦率地说,我不在乎它为什么有效:)只是苹果在过去几个月中破坏了他们的巨大连锁店的最新消息。无论如何,感谢您指出解决方案。 (对于我而言,在发布前没有彻底查找错误) – 2014-10-22 10:48:40

+10

如果您通过脚本或命令行编辑xcodeproj设置,CODE_SIGN_RESOURCE_RULES_PATH是变量名称。 https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/Getting%20Information%20on%20a%20Build%20Setting.html#//apple_ref/doc/uid/TP40010155-CH6-SW1 – roblocop 2014-10-23 23:46:13

+5

我在我的“生成设置”中看不到“代码签名资源规则路径”。任何想法? – Georg 2014-10-27 12:22:17

我通过电子邮件TestFlight支持,并得到了这样的响应:

Our team is currently investigating this issue with the TestFlight Desktop app. In the meantime, please use Xcode to create the IPA file and then upload it using the desktop app or the TestFlight website.

的建议的解决方法做了工作。

+1

它对我来说只是使用Xcode制作.ipa,并通过桌面应用上传。 – livingtech 2014-10-22 20:04:34

+0

@livingtech是的,但是我也得到了可怕的“Xcode生成一个新的配置文件,而不是选择一个我想要的”--bug :)上传与testflight直接工作出色。 – helmesjo 2014-12-18 12:49:30

another answer指定,也可以只是没有指定分发证书与签署,就会正确打包。 TestFlight需要更新他们的应用程序来执行此操作。

PackageApplications的下列补丁修复了它,我删除了资源规则,因为它声称它在10.10上不推荐使用。

Testflight在没有它的情况下构建工作。 Appstore也在构建。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin 
% diff PackageApplication PackageApplicationFixed 
155,157c155,156 
<  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", 
<       "--sign", $opt{sign}, 
<       "--resource-rules=$destApp/ResourceRules.plist"); 
--- 
>  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", 
>       "--sign", $opt{sign}); 
+0

删除了流氓来自PackageApplication的弃用参数,现在buildozer为iOS构建我的Python应用程序 – 2014-11-23 21:35:06

+0

伟大的修复!非常感谢:)上面的“代码签名资源规则路径”设置并没有解决我的问题,但这个答案确实,再加上修复程序现在全球所有项目:) – Pellet 2014-11-25 06:19:43

+0

@IanEllis:请你让我知道你是如何删除来自PackageApplication的“资源规则”参数。这将是非常有帮助的! – 2015-01-05 14:22:45

即使使用SDKROOT补丁,在优胜美地w/XCode 6.4代码签名失败。以下文章解释了如何修补XCode脚本以解决此问题。请注意,这是对XCode进行修补,因此它是版本特定的,但可以解决问题。

http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts

answer由Tim Gostony以来的Xcode 7的发布不再起作用现在,当资源规则存在的应用程序商店提交过程中失败。解决的办法是清除您的代码签名资源规则路径,并与xcodebuild联编工具替换xcrun:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file] 

用于出口临时分配的ipa文件,最简单的Options.plist看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>iCloudContainerEnvironment</key> 
    <string>Production</string> 
    <key>teamID</key> 
    <string>[YOUR TEAM ID]</string> 
    <key>method</key> 
    <string>ad-hoc</string> 
</dict> 
</plist> 

有是这个plist文件有关位码,应用程序细化等的其他选项。这就是为什么我认为xcodebuild工具是用于导出iOS 9及更高版本的ipa文件的正确工具。

有关选项plist的更多详细信息,请参阅xcodebuild -help命令。

+0

感谢弗拉基米尔,我对此感到非常困惑,因为它与Xcode 7提交的冲突如何。 – kevinl 2015-09-22 18:04:07

+0

你到底如何取代xcrun?我在Jenkins Xcode插件中看不到任何设置:( – Hlung 2015-09-24 04:31:11

+0

@Hlung:我不使用Jenkins Xcode插件 – 2015-09-24 08:38:03

来自Alistra的answer为我工作,但我不想更改不是我的脚本(未来的Xcode版本可能会更改此文件,更正将会丢失)。

diff PackageApplication PackageApplicationFixed 155,157c155,156 
<-  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", 
<-       "--sign", $opt{sign}, 
<-       "--resource-rules=$destApp/ResourceRules.plist"); 
--- 
->  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", 
->       "--sign", $opt{sign}); 

我认为answer弗拉基米尔格里戈罗夫是最好的,如果你使用有存档:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file] 

在我的情况,我没有存档,因为我之后修改应用程序构建它我需要更改捆绑ID和签名证书。

我找到的解决方案是在使用PackageApplication之前自己拨打codesign,并要求PackageApplication不要签名。就像这样:

replace : 

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>" 

by : 

/bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision" 
/usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>" 
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" 

不要忘记使用与cp登录嵌入.mobileprovision文件。