2010-08-20 3 views

ответ

3

Вместо того, чтобы просто ссылки Xcode по его имени, то есть:

tell application "Xcode" 
    ... 
end tell 

вы можете также ссылаться на конкретную версию приложения на полный путь к POSIX, а именно:

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

Смотрите также Раздел руководства по языку AppleScript на странице application class.

Более сложное решение включает поиск базы данных служб запуска для всех версий приложения, установленных в системе. Затем вы можете программно выбрать один вариант с требуемой версией:

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

О, да я делал это раньше. Но теперь я хочу альтернативу без необходимости указывать указанный путь. Интересно, как сценарий выбирает один из двух пакетов .app. – Plumenator

+0

@Plumenator Я обновил свой ответ с помощью альтернативного решения, которое явно ищет нужную версию Xcode. – sakra

+0

Ничего себе, это выглядит правильно! Лемм иди на работу и попробуй это утром. Btw, нужен блок «использования терминов»? И как вы знаете этот материал? Часть сервисов запуска esp.? – Plumenator

2

Вы можете запустить приложение по его идентификатору, как это. Возможно, у двух версий будут разные идентификаторы.

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

Вы можете получить идентификатор приложения, с помощью этого ...

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

У них действительно есть разные идентификаторы пакетов, Xcode 3 - «com.apple.Xcode», а Xcode 4 - «com.apple.dt.Xcode». Я не уверен, что так будет, когда Xcode 4 станет последним, но вы можете использовать его на данный момент по крайней мере. –

+0

Я думал, что они могут. Я видел демо v4, и он выглядит так по-другому. Я был уверен, что у него будут разные предпочтения, а это значит, что у него должен быть другой идентификатор. Идентификатор и имя файла pref совпадают. – regulus6633

Смежные вопросы