Какао: Правильный способ получить список возможных каталогов плагинов для приложения?

StackOverflow https://stackoverflow.com/questions/4007341

  •  25-09-2019
  •  | 
  •  

Вопрос

В приложении какао обычно мы можем установить пучок плагина в одном из нескольких мест. Если например, приложение называется «MyApp», вы сможете установить плагин по адресу:

  • /Applications/myapp.app/contents/plugins.
  • ~ / Библиотека / Поддержка приложений / MyApp / Plugins
  • / Библиотека / Поддержка приложений / MyApp / Plugins
  • / Сетевая / Библиотека / Поддержка приложений / MyApp / Плагины

Я строю А.Н. NSArray Путей для поиска в правильном порядке, но я почти уверен, что я делаю это не так, поскольку ощущается, что я чувствую себя слишком много работы на что-то, что яблоко, кажется, обеспечивает много функций.

NSArray *systemSearchPaths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSAllDomainsMask, YES);
NSMutableArray *searchPaths = [NSMutableArray array];

NSFileManager *fileManager = [NSFileManager defaultManager];

for (NSString *systemPath in systemSearchPaths) {
    NSString *systemPluginsPath = [systemPath stringByAppendingPathComponent:@"PlugIns"];
    // FIXME: Remove debug code
    NSLog(@"Considering plugin path %@", systemPluginsPath);
    if ([fileManager fileExistsAtPath:systemPluginsPath]) {
        [searchPaths addObject:systemPluginsPath];
    }
}

[searchPaths addObject:[[NSBundle mainBundle] builtInPlugInsPath]];

Это результаты в массиве, возвращенном NSSearchPathForDirectoriesInDomains, с builtInPlugInsPath значение прилагается к концу.

Тем не менее, он фактически ищет каталоги, такие как «~ / библиотека / поддержка / плагины / плагины» (отсутствуют в папке «MyApp»). Прежде чем я начну взломать код, чтобы ввести имя моего приложения (что подлежит изменению в любое время), я делаю это неправильно?

Есть ли способ просто сказать какао "Дайте мне все пути поиска для каталогов" плагинов "для этого приложения"?

Это было полезно?

Решение

Неа. Ты делаешь это правильно.

Вы можете получить имя вашего приложения во время выполнения, попросив основной пункт для его информационного словаря и ищете kCFBundleNameKey в этом. Когда вы переименовываете свое приложение, измените имя пучка в вашей info.plist.

(Определенно не используйте ваше приложение имя файла, как это гораздо более хрупко.)

Помните, что пользователи могут не понравиться, если плагины они установили, перестают работать, потому что вы переименованы ваше приложение.

Обратите внимание, что ваш код выше не будет ловить папку плагинов внутри пакета приложения. Для этого задайте свое главное расслоение для его встроенного пути или URL-адреса плагинов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top