Какао: правильный способ получить список возможных каталогов подключаемых модулей для приложения? - PullRequest
2 голосов
/ 24 октября 2010

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

  • / Применения / MyApp.app / Содержание / PlugIns
  • ~ / Библиотека / Поддержка приложений / MyApp / PlugIns
  • / Библиотека / Поддержка приложений / MyApp / PlugIns
  • / Сеть / Библиотека / Поддержка приложений / MyApp / PlugIns

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

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, добавленным в конец.

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

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

1 Ответ

2 голосов
/ 25 октября 2010

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

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

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

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

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

...