1

有谁知道OSX Mavericks使用脚本或使用 Cocoa 删除新应用程序的停靠图标的任何方法?我有一个卸载程序,它必须在卸载某些应用程序后删除它们的停靠图标。但是现有的逻辑在 10.9 中失败了。到目前为止(直到 10.8)我一直在这样做,方法是从 中删除图标条目com.apple.dock.plist,然后杀死 Dock。但是,它不适用于小牛队。但是,我可以使用删除图标NSUserDefaults,但是当我的应用程序(卸载程序)以提升的权限运行时,它也会失败。任何其他想法/命令/解决方案都会有所帮助。

4

1 回答 1

2

我修改了上面博客文章中的代码,它可以工作。问题是在 Mavericks 中,-persistentDomainForName:返回一个不可变的字典,所以我必须让它可变才能让它工作。我在这里发布它,因为博客帖子有一种成为死链接的方式。

- (void)removeDockItemNamed:(NSString *)dockIconLabel
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSMutableDictionary* dockDict = [[userDefaults persistentDomainForName:@"com.apple.dock"] mutableCopy];

    NSMutableArray* apps = [[dockDict valueForKey:@"persistent-apps"] mutableCopy];
    if (apps != nil)
    {
        NSArray* appsCopy = [apps copy];
        bool modified = NO;
        for(NSDictionary *anApp in appsCopy)
        {
            NSDictionary* fileDict = [anApp valueForKey:@"tile-data"];
            if(fileDict != nil)
            {
                NSString *appName = [fileDict valueForKey:@"file-label"];

                if([dockIconLabel isEqualToString:appName])
                {
                    [apps removeObject:anApp];
                    modified = YES;
                    break;
                }
            }
        }
        if(modified)
        {
            //If the dictionary was modified, save the new settings.
            dockDict[@"persistent-apps"] = apps;
            [userDefaults setPersistentDomain:dockDict forName:@"com.apple.dock"];
            //Reset the standardUserDefaults so that the modified data gets synchronized
            //and next time when this function is invoked, we get the up-to-date dock icon details.
            [NSUserDefaults resetStandardUserDefaults];
        }
    }

}

来源: http: //macinstallers.blogspot.in/2013/12/remove-dock-icon-using-cocoa.html

于 2014-01-17T16:21:08.913 回答