Синтаксис AppleScript для автоматизации Xcode 4.1 для очистки, сборки и запуска
Я ценю, что уже есть вопросы по этой теме, но прочитав те, которые я могу найти (особенно этот: Сообщить AppleScript, чтобы построить проект XCode), они все, кажется, пару лет, и ответы, похоже, не относятся к текущей версии Xcode.
Аналогично связанному вопросу, я пытаюсь автоматизировать открытие проекта Xcode, его создание, а затем запуск приложения в iPhone Simulator (v4.3). Этот проект является проектом Selenium iPhoneDriver (подробнее см. Здесь http://code.google.com/p/selenium/wiki/IPhoneDriver)
На основании ответа в другом вопросе я написал следующее script:
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
К сожалению, когда я запускаю это, я получаю следующее:
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
Если я запускаю только команду open, Xcode открывает проект без проблем. Но как только я включаю в себя остальную часть script, значок Xcode в доке отскакивает, но все, что я получаю, помимо вышеперечисленного из редактора AppleScript.
Кто-нибудь может сказать, что я делаю неправильно? Это первый раз, когда я использовал AppleScript или Xcode, поэтому я боюсь диагностировать проблему.
Я пробовал смотреть на Xcode AppleScript Dictionary, но без обработанных примеров я не могу определить синтаксис, который мне нужен.
Заранее благодарим за помощь!
Ответы
Ответ 1
Используя сочетание AppleScript и инструмента командной строки (xcodebuild
), я придумал следующее:
-- 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
Сообщите мне, если это сработает для вас.
Я протестировал его против Xcode 4.2.1 на Lion с проектом iPhone.
Ответ 2
Если вы согласны с тем, что Xcode выходит на передний план, я бы использовал это вместо:
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
Ответ 3
Несмотря на то, что я проголосую и одобряю вышеупомянутый AppleScript, который действительно хорош (а также работает...), будучи профессиональным, заботясь о старых версиях и крайних случаях и т.д. script, предложенный вопросом, должен был работать в первое место.
Причина, по которой он не работает, - это нарушение скриптов Xcode. Не только "чистый" не работает. Большинство всего, что я пытался сделать с внутренней объектной моделью Xcode, не работает.
Архитектура AppleScript (OSA) требует, чтобы приложение отображало "понятный человеку" граф объектов, который AppleScripts может ссылаться. В Xcode это может выглядеть так:
tell target "my library" of project "my project" of workspace "my workspace" to clean.
или
tell application "Xcode" to close all projects whose name contains "Lib"
Скрипт пользовательского интерфейса является последним средством использования сценариев при плохой работе приложений. Поскольку иерархия пользовательского интерфейса является стандартной по своей природе, а ее скриптабельность свободна от Cocoa, она наиболее часто работает.