【发布时间】: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 而言)的点数据(即旧的启动服务条目)。
【问题讨论】:
-
尝试apple.stackexchange.com/questions/64124/… 的答案有可以添加到您的安装程序或应用程序中的 CleanOpenWith(Apple 脚本)来执行此操作:github.com/spaquet/CleanOpenWith/releases
标签: objective-c cocoa plist url-scheme launch-services