【问题标题】:Swift class extensions and categories on Swift classes are not allowed to have +load methodsSwift 类扩展和 Swift 类上的类别不允许有 +load 方法
【发布时间】:2019-08-21 11:41:57
【问题描述】:

我已更新 Xcode 版本 10.2 (10E125) 并在设备上进行测试(不仅是模拟器)

我在执行应用程序时收到此消息:

objc[3297]:Swift 类扩展和 Swift 类上的类别不允许有 +load 方法

  • 它只是不适用于装有 iOS 12.2 的设备。我想知道是否有任何影响 swift 类的更新。到目前为止,在其他论坛上没有任何答案,只是看到苹果在生产中的其他应用程序也存在一些问题。

-我正在使用 swift 类的扩展,但我认为这不是问题

  • 使用 Cocoapods 和 Firebase 依赖项。

  • 我在我的项目中搜索了任何可能包含“加载”函数的函数,没有找到。

请帮忙

【问题讨论】:

  • "每当将类或类别添加到 Objective-C 运行时时调用;实现此方法以在加载时执行特定于类的行为。" Swift 类永远不会添加到 Objective C 运行时,除非它们被标记为 @objc
  • 我的项目中没有实现这个方法。 (未找到加载函数)
  • 嗯...有趣。你确定你的依赖都没有吗?
  • 我一直在删除依赖项,显然没有。无论如何,没有意义的是它适用于 12.1 iOS 而不是 12.2 iOS。
  • 在我的案例中是 SwinjectStoryboard Pod。尝试在项目中查找“load(”和“(void)load”找出来

标签: swift ios12 xcode10.2


【解决方案1】:

只是为 React Native 项目添加一个解决方案。

出现这个问题是因为我们的一个自定义 react 原生模块正在使用 RCT_EXPORT_MODULE() 宏调用了init 函数,我们还包括了快速代码。从 react-native 版本 0.59.3 开始,有一个新的宏 RCT_EXPORT_MODULE_NO_LOAD(js_name, objc_name) 可以避免调用 init。将 RCT_EXPORT_MODULE() 替换为 RCT_EXPORT_MODULE_NO_LOAD(js_name, objc_name) 并更新以响应本机版本 0.59.3 修复了该问题。

【讨论】:

  • 我们没有遇到任何 RCT_EXPORT_MODULE 问题,但升级到 react-native 版本 0.59 也为我们解决了这个问题。
  • 只是将 RCT_EXPORT_MODULE 替换为 RCT_EXPORT_MODULE_NO_LOAD 会导致一些构建错误...
  • 无数node_modules不都用这个吗?不是都需要修改吗?
  • @JeremyF 我写这个答案已经有一段时间了,但我相信问题出在使用 RCT_EXPORT_MODULE() 专门与 swift 代码,所以只有在类似情况下的节点模块需要更新。似乎对于大多数 RN 项目来说,更新版本就足够了。
【解决方案2】:

就我而言,唯一具有 +load 方法的依赖项是 RxAtomic。顺便说一句,这是唯一一个没有更新到当前时刻到 swift 5.0 的版本。所以我认为这个错误是由 RxSwift 引起的。而且我也有 Swinjects 依赖项,但都更新到支持 swift 5 的最新版本 - 它没有帮助。

编辑

我只是打开 Pods 项目文件。选择 RxAtomic 目标。并将用户定义的属性“SWIFT_VERSION”从 5.0 更改为 4.2。而且有效!!!

【讨论】:

    【解决方案3】:

    目前快速修复:

    完成此操作后,重新构建您的项目,它可以在任何设备上正常运行。

    我认为这个问题与 Swift 5 有关。我们可能需要做的是将所有依赖项更新到 Swift 5。目前我没有时间这样做。


    长期修复:更新您的 pod 并慢慢迁移到 swift5。

    产生更多问题的 pod 是:带有 SwinjectStoryboard 和 RxOptional 的 Swinject。

    【讨论】:

    【解决方案4】:

    升级到 react-native 版本 ^0.59.5

    不用RCT_EXPORT_MODULE_NO_LOAD就解决了,

    更新 react-native 版本,

    rm -rf node_modules
    yarn add react-native@^0.59.5

    所以这将使用新版本更新其他依赖包

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,我所做的只是更新 pod。 Swinject pod 引起了问题,更新到最新版本后,一切都解决了。 您也可以尝试在 Pods Targets 中调整 Swift 语言版本。

      【讨论】:

        【解决方案6】:

        • 降级到Xcode 10.0 解决了我的问题。您可以在More Downloads for Apple Developers下载它

        【讨论】:

          猜你喜欢
          • 2019-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-02
          • 2015-04-06
          • 2019-06-01
          相关资源
          最近更新 更多