1

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