如果存在多个具有相同ID的bundle,如何获取正确的bundle实例?

时间:2013-06-09 11:23:03

标签: objective-c macos

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

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

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

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

我的问题

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

我想到了这个替代方案:

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

我不确定,但我认为如果该类被一个位于该包外部的文件子类化(如同在AppKit中完成的那样),这将会破坏。我在这里纠正吗?

1 个答案:

答案 0 :(得分:2)

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

myPluginBundle = [NSBundle bundleForClass:self.class];
bundlePath = [myPluginBundle pathForResource:@"Sparkle"type:@"bundle"];
bundle = [NSBundle bundleAtPath:bundlePath];