1

我正在为主机应用程序(Aperture)编写插件。该插件被部署为一个包,在这个包内有这个插件需要的框架,例如 Sparkle。

问题是现在可以在 Aperture 中加载另一个插件,该插件也嵌入了 Sparkle 框架。在 Sparkle 代码中,定义了以下预处理器指令,用于检索 Sparkle 的NSBundle实例:

#define SPARKLE_BUNDLE [NSBundle bundleWithIdentifier:@"org.andymatuschak.Sparkle"]

但是,如果两个插件都有自己的 Sparkle 实例,则存在两个具有相同标识符的包,当然在我的情况下加载了错误的包。无论如何,我不想在这里依靠机会。

我的问题

有没有办法加载正确的 Sparkle 包,嵌入在我的插件中?

我想到了这个替代方案:

#define SPARKLE_BUNDLE [NSBundle bundleForClass:[self class]]

我不确定,但我认为如果该类被位于捆绑包外部的文件子类化(就像在 AppKit 中所做的那样),这会中断。我在这里正确吗?

4

1 回答 1

2

如果您嵌入了它,请通过其路径而不是通过其标识符加载它

myPluginBundle = [NSBundle bundleForClass:self.class];
bundlePath = [myPluginBundle pathForResource:@"Sparkle"type:@"bundle"];
bundle = [NSBundle bundleAtPath:bundlePath];
于 2013-06-09T11:32:05.730 回答