Cocoa: CORRECTEMENT obtenir la liste des répertoires possibles plugins pour une application?

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

  •  25-09-2019
  •  | 
  •  

Question

Dans une application Cocoa En général, nous pouvons installer un faisceau de plug-in dans l'un d'un certain nombre de places. Si, par exemple l'application est appelée « MyApp » vous seriez en mesure d'installer le plug-in à:

  • /Applications/MyApp.app/Contents/PlugIns
  • ~ / Library / Application Support / MyApp / Plug-ins
  • / Bibliothèque / Application Support / MyApp / Plug-ins
  • / Réseau / Bibliothèque / Application Support / MyApp / Plug-ins

Je construis un NSArray de chemins pour rechercher dans l'ordre correct, mais je suis sûr que je fais ce mal car il se sent comme je fais trop de travail pour quelque chose d'Apple semblent offrir beaucoup de fonctions pour.

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]];

Il en résulte le tableau renvoyé par NSSearchPathForDirectoriesInDomains, avec la valeur builtInPlugInsPath ajoutée à la fin.

Cependant, il recherche actuellement des répertoires comme "~ / Library / Application Support / Plug-ins" (manque le "MyApp") dossier. Avant de commencer le piratage du code pour injecter le nom de ma demande (ce qui est susceptible de changer à tout moment), je fais ce mal?

Est-il possible de simplement dire Cocoa « me donner tous les chemins de recherche pour « Plug-ins » » répertoires pour cette application "?

Était-ce utile?

La solution

Non. Vous le faites à droite.

Vous pouvez obtenir le nom de votre application lors de l'exécution en demandant le paquet principal de son dictionnaire d'informations et la recherche de kCFBundleNameKey celui-ci. Lorsque vous renommez votre application, modifiez le nom de paquet dans votre Info.plist.

(Je ne vous conseille pas utiliser votre application de nom , comme c'est beaucoup plus fragile.)

Sachez que les utilisateurs pourraient ne pas aimer si les plug-ins ils ont installé cesser de travailler parce que vous avez renommé votre application.

Notez que votre code ci-dessus ne sera pas attraper le dossier PlugIns à l'intérieur du paquet d'application. Pour cela, demandez à votre paquet principal de son chemin plug-ins intégrés ou URL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top