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将需要更新他们的应用程序来做到这一点。