AppleScript语法自动化Xcode 4.1以清理,构建然后运行

时间:2011-09-02 20:19:07

标签: xcode xcode4 selenium automation applescript

我很欣赏已经有关于这个主题的问题,但是阅读了我能找到的内容(特别是这一个:Tell AppleScript To Build XCode Project),它们似乎都已经有几年了,答案似乎并不多申请当前版本的Xcode。

与链接的问题类似,我试图自动打开Xcode项目,构建它然后在iPhone模拟器(v4.3)中运行应用程序。有问题的项目是Selenium项目的iPhoneDriver(详见此处: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会毫无问题地打开项目。但是一旦我包含脚本的其余部分,Dock中的Xcode图标就会反弹,但除了上面的AppleScript编辑器外,这就是我得到的全部内容。

有人可以告诉我做错了什么吗?这是我第一次使用AppleScript或Xcode,所以我很难诊断出这个问题。

我已经尝试过查看Xcode AppleScript字典,但如果没有实际的例子,我无法确定我需要的语法。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:12)

使用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

如果这对您有用,请告诉我。 我在Lion上使用iPhone项目对Xcode 4.2.1进行了测试。

答案 1 :(得分:3)

如果你对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

答案 2 :(得分:0)

虽然我投票和欢呼上面的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"

当应用程序脚本编写能力差时,用户界面脚本是脚本编写者的最后手段。因为UI层次结构本质上是标准的,并且它的可编程性不受Cocoa的影响,所以它总是有效。