Xcode 6.1错误,同时build立IPA

今天刚刚升级到Xcode 6.1,并猜测:现在我无法使用TestFlight桌面应用程序提交构build。 这是应用程序开始构buildIPA时遇到的错误:

错误

错误:/ usr / bin / codesign –force –preserve-metadata =标识符,授权,资源规则 – 签名854059d45eed724593debef577a562e1ba96ab55 –resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tmp /QYFSJIvu7W/Payload/XX.app失败,错误1。输出:警告:使用–preserve-metadata选项“resource-rules”(在Mac OS X中不推荐使用)= 10.10)! 警告: – 在Mac OS X> = 10.10中不推荐使用资源规则! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist:无法读取资源

“支持文章”不知道发生了什么事情。

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

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

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

我希望我知道为什么它的工作原理,但是这里有一个解决scheme适用于我:

find修复!

点击您的项目>目标>select您的目标>构build设置>

Code Signing Resource Rules Path

并添加:

$(SDKROOT)/ResourceRules.plist

下面的PackageApplications的补丁修复了我的错误,我删除了资源规则,因为它说10.10已经不推荐使用了。

Testflight没有它就可以构build工作。 Appstore也build立。

 /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}); 

我通过电子邮件发送TestFlight支持并获得了以下回复:

我们的团队目前正在使用TestFlight桌面应用程序调查此问题。 同时,请使用Xcode创buildIPA文件,然后使用桌面应用程序或TestFlight网站上传。

build议的解决方法确实奏效。

Tim Gostony的答案自Xcode 7发布以来不再有效。现在,当存在资源规则时,App Store提交过程失败。 解决scheme是清除您的代码签名资源规则path,并用xcodebuild工具replacexcrun:

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

用于导出ad-hoc分发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> 

还有其他的select可用于这个plist文件有关位码,应用程序稀疏等。这就是为什么我认为xcodebuild工具是iOS 9及以上版本导出ipa文件的正确工具。

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

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

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

Alistra的答案适用于我,但我不想更改不属于我的脚本(未来的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}); 

我想从弗拉基米尔格里戈罗夫的答案是最好的,如果你有一个档案使用:

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

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

我find的解决scheme是在使用PackageApplication之前调用自己的PackageApplication并要求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>" 

不要忘记embedded.mobileprovision文件使用cp签名。

正如另一个答案中所指定的,您也可以不指定分发证书进行签名,它将正确打包。 TestFlight将需要更新他们的应用程序来做到这一点。