XCode 9.3中运行单元测试时RxSwift崩溃问题求助
嘿,我维护老项目时碰到过一模一样的问题,咱们一步步来搞定它!
这个报错Undefined symbols for architecture arm64: "(extension in RxCocoa):RxSwift.ObservableType.bind(to: RxSwift.Variable) -> RxSwift.Disposable"的核心原因很明确:编译器找不到RxCocoa里给ObservableType添加的绑定到Variable的扩展方法,大概率是依赖版本不匹配或者引入不到位导致的。
下面是几个亲测有效的解决方案:
确保RxSwift和RxCocoa版本完全一致
这是最容易踩的坑!如果主项目和单元测试目标的RxSwift、RxCocoa版本不统一,就会出现符号找不到的问题。用CocoaPods的话,一定要在Podfile里锁定相同版本:pod 'RxSwift', '4.0.0' # XCode 9.3对RxSwift 4.x版本兼容性最好 pod 'RxCocoa', '4.0.0' pod 'RxTest', '4.0.0' pod 'RxBlocking', '4.0.0'写完后执行
pod install或pod update,确保所有目标(主项目+单元测试)都安装了相同版本的依赖。检查单元测试目标是否正确引入RxCocoa
很多人会忽略给单元测试target加RxCocoa依赖。用CocoaPods的话,要在Podfile里明确把RxCocoa加到测试目标中:target 'YourAppTests' do inherit! :search_paths pod 'RxCocoa' pod 'RxSwift' pod 'RxTest' end手动管理框架的话,要在单元测试target的
Build Phases -> Link Binary With Libraries里添加RxCocoa.framework。确认代码里导入了必要的框架
别忘了在测试文件顶部导入RxSwift和RxCocoa,少了RxCocoa的话,那个绑定扩展根本找不到:import RxSwift import RxCocoa清理XCode缓存,重新构建
XCode的缓存偶尔会抽风,试试这几步:- 按下
Cmd + Shift + K清理项目 - 打开XCode偏好设置(
Cmd + ,),进入Locations标签,找到Derived Data路径并删除整个文件夹 - 重启XCode,重新构建项目和单元测试
- 按下
如果以上方法都没用,那可能是XCode 9.3本身的兼容性问题——RxSwift 5.x及以上版本不再支持XCode 9,所以一定要锁定RxSwift到4.x版本。要是项目允许,升级XCode到9.4.1也能解决不少兼容性问题。
内容的提问来源于stack exchange,提问作者NB Fouda

