2010-08-20 5 views

Répondre

3

Au lieu de Xcode référencement simplement par son nom, à savoir:

tell application "Xcode" 
    ... 
end tell 

vous pouvez également faire référence à une version particulière d'une application par son chemin POSIX complet, à savoir:

tell application "/Developer/Applications/Xcode 3.2.3.app" 
    ... 
end tell 

Voir aussi la Section du guide linguistique AppleScript sur le application class.

Une solution plus complexe consiste à rechercher dans la base de données des services de lancement pour toutes les versions d'une application installées sur le système. Vous pouvez alors choisir une programmation avec la version requise:

property pLSRegisterPath : "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister" 
property pAppBundleID : "com.apple.Xcode" 
property pAppRequiredVersion : "3.2.3" 

set theAppPaths to every paragraph of (do shell script pLSRegisterPath & " -dump | grep --before-context=2 \"" & pAppBundleID & "\" | grep --only-matching \"/.*\\.app\"") 

set xcodeApp to missing value 
repeat with theAppPath in theAppPaths 
    try 
     if (version of application theAppPath) = pAppRequiredVersion then 
      set xcodeApp to application theAppPath 
      exit repeat 
     end if 
    end try 
end repeat 

if xcodeApp = missing value then 
    error "Needed application version not installed." 
end if 

using terms from application "Xcode" 
    tell xcodeApp 
     activate 
    end tell 
end using terms from 
+0

Oh, oui, je l'habitude de faire ça avant. Mais maintenant je veux une alternative sans avoir besoin de spécifier ce chemin. Je me demande comment le script choisit un parmi les deux paquets .app. – Plumenator

+0

@Plumenator J'ai mis à jour ma réponse avec une solution alternative qui recherche explicitement la version requise de Xcode. – sakra

+0

Wow, cela semble juste! Lemme aller au travail et l'essayer le matin. Btw, le bloc "using terms" est-il nécessaire? Aussi, comment savez-vous ce genre de choses? Le service de lancement partie esp? – Plumenator

2

Vous pouvez lancer une application par son identifiant comme celui-ci. Peut-être que les deux versions auront des identifiants différents.

tell application id "com.apple.AddressBook" 
    -- do something 
end tell 

Vous pouvez obtenir un id de l'application de cette ...

tell application "Finder" to return id of (choose file) 
+1

Ils ont en effet des identifiants de paquets différents, Xcode 3 est "com.apple.Xcode" et Xcode 4 est "com.apple.dt.Xcode". Je ne sais pas si ça va rester comme ça quand Xcode 4 sera définitif, mais vous pouvez l'utiliser pour le moment au moins. –

+0

Je pensais qu'ils pourraient. J'ai vu des démos de v4 et ça a l'air si différent que j'étais sûr que ça aurait des préférences différentes, ce qui veut dire qu'il fallait avoir un identifiant différent. L'identifiant et le nom du fichier pref sont les mêmes. – regulus6633

Questions connexes