xcode jenkins unity3d xcode6.1

¿Cómo solucionamos manualmente el error "ResourceRules.plist: no se puede leer los recursos" después de la actualización de xcode 6.1?



jenkins unity3d (6)

Estamos teniendo el mismo problema here , here , here y here

Básicamente, hemos actualizado a xcode 6.1 y nuestra compilación está obteniendo el error "ResourceRules.plist: no se puede leer recursos".

Tenemos un servidor Jenkins que hace nuestras compilaciones ios para nosotros. Estamos utilizando el complemento de Xcode en Jenkins para hacer la compilación y la firma reales. Cualquier idea sobre cómo podemos hacer este cambio sin abrir manualmente xcode y hacer esta solución que se encuentra en las otras respuestas:

Haga clic en su proyecto> Objetivos> Seleccione su destino> Configuraciones de compilación>

Ruta de Reglas de Recursos de Firma de Código

y añadir :

$ (SDKROOT) /ResourceRules.plist

Soy nuevo en Xcode e iOS en general. Encontré el archivo project.pbxproj dentro del archivo Unity-iPhone.xcodeproj. Parece que contiene la configuración de compilación en la sección / * Begin XCBuildConfiguration * / section que enumera las propiedades de compilación similares encontradas en Xcode, pero no veo nada como "Ruta de reglas de recursos de firma de código".

¿Alguien tiene experiencia editando manualmente este archivo? ¿Es eso una mala idea en general?

Gracias


Después de la nueva versión de XCode 7 el 23 de septiembre de 2015, Apple comenzó a rechazar cualquier aplicación que esté usando CODE_SIGN_RESOURCE_RULES_PATH , haciendo que la compilación de Jenkins se rechace automáticamente. Sin embargo, establecer CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist en los argumentos Custom xcodebuild causa un error de compilación.

Esta respuesta resolvió el problema: https://.com/a/32762413/5373468

Esto es claramente un error que Apple olvidó corregir hace un tiempo, ya que este artículo también destaca: http://cutting.io/posts/packaging-ios-apps-from-the-command-line/


EXACTAMENTE tuve el mismo problema, como tú. Estamos construyendo nuestra aplicación de iOS en Jenkins, por lo que no pudimos establecer manualmente la "Ruta de reglas de recursos de firma de código".

He escrito un pequeño archivo NodeJS que hace el trabajo por mí (ver el código a continuación) .

El script utiliza un buen paquete NodeJS llamado xcode que me ayuda con el análisis del archivo xcode.xcodeproj.

No sé si está usando Cordova / Phonegap o lo que está usando, pero si lo está puede copiar el código y crear un enlace de Cordova. Si no, estoy seguro de que puedes ejecutar el archivo desde Jenkins, con algunos pequeños cambios.

De todos modos, espero que este script te ayude:

#!/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);


Estamos usando Unity + Jenkins para construcciones automáticas.

Puede lograr con scripts post-cs; sin embargo; para una solución rápida (y sucia) puedes aplicar el siguiente comando bash después de Unity pero antes de xcode:

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


Me encontré con el mismo problema. La solución Nicks funciona, pero requiere dependencias adicionales. No necesita el módulo npm xcode para esto. Simplemente agregue una línea a este archivo: $ PROJECT_ROOT / platforms / ios / cordova / build.xcconfig

CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist

Tenga en cuenta que antes de XCode 6.1.1, esto debe especificarse como "$(SDKROOT)/ResourceRules.plist" (observe las comillas).

Si está ejecutando esto dentro de sistemas automatizados de compilación como Jenkins y no quiere / no puede usar ninguna GUI de XCode, simplemente cree un pequeño enlace de Cordova, aprovechando fs.appendFile de fs.appendFile , en esta ubicación: $ PROJECT_ROOT / hooks / before_build / ios_resourcerules .js (asegúrese de que tenga 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.''); });

Esto podría fusionarse en una próxima versión de Cordova, por lo que el gancho se volverá innecesario ( estoy creando un ver este PR para Cordova-iOS ).

En caso de que el fragmento JavaScript anterior no se ejecute debido a un error de "argumento incorrecto", reemplace el contenido del archivo de la siguiente manera:

#!/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.''


Si quieres volverte loco, puedes actualizar directamente 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");

Ya estaba pirateando este script para aceptar un arg de llavero, por lo que tenía sentido para mí. Tenga en cuenta que no estoy usando el plugin Xcode Jenkins. Estoy usando Jenkins pero ejecuto todos los comandos de compilación desde un script.


Si está utilizando Jenkins con el complemento XCode, puede modificar la variable ''Code Signing Resource Rules Path'' agregando:

"CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist"

al

''Custom xcodebuild arguments'' para el complemento XCode.

Esta solución no requiere la GUI de XCode.