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