ココア:アプリの可能な PlugIns ディレクトリのリストを取得する正しい方法は?
質問
Cocoa アプリでは通常、多くの場所の 1 つにプラグイン バンドルをインストールできます。たとえば、アプリの名前が「MyApp」の場合は、次の場所でプラグインをインストールできます。
- /アプリケーション/MyApp.app/コンテンツ/プラグイン
- ~/ライブラリ/アプリケーションサポート/MyApp/プラグイン
- /ライブラリ/アプリケーションサポート/MyApp/プラグイン
- /ネットワーク/ライブラリ/アプリケーション サポート/MyApp/プラグイン
を構築しています 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」フォルダーがありません) のようなディレクトリが検索されます。コードをハッキングしてアプリケーションの名前 (いつでも変更される可能性があります) を挿入する前に、これは間違っているでしょうか?
Cocoa に「このアプリケーションの「PlugIns」ディレクトリのすべての検索パスを教えてください」と伝える方法はありますか?
解決
いいえ。あなたは右のそれをやってます。
あなたはその情報の辞書のための主なバンドルを尋ねるとkCFBundleNameKey
のそこを探すことにより、実行時にアプリケーションの名前を取得することができます。あなたのアプリケーションの名前を変更すると、あなたのInfo.plistにバンドル名を変更します。
(それははるかに壊れやすいですと間違いなく、アプリケーションののファイル名を使用しないでください。)
あなたのアプリケーションの名前を変更しているため、プラグインは、彼らが働いて停止をインストールした場合、ユーザーはそれのようではないかもしれないことに注意してください。
上記のコードは、アプリケーションバンドル内のフォルダのプラグインをキャッチしないであろう。なお。そのために、その内蔵のプラグインのパスまたはURLのためのあなたの主なバンドルをお願いします。