我正在开发一个框架,它将作为.xcframework通过CocoaPods发布。该框架依赖于一些第三方库,并使用CocoaPods来解决这些依赖关系。为了在我的框架中支持模块稳定性特性,我在框架项目的构建设置中将BUILD_LIBRARY_FOR_DISTRUBUTION选项设置为YES。
我知道,如果我的模块稳定的框架使用一些依赖项,我应该为框架使用的每个依赖项设置BUILD_LIBRARY_FOR_DISTRUBUTION=YES设置。我通过在集成了框架的app的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与用于框架构建的相同版本(在我的示例中是Xcode12.5)集成在一起,那么构建和运行时一切都会很好。但是如果我尝试用其他版本的Xcode构建和运行这个项目(我用Xcode12.4测试过它),启动的应用程序将在启动时崩溃,并显示"dyld: Symbol not found...“错误。
如何为我的框架实现真正的模块稳定性,即使它有一些依赖?如果可能的话,如何避免强迫我们的客户将安装后脚本添加到他们的podfile中呢?
发布于 2021-05-22 01:11:04
我最终使用了第三方库的静态链接。如果您使用CocoaPods,只需编写:
use_frameworks! :linkage => :static然后,在swift文件中,您需要通过以下方式避免导出第三方符号:
@_implementationOnly import Alamofirehttps://stackoverflow.com/questions/67639843
复制相似问题