使用Typhoon Swift iOS7.x Plist-bootstrapping的dyld_fatal_err
我在
Swift项目中使用Typhoon Framework 2.3.0版本时遇到了非常烦人的问题.
我在教程中提到了Podfile中的Typhoon,安装了Pods,创建了桥接头并添加了#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.
这种组合是(typhtest是项目/包名称): > Info.plist中的ClassName:ApplicationAssembly,在Build Settings中定义Module属性:No 我在StackOverflow上找到了this的答案,所以我尝试了最后一个组合: > Info.plist中的ClassName:_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 2014年11月21日编辑 同样奇怪的是,如果我手动创建工厂并手动注入某些东西,Typhoon也可以.我做的步骤是: >从Info.plist中删除了TyphoonInitialAssemblies项 func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let factory = TyphoonBlockComponentFactory(assemblies: [AppAssembly()]) factory.inject(self) return true } 但它没有改变我想在没有手动定义工厂的情况下使用Typhoon这一事实,所以问题仍然存在.
此问题已转载
as a bug并将尽快解决.在pod更新后,它也被复制在Typhoon示例应用程序中,同时干净的结帐工作正常.这表明回归错误已经在2.2.1和2.3.0之间徘徊,但是检查这会导致一些奇怪的结果,所以实际情况可能并非如此.我们会将更新/发现发布到问题日志中.
解决方法: 在此期间,请通过覆盖AppDelegate中的以下方法来引导Typhoon: dynamic func initialFactory() -> TyphoonComponentFactory { return TyphoonBlockComponentFactory(assemblies:[ ApplicationAssembly(),AnotherAssemblyIfRequired()]) } 这种方法就像plist-integration一样引导Typhoon,因此提供了UIStoryboard集成,UIStateRestoration等等. .直到现在还没有记录,因为我们认为盯着Typhoon的plist风格已经足够了,提供太多选择会让人感到困惑.但是在这种情况下,它适用于iOS7.1 Swift Storyboard,而plist则不适用. 命名空间: 至于命名空间问题,没有必要像你一样破坏plist文件中的名称 – Typhoon将检测隐式命名空间是否可用并透明地处理它.但是,如果这在iOS7.x中当前不起作用,您可以按如下方式向程序集添加指令: @objc(ApplicationAssembly) public class ApplicationAssembly : TyphoonAssembly { //etc } 编辑:在台风2.3.1中修复: 从Typhoon 2.3.1开始,plist bootstrapping现在可以与Swift iOS7.x一起使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |