2010-04-22 8 views
30

Attualmente sto lavorando su un modo per automatizzare il processo di aggiunta di nuovi target ai miei progetti XCode. È necessario aggiungere un obiettivo a più progetti XCode e ogni destinazione nel diverso progetto richiede gli stessi file di origine da aggiungere, gli stessi gruppi per archiviare i file di origine nel progetto XCode e le stesse impostazioni di compilazione. L'operazione manuale può richiedere un po 'di tempo ed è molto soggetta a errori umani e devo svolgere questa attività abbastanza spesso. Ho già scritto uno script per generare nuovi file sorgente, copiarli in cartelle di sistema, modificare file sorgente con nuove informazioni, ecc, ma ora ho bisogno di automatizzare la parte XCode.Come automatizzare la creazione di nuovi target XCode da Applescript/Automator/Shell Script

Questo riassume quello che io voglio che il mio automazione per ottenere:

Aprire un progetto XCode a /this/path/project.xcodeproj

Duplicare un target esistente e rinominarlo

Modifica Build impostazioni del nuovo obiettivo

Aggiungi un gruppo per la sezione origine e delle Risorse, poi rinominarli

Add fonte f Iles a gruppi, e aggiungere il file alla nuova destinazione

Chiudi XCode

Idealmente voglio questo per eseguire dal mio script Bourne Shell, so che è possibile avviare i flussi di lavoro di Automator da lì. Non sono sicuro di quale sia l'approccio migliore per raggiungere questo obiettivo, qualche idea? Grazie in anticipo :-)

+1

Se è lo stesso file di origine, ecc non poteva non costruirli in un Framework o bundle e utilizzare la versione compilata in tutti i progetti - quindi il problema è semplicemente aggiungere una struttura per ogni progetto – Mark

risposta

2

vorrei iniziare con questo script (per Xcode 4.2.1),

  • Aprire un progetto XCode a /this/path/project.xcodeproj (fatto)
  • duplicati un target esistente e rinominarlo (non implementato)
  • modificare le impostazioni build del nuovo obiettivo (fatto)
  • aggiungere un gruppo alla sezione Origine e delle Risorse, quindi rinominare (Done)
  • Aggiungi file di origine i gruppi e aggiungi t egli file nella nuova destinazione (parzialmente)
  • Chiudere XCode (fatto)

!/usr/bin/osascript

# Reference: AppleScript Editor -> File -> Open Directory ... -> Xcode 4.2.1 

# http://vgable.com/blog/2009/04/24/how-to-check-if-an-application-is-running-with-applescript/ 
on ApplicationIsRunning(appName) 
    tell application "System Events" to set appNameIsRunning to exists (processes where name is appName) 
    return appNameIsRunning 
end ApplicationIsRunning 

if not ApplicationIsRunning("Xcode") then 
    log ("Launching Xcode ...") 
    launch application id "com.apple.dt.Xcode" 
    delay 5 
else 
    log("Xcode is already running ...") 
end if 

set project_path to "/PATH/TO/YOUR_PROJECT.xcodeproj" 
log ("Open an XCode project at " & project_path) 

set _project_name to (do shell script "echo $(basename " & project_path & ") | sed -e 's/.xcodeproj//'") 
log ("project_name set to " & _project_name) 

set _target_name to "YOUR_TARGET" 

tell application id "com.apple.dt.Xcode" 
    set _project_file to (POSIX file project_path as alias) 
    open _project_file 
    # load documentation set with path path_to_project display yes 
    set _workspace to active workspace document 
    set _project to first item of (projects of _workspace whose name = _project_name) 
    set _target to first item of (targets of _project whose name = _target_name) 

    # as this won't work, cannot event resort to system event 
    # duplicate _target with properties {name:_target_name & "_clone"} 
    # make new build configuration with data build configurations of _target with properties {name:_target_name & "_clone"} 
    # activate 

    log ("Edit the Build Settings of the new target") 
    set _build_configuration to first item of (build configurations of _target whose name = "Debug") 
    set value of build setting "PRODUCT_NAME" of _build_configuration to "KeySING" 

    # http://lists.apple.com/archives/xcode-users//2008/Feb/msg00497.html 
    log ("Add a group to the Source and Resources section, then rename them") 
    set _new_group_name to "groupX" 
    tell root group of _project 
     set _groups to (get groups whose name = _new_group_name) 
     if (length of _groups) = 0 then 
      set _new_group to make new group with properties {name:_new_group_name, path:_new_group_name, path type:group relative} 
     else 
      set _new_group to first item of _groups 
     end if 

     log ("Add source files to the groups, and add the file to the new Target") 
     tell _new_group 
      set _new_file_name to "whatever.h" 
      set _new_files to get (file references whose name = _new_file_name) 
      if (length of _new_files) = 0 then 
       # Xcode crashes 
       # make new file reference with properties ¬ 
       #  {name:_new_file_name, file encoding:utf8, path type:group relative,¬ 
       #  path:_new_file_name} 
      end if 
     end tell 
    end tell 

    log ("Close XCode") 
    quit 

end tell