类型 'SwinjectStoryboardOption' 不符合协议 'ServiceKeyOption'

Type 'SwinjectStoryboardOption' does not conform to protocol 'ServiceKeyOption'

在我全新安装我的项目 Cocoapods 之后,它在全新安装之前运行,现在当我编译时出现错误:

Type 'SwinjectStoryboardOption' does not conform to protocol 'ServiceKeyOption'

我该如何解决?

TL;DR

非常干净的修复方法是转到 Podfile.lock 并查找 Swinject,将其版本设置为 2.6.0 而不是 2.7.x。它看起来像这样:

  - Swinject (2.6.0)

一旦 SwinjectStoryboard 发布修复程序,您只需更新 SwinjectStoryboard,它就会自动将 Swinject 更新到正确的版本。

问题

看起来 SwinjectStoryboard 在他们的 podspec 文件中有一个错误的依赖描述:

s.dependency 'Swinject', '~> 2.6'

这导致 cocoapods 选择高于 2.6 的任何 2.x 版本。所以它错误地选择了与当前 SwinjectStoryboard 版本不兼容的 2.7.x

顺便说一句,看起来修复正在进行中,它在 master 分支上但尚未标记版本。

该错误是由于将 Swinject 作为其 2.7.0 版本的一部分移至 Swift 5 引起的。在写这篇文章的时候,它的修复已经合并到主 SwinjectStoryboard 分支中。缺少的只是发布一个新版本。

所以除了回退到 Swinject 2.6 之外还有其他临时解决方法(直到正式发布) - 通过在 Podfile

中定义来获取 master 分支内容
pod 'SwinjectStoryboard' , :git => 'https://github.com/Swinject/SwinjectStoryboard.git', :branch => 'master'

有一个 ticket 专门用于此。

另一个解决方案是添加

func hash(into: inout Hasher) {
    
}

internal struct SwinjectStoryboardOption: ServiceKeyOption {<here>}

文件的路径应该是Pods -> SwinjectStoryboard -> SwinjectStoryboardOption.swift