在Cocoa應用程序中,我們通常可以在多個位置之一安裝插件包。例如,如果應用程序被稱爲 「MyApp的」 你能夠在安裝插件:可可:正確的方式來獲取應用程序可能的插件目錄列表?
- /Applications/MyApp.app/Contents/PlugIns
- 〜/庫/ Application Support/MyApp的/插件
- /庫/ Application Support/MyApp的/插件
- /網絡/庫/ Application Support/MyApp的/插件
我建立的路徑的NSArray
以正確的順序進行搜索,但我很確定我正在做這個錯誤的辛克e感覺就像我爲蘋果似乎提供了許多功能做了太多的工作。
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」)文件夾。在我開始竊取代碼以注入我的應用程序的名稱(可隨時更改)之前,我做錯了什麼?
有沒有辦法直接告訴可可「給我一個‘插件’的所有搜索路徑」目錄此應用程序「?
謝謝。我很好地工作,首先檢查所有系統路徑,如上所述,然後檢查主包所返回的buildInPlugInsPath。感謝關於命名的建議。我將更改我的代碼,因爲當前使用的是CFBundleExecutable值,而不是包名本身。 – d11wtq 2010-10-26 04:29:16