【问题标题】:Applescript to check App StoreApplescript 检查 App Store
【发布时间】:2015-07-17 14:05:11
【问题描述】:

感谢您花时间阅读我的问题。

这很简单,但我对此完全不熟悉,所以遇到了一些麻烦。

是否有可能有一个applescript来检查mac应用商店的更新,如果有,将更新的数量输出到某个地方?

一个很好的例子是(如果你知道的话)geeklet 检查未读邮件,然后将其输出到桌面。

编辑:
我为未读邮件下载了一个 geeklet(如上所述),并以此为起点,尝试编写自己的脚本。

set run_bool to 1

tell application "System Events"
    set run_bool to count (every process whose name is "App Store")
end tell


if run_bool is 1 then

    tell application "App Store"

        set update_count to 0
        set output_string to ""

        repeat with upd in Apps in Updates
            if upd's download is not true then
                set update_count to update_count + 1
            end if
        end repeat

        if update_count is 0 then
            set output_string to "zero"

        else if update_count is 1 then
            set output_string to "one"

        else
            set output_string to "two"
        end if
    end tell

else
    set output_string to "not running"
end if

return output_string

现在这不是我的最终代码,只是检查它是否可以工作以及输出是什么。

编译时出现错误提示

错误“未定义变量更新。” “更新”中的数字 -2753

还有

语法错误
预期行尾,但发现未知标记

另外,当我停止编译时,它出现在我的代码最后一行的下方

告诉应用程序“GeekTool Helper”
激活
«事件 ascrgsdf»

感谢任何帮助。

【问题讨论】:

  • 有什么理由不点击 菜单?更新数量显示在“App Store...”菜单项旁边,假设在“系统偏好设置”的 App Store 选项卡中选中“自动检查更新”选项。
  • @foo 我知道这一点,我的 Dock 上也有应用商店,它在小红圈中显示更新计数。但是,我正在将我的桌面精简到尽可能小。通过 geeklet 将其自动显示在我的桌面上,可以让我在每次有更新完成时收到通知,并且我不必定期手动检查 App Store。
  • 您的脚本无法运行,因为 App Store.app 实际上不是 AppleScriptable。它在脚本编辑器中显示一个字典,但这只是您在应用程序的 Info.plist 文件中设置 NSAppleScriptEnabled 标志时看到的默认 Cocoa 脚本术语。它实际上并没有做任何有用的事情,除非开发人员提供了他们自己的应用程序特定术语和 Objective-C 代码来连接它,而他们没有。 (App Store 也不是唯一一个执行“假 AppleScriptability”的 Apple 应用程序,这很烦人/令人困惑/侮辱,但大多数 Apple 开发人员还是希望 AS 到 DIAF。)

标签: macos applescript osx-yosemite


【解决方案1】:

@foo 的想法非常正确。这段代码只需要一行。在第二行中,我使用了display notification,但您将其替换为您喜欢的方法来传递值。

tell application "System Events" to tell (first application process whose ¬
frontmost is true) to set returnValue to title of ((first menu item whose title ¬
begins with "App Store") of menu "Apple" of menu bar 1)
display notification returnValue

结果:

"App Store…, 1 update"

menu bar items 随处可访问(例如窗口/数字桌面模式、全屏模式、停靠隐藏/禁用)。

确保为脚本编辑器或您用来调用脚本的任何应用启用了可访问性,以获得对 UI 的访问权限。

只有一件奇怪的事情:如果我使用 begins with "App Store..." 而不是 begins with "App Store",那么代码将是无效的。我不知道为什么 - 它可能与转义字符和 ... 有关。有知道的朋友请多多指教。

至于您的代码,我可以从 AppleScript Dictionary 中得知 Updates 不是 App Store.app 的属性。 UI 中也没有任何其他类别。要进入字典,请打开脚本编辑器并按 CMD+SHIFT+O

另外,如果你想使用return 语句,你需要一个显式处理程序。换句话说,您需要将代码包装在on runend run 之间。

【讨论】:

  • 非常感谢您,我很感激。看来我不明白@foo 在说什么,但你的帖子澄清了。我现在无法对此进行测试,但是当我这样做时(希望它可以工作),我会支持你。干杯。
  • 实际上我只是说单击 Apple 菜单以查看那里的最新更新计数,但是是的,您可以使用 GUI 脚本提取该数据以在其他地方使用。 GUI Scripting 是痛苦的、脆弱的和普通的老恶,但它是处理像 App Store 这样的不可编写脚本的应用程序时唯一实用的选择。 (如果你真的在乎,你可以提交feature request 以使 App Store 可编写脚本 - 但不要屏住呼吸等待结果,因为 Apple 真的不再对 AppleScript 废话了。)
  • @foo 功能请求?大声笑,我只是希望它更有用。 UI 需要很长时间才能做出响应。我有 2 个应用程序永远驻留在“检查未完成的下载...”下。 Xcode 在进行 2 Gig 更新时停滞了很多次,我只是从开发者页面中 dl .dmg,当我到达它时,也就是说,1 update 现在在我的应用商店中。
猜你喜欢
  • 2011-09-13
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 2023-03-26
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多