Как включить расширение FinderSync в системных настройках macOS
Я интегрирую расширение FinderSync в свое приложение какао, чтобы отображать значки в файлах и папках. Посмотрите на два сценария ниже:
- Когда я запускаю приложение с помощью FinderSync Extension (например, DemoFinderSync), посмотрите на синее всплывающее окно на изображении ниже, в этом случае расширение добавляется в Системные настройки с галочкой и также называется основным классом "FinderSync.m".
- Когда я запускаю приложение, используя мою схему приложения (например, DemoApp), посмотрите на синее всплывающее окно на изображении ниже, в этом случае расширение добавляется в системную настройку, но без галочки, и этот основной класс "FinderSync.m" не вызывает и FinderSync Расширение не работает в этом случае.
У кого-нибудь есть идея, как включить Расширение Finder в Системных настройках, используя второй сценарий?
3 ответа
Я получил решение:
Код для включения расширения (идентификатор пакета)
system("pluginkit -e use -i YourAppBundleID")
Код для отключения расширения (идентификатор пакета)
system("pluginkit -e ignore -i YourAppBundleID")
Прежде чем я использовал:
system("pluginkit -e use -i AppBundleID.FinderSync")
так что просто удалите ".FinderSync" его работу.
Неотладочная схема (#if!DEBUG):
system("pluginkit -e use -i com.domain.my-finder-extension");
При работе под отладчиком укажите путь к вашему расширению напрямую:
NSString *pluginPath = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@"My Finder Extension.appex"];
NSString *pluginkitString = [NSString stringWithFormat:@"pluginkit -e use -a \"%@\"", pluginPath];
system([pluginkitString cStringUsingEncoding:NSUTF8StringEncoding]);
Укажите это в вашем методе applicationDidFinishLaunching. Вам также следует вручную включить это только один раз, чтобы, если пользователь отключил ваше расширение в Системных настройках, вы не включали его каждый раз при запуске приложения. Я установил ключ NSUserDefaults в первый раз, когда пользователь запускает мое приложение с поддержкой расширений синхронизации Finder.
Связывая ответ, который я нашел на форуме разработчиков Apple:
https://forums.developer.apple.com/thread/77682
Когда ваше приложение находится вне Песочницы, вы можете использовать:
Objective-C:
system("pluginkit -e use -i <yourFinderExtensionBundleID>");
Swift:
let pipe = Pipe()
let task = Process()
task.launchPath = "/usr/bin/pluginkit"
task.arguments = ["-e", "use", "-i", "<yourFinderExtensionBundleID>"]
task.standardOutput = pipe
let file = pipe.fileHandleForReading
task.launch()
let result = NSString(data: file.readDataToEndOfFile(), encoding: