在我对我的项目 Cocoapods 进行了全新安装之后,该项目在全新安装之前工作,现在当我编译时出现该错误:
Type 'SwinjectStoryboardOption' does not conform to protocol 'ServiceKeyOption'
我如何解决它?
TL;博士
相当干净的解决方法是去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.x
高于2.6
. 所以它错误地选择2.7.x
了与当前SwinjectStoryboard
版本不兼容的。
顺便说一句,修复似乎正在进行中,它在主分支上,但尚未标记版本。
该错误是由于将 Swinject 作为 2.7.0 版本的一部分移动到 Swift 5 引起的。在写这篇文章的那一刻,它的修复已经合并到主 SwinjectStoryboard 分支中。缺少的只是发布一个新版本。
因此,除了回退到 Swinject 2.6 之外,还有其他临时解决方法(直到正式发布) - 通过在 Podfile 中定义来获取主分支内容
pod 'SwinjectStoryboard' , :git => 'https://github.com/Swinject/SwinjectStoryboard.git', :branch => 'master'
有一张专门用于此的票。
另一个解决方案是添加
func hash(into: inout Hasher) {
}
到internal struct SwinjectStoryboardOption: ServiceKeyOption {<here>}
.
文件的路径应该是Pods -> SwinjectStoryboard -> SwinjectStoryboardOption.swift