我在 Swift 项目中遇到了 Typhoon Framework 2.3.0 版的非常烦人的问题。
我在教程中提到的 Podfile 中包含了 Typhoon,安装了 Pod,创建了桥接头并添加#import <Typhoon/Typhoon.h>
到了这个头中。
然后我创建了名为 ApplicationAssebly 的程序集子类:
import Foundation
public class ApplicationAssembly: TyphoonAssembly {
public dynamic func appDelegate() -> AnyObject {
return TyphoonDefinition.withClass(AppDelegate.self) {
(definition) in
definition.injectProperty("myAssembly", with: self)
}
}
}
如您所见,我想将该程序集注入 AppDelegate。我还在 Info.plist 文件中添加了 TyphoonInitialAssemblies 条目。在这一刻,我的问题开始了。我测试了一些导致 NSException 的组合:
无法解析名称 xxx 的程序集
这种组合是(typhtest是项目/包名称):
- Info.plist 中的类名:ApplicationAssembly,在构建设置中定义模块属性:否
- Info.plist 中的类名:ApplicationAssembly,在构建设置中定义模块属性:是
- Info.plist 中的类名:typhtest.ApplicationAssembly,在构建设置中定义模块属性:否
- Info.plist 中的类名:typhtest.ApplicationAssembly,在构建设置中定义模块属性:是
我在 StackOverflow 上找到了这个答案,所以我尝试了最后一种组合:
- Info.plist 中的类名:_TtC8typhtest19ApplicationAssembly,在构建设置中定义模块属性:是
这种组合不会抛出 NSException 但我有dyld_fatal_error,来自 iPhone 5s (iOS 7.1) 的堆栈跟踪如下:
我从 iPhone 模拟器 (iOS 7.1) 得到的堆栈跟踪略有不同:
它适用于 iOS 8.1 模拟器有什么奇怪的!Typhoon Sample Application for Swift也适用于我的设备。
我还尝试清理任何 Xcode 和项目缓存以及 DerivedData 目录,我已经清理了项目和构建文件夹并重建了项目,但它不起作用。我的 Xcode 版本是 6.1 (6A1052d),我正在使用 OSX Yosemite 10.10.1 。
带有我的代码的 GitHub 存储库:https ://github.com/papcio28/Typhoon-Dyld-Error
21.11.2014 已编辑
同样奇怪的是,如果我手动创建工厂并手动注入一些东西,Typhoon 就可以工作。我所做的步骤是:
TyphoonInitialAssemblies
从 Info.plist 中删除项目更改
AppDelegate.application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
为func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let factory = TyphoonBlockComponentFactory(assemblies: [AppAssembly()]) factory.inject(self) return true }
但这并没有改变我想在不手动定义工厂的情况下使用 Typhoon 的事实,所以问题仍然存在。