TyphonConfig正试图用错误的bundle路径加载plist



我刚接触Typhoon,似乎不知道如何正确加载Configuration.plist。我的项目是以Swift PocketForecast示例为模型的,尽管我从自己的基于CocoaPods的项目开始,并自己添加了Typhoon(即,我不是从克隆的PocketForecastProject开始的)。我将plist集成用于多个程序集。

当我使用这个:

public dynamic func config() -> AnyObject {
    return TyphoonDefinition.configDefinitionWithName("Configuration.plist")
}

我收到一个找不到文件的错误,在调试器中我可以看到它使用的路径是"/path/to/MyProject.app/Frameworks/Typhoon.framework",但我的配置文件当然不在那里,它位于"/path_to/MyProject/app/Configuration.plist"。是的,我已经确认文件确实在那里。

我试图通过做这样的事情来解决这个问题:

public dynamic func config() -> AnyObject {
    return TyphoonDefinition.withClass(TyphoonConfigPostProcessor.self) {
        (definition) in
        definition.injectMethod("useResourceAtPath:") {
            (method) in
            method.injectParameterWith(self.configURL())
        }
    }
}
public dynamic func configURL() -> AnyObject {
    return TyphoonDefinition.withFactory(self.configBundle(), selector: "URLForResource:withExtension:", parameters: {
        (initializer) in
        initializer.injectParameterWith("Configuration")
        initializer.injectParameterWith("plist")
    })
}
public dynamic func configBundle() -> AnyObject {
    return TyphoonDefinition.withClass(NSBundle.self) {
        (definition) in
        definition.useInitializer("mainBundle")
    }
}    

奇怪的是,这有时也能奏效。它看起来是随机的,并且基于我的其他台风组件的装载顺序。换句话说,有时一切都很好,但有时Typhoon初始化会出现各种不同的错误,比如"没有组件匹配id XYZ"或"在配置中找不到值"。但正如我所说,有时它还可以。

我一定错过了台风如何初始化的一些基本部分,所以非常感谢任何帮助!

编辑:所以,经过一番摸索,我上面尝试的第一个方法似乎失败了,因为CocoaPods在Swift项目中使用框架而不是静态库的问题?我在台风中发现了这个代码来源:

+ (id <TyphoonResource>)withName:(NSString *)name
{
    return [self withName:name inBundle:[NSBundle bundleForClass:[self class]]];
}

由于[self class]将解析为Typhoon框架内的一个类,我想我明白为什么它是捆绑包,它是它正在使用的捆绑包,但对我来说这似乎是一个bug。我想看看我是否能弄清楚为什么这不会破坏PocketForecast应用程序。

这是3.0.1台风中的一个错误。正如您所指出的,当Typhoon被链接为Swift框架时,TyphoonConfiguration资源使用了错误的捆绑包。这已在3.0.2号台风中得到纠正。

最新更新