Синтаксис AppleScript для автоматизации Xcode 4.1 для очистки, сборки и запуска - PullRequest
10 голосов
/ 03 сентября 2011

Я ценю, что уже есть вопросы по этой теме, но, прочитав те, которые я могу найти (в частности, этот: Скажите AppleScript для создания проекта XCode ), они все, кажется, пару лет старые и ответы, кажется, не относятся к текущей версии Xcode.

Аналогично связанному вопросу, я пытаюсь автоматизировать открытие проекта Xcode, его сборку и запуск приложения в iPhone Simulator (v4.3). Рассматриваемый проект - iPhoneDriver проекта Selenium (подробности см. Здесь: http://code.google.com/p/selenium/wiki/IPhoneDriver)

Основываясь на ответе на другой вопрос, я написал следующий скрипт:

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 открывает проект без проблем. Но как только я включаю оставшуюся часть скрипта, иконка Xcode в доке отскакивает, но это все, что я получаю, кроме вышеперечисленного из редактора AppleScript.

Кто-нибудь может посоветовать, что я делаю не так? Это первый раз, когда я использую AppleScript или Xcode, поэтому я пытаюсь диагностировать проблему.

Я попытался просмотреть словарь Xcode AppleScript, но без отработанных примеров я не могу точно определить нужный мне синтаксис.

Заранее спасибо за любую помощь!

Ответы [ 3 ]

12 голосов
/ 28 декабря 2011

Используя сочетание 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.

3 голосов
/ 15 сентября 2011

Если вы в порядке с 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
0 голосов
/ 20 января 2015

Хотя я голосую и приветствую вышеупомянутый AppleScript, который действительно хорош (и также работает…), будучи профессиональным, заботясь о старых версиях, экстремальных случаях и т. Д. Сценарий, предложенный в вопросе, должен был сработать в первую очередь..

Причина, по которой это не работает, заключается в нарушении возможности написания кода 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"

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

...