在Cocoa应用程序中动态加载自定义插件(库)

时间:2011-03-28 15:18:27

标签: objective-c cocoa dynamic plugins cocoa-design-patterns

我为Mac OS X开发了一个Cocoa应用程序。我想制作一些自定义插件(也带有界面)并在我的应用程序中动态加载它们。我的应用程序应该查看文件夹并检索所有文件(插件)并使其在用户界面中可用。

有人可以建议我一个起点吗?

如何动态加载它们,插件必须是动态库还是某些?

感谢。

1 个答案:

答案 0 :(得分:4)

您想看看NSBundle。可加载的bundle(Framework是一个可加载的bundle)项目将产生你想要的东西。如果将bundle的principleClass属性设置为插件的顶级类,则可以从加载的bundle中检索该类的实例。您可以使用

在给定路径中加载包
id bundle = [NSBundle bundleWithPath:pathToBundle];
NSError *err;
if(![bundle loadAndReturnError:&err]) {
  // err contains error info
} else {
  // bundle loaded properly
  Class pluginClass = [bundle principleClass];
  // instantiate pluginClass and off you go...
}