2012-07-17 9 views
8

Estoy tratando de simplificar el proceso de compilación-> archivar-> enviar para la publicación de aplicaciones iOS. Tenemos más de 50 aplicaciones móviles que tienen un marco casi idéntico, pero con diferentes ilustraciones y configuraciones.Lote Creación y archivo de aplicaciones de iOS a través de la Terminal

Normalmente cargaría cada proyecto en xcode 4.2 y compilar-> archivar-> enviar de la manera habitual con la GUI de xcode, pero ahora tenemos más de 50 aplicaciones y este proceso es muy tedioso cada vez que sacamos una actualización .

Dicho esto, estoy tratando de acelerar este proceso con el uso de una función de shell. Hice un montón de investigación y encontró que xcodebuild (Véase la respuesta de Reid) debería funcionar, sin embargo la opción Archivo no está funcionando como me sale el siguiente error:

unsupported build action 'archive' 

así que escribí lo siguiente:

# $1 should be a date like: 2012-07-17 
# $2 should be a time like: 10.31AM 
# $mybase will be the current directory at the time the function was called 
# so make sure to cd into the folder containing the xcode project folders first 

function xcodeArchive { 
    mkdir ~/Library/Developer/Xcode/Archives/$1 
    mybase=$PWD 
    for x in `ls` 
    do 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications 
     cd $mybase/$x 
     xcodebuild 
     #read -p "Press [Enter] to continue" 
     cd $mybase/$x 
     cp $x/$x-Info.plist ~/Library/Developer/Xcode/Archives/$1/$x/Info.plist 
     cp -r build/Release-iphoneos/$x.app.dSYM ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs/$x.app.dSYM 
     cp -r build/Release-iphoneos/$x.app ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications/$x.app 
     cd ~/Library/Developer/Xcode/Archives/$1/ 
     mv $x $x\ $1\ $2.xcarchive 
     cd $mybase 
    done 
} 
export -f xcodeArchive 

Puse esto en mi .bash_profile y todo funciona correctamente como era de esperar, excepto que no estoy copiando el "Info.plist" correcto y no puedo averiguar dónde copiarlo o cómo generarlo. Así que ahora estoy atascado.

Xcode reconocerá los archivos, pero los enumera en "Esquema desconocido" y "Archivo sin nombre" en el organizador.

Cualquier ayuda con respecto a ahora para obtener la Info.plist correcta es muy apreciada.

También doy la bienvenida a recomendaciones sobre cómo mejorar el script y/o una forma más eficiente de construir por lotes + archivar estas aplicaciones de iOS.

Nota:

  • Soy incapaz de mejorar más allá de Xcode 4.2 como que requiere (como yo lo entiendo) OS X 10.7 o versiones posteriores, que no soy capaz de obtener todavía (ordenador de la empresa) .

  • Todavía soy un principiante bash/shell, así que me disculpo por cualquier código/práctica feo anterior.

  • Además, esto es para el envío de aplicaciones oficiales, no para ad-hoc ni nada de eso.

Gracias de nuevo por su ayuda.

Respuesta

1

OK Encontré una solución que funcionará. Después de hacer muchas más búsquedas y muchas suposiciones y comprobaciones, descubrí que aún puedo usar la opción "archivar" con xcodebuild, solo tengo que especificar un espacio de trabajo y un esquema, y ​​aparentemente no estaba haciendo eso correctamente como ahora. trabajos.

Por lo tanto, para aquellos que buscan una solución similar (a los proyectos de Xcode archivo por lotes), aquí está mi función:

# $mybase will be the current directory at the time the function was called 
# so make sure to cd into the folder containing the xcode project folders first 

function xcodeArchive { 
    mybase=$PWD 
    for x in `ls` 
    do 
     cd $mybase/$x 
     xcodebuild -workspace $x.xcodeproj/project.xcworkspace -scheme $x archive 
     cd $mybase 
    done 
} 
export -f xcodeArchive 
13

tuve el mismo problema con el comando archive, y hallaron a esta pregunta a través de Google.Sería un error con este comando de construcción:

xcodebuild -verbose -project $ProductName.xcodeproj -target $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

Sin embargo, sería tener éxito con este comando de construcción:

xcodebuild -verbose -project $ProductName.xcodeproj -scheme $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

La única diferencia es especificar el esquema en lugar del objetivo de construir. Si hay una razón sensata para este comportamiento, me gustaría escucharlo.

estoy corriendo XCode 4.5.1 en Mac OS X 10.7.5

+1

De hecho, esa fue mi hallazgo también. Todavía no he encontrado una explicación para esto, pero mi suposición es que es solo cómo se diseñó para ejecutar ese programa, lo que requiere un esquema ... pero eso no explica por qué el mensaje de error devuelto es tan vago ... – mason81

+1

@ mason81 Sin embargo, lo que es espicialmente confuso a medida que avanzas por el camino, es que el comando superior (el error) funciona bien si simplemente estás compilando, no intentando archivar esa construcción para el envío a la tienda. – Tal

+1

oh, de hecho es confuso (y curiosamente interesante). No lo había intentado para fines no archivados, pero solo lo probé y tienes razón, funcionó bien ... ¡Qué extraño! – mason81

Cuestiones relacionadas