XCODE9 跳过的那些坑儿

最近升级了Xcode,升级第一天就遇到了坑,听我一一道来

一:应用中拖入第三方类报错

Undefined symbols for architecture arm64: “_OBJC_CLASS_$_xxxxxx”, referenced from: objc-class-ref in xxxxxxx.o 



记得以前曾经遇到过这样的问题,但是忘了怎么处理了,于是一顿谷歌百度,先按照前辈们的指点做一下两步检查
(1)查看Build Settings -------->Valid Architectures 中所支持的架构是否有arm64,如果没有加入

(2)查看Build Settings -------->Other Linker Flags 中是否有键$(inherited),如果没有添加$(inherited)


按照前辈们的经验,检查修改完毕,抱着很大的希望运行项目,结果.......还是报这个错。于是心不甘一顿摸索,终于找到了问题的解决办法。如下
问题的根源是由拖入第三方类库导致的,于是检查Build Phases -------->Compile Sources
查看我们新拖入项目的类的.m文件是否被加入Compile Sources,一看果然没有被加载进来,于是找到第三方类库的.m文件,手动添加进来。如下图:


重新运行项目,项目终于可以正常运行。

二:项目中拖入第三方类库(含有xib文件),在调用第三方类库(控件),如果控件是从xib中加载的报错:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/containers/Bundle/Application/0FEBBEE9-08EC-4BBB-8A7F-0E0EBF38F346/FeOAClient.app> (loaded)' with name 'xxxxxxx'';



这个问题之前也遇到过,一般都是调用[[[NSBundle mainBundle] loadNibNamed:@"xxxxx" owner:self options:nil] firstObject],方法时,把nibName写错了,但是这次检查了xib文件名并没有写错,那就奇怪了,于是追求溯源,既然报错说无法从资源包中加载这个nib,那就去看看新拖入的第三方xib是否被加进了资源包,Build Phases -------->Copy Bundle Resouces,进去一看果不其然,新拖进项目的xib是没有被自动加载进来的,于是只好手动添加:


添加进去之后,项目正常运行,第三方类库也可以正常使用。

总结:从以上两个问题可以看出,在Xcode9中编译器不会把新拖入项目的类自动加载到目标中的编译源代码(Compile Sources)中,也不会把xib、图片等资源添加到资源包(Build Phases -------->Copy Bundle Resouces),都需要我们手动添加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值