【发布时间】:2020-12-16 05:20:53
【问题描述】:
编辑: 这个问题出现在 XCode 12 Beta5 之后。 Xcode 不允许不同的模块定义相同的名称(可能用于公共类和协议)。 Alamofire 和 Kingfisher 似乎同时定义了 SessionDelegate。我还在努力寻找解决方案..
我正在我们的应用程序中实现 iOS 14 小部件。我已经开始使用 XCode 12 Beta 2 并且一切正常。当我将 XCode 更新到 XCode 12 Beta 6 时,我遇到了以下错误:
'SessionDelegate'在不同的模块中有不同的定义; 第一个区别是模块“Kingfisher.Swift”中的定义发现结束 类的
我还附上了错误文件的屏幕截图。
有没有什么方法可以为 Alamofire 或 Kingfisher 的 SessionDelegate 编辑头文件以具有不同的名称?有什么办法可以解决这个问题吗?
以下是我迄今为止尝试过的事情:
- 我已将 Alamofire 和 Kingfisher 更新到最新版本
- 我已清理 Podfile.lock 和所有 pod 以及 派生数据
- 我尝试使用 Legacy Build System 进行编译
【问题讨论】:
-
我已经相应地编辑了我的问题@matt
-
您需要向 pod 作者投诉。 Objective C 没有命名空间,因此您应该使用前缀为您的类型赋予唯一的名称。他们没有。这很愚蠢,但 you 对此无能为力。除非您只想更改他们的代码,否则这不是一个非常可靠的方法,因为更新会清除您的更改。
-
从发布的代码中,很明显 Kingfisher 试图提供一个错位的 Swift 名称,它确实提供了命名空间。 Xcode 12 中的这种方法可能存在问题。@FeridunErbaş 你应该向 Kingfisher 提交一个关于这个问题的错误,看看他们是否可以修复它。同时,您可以分叉库并进行自己的重命名。
-
@JonShier Alamofire 和 Kingfisher 实际上存在冲突。我会向他们俩提交一个错误
-
该错误将为 Alamofire 关闭,因为我们在那里无事可做。 Swift 有命名空间,所以不需要 Obj-C 需要的类型前缀。
标签: swift xcode alamofire kingfisher xcode12