编写 Xcode 脚本:单击 AppleScript 中的菜单项而不激活窗口?

Dan*_*ane 5 xcode applescript ios

我有一个简单的脚本,用于通过 XCode 以编程方式启动 iOS 项目:

on run project_loc
  tell application "Xcode"
    open project_loc
    activate
  end tell

  tell application "System Events"
    tell application process "Xcode"
      click menu item "Run" of menu 1 of menu bar item "Product" of menu bar 1
    end tell
  end tell
end run 
Run Code Online (Sandbox Code Playgroud)

这效果很好,只是它将焦点切换到 Xcode,这并不理想,因为我试图将其用作自动重新编译和重新启动以响应相关文件中的任何更改的方案的一部分。有没有什么方法可以在不将焦点集中到 Xcode 窗口的情况下完成此任务?

kop*_*hke 4

您无法使用 GUI 脚本在不切换到应用程序的情况下单击菜单项,就像您自己在不切换应用程序的情况下单击菜单项一样 \xe2\x80\x93 应用程序的菜单栏仅在具有焦点时才可用(或者,至少,是最后一个获得焦点的应用程序\xe2\x80\x93,它并不\xe2\x80\x99不一定需要焦点窗口)。但是,您可以通过在脚本中切换回之前关注的应用程序来减轻切换的破坏性:

\n\n
on run\n    tell application "System Events" to set focusedAppID to bundle identifier of first application process whose frontmost is true\n    <your code here>\n    tell application id focusedAppID to activate\nend run\n
Run Code Online (Sandbox Code Playgroud)\n\n

但 \xe2\x80\xa6 Xcode 本身是一个可编写脚本的应用程序。如果您只需要构建项目,为什么不使用

\n\n
tell application "Xcode" to build <target / project>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将使您免受蠕虫的困扰 GUI 脚本是 \xe2\x80\x93 查看 Xcode AppleScript 字典(默认情况下不添加 \xe2\x80\x93 只需将 Xcode.app 拖到 AppleScript 编辑器中的库窗口)。

\n