XCode12:'SessionDelegate'在不同的模块中有不同的定义
XCode 12: 'SessionDelegate' has different definitions in different modules
编辑:
XCode12 Beta5 后出现此问题。 Xcode 不允许不同的模块定义相同的名称(可能是 public 类 和协议)。 Alamofire 和 Kingfisher 似乎同时定义了 SessionDelegate。我仍在努力寻找解决方案..
我正在我们的应用程序中实现 iOS 14 个小部件。我已经开始使用 XCode 12 Beta 2 并且编译一切正常。当我将 XCode 更新为 XCode 12 Beta 6 时,我遇到了以下错误:
'SessionDelegate' has different definitions in different modules;
first difference is definition in module 'Kingfisher.Swift' found end
of class
我还附上了错误文件的屏幕截图。
有没有办法编辑头文件,使 Alamofire 或 Kingfisher 的 SessionDelegate 具有不同的名称?是否有解决此问题的解决方法?
以下是我迄今为止尝试过的方法:
- 我已经将 Alamofire 和 Kingfisher 更新到最新版本
- 我已经清理了 Podfile.lock 和所有 pods 以及 派生数据
- 我尝试使用 旧版构建系统
进行编译
你可以试试SWIFT_INSTALL_OBJC_HEADER = 不,对我有用
错误是说您在不同的模块中有多个同名 SessionDelegate 的 类。 此错误与 Xcode 12.
有关
目前,一个快速的解决方案是使用 CocoaPods 安装模块(如果您使用的是 Carthage),如果需要,重命名 SessionDelegate 接口。
如果你们需要一个临时解决方案,这里是 Cocoapods 用户的方法:
将 Kingfisher 库克隆到与您的项目相同的文件夹级别。您可以从 Github
获取
在XCode中打开Kingfisher.xcworkspace并将Sources/Netowking下的SessionDelegate.swift文件重命名为KingFisherSessionDelegate并更改class 名称也相应。
将 SessionDelegate 的用法重命名为 KingfisherSessionDelegate,仅在 Sources/Networking/ImageDownloader.swift Kingfisher 版本 5.15.0
中可用
在您的 Podfile
中添加本地路径
pod 'Kingfisher', :path => '../Kingfisher'
目前(Xcode12.0或Xcode12.2b2),唯一可能的解决办法是重命名Objective-C接口,避免冲突。这可以通过以下之一完成:
- 完全重命名冲突 class,更新所有使用它的地方(例如,将 SessionDelegate 替换为 KingfisherSessionDelegate)
- 将
@objc(...)
属性添加到 Swift class,这将更新生成的 ...-Swift.h
文件中的 Obj-C 接口并避免名称冲突。
// SessionDelegate.swift
@objc(KFSessionDelegate)
class SessionDelegate: NSObject { ... }
// Kingfisher-Swift.h
@interface KFSessionDelegate : NSObject
...
@end
此解决方案已包含在 Kingfisher 5.15.4 release 中,可以应用于任何其他库和您自己的框架。
此外,Apple 论坛上的帖子:https://developer.apple.com/forums/thread/658012
当我更新 podfile
中的 'SWIFT_INSTALL_OBJC_HEADER' 键时对我有效
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if target.name == 'Alamofire'
target.build_configurations.each do |config|
config.build_settings['SWIFT_INSTALL_OBJC_HEADER'] = 'No'
end
end
end
end
end
编辑: XCode12 Beta5 后出现此问题。 Xcode 不允许不同的模块定义相同的名称(可能是 public 类 和协议)。 Alamofire 和 Kingfisher 似乎同时定义了 SessionDelegate。我仍在努力寻找解决方案..
我正在我们的应用程序中实现 iOS 14 个小部件。我已经开始使用 XCode 12 Beta 2 并且编译一切正常。当我将 XCode 更新为 XCode 12 Beta 6 时,我遇到了以下错误:
'SessionDelegate' has different definitions in different modules; first difference is definition in module 'Kingfisher.Swift' found end of class
我还附上了错误文件的屏幕截图。
有没有办法编辑头文件,使 Alamofire 或 Kingfisher 的 SessionDelegate 具有不同的名称?是否有解决此问题的解决方法?
以下是我迄今为止尝试过的方法:
- 我已经将 Alamofire 和 Kingfisher 更新到最新版本
- 我已经清理了 Podfile.lock 和所有 pods 以及 派生数据
- 我尝试使用 旧版构建系统 进行编译
你可以试试SWIFT_INSTALL_OBJC_HEADER = 不,对我有用
错误是说您在不同的模块中有多个同名 SessionDelegate 的 类。 此错误与 Xcode 12.
有关目前,一个快速的解决方案是使用 CocoaPods 安装模块(如果您使用的是 Carthage),如果需要,重命名 SessionDelegate 接口。
如果你们需要一个临时解决方案,这里是 Cocoapods 用户的方法:
将 Kingfisher 库克隆到与您的项目相同的文件夹级别。您可以从 Github
获取在XCode中打开Kingfisher.xcworkspace并将Sources/Netowking下的SessionDelegate.swift文件重命名为KingFisherSessionDelegate并更改class 名称也相应。
将 SessionDelegate 的用法重命名为 KingfisherSessionDelegate,仅在 Sources/Networking/ImageDownloader.swift Kingfisher 版本 5.15.0
中可用在您的 Podfile
中添加本地路径pod 'Kingfisher', :path => '../Kingfisher'
目前(Xcode12.0或Xcode12.2b2),唯一可能的解决办法是重命名Objective-C接口,避免冲突。这可以通过以下之一完成:
- 完全重命名冲突 class,更新所有使用它的地方(例如,将 SessionDelegate 替换为 KingfisherSessionDelegate)
- 将
@objc(...)
属性添加到 Swift class,这将更新生成的...-Swift.h
文件中的 Obj-C 接口并避免名称冲突。
// SessionDelegate.swift
@objc(KFSessionDelegate)
class SessionDelegate: NSObject { ... }
// Kingfisher-Swift.h
@interface KFSessionDelegate : NSObject
...
@end
此解决方案已包含在 Kingfisher 5.15.4 release 中,可以应用于任何其他库和您自己的框架。
此外,Apple 论坛上的帖子:https://developer.apple.com/forums/thread/658012
当我更新 podfile
中的 'SWIFT_INSTALL_OBJC_HEADER' 键时对我有效post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if target.name == 'Alamofire'
target.build_configurations.each do |config|
config.build_settings['SWIFT_INSTALL_OBJC_HEADER'] = 'No'
end
end
end
end
end