9

我正在我的 Cocoa 应用程序中集成 FinderSync 扩展,以在文件和文件夹中显示徽章。看下面两个场景:

  1. 当我使用 FinderSync 扩展程序(如 DemoFinderSync)运行应用程序时,请查看下图中的蓝色弹出窗口,在这种情况下,扩展程序已添加到系统偏好设置中并带有复选标记,并且也将该主体类称为“FinderSync.m”。

屏幕截图 1

  1. 当我使用我的应用程序方案(如 DemoApp)运行应用程序时,请查看下图中的蓝色弹出窗口,在这种情况下,系统偏好设置中添加了扩展但没有复选标记,并且该主体类“FinderSync.m”不调用并且 FinderSync在这种情况下,扩展不起作用。

屏幕截图 2

有人知道如何使用第二种情况在系统偏好设置中启用 Finder 扩展吗?

4

3 回答 3

8

非调试方案(#if !DEBUG):

system("pluginkit -e use -i com.domain.my-finder-extension");

在调试器下运行时,直接为您的扩展提供路径:

NSString *pluginPath = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@"My Finder Extension.appex"];
NSString *pluginkitString = [NSString stringWithFormat:@"pluginkit -e use -a \"%@\"", pluginPath];
system([pluginkitString cStringUsingEncoding:NSUTF8StringEncoding]);

在您的 applicationDidFinishLaunching 方法中指定此项。您还应该仅手动将其打开一次,这样如果用户在“系统偏好设置”中关闭了您的扩展程序,您就不会在每次应用程序启动时都打开它。我在用户第一次启动我的具有 finder 同步扩展支持的应用程序时设置了 NSUserDefaults 键。

于 2015-07-06T22:07:03.703 回答
6

我得到了解决方案:

启用扩展的代码(捆绑 ID)

system("pluginkit -e use -i YourAppBundleID")

禁用扩展的代码(捆绑 ID)

system("pluginkit -e ignore -i YourAppBundleID")

在我使用之前:

system("pluginkit -e use -i AppBundleID.FinderSync")

所以只需删除“.FinderSync”它的工作。

于 2015-07-07T09:50:36.213 回答
0

链接我在 Apple 开发者论坛上找到的答案:

https://forums.developer.apple.com/thread/77682

当您的 App在 Sandbox 之外时,您可以使用:

目标-C:

system("pluginkit -e use -i <yourFinderExtensionBundleID>");

迅速:

let pipe = Pipe()
let task = Process()
task.launchPath = "/usr/bin/pluginkit"
task.arguments = ["-e", "use", "-i", "<yourFinderExtensionBundleID>"]
task.standardOutput = pipe
let file = pipe.fileHandleForReading
task.launch()
let result = NSString(data: file.readDataToEndOfFile(), encoding:
于 2018-09-19T22:29:18.150 回答