workspace - google - https tag manager
Xcodebuild''ing un espacio de trabajo y establecer una ruta de compilaciĆ³n personalizada (3)
Estoy tratando de usar xcodebuild
para construir un proyecto multiproyecto en un área de trabajo. Cuando XCode crea un espacio de trabajo, coloca automáticamente todos los artefactos de compilación en un directorio común en DerivedData para que cada proyecto pueda acceder a las dependencias.
Si utilizo este comando:
xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release
Todo funciona, pero los artefactos se colocan en el directorio de datos derivados habituales. Luego quiero aparecer en un directorio específico al que puedo acceder desde las compilaciones de CI. Así que intenté esto
xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release SYMROOT=build/products OBJROOT=build/intermediates
Sin embargo xcodebuild falla con este dicho
Details: Failed to load dependencies output contents from ``/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d''''.
Error: Error Domain=NSCocoaErrorDomain Code=260 "The file “DNRootSelector.d” couldn’t be opened because there is no such file."
UserInfo=0x4012fea40 {NSFilePath=/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d, NSUnderlyingError=0x4012fc240 "The operation couldn’t be completed. No such file or directory"}.
User info: {
NSFilePath = "/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d";
NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 /"The operation couldn/U2019t be completed. No such file or directory/"";
}
El problema parece ser que xcodebuild ya no usa un directorio central para todos los proyectos en el área de trabajo y en su lugar está almacenando los artefactos en cada proyecto. Por lo tanto, no puede ubicar las dependencias entre el código que se compila y los artefactos producidos en otros proyectos.
¿Alguien sabe el parámetro correcto para establecer en la línea de comandos?
La referencia de configuración de compilación de Xcode no se ha actualizado durante dos años, por lo que no sé si hay nuevas configuraciones de compilación que pueda aplicar.
La mejor solución que he encontrado hasta ahora es usar el parámetro CONFIGURATION_BUILD_DIR
con una ruta ABSOLUTE (por ejemplo, / tmp / $ PROJECT / build). Me gusta esto:
xcodebuild -scheme "scheme" -configuration Debug -sdk iphoneos clean build CONFIGURATION_BUILD_DIR=$ABSOLUTE_BUILD_PATH
Uso Jenkins y ahí tengo una variable llamada $WORKSPACE
. Con $WORKSPACE/build
como mi CONFIGURATION_BUILD_DIR
Tengo una solución con la que estoy contento.
Los caminos relativos no parecen funcionar como se esperaba. Debemos presentar un informe de error.
No estoy seguro de si esta es una nueva opción, pero la versión 5.0 de xcodebuild
tiene una opción -derivedDataPath
que le permite especificar el directorio en el que desea que se sientan todos los productos de compilación.
Por ejemplo, pasar la -derivedDataPath build
crea la -derivedDataPath build
la carpeta en relación con el lugar desde donde ejecutó xcodebuild
, y puede encontrar su aplicación de manera predecible en una subcarpeta como build/Build/Products/Release-iphoneos
.
Documentación: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html
También encontré este problema cuando construí mi proyecto desde la herramienta Jenkins CI. Mi proyecto principal depende de un subproyecto. He intentado construir la solución de @ Chilloutman como esta:
xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build BUILD_DIR =/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
o
xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
Ambos ocurren errores. Could not find iphoneos in /Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
Pero finalmente tengo éxito usando esto:
xcodebuild -target TravelGuideMdd -sdk iphoneos6.1 -configuration DailyBuild clean build SYMROOT=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build
Es decir: configurar el SYMROOT con una ruta absoluta.