Как включить расширение FinderSync в системных настройках macOS

Я интегрирую расширение FinderSync в свое приложение какао, чтобы отображать значки в файлах и папках. Посмотрите на два сценария ниже:

  1. Когда я запускаю приложение с помощью FinderSync Extension (например, DemoFinderSync), посмотрите на синее всплывающее окно на изображении ниже, в этом случае расширение добавляется в Системные настройки с галочкой и также называется основным классом "FinderSync.m".

Снимок экрана 1

  1. Когда я запускаю приложение, используя мою схему приложения (например, DemoApp), посмотрите на синее всплывающее окно на изображении ниже, в этом случае расширение добавляется в системную настройку, но без галочки, и этот основной класс "FinderSync.m" не вызывает и FinderSync Расширение не работает в этом случае.

Снимок экрана 2

У кого-нибудь есть идея, как включить Расширение 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:
Другие вопросы по тегам