如何在脚本运行时保持应用程序激活/在前台?

时间:2011-03-29 14:00:49

标签: xcode automation applescript xcode4

我正在使用Applescript自动部署Xcode 4中的应用程序。 我使用系统事件单击菜单栏中的菜单项。我有整个工作,但有一个怪癖。如果用户在我的脚本运行时点击其他地方,那就是XCode 4窗口不在前台,我的整个脚本都会失败。有没有办法强制Xcode在我的脚本中处于前台?

现在,如果只有Xcode 4至少与Xcode 3一样可编写代码,我就不必采用GUI自动化。

3 个答案:

答案 0 :(得分:1)

您可以对每个activate调用使用click命令,以确保应用程序位于前台。这不是理想的。真的,如果您要使用系统事件来执行此类脚本输入,您必须接受用户在脚本运行时无法真正使用计算机!

如果您可以将脚本分解为需要用户输入的部分和不需要用户输入的部分,您可以向用户显示一个对话框,上面写着“您准备好继续使用脚本了吗?您必须离开电脑一会儿!“ ......然后当它完成时,“现在可以再次使用你的电脑!” 这可能会使脚本不那么突兀。只是一个建议。

答案 1 :(得分:1)

你应该在运行时放置一些加载图片或其他东西,你也应该在任何时候调用gui运行一个带有超时的循环来激活app然后检查你想要点击的项目是否存在存在点击它并退出循环

修改

helpful link

答案 2 :(得分:0)

mcgrailm和James Bedford的答案相结合。 我将菜单单击“编辑方案...”循环,直到编辑方案表变为存在。 在点击“Run without building”之前,我还必须激活应用程序。

代码:

tell application id "com.apple.dt.Xcode"
    activate
end tell
tell application "System Events"
    tell process "Xcode"
            repeat until sheet 1 of window 2 exists
                    click menu item "Edit Scheme…" of menu "Product" of menu bar item "Product" of menu bar 1
                    tell application "Xcode"
                            activate
                            beep
                    end tell
            end repeat
            tell sheet 1 of window 2
                    set destination to pop up button 2 of group 1
                    click destination
                    set target to "iPad 4.3 Simulator"
                    click menu item target of destination's menu 1
                    set buildConfig to pop up button 3 of group 2
                    click buildConfig
                    click menu item "Debug" of menu 1 of buildConfig
                    click button "OK"
            end tell
            tell application "Xcode"
                    activate
                    beep
            end tell
            tell application id "com.apple.dt.Xcode"
                    activate
            end tell
            click menu item "Run Without Building" of menu 1 of menu item "Perform Action" of menu "Product" of menu bar item "Product" of menu bar 1
    end tell
end tell