Swift类扩展和Swift类上的分类不允许有+load方法。

23

我已经升级到Xcode版本10.2(10E125),并在设备上进行测试(不仅仅是模拟器)

当我执行应用程序时,会收到以下消息:

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

  • 它在iOS 12.2的设备上无法正常工作。我想知道是否有任何更新影响了Swift类。到目前为止,在其他论坛中没有关于此的答案,只看到苹果公司在生产中有一些其他应用程序出现问题。

-我正在使用Swift类的扩展,但我认为那不是问题所在

  • 使用Cocoapods和Firebase依赖项。

  • 我在我的项目中搜索任何可能包含"load"函数的函数,但没有找到。

请求帮助


每当一个类或类别被添加到Objective-C运行时时调用;实现该方法以在加载时执行特定于类的行为。 Swift类只有在被标记为@objc时才会被添加到Objective C运行时中。 - Alexander
我在我的项目中没有实现这个方法。(找不到加载函数) - Daniel Bastidas
嗯...有趣。你确定你的依赖项中没有它吗? - Alexander
我一直在删除依赖项,但似乎不起作用。无论如何,不合理的是它能在12.1版本的iOS上工作而在12.2版本的iOS上不能工作。 - Daniel Bastidas
1
在我的情况下,使用了SwinjectStoryboard Pod。尝试在项目中查找“load(”和“(void)load”以找出原因。 - rbiard
显示剩余4条评论
6个回答

7

针对React Native项目的解决方案如下。

这个问题是由于我们的一个自定义React Native模块使用了RCT_EXPORT_MODULE()宏,该宏调用了init函数,同时我们也包含了Swift代码所致。自从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)并升级到React Native版本0.59.3即可解决该问题。


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

4

目前的快速解决方法:

完成上述步骤后,重新构建您的项目,就可以在任何设备上正常运行。

我认为问题与Swift 5有关。我们可能需要更新所有依赖项以支持Swift 5,但目前我还没有时间这样做。


长期解决方案:更新您的Pod并逐步迁移到Swift 5。

导致问题最多的Pod是:Swinject与SwinjectStoryboard以及RxOptional。


10
如果有帮助的话,SwinjectStoryboard Pod 是否适用于我的情况? - rbiard
3
2.2.0版本现在应该没问题了 - 修复已经合并(https://github.com/Swinject/SwinjectStoryboard/releases/tag/2.2.0) - rbiard
只是作为提醒,我遇到了SwinjectAutoregistration Pod的问题,并且也有更新版本可用(https://github.com/Swinject/SwinjectAutoregistration/releases/tag/2.6.0)。 - Przemyslaw Jablonski

4
在我的情况下,唯一具有+load方法的依赖项是RxAtomic。顺便说一句,它是唯一一个没有更新到最新的Swift 5.0版本的依赖项。所以我想这个错误是由于RxSwift引起的。我还有Swinject的依赖关系,但将所有依赖关系更新到支持Swift 5的最新版本并没有帮助。
编辑:
我刚刚打开了Pods项目文件,选择了RxAtomic目标,并将用户定义的属性“SWIFT_VERSION”从5.0更改为4.2。然后它就工作了!!!

3
升级到 react-native 版本 ^0.59.5。
不需要使用 RCT_EXPORT_MODULE_NO_LOAD 就可以解决它。
要更新 react-native 的版本,请按照以下步骤操作:
1. 删除 node_modules 文件夹:rm -rf node_modules
2. 安装新版本的 react-native:yarn add react-native@^0.59.5
这将会使用新版本更新其他依赖包。

0
我曾经遇到过同样的问题,解决方法就是更新pods。Swinject pod引起了问题,更新到最新版本后一切都解决了。 你也可以尝试调整Pods Targets中的Swift语言版本。

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接