OC与Swift混编项目中引入use_frameworks!冲突的问题

项目下个版本开始用Swift编写,这涉及到OC与Swift混编的问题。早podfile中写入

use_frameworks! 

再导入一个Swift第三方框架,

OC与Swift混编项目中引入use_frameworks!冲突的问题_第1张图片

运行项目发现AFN找不到了:

把Swift的第三方和use_frameworks!去掉项目又可以运行了,首先思考:只添加两样东西  use_frameworks! 和 Swift 三方库。

从以下几点考虑:

1,AFN框架是否出了问题?

2,use_frameworks! 是否是这句话造成的找不到其他库?

对以上问题进行解答:

首先在在 Build Phases 中查看 “ Link binary With Libraries”,pod.framework管理导入的三方库,没问题。

其次找了一下use_frameworks!的作用如下:

如果在podfile里面不使用use_frameworks!,则通过static library(静态库)的方式引入管理pod框架,而Swift不支持静态库
加上use_frameworks!会把由以前的 .a 文件打包成 .frameworks文件(动态链接库:实际内容为Header + 动态链接库 + 资源文件),使用dynamic frameworks来取代static libraries方式,并且其他库引用时尖括号引用变成双引号,如:#import  变成 #import "xxx.h"。

注:swift 项目cocoapods默认 use_frameworks!  OC项目cocoapods默认 #use_frameworks!

分析错误信息:

OC与Swift混编项目中引入use_frameworks!冲突的问题_第2张图片

发现编译的时候Xcode还是链接了AFN的静态库,由于use_frameworks!的原因,找不到静态库,所以才会报错。

于是在build setting 里找到 Other Link Flags 点开发现之前导入的OC第三方框架都在里面,而且是 “-l” 开头跟错误信息很像,试着把其中的AFN给删掉再运行发现问题解决了,于是又删掉了其他三方框架只留下$(inherited)

看来Xcode链接哪些库是在Other Linker Flags设置的,cocoapods又把这些Xcode的设置存到了自己的xcconfig文件中。

项目编译时,编译器识别项目设置的顺序是:iOS Default(iOS 自身设置) -> Project -> xcconfig(cocoapods文件设置)->Target设置 ->Resolved设置,故而之前报错是一直在取xcconfig的设置,而这些设置是取自Other Link Flags ,所以删除了Other Link Flags 中的库,配置文件就走通了。

你可能感兴趣的:(移动开发,项目问题)