Ios 为Swift二进制框架启用模块稳定性时dyld崩溃

Ios 为Swift二进制框架启用模块稳定性时dyld崩溃,ios,swift,xcode,Ios,Swift,Xcode,我正在尝试为我的二进制Swift框架启用模块稳定性 我的设置如下: 代码11.1 已启用“为分发版生成库”选项 我已经验证了输出的.framework确实在框架中包含了必要的.swiftinterface文件,因此理论上我认为它应该可以工作 但是,当我尝试从任何应用程序使用此框架时,dyld在启动时崩溃,并带有\uuuuuuuu abort\u和\uu有效负载 我在以下案例中尝试过这一点: 由Xcode编译的原始框架(.framework格式) lipod fat框架(.framework

我正在尝试为我的二进制Swift框架启用模块稳定性

我的设置如下:

  • 代码11.1
  • 已启用“为分发版生成库”选项
我已经验证了输出的.framework确实在框架中包含了必要的.swiftinterface文件,因此理论上我认为它应该可以工作

但是,当我尝试从任何应用程序使用此框架时,
dyld
在启动时崩溃,并带有
\uuuuuuuu abort\u和\uu有效负载

我在以下案例中尝试过这一点:

  • 由Xcode编译的原始框架(.framework格式)
  • lipo
    d fat框架(.framework格式)
  • 新的XCFramework(.XCFramework)格式
在我测试过的所有情况下,启用此选项似乎会导致应用程序在启动时崩溃

我想到的唯一一件事是,我的框架本身依赖于其他第三方(非二进制)框架,这些框架是通过Cocoapods编译的

在中,我们被告知“所有依赖项都必须使用Build Library for Distribution Build设置进行构建,以获得我们所讨论的二进制兼容性保证”——但是,这并没有明确说明是否可以只构建具有模块稳定性的二进制框架本身,并从源代码构建依赖项

我还尝试在Pods子项目构建设置中启用“构建分发库”,但这仍然不能解决问题


有什么建议吗?

我已经找到了解决方法

正如WWDC谈话中所建议的(但不是非常清楚),似乎所有库依赖项都必须启用“为分发而构建库”构建设置

椰子荚 Cocoapods内置了对这一点的支持(或者说XCFramews),但是,通过将以下内容添加到应用程序的pod文件中,可以暂时改变这一点:

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构建设置,以确保在运行
迦太基构建
时,您的框架在构建时启用了“用于分发的构建库”:


我有一个类似的设置,通过Cocoapods集成。但是当我应用你的解决方案时,我得到一个编译器错误,在我构建的二进制框架的.swifterface文件中,
无法为
加载底层模块((你能帮助我使用迦太基吗?)我没有太多使用它,想为这个标志设置BUILD\u LIBRARY\u
echo 'BUILD_LIBRARY_FOR_DISTRIBUTION=YES'>/tmp/config.xcconfig; XCODE_XCCONFIG_FILE=/tmp/config.xcconfig carthage build; rm /tmp/config.xcconfig