我试图为我的二进制Swift框架启用模块稳定性。
我的设置如下:
我已经验证了输出的.framework确实在框架中包含了必要的.swiftinterface文件,所以理论上我认为它应该能工作。
然而,当我尝试从任何应用程序中使用这个框架时,dyld会在__abort_with_payload启动时崩溃。
我曾在下列案件中尝试过这一点:
lipod fat框架(.framework格式)在我测试过的所有情况下,启用这个选项似乎都会导致应用程序在启动时崩溃。
脑海中唯一想到的是,我的框架本身依赖于其他第三方(非二进制)框架,这些框架是通过Cocoapods编译的。
在WWDC '19谈二进制框架中,我们被告知,“您的所有依赖项都必须使用binary for Distribution设置来构建,以获得我们讨论过的二进制兼容性保证”--然而,这并不清楚是否有可能只构建具有模块稳定性的二进制框架本身,并从源代码构建依赖项。
我也尝试过在Pods子项目构建设置中启用“构建库以供发行”,但这仍然不能解决问题。
有什么建议吗?
发布于 2019-10-30 15:12:18
我已经想出了解决这个问题的办法。
正如WWDC讨论中所建议的(但不太清楚),似乎所有库依赖项都必须启用“构建分发库”构建设置。
Cocoapods
Cocoapods 目前没有已经内置了对此(或XCFrameworks )的支持,但是,通过将以下内容添加到应用程序的Podfile中,这可能会暂时被黑客攻击:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
end
end
end这将确保所有依赖项都是为分发构建的。
迦太基
迦太基还没有支持模块的稳定性。您需要传递自定义Xcode生成设置,以确保在运行carthage build时,您的框架构建时启用了“用于分发的构建库”:
echo 'BUILD_LIBRARY_FOR_DISTRIBUTION=YES'>/tmp/config.xcconfig; XCODE_XCCONFIG_FILE=/tmp/config.xcconfig carthage build; rm /tmp/config.xcconfighttps://stackoverflow.com/questions/58624624
复制相似问题