2010-04-22 9 views
30

Je travaille actuellement sur un moyen d'automatiser le processus d'ajout de nouvelles cibles à mes projets XCode. Une cible doit être ajoutée à plusieurs projets XCode et chaque cible dans le projet doit avoir les mêmes fichiers source à ajouter, les mêmes groupes pour stocker les fichiers sources dans le projet XCode et les mêmes paramètres de construction. Faire cela manuellement peut prendre un certain temps et est très sujet à l'erreur humaine, et je dois faire cette tâche assez souvent. J'ai déjà écrit un script pour générer de nouveaux fichiers source, les copier dans des dossiers système, éditer des fichiers source avec de nouvelles informations, etc., mais maintenant j'ai besoin d'automatiser la partie XCode.Comment automatiser la création de nouvelles cibles XCode à partir du script Applescript/Automator/Shell

Cela résume ce que je veux que mon automatisation pour atteindre:

Ouvrir un projet XCode à /this/path/project.xcodeproj

Dupliquer une cible existante et le renommer

Modifier Build paramètres de la nouvelle cible

Ajouter un groupe à la section Source et des ressources, puis les renommer

Ajouter une source f aux groupes iles, et ajouter le fichier à la nouvelle cible

Fermer XCode

Idéalement, je veux que cela fonctionne de mon script Bourne Shell, je sais que vous pouvez lancer des workflows Automator à partir de là. Je ne suis pas sûr de savoir quelle est la meilleure approche pour y parvenir, des idées? Merci d'avance :-)

+1

Si ce sont les mêmes fichiers source etc ne pouvait pas ne pas les intégrer dans un Framework ou un bundle et utiliser la version compilée dans tous les projets - le problème consiste simplement à ajouter un framework à chaque projet – Mark

Répondre

2

Commençons par ce script (pour Xcode 4.2.1),

  • Ouvrir un projet XCode à /this/path/project.xcodeproj (fait)
  • en double une cible existante et renommez (non implémenté)
  • Modifier les paramètres de compilation de la nouvelle cible (fait)
  • Ajouter un groupe à la section Source et des ressources, puis les renommer (DONE)
  • Ajouter fichiers source à les groupes, et ajouter t il fichier à la nouvelle cible (partiellement)
  • Fermer XCode (DONE)

!/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 
Questions connexes