OSX Mavericks
スクリプトまたは Cocoa を使用して、新しいアプリケーションのドック アイコンを削除する方法を知っている人はいますか? 一部のアプリケーションをアンインストールした後にドック アイコンを削除する必要があるアンインストーラーがあります。しかし、既存のロジックは 10.9 で失敗します。これまで (10.8 まで) からアイコン エントリを削除しcom.apple.dock.plist
、ドックを強制終了してきました。ただし、Mavericks では機能しません。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 に答える