我正在为主机应用程序(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中完成的那样),这将会破坏。我在这里纠正吗?
答案 0 :(得分:2)
如果您嵌入它,通过其路径加载而不是通过其标识符
myPluginBundle = [NSBundle bundleForClass:self.class];
bundlePath = [myPluginBundle pathForResource:@"Sparkle"type:@"bundle"];
bundle = [NSBundle bundleAtPath:bundlePath];