jjzjj

ios - dyld_fatal_error 与 Typhoon+Swift+iOS7.x+Plist-bootstrapping

coder 2023-09-05 原文

我在 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)
        }
    }
}

如您所见,我想将该程序集注入(inject) AppDelegate。 我还在 Info.plist 文件中添加了 TyphoonInitialAssemblies 条目。而在这一刻,我的问题开始了。我测试了几种导致 NSException 的组合:

Can't resolve assembly for name xxx

这些组合是(typhtest 是项目/包名称):

  • Info.plist 中的类名:ApplicationAssembly,在build设置中定义模块属性:
  • Info.plist 中的类名:ApplicationAssembly,在build设置中定义模块属性:
  • Info.plist 中的类名:typhtest.ApplicationAssembly,在build设置中定义模块属性:/li>
  • Info.plist 中的类名:typhtest.ApplicationAssembly,在build设置中定义模块属性:/li>

我找到了 this在 StackOverflow 上回答,所以我尝试了最后一个组合:

  • Info.plist 中的类名:_TtC8typhtest19ApplicationAssembly,在build设置中定义模块属性:

此组合不会抛出 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 日编辑

同样奇怪的是,如果我手动创建工厂并手动注入(inject)一些东西,Typhoon 会起作用。我所做的步骤是:

  1. 已删除 TyphoonInitialAssemblies来自 Info.plist 的项目
  2. 更改 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 的事实,所以问题仍然是实际的。

最佳答案

该问题已被复现as a bug并将尽快解决。在 pod update 之后,它也在 Typhoon 示例应用程序中重现,同时干净的结帐工作正常。这表明在 2.2.1 和 2.3.0 之间的某个地方出现了回归错误,但是检查它会产生一些奇怪的结果,因此实际情况可能并非如此。我们会将更新/发现发布到问题日志中。

解决方法:

与此同时,请通过在您的 AppDelegate 中覆盖以下方法来引导 Typhoon:

dynamic func initialFactory() -> TyphoonComponentFactory {

    return TyphoonBlockComponentFactory(assemblies:[
        ApplicationAssembly(),
        AnotherAssemblyIfRequired()])
}

这种方法像 plist 集成一样引导 Typhoon,因此提供 UIStoryboard 集成、UIStateRestoration 等。 .它直到现在才被记录下来,因为我们认为 staring Typhoon 的 plist 风格已经足够了,提供太多选项只会让人感到困惑。然而,在这种情况下,它适用于 iOS7.1+Swift+Storyboards 而 plist 不适用。

命名空间:

至于命名空间问题,应该没有必要像您那样在 plist 文件中破坏名称 - Typhoon 将检测隐式命名空间是否可用并透明地处理它。但是,如果目前这在 iOS7.x 中不起作用,您可以按如下方式向程序集添加指令:

@objc(ApplicationAssembly)
public class ApplicationAssembly : TyphoonAssembly {
    //etc
}

编辑:在 Typhoon 2.3.1 中修复:

从 Typhoon 2.3.1 开始,plist bootstrapping 现在可以与 Swift+iOS7.x 一起使用

关于ios - dyld_fatal_error 与 Typhoon+Swift+iOS7.x+Plist-bootstrapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27035279/

有关ios - dyld_fatal_error 与 Typhoon+Swift+iOS7.x+Plist-bootstrapping的更多相关文章

  1. ruby-on-rails - Ruby on Rails : . 常量化 : wrong constant name error? - 2

    我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby​​常量:Content2而不是content2。Aconstantnamestart

  2. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  3. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  4. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  5. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  6. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  7. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  8. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  9. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  10. += 的 Ruby 方法 - 2

    有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=

随机推荐