Search code examples
swiftxcodealamofirekingfisherxcode12

XCode 12: 'SessionDelegate' has different definitions in different modules


Edit: This problem occurs after XCode 12 Beta5. Xcode doesn't allow different modules to define same names (Probably for public classes & protocols). Alamofire and Kingfisher appears to define SessionDelegate at the same time. I'm still trying to find a solution..

I'm implementing iOS 14 Widgets in our application. I have started working with XCode 12 Beta 2 and everthing was compiling fine. When I have updated XCode to XCode 12 Beta 6, I faced with following error:

'SessionDelegate' has different definitions in different modules; first difference is definition in module 'Kingfisher.Swift' found end of class

I'm also attaching the screenshot of the file with error.

enter image description here

Is there any way to edit header files to have different names for SessionDelegate for Alamofire or Kingfisher? Is there any workaround to overcome this issue?

Here are things I have tried so far:

  • I have updated both Alamofire and Kingfisher to latest version
  • I have cleaned Podfile.lock and all pods as well as Derived Data
  • I tried to compile with Legacy Build System

Solution

  • At this moment (Xcode 12.0 or Xcode 12.2b2), the only possible solution is to rename the Objective-C interface and avoid conflicts. This could be done by one of:

    • Rename conflicting class entirely, update all places where it's used (e.g. replace SessionDelegate by KingfisherSessionDelegate)
    • Add @objc(...) attribute to a Swift class, which will update the Obj-C interface in a generated ...-Swift.h file and avoid the names conflict.
    //  SessionDelegate.swift
    @objc(KFSessionDelegate)
    class SessionDelegate: NSObject { ... }
    
    //  Kingfisher-Swift.h
    @interface KFSessionDelegate : NSObject
    ...
    @end
    

    This solution is already included in the Kingfisher 5.15.4 release and could be applied to any other libraries and your own frameworks.

    Also, the thread on Apple forums: https://developer.apple.com/forums/thread/658012