2011-09-02 10 views
10

Aprecio que ya hay preguntas sobre este tema, pero habiendo leído las que puedo encontrar (particularmente esta: Tell AppleScript To Build XCode Project), todas parecen ser un par de años y las respuestas no parecen aplicarse a la versión actual de Xcode.Sintaxis de AppleScript para automatizar Xcode 4.1 para Limpiar, compilar y ejecutar

De forma similar a la pregunta vinculada, intento automatizar la apertura de un proyecto de Xcode, compilarlo y luego ejecutar la aplicación en el simulador de iPhone (v4.3). El proyecto en cuestión es iPhoneDriver del proyecto selenio (ver aquí para más detalles: http://code.google.com/p/selenium/wiki/IPhoneDriver)

Sobre la base de la respuesta en la otra pregunta, me han escrito el guión siguiente:

tell application "Xcode" 
    open "/Users/<username>/Documents/Code/Selenium/iphone/iWebDriver.xcodeproj" 
    tell project "iWebDriver" 
     clean 
     build 
     try 
      debug 
     end try 
    end tell 
end tell 

Por desgracia, cuando corro esta me sale el siguiente:

tell application "Xcode" 
open "/Users/ben.adderson/Documents/Code/Selenium/iphone/iWebDriver.xcodeproj" 
    --> project document "iWebDriver.xcodeproj" 
clean project "iWebDriver" 
    --> missing value 
build project "iWebDriver" 
    --> missing value 
debug project "iWebDriver" 
    --> error number -1708 
end tell 

Si me quedo sólo la orden de apertura, Xcode abre el proyecto sin ningún problema. Pero tan pronto como incluyo el resto del guión, el ícono de Xcode en el dock rebota, pero eso es todo lo que obtengo, aparte de lo anterior del Editor de AppleScript.

¿Alguien puede aconsejarme qué estoy haciendo mal? Esta es la primera vez que uso AppleScript o Xcode, así que estoy luchando por diagnosticar el problema.

He intentado buscar en el diccionario AppleScript de Xcode, pero sin ejemplos trabajados no puedo determinar la sintaxis que necesito.

¡Gracias de antemano por cualquier ayuda!

+0

Estoy un poco confundido. ¿Quieres "construir" o "ejecutar" tu proyecto? –

Respuesta

3

Si estás bien con Xcode viene al primer plano, me gustaría utilizar esto en su lugar:

tell application "Xcode" 
    activate 
    open "/Users/<username>/Documents/Code/Selenium/iphone/iWebDriver.xcodeproj" 
end tell 

tell application "System Events" 
    key code 15 using {command down} 
end tell 
12

El uso de una mezcla de AppleScript, y la herramienta de línea de comandos (xcodebuild), se me ocurrió esto:

-- This script will clean, build then run the project at the path below. 
-- You will need to slightly modify this script if you have more than one xcodeproject at this path 

set pathOfXcodeProject to "/Users/<username>/Documents/Code/Selenium/iphone/iWebDriver.xcodeproj" 
-- End of configuration 



do shell script "cd " & pathOfXcodeProject & " && /usr/bin/xcodebuild clean build " 

tell application "Xcode" 

    open pathOfXcodeProject 
    activate 
end tell 

tell application "System Events" 
    get system attribute "sysv" 
    if result is greater than or equal to 4144 then -- Mac OS X 10.3.0 
     if UI elements enabled then 
      tell application process "Xcode" 
       click menu item "Run" of menu 1 of menu bar item "Product" of menu bar 1 

      end tell 
     else 
      beep 
      display dialog "GUI Scripting is not enabled" & return & return & "Open System Preferences and check Enable Access for Assistive Devices in the Universal Access preference pane, then run this script again." with icon stop 
      if button returned of result is "OK" then 
       tell application "System Preferences" 
        activate 
        set current pane to pane "com.apple.preference.universalaccess" 
       end tell 
      end if 
     end if 
    else 
     beep 
     display dialog "This computer cannot run this script" & return & return & "The script uses GUI Scripting technology, which requires an upgrade to Mac OS X 10.3 Panther or newer." with icon caution buttons {"Quit"} default button "Quit" 
    end if 
end tell 

Quiero saber si esto funciona para usted. Lo probé contra Xcode 4.2.1 en Lion, con un proyecto de iPhone.

+0

Increíble :-). No puedo creer que esto no haya sido votado más. –

+0

¿Cómo ejecutar este script? ¿Necesitamos crear 1 shell y 1 script de Apple y luego llamar a Apple Script desde los scripts de shell? ¿Cómo se prueba con XCode 4.2.1? – Abhinav

+0

@Abhinav Simplemente copie y pegue la secuencia de comandos en el Editor de AppleScript (instalado en/Aplicaciones/Utilidades). "¿Cómo se prueba con XCode 4.2.1?" => ¿Qué quieres decir? – Guillaume

0

Aunque yo voto y aplaudo el AppleScript anterior, que es realmente bueno (y también funciona ...) siendo todo profesional, cuidando versiones antiguas, y casos extremos, etc. El guión sugerido por la pregunta debería haber funcionado en el primero lugar.

El motivo por el que no funciona es que se haya roto la capacidad de escritura de Xcode. No solo "limpiar" no funciona. La mayoría de todo lo que traté de hacer con el modelo de objetos internos de Xcode no funciona.

AppleScript architecture (OSA) requiere una aplicación para exponer un gráfico de objetos "comprensible para el ser humano" al que AppleScripts pueda hacer referencia. En Xcode puede verse como:

tell target "my library" of project "my project" of workspace "my workspace" to clean. 

o

tell application "Xcode" to close all projects whose name contains "Lib" 

secuencias de comandos de interfaz de usuario es el último recurso del lenguaje o script guionista cuando la aplicación es deficiente. Debido a que la jerarquía de la interfaz de usuario es de naturaleza estándar, y su capacidad de escritura está libre de cacao, la mayoría de las veces funciona.

Cuestiones relacionadas