最近在写一个新的 Swift 工程,在引用旧的 objective-c 的 pod 时开启了 use_frameworks!配置项,结果在 pod install 和 pod update 出现了这么一个问题
1 | target has transitive dependencies that include static frameworks: (AAA) |
问题原因
Podfile 中不使用 use_frameworks! 时是会生成相应的 .a(静态链接库)文件,然后通过 static libraries 来管理 pod 代码,在 Linked 时会包含该 pod 引用的其他的 pod 的 .a 文件
Podfile 中使用 use_frameworks! 时是会生成相应的 .framework 文件(动态链接库:实际内容为 Header+动态链接库+资源文件),然后通过 dynamic frameworks 的方式来管理 pod 代码,在 Linked 时会包含该 pod 引用的其他的 pod 的 .framework 文件
我们开启了 use_frameworks! 以动态 framework 的方式引用了 AAA,然而 AAA 实际上是一个静态库,需要拷贝并链接到该 pod 中,然而 dynamic frameworks 方式并不会这么做,所以就报错了。
解决方案
在引用 AAA 的 pod 的 podspec 文件当中开启 static_framework 配置
1 | s.static_framework = true |
把该 pod 作为一个静态 framework 来编译链接,这样 AAA 就会被拷贝链接到到该 pod 的 framework 当中,这样就能正常引用了。