"Ipa build" pasa de la línea de command pero falla en Jenkins (aplicación Shenzhen Xcode iOS)

Estoy construyendo MyApp.ipa desde MyApp.xcodeproj a través de la línea commad y la construcción es exitosa. Estoy usando la joya ruby ​​de Shenzhen para build la aplicación desde la línea de command. Sin embargo, la construcción falla en Jenkins con los siguientes errores:

*** error: Couldn't codesign /Users/administrator/Library/Developer/Xcode/DerivedData///////MyApp.app/Frameworks/libswiftCore.dylib: codesign failed with exit code 1 Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-stdlib-tool failed with exit code 1 ** ARCHIVE FAILED ** 

Los siguientes commands de compilation fallaron:

 CopySwiftLibs /Users/administrator/Library/Developer/Xcode/DerivedData///////MyApp.app 

Sospecho que el error está relacionado con la firma del proyecto. Actualmente lo estoy firmando a través de la command-line con XSigning y se genera con éxito desde la command-line en la máquina local MacOS. Sin embargo, cuando ejecuto exactamente los mismos commands a través de Jenkins, falla.

Por favor ayuda.

Suponiendo que su compilation Jenkins se ejecute en la misma máquina que probó a través de la línea de command:

codesign requiere que los Perfiles de aprovisionamiento firmen el IPA. De forma pnetworkingeterminada, se encuentran aquí ~/Library/MobileDevice/Provisioning Profiles .

Como puede ver, ~ es el directory de inicio del usuario, es decir /Users/user_name_here/ . Los permissions pnetworkingeterminados en ese directory generalmente solo permiten el acceso a ese usuario solamente.

Jenkins ejecuta por defecto como usuario de Jenkins. jenkins asegurarse de que su usuario de jenkins tenga acceso al directory donde se encuentran los perfiles de aprovisionamiento. O bien, mueva los perfiles de aprovisionamiento a otra location a la que tenga acceso el usuario jenkins , y modifique su herramienta de compilation para searchlos allí.

Si su nodo maestro / esclavo Jenkins no está en la misma máquina Mac que probó con la línea de command, tendrá que copyr manualmente también los files de aprovisionamiento en esa máquina

La mejor manera de resolver esto: Mueva los certs / keys con los que intenta firmar desde "inicio de session" a "Sistema" en Acceso a llavero. No necesitará seguir desbloqueando el llavero.

Sospecho que hay algún problema con su $path u otra variable de entorno (que es un problema común, parecido al tuyo).

Jenkins ejecuta sus trabajos en un entorno "limpio" (sin ninguna variable de entorno).