iOS使用Carthage无法导入RxSwift模块:Swift版本编译不兼容报错
这个报错'Module compiled with Swift 4.0.3 cannot be imported in Swift 4.1'本质是预编译框架的Swift版本和当前项目的Swift版本不匹配——Carthage默认会下载官方预编译的二进制包,这些包是用旧版Swift编译的,和你项目用的Swift 4.1不兼容。下面是具体的解决步骤:
第一步:清理旧的编译产物
先删掉项目里的Carthage/Build目录,这是Carthage存放已编译框架的地方,旧的不兼容框架都在这里。如果之前已经checkout过RxSwift源码,也可以删掉Carthage/Checkouts/RxSwift文件夹,确保重新拉取最新的兼容代码。第二步:更新Cartfile(可选但推荐)
打开你的Cartfile,确保RxSwift的版本是支持Swift 4.1的。比如可以指定一个兼容的版本范围:github "ReactiveX/RxSwift" ~> 4.4(RxSwift 4.x系列是支持Swift 4.1的,避免使用太旧的版本)
第三步:强制Carthage本地编译依赖
在终端进入项目根目录,执行以下命令:carthage update RxSwift --platform iOS --no-use-binaries这里的
--no-use-binaries是关键,它会让Carthage放弃下载预编译的二进制包,而是用你当前Xcode的Swift 4.1版本重新本地编译RxSwift框架,这样版本就匹配了。第四步:重新配置项目引用
编译完成后,重新把Carthage/Build/iOS下的RxSwift.framework和RxCocoa.framework(如果用到的话)添加到项目的Linked Frameworks and Libraries里,确保引用的是新编译的框架。额外注意:确认Xcode版本
如果你电脑上装了多个Xcode,要确保当前用的是对应Swift 4.1的Xcode版本。可以在终端执行以下命令切换:sudo xcode-select -s /Applications/Xcode.app/Contents/Developer把路径替换成你安装Swift 4.1对应的Xcode的实际路径。
按照这些步骤操作后,应该就能正常导入RxSwift模块了。
内容的提问来源于stack exchange,提问作者seyha

