在 Cocoa 应用程序中,我们通常可以在多个位置之一安装插件包。例如,如果应用程序名为“MyApp”,您可以在以下位置安装插件:
- /Applications/MyApp.app/Contents/PlugIns
- ~/库/应用程序支持/MyApp/PlugIns
- /图书馆/应用程序支持/MyApp/插件
- /网络/库/应用程序支持/MyApp/PlugIns
我正在构建一条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]];
这将导致 Array 返回NSSearchPathForDirectoriesInDomains
,并将builtInPlugInsPath
值附加到末尾。
但是,它实际上会搜索像“~/Library/Application Support/PlugIns”这样的目录(缺少“MyApp”)文件夹。在我开始破解代码以注入我的应用程序的名称(随时可能更改)之前,我做错了吗?
有没有办法告诉 Cocoa“给我这个应用程序的 'PlugIns' 目录的所有搜索路径”?