今天刚升级到Xcode 6.1,猜猜:现在我在使用TestFlight桌面应用程序提交构建时遇到了麻烦。这是我在应用程序开始构建IPA时遇到的错误:
错误:/ usr / bin / codesign --force --preserved-metadata = identifier,entitlements,resource-rules --sign 854059d45eed724593debef577a562e1ba96ab55 --resource规则= / TMP / QYFSJIvu7W /有效载荷/ XX.app / ResourceRules.plist /tmp/QYFSJIvu7W/Payload/XX.app失败,错误1.输出: 警告:使用带有“resource-rules”选项的--preserve-metadata (在Mac OS X中弃用> = 10.10)!警告:--resource-rules已经 在Mac OS X中弃用> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist:无法读取 资源
“支持文章”不知道发生了什么。
它似乎不是TestFlight问题,因为使用xcrun或类似工具在Jenkins等CI环境中也会发生同样的事情。
该应用程序几个月没有更新,所以我知道我不应该期待任何更新来解决这个问题。它过去对我和我的客户来说非常好用,所以我并不是真的热衷于放弃其他东西。
关于此错误的内容以及如何解决此问题的任何想法都将非常感激。
答案 0 :(得分:312)
我希望我知道为什么它有效,但here's a fix对我有用:
找到修复程序!
点击您的项目>目标>选择目标>构建设置 >
Code Signing Resource Rules Path
并添加:
$(SDKROOT)/ResourceRules.plist
答案 1 :(得分:60)
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});
答案 2 :(得分:10)
我通过电子邮件发送了TestFlight支持并获得了此回复:
我们的团队目前正在使用TestFlight桌面应用调查此问题。在此期间,请使用Xcode创建IPA文件,然后使用桌面应用程序或TestFlight网站上传。
建议的解决方法确实有效。
答案 3 :(得分:10)
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>
此plist文件还有其他选项可用于bitcode,app thinning等。这就是为什么我认为xcodebuild工具是导出iOS 9及更高版本的ipa文件的正确工具。
xcodebuild -help命令提供了有关选项plist的更多详细信息。
答案 4 :(得分:2)
在Yosemite w / XCode 6.4上,即使使用SDKROOT补丁,代码签名也会失败。下面的文章解释了如何修补XCode脚本以解决此问题。请注意,这是修补XCode,因此它是特定于版本的,但修复了问题。
http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts
答案 5 :(得分:1)
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]
在我的情况下,我没有存档,因为我在构建之后修改了应用程序,我需要更改Bundle ID和签名证书。
我找到的解决方案是在使用codesign
之前自己致电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>"
请勿忘记使用.mobileprovision
签名来嵌入cp
文件。
答案 6 :(得分:0)
如another answer中所述,您也可以不指定要签名的分发证书,它将正确打包。 TestFlight需要更新他们的应用程序来执行此操作。