在xcode 6.1升级后,我们如何手动修复"ResourceRules.plist:无法读取资源"错误?

Tim*_*Tim 50 xcode unity-game-engine jenkins xcode6.1

我们在这里,这里,这里这里都遇到了同样的问题

基本上我们升级到xcode 6.1,我们的构建正在获取"ResourceRules.plist:无法读取资源"错误.

我们有一台Jenkins服务器为我们提供ios版本.我们使用Jenkins上的Xcode插件进行实际构建和签名.有关如何在不手动打开xcode的情况下进行此更改以及在其他答案中找到此解决方案的任何想法:

单击您的项目>目标>选择目标>构建设置>

代码签名资源规则路径

并添加:

$(SDKROOT)/ResourceRules.plist

我对Xcode和iOS构建起来很新.我在Unity-iPhone.xcodeproj文件中找到了project.pbxproj文件.它看起来像包含/*Begin XCBuildConfiguration部分*/部分下的构建设置,它列出了在Xcode中找到的类似构建属性,但是我没有看到类似"代码签名资源规则路径"的内容.

有没有人有手动编辑这个文件的经验?总的来说这是个坏主意吗?

谢谢

小智 66

如果您将Jenkins与XCode插件一起使用,则可以'Code Signing Resource Rules Path'通过添加以下内容来修改变量:

"CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist" 
Run Code Online (Sandbox Code Playgroud)

到了

'Custom xcodebuild arguments' 设置XCode插件.

此修复程序不需要XCode GUI.

  • 不幸的是,如果您使用Yosemite,上述内容已经过时.请参阅http://stackoverflow.com/questions/26497863/xcode-6-1-error-while-building-ipa/26674605#26674605 (3认同)

sid*_*eys 13

我遇到了同样的问题.Nicks解决方案确实有效,但需要额外的依赖性.你不需要那个笨重的npm xcode模块.只需在此文件中添加一行: $ PROJECT_ROOT/platforms/ios/cordova/build.xcconfig

CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist
Run Code Online (Sandbox Code Playgroud)

请注意,在XCode 6.1.1之前,需要将其指定为"$(SDKROOT)/ResourceRules.plist"(注意引号).

如果你在Jenkins之类的自动构建系统中运行它并且不能/不能使用任何XCode GUI,只需在这个位置创建一个小的Cordova钩子,利用npm的fs.appendFile: $ PROJECT_ROOT/hooks/before_build/ios_resourcerules .js(确保它有chmod + x)

#! /usr/local/bin/node
var fs = require("fs");

fs.appendFileSync('build.xcconfig', '\nCODE_SIGN_RESOURCE_RULES_PATH =  $(SDKROOT)/ResourceRules.plist', function (err) {
 if (err) throw err;
  console.log('CODE_SIGN_RESOURCE_RULES_PATH added to Cordova iOS build configuration.');
});
Run Code Online (Sandbox Code Playgroud)

可能会在即将发布的Cordova版本中合并,因此钩子将变得不必要(我正在为Cordova-iOS 创建一个看到这个PR).

如果上述JavaScript代码段因"错误参数"失败而无法执行,请按如下方式替换文件内容:

#!/bin/bash

if [ ! -f ./build.xcconfig ]; then
  echo "[ERROR] hook befor_build/ios_resourcerules.sh cannot execute, ./build/xcconfig not found in $PWD"
  exit 1
fi

echo '// (CB-7872) Solution for XCode 6.1 signing errors related to resource envelope format deprecation' >> ./build.xcconfig
echo 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' >> ./build.xcconfig
echo 'CODE_SIGN_RESOURCE_RULES_PATH added to Cordova iOS build configuration.'
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,谢谢你!这对我有用(编辑build.xcconfig文件).我只需要做一个小改动,删除"$(SDKROOT)/ResourceRules.plist"中的引号 (2认同)

Ben*_*ynn 5

如果你想变得非常疯狂,可以直接更新PackageApplication.

# In /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
                     "--sign", $opt{sign},
                     "--resource-rules=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/ResourceRules.plist");
# OLD:               "--resource-rules=$destApp/ResourceRules.plist");
Run Code Online (Sandbox Code Playgroud)

我已经习惯了这个脚本来接受一个钥匙串arg,所以这对我来说很有意义.注意我没有使用Xcode Jenkins插件 - 我正在使用Jenkins但是从脚本运行所有构建命令.