Xcode 解决了这个问题:
这显然是Apple不久前忘记修复的一个bug,因为本文还强调了:该线程中接受的修复可能重复,需要能够通过gui编辑xcode项目。这个问题似乎与通过基于Jenkins的CI解决方案运行的Unity构建的xcode项目有关。这意味着xcode项目是自动生成和自动构建的,不需要手动操作xcode项目。是的,@jpelletier它是通过命令行构建的统一构建的xcode项目,我们从不手动打开项目。@PeterMetz我在我的原始帖子中引用了同一个线程,然而,正如jpelletier所指出的,这些需要手动干预才能打开项目,我们从来没有这样做过。@Tim我很抱歉,我的错!我们应该更仔细地阅读这个问题。我们实际上使用的是Unity3D,所有内容都是用C#编写的。一旦Unity构建完成,我就可以运行后处理脚本。这将在生成xcode项目之后,但在将其编译到应用程序之前发生。我可以相当轻松地将nodejs脚本更改为C#,并在Unity构建完成后启动它。我会试试看,如果行得通,就把你的答案记下来。谢谢你的剧本!谢谢你的剧本@蒂姆,你能把你的c#脚本写完后发出来吗?谢谢尼克,那太简单了,不知道我怎么没看到。工作得很好!我确信@martinmose脚本会起作用,只是在我尝试之前看到了这个。同样对于其他使用Unity的人,我有第三个选择,我打算尝试使用他们的来改变它。不幸的是,如果你使用的是Yosemite,上面的方法已经过时了。请参阅工程,但不推荐。请参阅链接了解修复方法:这在XCode 8.0上再次被破坏。有人对此有任何修复吗?您好@c0d3Junk13,如果与xcode 8集成成功,我也有类似的问题。值得一提的是,cordova需要xcode模块,所以您可能已经有了它,尽管我也不是该模块的粉丝。在您的代码中,您会看到一个错误“坏参数”。因为您将同步函数fs.appendFileSync与回调一起使用。要使用回调,请使用fs.appendFile。太棒了,谢谢!这对我很有用(编辑build.xcconfig文件)。我只需要做一个小小的修改就可以删除“$(SDKROOT)/ResourceRules.plist”中的引号。Cordova bug修复对任何人都有效吗?像@jarbot一样,我不得不删除Cordova添加到build.xcconfig文件中的行中的引号。@nick的解决方案对我们非常有效,不需要任何额外的依赖性。我不知道npm或Cordova在哪里进入了这个问题,不过……如果有人想知道,即使您使用的是Jenkins Xcode插件,这也能起作用。这给出了“警告:——资源规则在Mac OS X>=10.10中已被弃用!”Xcode 解决了这个问题:,xcode,jenkins,unity3d,xcode6.1,Xcode,Jenkins,Unity3d,Xcode6.1,这显然是Apple不久前忘记修复的一个bug,因为本文还强调了:该线程中接受的修复可能重复,需要能够通过gui编辑xcode项目。这个问题似乎与通过基于Jenkins的CI解决方案运行的Unity构建的xcode项目有关。这意味着xcode项目是自动生成和自动构建的,不需要手动操作xcode项目。是的,@jpelletier它是通过命令行构建的统一构建的xcode项目,我们从不手动打开项目。@PeterMetz我在我的原始帖子中引用了同一个线程,然而,正如jpelletier所指出的,这些需要手
#!/usr/bin/env node
var CODE_SIGN_RESOURCE_RULES_PATH = '"$(SDKROOT)/ResourceRules.plist"';
var fs = require("fs");
var path = require("path");
var xcode = require('xcode');
var projectRoot = process.argv[2];
function getProjectName(protoPath) {
var cordovaConfigPath = path.join(protoPath, 'www', 'config.xml');
var content = fs.readFileSync(cordovaConfigPath, 'utf-8');
return /<name>([\s\S]*)<\/name>/mi.exec(content)[1].trim();
}
function run(projectRoot) {
var projectName = getProjectName(projectRoot);
var xcodeProjectName = projectName + '.xcodeproj';
var xcodeProjectPath = path.join(projectRoot, 'platforms', 'ios', xcodeProjectName, 'project.pbxproj');
var xcodeProject;
if (!fs.existsSync(xcodeProjectPath)) {
return;
}
xcodeProject = xcode.project(xcodeProjectPath);
console.log('Setting Code Sign Resource Rules Path for ' + projectName + ' to: [' + CODE_SIGN_RESOURCE_RULES_PATH + '] ...');
xcodeProject.parse(function(error){
if(error){
console.log('An error occured during parsing of [' + xcodeProjectPath + ']: ' + JSON.stringify(error));
}else{
var configurations = nonComments(xcodeProject.pbxXCBuildConfigurationSection());
for (config in configurations) {
var buildSettings = configurations[config].buildSettings;
buildSettings['CODE_SIGN_RESOURCE_RULES_PATH'] = CODE_SIGN_RESOURCE_RULES_PATH;
}
fs.writeFileSync(xcodeProjectPath, xcodeProject.writeSync(), 'utf-8');
console.log('[' + xcodeProjectPath + '] now has Code Signing Resource Rules Path set to:[' + CODE_SIGN_RESOURCE_RULES_PATH + '] ...');
}
});
}
var COMMENT_KEY = /_comment$/;
function nonComments(obj) {
var keys = Object.keys(obj),
newObj = {}, i = 0;
for (i; i < keys.length; i++) {
if (!COMMENT_KEY.test(keys[i])) {
newObj[keys[i]] = obj[keys[i]];
}
}
return newObj;
}
run(projectRoot);
"CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist"
CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist
#! /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.');
});
#!/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.'
# 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");
sed -i '' 's/CONFIGURATION_BUILD_DIR/CODE_SIGN_RESOURCE_RULES_PATH = "\$(SDKROOT)\/ResourceRules\.plist";\'$'\n CONFIGURATION_BUILD_DIR/g' /Users/admin/Jenkins/workspace/PROJECTNAME/Build/PROJECTNAME/Unity-iPhone.xcodeproj/project.pbxproj