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

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

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

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

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

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

Кто-нибудь знает, как включить расширение Finder в Системных настройках, используя второй сценарий?


person jigs    schedule 02.07.2015    source источник


Ответы (3)


Схема без отладки (#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.

person dbainbridge    schedule 06.07.2015
comment
Его добавить в системные настройки, но не включать в качестве галочки, как показано на втором снимке экрана моего вопроса, опубликованного выше. - person jigs; 07.07.2015
comment
Посмотрите справочную страницу для pluginkit и протестируйте через командную строку, чтобы заставить его работать. - person dbainbridge; 07.07.2015
comment
Система @dbainbridge (pluginkit -e use -i com.domain.my-finder-extension); script не работает в OSX Mojave. Вы сталкивались с этой проблемой? Не могли бы вы предоставить решение для этого? - person jigs; 26.12.2018
comment
можете вы помочь мне? stackoverflow.com/questions/61770116/ - person Anoop Vaidya; 13.05.2020

Я получил решение:

Код для включения расширения (идентификатор пакета)

system("pluginkit -e use -i YourAppBundleID")

Код для отключения расширения (идентификатор пакета)

system("pluginkit -e ignore -i YourAppBundleID")

До того, как я использовал:

system("pluginkit -e use -i AppBundleID.FinderSync")

так что просто удалите ".FinderSync", он работает.

person jigs    schedule 07.07.2015
comment
Привет, у меня похожая проблема в моем приложении. Приложение подписано доверенным сертификатом, но когда приложение запускается в первый раз на Mac, расширение не включается автоматически. Есть зацепки? - person Sandeep T D S; 12.06.2017
comment
Связанные вопросы: stackoverflow.com/questions/44117848/ stackoverflow.com/questions/44017346/ - person Sandeep T D S; 12.06.2017

Связывание ответа, который я нашел на форуме разработчиков Apple:

https://forums.developer.apple.com/thread/77682

Когда ваше приложение находится вне песочницы, вы можете использовать:

Цель-C:

system("pluginkit -e use -i <yourFinderExtensionBundleID>");

Быстрый:

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:
person pkamb    schedule 19.09.2018
comment
Также спрашиваю о песочнице: stackoverflow.com/questions/50171851/ - person pkamb; 20.09.2018