Вы можете использовать следующие два метода для наложения иконки на папки / файлы.
Вы можете использовать -setIcon: forFile: options: метод в NSWorkspace, если вы хотите изменить значок файла или папки в Mac OS X.
Однако после применения наложения значков с помощью этого метода наложение завершается, даже если вы переместили этот файл / папку за пределы. Это не может быть точным решением.
Вместо этого используйте в вашем приложении цель расширения синхронизации Finder (Файл - Новый - Цель - расширение синхронизации Finder).
После того как вы создали расширение, ваше приложение не имеет прямой связи с этой целью. Для активации используйте команду AppleScript (я не думаю, что есть лучшая альтернатива для этого.)
Для активации
NSString * pluginPath = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent: @ "yourextension.appex"];
NSString * pluginkitString = [NSString stringWithFormat: @ "pluginkit -e use -a \"% @ \ "", pluginPath];
система ([pluginkitString cStringUsingEncoding: NSUTF8StringEncoding]);
Когда цель активирована, наше приложение может обмениваться данными с этим расширением. Немногие из них:
Использование NSDistributedNotificationCenter. Этот класс предоставляет способ отправлять уведомления объектам в других задачах (например, расширение здесь).
Другой способ - использовать [[NSUserDefaults alloc] initWithSuiteName: @ "teamid.com.company.test"];
И ваше приложение, и цель должны иметь общий идентификатор группы (т. Е. «Teamid.com.company.test»).
Для этого включите «Группы приложений» в разделе «Назначение - Возможности - Группы приложений» и укажите идентификатор, подобный приведенному выше (то есть «teamid.com.company.test»), где teamid - это идентификатор, который вы получите на портале для разработчиков Apple. Проделайте те же шаги для своей цели расширения.
Прежде чем сделать вывод, убедитесь, что расширение активировано или нет. Чтобы проверить это, перейдите в Системные настройки - Расширения - Ваш App Finder.
Это глобальная точка, в которой пользователь может включить / отключить наложение значков для вашего приложения.