Cacao: camino correcto para obtener lista de posibles directorios plugins para una aplicación?

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

  •  25-09-2019
  •  | 
  •  

Pregunta

En una aplicación de cacao en general la posibilidad de instalar un paquete de plug-in en una de una serie de lugares. Si, por ejemplo, la aplicación se llama "MyApp" que sería capaz de instalar el plugin en:

  • /Applications/MyApp.app/Contents/PlugIns
  • ~ / Library / Application Support / MyApp / plugins
  • / Library / Application Support / MyApp / plugins
  • / Red de Apoyo / Library / Application Support / MyApp / plugins

Estoy construyendo un NSArray de calzadas para buscar en el orden correcto, pero estoy bastante seguro de que estoy haciendo esto mal, ya que se siente como que estoy haciendo demasiado trabajo para algo que Apple parece proporcionar una gran cantidad de funciones para.

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

Esto resulta en la matriz devuelta por NSSearchPathForDirectoriesInDomains, con el valor builtInPlugInsPath añadida al final.

Sin embargo, lo que realmente busca en directorios como "~ / Library / Application Support / plugins" (faltan el "MyApp") carpeta. Antes de empezar a cortar el código para inyectar el nombre de mi solicitud (que está sujeta a cambios en cualquier momento), estoy haciendo esto mal?

¿Hay una manera de decirle simplemente Cacao "dame todas las rutas de búsqueda para 'plugins'" directorios para esta aplicación "?

¿Fue útil?

Solución

Nop. Lo estás haciendo bien.

Se puede obtener el nombre de la aplicación en tiempo de ejecución al pedir el paquete principal de su diccionario de información y buscar en ella kCFBundleNameKey. Al cambiar el nombre de su aplicación, cambie el nombre del paquete en su Info.plist.

(Definitivamente no utilice de la aplicación nombre , ya que es mucho más frágil.)

Tenga en cuenta que los usuarios que no te guste, si los plug-ins instalados que dejan de funcionar debido a que cambió el nombre de la aplicación.

Tenga en cuenta que el código anterior no alcanzará los plugins de la carpeta dentro del paquete de aplicaciones. Por eso, pregunte a su paquete principal de su base de ruta de plug-ins o URL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top