代码之家  ›  专栏  ›  技术社区  ›  d11wtq Vadim Baryshev

cocoa:获取应用程序可能插件目录列表的正确方法?

  •  2
  • d11wtq Vadim Baryshev  · 技术社区  · 14 年前

    在Cocoa应用程序中,我们通常可以在许多地方安装插件包。例如,如果该应用程序被称为“myapp”,则可以在以下位置安装该插件:

    • /应用程序/myapp.app/contents/plugins
    • ~/library/application支持/myapp/plugins
    • /库/应用程序支持/myapp/插件
    • /网络/库/应用程序支持/myapp/插件

    我正在建造一个 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]];
    

    这将导致返回的数组 NSSearchPathForDirectoriesInDomains builtInPlugInsPath 附加到结尾的值。

    但是,它实际上搜索目录,比如“~/library/application-support/plugins”(缺少“myapp”)文件夹。在我开始破解代码来输入我的应用程序的名称(随时可能更改)之前,我做的是错的吗?

    有没有一种方法可以告诉Cocoa“为这个应用程序的“插件”目录提供所有搜索路径”?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Peter Hosey    14 年前

    不。你做得对。

    您可以在运行时通过向主包询问其信息字典并查找来获取应用程序的名称。 kCFBundleNameKey 其中。重命名应用程序时,请更改info.plist中的包名称。

    (绝对不要使用您的应用程序 文件名 因为那更脆弱。)

    请注意,如果安装的插件由于您重命名了应用程序而停止工作,用户可能不喜欢它。

    请注意,上面的代码不会捕获应用程序包中的插件文件夹。为此,请向主包询问其内置插件路径或URL。

    推荐文章