iOS真机测试中出现dyld`dyld_fatal_error错误

时间:2023-03-09 05:01:47
iOS真机测试中出现dyld`dyld_fatal_error错误

  最近进入一家新公司,接手了一个之前由外包公司承接的项目。首先吐槽一下项目质量,哎毕竟也憋了很久了。

  1.上手项目是打不开的,所有framework静态库全体飘红,一编译七八十错误。最终是偷懒还是什么就不得而知了。最终慢慢一个个的将静态库framework导入Building Phases中,其中又发生了很多意想不到的错误。若有人对此有兴趣我们可以下次再聊这些问题。

  2.项目代码分类封装问题。项目是用Swift写的,而我之前使用的较多的是Objective-C,Swift用的不多,对Swift的印象就是:一升级Xcode就满屏红点;各类三方库都需要用桥来连接;等等等等诸如此类问题吧。当然这并不是主要槽点,毕竟Swift是个大趋势,iOS开发人员向前看的话,Swift是必须要了解熟悉到精通的。但似乎目前直接全盘用Swift来写的公司并不多,大多数都是OC慢慢向Swift转换吧。直接用Swift写项目,一定是大神。抱着这样欣赏的眼光我开始看代码。然后我恨不得为刚才自己的判断抽自己两巴掌。

  所有代码都没有分类,除了大的MVC框架,底下的各个小模块的控制器都混在一个目录下。然后类的命名上,首字母大小写不分,直接汉语拼音这种kongtiaoController都出来了。我天对我个强迫症这简直要亲命好吗。一周工作进度没多少,全给分辨各式各样莫名其妙的类名、方法名参数上去了。

  代码的封装问题。例子:项目是用Post请求数据,参数在上传前需要MD5加密,大概30行代码左右。一般这种哪个类里面都有可能用到的代码,写个工具类来执行就完事儿了,代码看着省心,复用率高。可人偏不,每一页都复制粘贴一下,就改一个参数,其他都不改原封不动复制粘贴。第一次看到有种砸电脑的冲动,我想大家都懂。

  大概就扯这么多吧。不管怎么样,拿着老板的钱,就看代码呗。昏天黑地改了一周代码后,老板说,打包上传吧。我说先做个真机测试吧,老板一挥手,去吧。我就回来准备用五分钟真机测试下就打包,结果就出现了如下的问题:在Build Success,真机打开启动页后,程序崩溃,提示如下:

iOS真机测试中出现dyld`dyld_fatal_error错误

  因为是解决了办法才来写博文,之前也没有截图问题,现在也不敢乱改回去了。我的错误就是log中Pods.framework换成SwiftHTTP。看到之后真心内心是崩溃的。这什么鬼?SwiftHTTP本身就不是我多么熟悉的框架,再加上并不知道具体是什么原因导致的这个问题。得,Google吧。

  最终大概出现了这些解决办法:

  1.clean&run,不行重启手机clean&run

    目测某些大神人品摆平一切,我这儿什么都没有发生。要多扶老奶奶了。

  2.Build Phases中重新导入SwiftHTTP

    什么都没有发生。

  3.SwiftHTTP的Required换成Optional可选

    这是提及频率最高的办法了,也有好多人似乎用这个方法成功解决了问题。大概解释是使用的框架不支持低的版本,所以设置成可选来配置是否可用。

    哎这是个想法,顿时我就去看了我的Deployment Target,是9.0。难道是这儿的问题?

    首先,9.0换成9.3,安装,继续崩溃。

    Required换成Optional,编译报错,具体问题忘了,大概就是link不到框架。

    9.3换成9.0,编译继续报错。哎放弃了。

  4.在某个角落发现了这么不起眼的一句话:DFULibrary.framework静态库是添加在Embedded Binaries下面的

    当然那个答主是将Embedded Binaries里面的framework转移到Build Phases中,而我当时除了SwiftHTTP其余的几个静态库都在Embedded Binaries中存在。难道是这个问题?

    试着在Embedded Binaries中导入SwiftHTTP,运行,崩溃。哎我又去设置Required和Optional了,却意外发现Build Phases中存在两个SwiftHTTP。难道Embedded Binaries中会自动导入Build Phases?我试着删除,成功运行。

  五分钟的真机测试弄了一整天左右吧。哎碰到这种不知所云的崩溃真是没什么办法。

  至今仍不知道为什么会这样,这也只是解决办法,原理求大神告知吧。