gpt4 book ai didi

ios - 二进制框架的 Xcode 12.5 dyld 问题

转载 作者:行者123 更新时间:2023-12-04 14:53:18 24 4
gpt4 key购买 nike

我有一个二进制 Swift xcframework,它引用了另外两个开源 Swift 框架(从源代码构建)。
我的框架及其依赖项是使用 BUILD_LIBRARY_FOR_DISTRIBUTION 构建的选项已启用(以支持模块稳定性)。
此设置多年来一直运行良好,但现在在 Xcode 12.5 或更高版本中构建我的框架时,当使用该框架的应用程序在 Xcode <12.5 中编译时,我收到以下 dyld 错误:

dyld: Symbol not found: __ZN5swift34swift50override_conformsToProtocolEPKNS_14TargetMetadataINS_9InProcessEEEPKNS_24TargetProtocolDescriptorIS1_EEPFPKNS_18TargetWitnessTableIS1_EES4_S8_E
我似乎不是唯一遇到此问题的人。在 Github 上查看提供了许多 other frameworks experiencing Xcode 12.5 中的相同问题。
建议 here这个问题是由以下警告引起的,现在显然导致了这个 fatal error :

Using 'class' keyword for protocol inheritance is deprecated; use 'AnyObject' instead


我注意到我的案例中涉及的受影响的依赖项 ( Starscream ) has not yet changed the class keyword to AnyObject ,但是我还没有(还)证实这绝对是原因。
不幸的是,关于这个问题的文档很少,但随着人们升级到 Xcode 12.5+,并且更多的二进制框架是针对这个新版本构建的,它似乎可能会非常普遍并且越来越流行。
除了降级到 Xcode 12.4 之外,有没有人对如何解决/缓解这个问题有任何想法?

最佳答案

我们在更新到 Xcode 12.5 时也遇到了这个问题。 .根据 Apple 的说法,“模块稳定性”只能确保在旧版 Xcode 中构建的框架可以在新版 Xcode 中运行。直到 12.5 ,它也可以方便地以相反的方式工作,但似乎他们决定进行一些重大更改。
我们一直在做的解决方法是使用 xcodebuild 12.4 系统来编译我们的框架依赖项,同时仍然使用 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,然后将其复制到框架中的目录中)

关于ios - 二进制框架的 Xcode 12.5 dyld 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68642897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com