OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries。有时间报的错误是:``use_modular_headers!globally in your Podfile, or specify:modular_header`。
一般都是建议在 Podfile 文件下添加 use_frameworks! ,有时候还会建议添加 use_modular_headers! ,那这两个标记位的作用是什么?
我们知道 Podfile 的作用是处理 CocoaPads ,而 use_frameworks!告诉 CocoaPods 你想使用 Framework 而不是静态库,而默认由于 Swift 不支持静态库,因此有一开始 Swift 必须使用 Framework 的限制。
态库和 Framework 的区别在于:
*.a 的静态库类似于编译好的机械代码,源代码和库代码都被整合到单个可执行文件中,所以它会和设备架构绑定,并且不包含资源文件比如图片;
Framework 支持将动态库、头文件和资源文件封装到一起的一种格式,其中动态库的简单理解是:不会像静态库一样被整合到一起,而是在运行或者运行时动态链接;
另外一个配置 use_modular_headers! ,它主要是将 pods 转为 Modular,因为 Modular 是可以直接在 Swift中 import ,所以不需要再经过 bridging-header 的桥接。
是开启 use_modular_headers! 之后,会使用更严格的 header 搜索路径,开启后 pod 会启用更严格的搜索路径和生成模块映射,历史项目可能会出现重复引用等问题,因为在一些老项目里 CocoaPods 是利用Header Search Paths 来完成引入编译,当然使用 use_modular_headers!可以提高加载性能和减少体积。
一种解决方法:在Podfile文件中使用use_frameworks!,把原来的含有静态库的私有库或公有库拖入工程。该种方式可能需要修改头文件的引入方式。这种方式处理简单。
另一种解决方法:在Podfile文件中使用use_modular_headers!。在targets->build settings->enable bitcode配置成NO;targets->build settings->built active architecture only->debug 选择NO;project->build settings->built active architecture only->debug 选择NO。这样配置好后,可能有一堆报错,让后修改完就好了(如原来self.className报错,修改为self.description就好了)。我当时把两个app整合在一起可是花了两天的。
pods更新代码时的报错。
-> Using libwebp (1.2.4) - Running pre install hooks [!] The 'Pods-FanHuaNetApp' target has transitive dependencies that include statically linked binaries: (/Users/apple/dykj/工作/FanHuaNet-swift/Pods/PayManager/aliPay/Frameworks/AlipaySDK.framework and /Users/apple/dykj/工作/FanHuaNet-swift/Pods/PayManager/weChat/libWeChatSDK.a)