2011-09-02 61 views
10

我意識到,已經有關於這個主題的問題,但看了那些我可以找到(尤其是這一個:Tell AppleScript To Build XCode Project),他們都似乎是一對夫婦並且答案似乎不適用於當前版本的Xcode。的AppleScript語法的Xcode 4.1自動清洗,建後運行

類似於鏈接的問題,我試圖打開自動化的Xcode項目,建設它,然後運行在iPhone模擬器(V4.3)的應用程序。有問題的項目是硒項目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 

如果我只運行打開命令,Xcode打開項目沒有問題。但只要我包括腳本在被告席上彈跳的Xcode圖標的休息,但是這是我得到的,除了上述的從AppleScript的編輯器。

有人能指教一下我做錯了嗎?這是我第一次使用AppleScript或Xcode,所以我正在努力診斷問題。

我試着看的Xcode AppleScript字典,但沒有工作的例子我不是很確定,我需要的語法。

在此先感謝您的幫助!

+0

我豆蔻困惑。你想「建立」或「運行」你的項目嗎? –

回答

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

讓我知道這對你的作品。 我使用iPhone項目在Lion上對Xcode 4.2.1進行了測試。

+0

令人驚歎:-)。我不敢相信這沒有得到更多的讚揚。 –

+0

如何運行這個腳本?我們是否需要創建1個shell和1個Apple腳本,然後從shell腳本中調用Apple腳本?你如何使用XCode 4.2.1進行測試? – Abhinav

+0

@Abhinav只需將腳本複製並粘貼到AppleScript Editor(安裝在/ Applications/Utilities)中即可。 「你如何用XCode 4.2.1進行測試?」 =>你是什麼意思? – Guillaume

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限制,因此它最常用。