首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Swift二进制框架启用模块稳定性时dyld崩溃

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

Stack Overflow用户
提问于 2019-10-30 11:43:14
回答 1查看 1.1K关注 0票数 4

我试图为我的二进制Swift框架启用模块稳定性。

我的设置如下:

  • Xcode 11.1
  • 启用“为分发构建库”选项

我已经验证了输出的.framework确实在框架中包含了必要的.swiftinterface文件,所以理论上我认为它应该能工作。

然而,当我尝试从任何应用程序中使用这个框架时,dyld会在__abort_with_payload启动时崩溃。

我曾在下列案件中尝试过这一点:

  • 由Xcode (.framework格式)编译的原始框架
  • lipod fat框架(.framework格式)
  • 新的XCFramework (.xcframework)格式

在我测试过的所有情况下,启用这个选项似乎都会导致应用程序在启动时崩溃。

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

WWDC '19谈二进制框架中,我们被告知,“您的所有依赖项都必须使用binary for Distribution设置来构建,以获得我们讨论过的二进制兼容性保证”--然而,这并不清楚是否有可能只构建具有模块稳定性的二进制框架本身,并从源代码构建依赖项。

我也尝试过在Pods子项目构建设置中启用“构建库以供发行”,但这仍然不能解决问题。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 15:12:18

我已经想出了解决这个问题的办法。

正如WWDC讨论中所建议的(但不太清楚),似乎所有库依赖项都必须启用“构建分发库”构建设置。

Cocoapods

Cocoapods 目前没有已经内置了对此(或XCFrameworks )的支持,但是,通过将以下内容添加到应用程序的Podfile中,这可能会暂时被黑客攻击:

代码语言:javascript
复制
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时,您的框架构建时启用了“用于分发的构建库”:

代码语言:javascript
复制
echo 'BUILD_LIBRARY_FOR_DISTRIBUTION=YES'>/tmp/config.xcconfig; XCODE_XCCONFIG_FILE=/tmp/config.xcconfig carthage build; rm /tmp/config.xcconfig
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58624624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档