我有一个代码:
func openGetInfoWnd(for urls: [URL]) {
let pBoard = NSPasteboard(name: NSPasteboard.Name(rawValue: "pasteBoard_\(UUID().uuidString )") )
pBoard.writeObjects(urls as [NSPasteboardWriting])
NSPerformService("Finder/Show Info", pBoard)
}
此代码打开Finder的“获取信息”的多个窗口
就像它显示在Cmd + I热键
我如何打开一个窗口(“显示检查器”/“获取信息”/“多个项目信息”)多个本地网址?
喜欢它显示在Cmd + Option +我按Finder
PS:代码:NSPerformService("Finder/Show Inspector", pBoard)
ofc不工作:)
2条答案
按热度按时间neekobn81#
尝试了很多方法,你是对的,NSPerformService是非常有限的,不能实现它。我也试了
Apple Script's approach
:但这只适用于单个文件,在Finder中没有打开“多信息窗口”的东西。
幸运的是,您的键盘快捷键提醒我,我可以模拟文件选择和键盘按键事件。
所以我相信下面的苹果脚本可以帮助你:
我认为你可以在Swift中调用这个创建这个苹果脚本并调用它。
以下是call it in swift的有用链接:
uxh89sit2#
NSAppleScriptErrorNumber: -600
是一个沙盒问题,修复它(在Xcode 14.3中测试):1.进入**[您的项目] > [您的目标] >签署和功能**。
1.删除应用沙盒。
1.在Hardened Runtime下(如果需要,请先单击+ Capability添加功能),勾选“Apple Events”。
1.将
NSAppleEventsUsageDescription
添加到您的Info.plist
。用@kakaiikaka的回答
重新构建您的应用程序(干净的构建+运行),它现在应该要求权限发送击键到Finder。您可能会看到这些弹出窗口:
NSAppleEventsUsageDescription
指定的消息)。现在一切都应该工作!:)
P.S.如果你收到一条消息说 “这个方法不应该在主线程上调用,因为它可能会导致UI无响应。",只要这样做:
(you如果需要,也可以设置
qos = .background
,但两种方式都应该有效)