The ‘Pods-XXX’ target has transi

2023-11-09  本文已影响0人  Sweet丶
一、背景

将Swift工程依赖的三方库生成xcframework二进制库格式后,制作为pod私有库,然后工程改为依赖这个pod私有库。
然后执行pod install,报错:
The ‘Pods-XXX’ target has transitive dependencies that include statically linked binaries: xxxx.xcframework.
Pods-XXX具有可传递的依赖项,依赖项中包含了静态链接的二进制文件。

在这种情况下,当您编译Pods-XXX时,编译器需要将所有传递依赖项的代码一起编译并打包到最终生成的可执行文件中。

二、 报错的原因及解决
解决方法

办法一:
将依赖了xcframework库的私有库改为动态库(s.static_framework = false)。

pre_install do |installer|
 Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
end

说明:

这段代码使用 Ruby 的元编程方式在 Pod 库中的 Pod::Installer::Xcode::TargetValidator 类中定义了一个名为 verify_no_static_framework_transitive_dependencies 的空方法。

具体来说,这是使用了 Ruby 中的 define_method 方法,它可以动态地为某个类添加一个方法。在这里,通过使用 define_method 方法,我们可以将一个名为 :verify_no_static_framework_transitive_dependencies 的方法添加到 ‘Pod::Installer::Xcode::TargetValidator’ 类中。

在这个方法中,并没有具体的实现代码,而是一个空方法。这是因为这个方法需要在运行时被 CocoaPods 内部的其他方法调用,以实现检查静态库传递依赖的功能。

这种做法可以绕过 CocoaPods 实际代码中对 verify_no_static_framework_transitive_dependencies 的检查机制,从而设置该选项为 true,以验证 CocoaPods 依赖是否存在静态库传递依赖。也就是说,通过这段代码,我们可以使用静态库作为 CocoaPods 直接依赖,同时仍然开启 verify_no_static_framework_transitive_dependencies 检查机制,使得 CocoaPods 仍然可以检查传递依赖是否符合要求。

需要注意的是,这种做法并不推荐使用,因为绕过 CocoaPods 检查机制可能会导致其他问题的出现。通常来说,我们应该尽可能避免静态库的传递依赖,并且始终推荐使用动态库来避免相关的问题。

上一篇下一篇

猜你喜欢

热点阅读