取消注册使用LSRegisterURL注册的应用程序

时间:2015-02-02 09:38:54

标签: macos

有没有办法从使用LSRegisterURL添加的Launch Services数据库中删除记录?

我有几个可以打开相同网址的应用,我想管理哪一个应该打开它。不幸的是现在我遇到了一个问题,在某些时候LSRegisterURL停止工作。例如。它工作到某一点,然后,我猜,Launch Services数据库(或缓存)会溢出,后续对LSRegisterURL的调用没有任何影响。

所以我的想法是通过删除旧记录来清理Launch Services数据库,但我找不到任何相关的功能。

2 个答案:

答案 0 :(得分:2)

我今天在LaunchServices中遇到了一个私有API,似乎可以解决问题。它似乎适用于Mac OS X 10.7至10.11。我还没有测试过,所以YMMV:

extern void _LSUnregisterURL(CFURLRef url) __attribute__((weak_import));

- (void) unregisterAppAtURL:(NSURL *)appURL
{
    if( _LSUnregisterURL != NULL )
    {
        CFURLRef urlRef = (__bridge CFURLRef)appURL;
        if( urlRef )
        {
            _LSUnregisterURL( urlRef );
        }
    }
}

还有其他一些与此类似的私有API(可以通过使用nm找到)。请记住,如果您私有化,则无法提交到App Store。希望有所帮助。

答案 1 :(得分:0)

由于它来自进一步的测试,OS X释放了Launch Services数据库本身。确切的算法不明确,但在大多数情况下重启Mac有助于删除错过的应用程序的记录和/或使最近调用LSRegisterURL指定的应用程序成为默认应用程序。