从 macOS Finder 获取当前选择

问题描述 投票:0回答:1

似乎访问 macOS Finder 当前选定的文件/文件夹的唯一方法是通过脚本桥。 SwiftScripting 项目提供了一些预先生成的扩展供使用。代码相当简单:

    public func getSelected() -> [NSURL] {

        guard let app = SBApplication(bundleIdentifier: "com.apple.finder") else {
            print("no app")
            return []
        }
        
        let finder = app as FinderApplication
        guard let result = finder.selection else {
                print("No items selected")
                return []
        }

        print("result", result)

        guard let selection = result.get() else {
            print("get failed: ", result.lastError() ?? "")
            return []
        }

        print("selection", selection)

        return []
    }

但不幸的是选择失败

get

result <SBObject @0x600000d26310: selection of application "Finder" (6039)>
get failed:  Error Domain=NSOSStatusErrorDomain Code=-1743 "(null)" UserInfo={ErrorNumber=-1743}

该错误是

errAEEventNotPermitted
。这表明该应用程序需要正确的权利。 App Store 不允许临时例外——但理论上应该足够了。脚本目标可能是可行的方法 - 但似乎几乎不可能找到相关文档

<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.files.user-selected.read-only</key>
    <true/>
    <key>com.apple.security.temporary-exception.apple-events</key>
    <array>
        <string>com.apple.finder</string>
    </array>
    <key>com.apple.security.scripting-targets</key>
    <dict>
        <key>com.apple.finder</key>
        <array>
            <string>???</string>
        </array>
    </dict> 
</dict>

我缺少哪些部分才能使其正常工作?

更新

我缺少的是

Info.plist
中的许可。需要设置键
Privacy - AppleEvents Sending Usage Description
。这使得
get
调用成功。

要通过应用程序商店审核,仍然需要正确设置

com.apple.security.scripting-targets

我仍在寻找有关 Finder 可用的目标配置的信息。

swift mac-app-store entitlements scripting-bridge
1个回答
0
投票

对于任何正在寻求正确方法来修复此错误的人:

  • 开启

    Apple Events
    enter image description here

  • NSAppleEventsUsageDescription
    添加到
    Info.plist
    enter image description here

在非沙盒应用程序上进行了测试

© www.soinside.com 2019 - 2024. All rights reserved.