【问题标题】:Remove A URL Scheme Handler from Launch Services从启动服务中删除 URL 方案处理程序
【发布时间】:2012-07-27 04:32:19
【问题描述】:

我正在开发一个 Cocoa Mac 应用程序,它可以为 URL 方案动态生成和注册自己。但是,当应用程序注册自己以处理新生成的 URL 方案(例如 myscheme1423://)时,我想阻止应用程序响应任何以前注册的 URL 方案。

我使用LSSetDefaultHandlerForURLScheme() 来注册一个URL 方案;同时,应用程序会自动覆盖它的 Info.plist 以包含新方案。您可能知道,LSSetDefaultHandlerForURLScheme() 函数将给定的 bundleID/scheme 添加到 Launch Services 数据库中。但是,我找不到等效的 Launch Services 函数来从数据库中删除相同的 bundleID/scheme 对。

我知道我可以简单地忽略源自 URL 方案的任何外部事件,而不是应用程序主动注册的那个,但我觉得应该有一种简单的方法来完全清除系统的知识之前的方案。如果我的应用程序经历了数百次为新方案注册的过程,那么就会出现大量无意义的部分在磁盘上占用大量空间(至少对于 Plist 而言)的点数据(即旧的启动服务条目)。

【问题讨论】:

标签: objective-c cocoa plist url-scheme launch-services


【解决方案1】:

我刚刚启动了一个操场并开始玩。这是完全没有记录的,但它似乎有效。

尝试为第二个参数传递("None" as CFString)

LSSetDefaultHandlerForURLScheme() 

【讨论】:

  • 我只是注意到这实际上不起作用。似乎在最近的版本中,如果 URL 方案没有有效的处理程序,macOS 会自动删除它们;即使 LSSetDefaultHandlerForURLScheme 在应用程序有效时总是会成功,但在几秒钟后,如果应用程序未注册为该方案的处理程序,则处理程序将被删除。
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多