2009-10-03 22 views
10

Estoy tratando de construir un proyecto xcode y ejecutarlo a través del simulador de iPhone a través de applescript. Soy consciente de xcodebuild pero no le permite ejecutar la aplicación en el simulador. He llegado muy cerca con el guión a continuación ...Construir y ejecutar un proyecto xcode a través de AppleScript

tell application "Xcode" 
    set targetProject to project of active project document 

    tell targetProject 
    set active build configuration type to build configuration type "Debug" 
    set active SDK to "iphonesimulator3.0" 
    end tell 

    if (build targetProject) is equal to "Build succeeded" then 
    launch targetProject 
    end if 
end tell 

... pero no parece que el comando de generación de obedecer la propiedad activa SDK, siempre por defecto entorno SDK de base del proyecto (como el iPhoneOS3.0 en lugar de iPhonesimulator3.0)

¿Hay alguna forma de decirle al comando de compilación que use un SDK específico? Estoy usando xcode 3.2 en leopardo de las nieves.

+0

Puede mencionar qué versión de Xcode está utilizando. No tuve problemas para configurar el SDK activo a través de AppleScript en Xcode 3.2. –

+0

También estoy usando xcode 3.2, pero no funciona (a menos que establezca iphonesimulator3.1 para ser el SDK base dentro de xcode) – probablyCorey

+0

Parece que estos tipos de AppleScripts ya no funcionan con Xcode 4. – ThomasW

Respuesta

12

Aquí está el truco ... tienes que establecer la configuración de compilación SDKROOT. Aquí hay un script zsh que uso para encontrar el proyecto xcode dentro de la jerarquía actual, compilarlo y ejecutarlo a través de xcode.

#!/bin/zsh 

BUILD_PATH=$(dirname $0) 

while [[ -z $BUILD_FILE && $BUILD_PATH != "/" ]]; do 
    BUILD_FILE=$(find $BUILD_PATH -name '*.xcodeproj' -maxdepth 1) 
    BUILD_PATH=$(dirname $BUILD_PATH) 
done 

if [[ -z $BUILD_FILE ]]; then 
    echo "Couldn't find an xcode project file in directory" 
    exit 1 
fi 

# Applescript likes's : instead of/(because it's insane) 
BUILD_FILE=${BUILD_FILE//\//:} 

# Find the latest Simulator SDK 
SIMULATOR_SDKS=(/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/*.sdk) 

SIMULATOR_SDK=${SIMULATOR_SDKS[-1]} 
SIMULATOR_SDK_STRING=$(basename ${(L)SIMULATOR_SDK%.[a-z]*}) 

if [[ -z $SIMULATOR_SDK ]]; then 
    echo "Couldn't find a simulator SDK" 
    exit 1 
fi 


osascript <<SCRIPT 
application "iPhone Simulator" quit 
application "iPhone Simulator" activate 

tell application "Xcode" 
    open "$BUILD_FILE" 
    set targetProject to project of active project document 

    tell targetProject 
     set active build configuration type to build configuration type "Debug" 
     set active SDK to "$SIMULATOR_SDK_STRING" 
     set value of build setting "SDKROOT" of build configuration "Debug" of active target to "$SIMULATOR_SDK" 

     if (build targetProject) is equal to "Build succeeded" then 
      launch targetProject 
     else 
      application "iPhone Simulator" quit 
     end if 
    end tell 
end tell 
SCRIPT 
+0

Yo te votaría más si pudiera por el comentario "insano". – rein

+0

No es una locura, es solo cómo se especificaron las rutas en el Mac OS original (de donde se origina AppleScript). Tenga en cuenta que, frente a Unix, las rutas relativas se especifican _con_ dos puntos (caminos absolutos sin uno) y las rutas principales se especifican mediante un segmento vacío (_e.g._, ":: src" == "../src") – fraveydank

1

Si el comando set active SDK no funciona como se esperaba, una solución alternativa sería crear otra configuración de compilación denominada "Debug-Simulator" (en Xcode en la configuración del proyecto) y establecer el SDK base en la nueva configuración en iphonesimulator3 .0. Esto le permitiría seleccionar el SDK seleccionando la configuración de compilación (si eso funciona en AppleScript).

3

Otra opción a considerar es usar Applescript para iniciar un script de shell que ejecuta el programa xcodebuild. xcodebuild le permite especificar cosas como un objetivo específico, configuración, sdk, etc. Lo uso todo el tiempo cuando tengo que SSH en un servidor de compilación y reconstruir un proyecto.

+0

Lo he hecho eso, pero no resuelve el problema de ejecutar la aplicación en el simulador de iPhone. Parece que solo xcode es capaz de hacer eso. – probablyCorey

2

El proyecto iphonesim le da un lanzador de línea de comandos para el simulador de iPhone.

Cuestiones relacionadas