【问题标题】:Xcode 12.5 dyld issue with binary frameworks二进制框架的 Xcode 12.5 dyld 问题
【发布时间】:2021-08-03 21:17:36
【问题描述】:

我有一个二进制 Swift xcframework,它引用了另外两个开源 Swift 框架(从源代码构建)。

我的框架及其依赖项是在启用BUILD_LIBRARY_FOR_DISTRIBUTION 选项的情况下构建的(以支持模块稳定性)。

这种设置多年来一直运行良好,但现在在 Xcode 12.5 或更高版本中构建我的框架时,当使用该框架的应用程序在 Xcode

dyld: Symbol not found: __ZN5swift34swift50override_conformsToProtocolEPKNS_14TargetMetadataINS_9InProcessEEEPKNS_24TargetProtocolDescriptorIS1_EEPFPKNS_18TargetWitnessTableIS1_EES4_S8_E

我似乎不是唯一遇到此问题的人。看一下 Github 提供了一些otherframeworksexperiencing Xcode 12.5 中的相同问题。

建议here 这个问题是由以下警告引起的,显然现在导致了这个致命错误:

不推荐使用'class'关键字进行协议继承;改用“AnyObject”

我注意到在我的案例 (Starscream) has not yet changed the class keyword to AnyObject 中涉及到受影响的依赖项,但是我尚未(尚未)证实这绝对是原因。

不幸的是,关于这个问题的文档很少,但随着人们升级到 Xcode 12.5+,并且针对这个新版本构建了更多的二进制框架,它似乎可能会相当普遍并且越来越流行。

p>

除了降级到 Xcode 12.4 之外,是否有人对如何解决/缓解此问题有任何想法?

【问题讨论】:

  • 我的自定义框架也面临同样的问题。当我设置 BUILD_LIBRARY_FOR_DISTRIBUTION = "NO" 我的框架正在工作。但是如果我设置 BUILD_LIBRARY_FOR_DISTRIBUTION = "YES" 我会遇到与您相同的错误。顺便说一句,我正在使用 Xcode 13,你找到任何解决方案还是我必须降级 Xcode 12.4。

标签: ios swift xcode clang dyld


【解决方案1】:

我们在更新到Xcode 12.5 时也遇到了这个问题。根据 Apple 的说法,“模块稳定性”只能确保在旧版本 Xcode 中构建的框架可以在新版本 Xcode 中运行。直到12.5,它也很方便地反过来工作,但似乎他们决定做出一些重大改变。

我们一直在做的解决方法是使用 12.4 的xcodebuild 系统来编译我们的框架依赖项,同时仍然使用12.5 GUI 进行日常开发。通过从 Developer Downloads 下载 Xcode 并将其重命名为 Xcode_12_4 来切换到旧版本。

export DEVELOPER_DIR=/Applications/Xcode_12_4.app/Contents/Developer

虽然,由于模块稳定性的这种定义,我强烈建议使用您的框架正式支持的Xcode 的最低版本进行构建。 (必须至少 12.0 才能提交到 App Store)这将确保在旧 Xcode 版本中使用您的框架的任何人都不会出现问题。

我知道这是一个非常令人失望的不回答,但这可能是一个相当可持续的过程。 iOS 上的框架开发似乎正朝着要求开发人员使用他们希望其实现者使用的最低版本的xcodebuild 的方向发展。

有时可用的另一种解决方法:

可以通过从源代码构建依赖项来避免这个问题(假设他们的许可证允许)。我们从源代码构建了Starscream,它运行良好。 (即,如果他们发布了源代码,则查看依赖项 GitHub,然后将其复制到框架中的目录中)

【讨论】:

  • 感谢您的全面回答,但您是否有关于“模块稳定性”仅确保在旧版本 Xcode 中构建的框架将在新版本 Xcode 中工作的声明的来源?这对我来说是新闻!!针对旧版本的 Xcode 构建的问题是我们无法使用新的语言特性,因此并不理想。 Xcode
  • 我向 DTS 提出了这个问题,并被 Apple 引导到以下论坛帖子,该帖子支持您所说的 @Callum:developer.apple.com/forums/thread/… -- 似乎与此有关
猜你喜欢
  • 2021-08-17
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2011-09-23
  • 2020-08-15
  • 2019-03-16
相关资源
最近更新 更多