0

我正在开发一个框架,它将通过 CocoaPods 作为 .xcframework 分发。该框架依赖于一些第三方库并使用 CocoaPods 来解决这些依赖关系。为了支持我的框架中的模块稳定性功能,我在框架项目的构建设置中将 BUILD_LIBRARY_FOR_DISRUBUTION 选项设置为 YES。

我知道如果我的模块稳定框架使用了一些依赖项,我应该为框架使用的每个依赖项设置 BUILD_LIBRARY_FOR_DISRUBUTION=YES 设置。我通过在集成了框架的应用程序中将安装后脚本添加到 Podfile 来实现这一点。该脚本如下所示:

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "YES"
  end
end

如果我打开一些项目,通过 Xcode 中的 CocoaPods 将我的 .xcframework 与用于框架构建的相同版本(在我的例子中为 Xcode 12.5)集成,那么构建和运行一切都会很好。但是,如果我尝试使用其他版本在 Xcode 中构建和运行此项目(我使用 Xcode 12.4 对其进行了测试),启动的应用程序将在启动时崩溃,并出现“dyld: Symbol not found...”错误。

即使我的框架有一些依赖关系,如何实现真正的模块稳定性?而且,如果可能的话,如何避免强迫我们的客户将安装后脚本添加到他们的 podfile 中?

4

1 回答 1

2

我最终为第三方库使用了静态链接。如果您使用 CocoaPods,只需编写:

use_frameworks! :linkage => :static

然后,在 swift 文件中,您需要通过以下方式避免导出第三方符号:

@_implementationOnly import Alamofire
于 2021-05-21T17:11:03.633 回答