Objective c FinderSync检查是否选择了扩展

Objective c FinderSync检查是否选择了扩展,objective-c,macos,system-preferences,findersync,Objective C,Macos,System Preferences,Findersync,我正在开发一个FinderSync扩展,在检查选择是否正在选择或选择/取消选择扩展时遇到一些问题 是否有方法通过编程检查在系统首选项->扩展中是否选择了FinderSync扩展 当此选择更改时,是否有任何API需要得到通知 除了使用以下内容外,是否还有任何API可用于选择/取消选择扩展 system("pluginkit -e use -i com.mycompany.finderExt") 请注意,我已经访问了以下页面: 如果分机已启用,呼叫将返回 “+com.mycompany.fin

我正在开发一个
FinderSync
扩展,在检查选择是否正在选择或选择/取消选择扩展时遇到一些问题

是否有方法通过编程检查在
系统首选项->扩展中是否选择了
FinderSync
扩展

当此选择更改时,是否有任何API需要得到通知

除了使用以下内容外,是否还有任何API可用于选择/取消选择扩展

system("pluginkit -e use -i com.mycompany.finderExt")
请注意,我已经访问了以下页面:

如果分机已启用,呼叫将返回

“+com.mycompany.finderExt(1)”

如果未启用分机,呼叫将返回

“-com.mycompany.finderExt(1)”


请注意加号和减号,只需解析返回以确定扩展是否已启用。

FinderSync扩展就是一个“应用程序”。但是它的包名为.appex。 当您在系统首选项中启用它时,macOS将自动加载它 (您可以通过活动应用程序或ps-ef命令进行检查)

因此,您可以通过以下代码轻松检查:

runningApps = [[NSRunningApplication runningApplicationsWithBundleIdentifier:@"your.bundle.id"] retain];
if runningApps.count != 0{
  //your extension was enabled
}
else{
 //your extension was not enabled
}

macOS 10.14 Mojave为扩展管理添加了两种有用的新方法:

承载Finder Sync扩展的应用程序可以确定用户是否启用了该扩展,并可以显示用于管理扩展的UI。当应用程序再次激活时,它可以检查用户是否启用了扩展


据我所知,你问题的答案是否定的,否定的,否定的。不过我很高兴被证明是错的。为什么你需要检查它是否被选中?为什么不每隔一段时间强制选择一次呢?为什么pluginkit命令会困扰您?我必须实现的一个功能是在应用程序首选项对话框中有一个复选框,用户可以启用/禁用Finder extension,并且该选项应该与System preferences->Extensions中的选择同步。我可以像你说的那样,但是如果用户想从系统首选项中禁用我的扩展,我不想覆盖他的操作。另外,我可以使两个复选框很容易不同步。现在,我只显示一个按钮,单击后,将用户重定向到Extensions prefpane。有人知道扩展如何持久化复选框值吗。如果我取消选中扩展并将其删除,然后再次添加,它将保持未选中状态;如果我在删除并再次添加扩展之前选中它,则在再次添加时它将保持选中状态。系统可以管理Finder Sync扩展的多个实例,并任意启动/停止这些进程。因此,用给定的包标识符检查正在运行的应用程序不是一个好方法。
runningApps = [[NSRunningApplication runningApplicationsWithBundleIdentifier:@"your.bundle.id"] retain];
if runningApps.count != 0{
  //your extension was enabled
}
else{
 //your extension was not enabled
}
@available(OSX 10.14, *)
open class var isExtensionEnabled: Bool { get }

@available(OSX 10.14, *)
open class func showExtensionManagementInterface()