为了开发方便或者是版权问题,我们在开发过程中,避免不了要采用framework来封装我 们实现的一些功能,这个也是开发过程中比较常见的一种策略,如果要生成的framework是独立的、即压根没有引用系统的库做自己的库的基础,应该不会出现系统SDK里面的 头文件引用不到的问题。比如这里以libxml.tbd为例,封装一个XML解析的库
我们使用libxml库,我们在header search paht里面也添加了对其的路径引用,可是为什么报这个错!这太不合理了!
思之想后,怀疑是对libxml的引用问题导致的SDK头文件无法找到,修改添加过程中的non-recursive参数为recursive,再次进行编译,一切OK!由此得出结论,如果你要生成的库需要调用到系统中某一个库,需要将其路径引用属性设置为recursive!
再次确认编译没有任何问题。继续我们的工作。
编译生成真机和模拟器需要的文件进行合并,如果生成,这里不做阐述。
我们便拿到了我们封装好的库,拖进我的目标项目中,我们再次进行编译看效果如何!
一波三折之后,我们自己封装的库文件竟然又报错
include of non modular header inside framework。。。。
继续解决之
在目标项目中的TARGET--->BUILD SETTINGS选项里面找到
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES
看到这个值为NO,我们将其设置为YES,再次进行编译,OK,通过!正常调用此XML解析库,发现一切正常!
综上,这里有个注意之处,就是如果自己封装的库中引用了SDK中的动态库,需要将其引用路径属性设置为recursive并将目标项目中的CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES设置为YES!!!切记切记!!
当然此问题是基于libxml而出现问题,别的是不是会出现问题,自行体会!