今天使用Xcode10打开混合开发swift的项目,编译成功,但是运行时候出现如下错误。
dyld: Symbol not found: __T0BOWV
Referenced from: /private/var/containers/Bundle/Application/E9F341B5-D7C8-4341-AC4F-8E29F33A9351/SmartLife.app/Frameworks/AliyunLOGiOS.framework/AliyunLOGiOS
Expected in: /private/var/containers/Bundle/Application/E9F341B5-D7C8-4341-AC4F-8E29F33A9351/SmartLife.app/Frameworks/libswiftCore.dylib
in /private/var/containers/Bundle/Application/E9F341B5-D7C8-4341-AC4F-8E29F33A9351/SmartLife.app/Frameworks/AliyunLOGiOS.framework/AliyunLOGiOS
分析
从直接意思看,是缺少libswiftCore.dylib 这个库,但是我到app/Framework 确实可以看到这个库,这个就很奇怪了,为什么有这个库IDE还说找不到呢。后来找到了一篇文章,解决了这个问题。核心如下
libswiftCore.dylib 的版本不对
把当前系统xcode选择使用当前IDE,然后再编译,这样libswiftCore.dylib 的版本就对了。
需要具备知识
xcode9 使用的Swift version 是4.1.2
xcode10 使用的Swift version 是4.2
可以通过命令查看当前电脑使用的swiftc的版本号 /usr/bin/swiftc --version
Xcode9
Apple Swift version 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)
Target: x86_64-apple-darwin17.7.0
Xcode10
Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1)
Target: x86_64-apple-darwin17.7.0
而使用xcode 的版本要个当前系统的xcode版本保持一致,
查看当前xcode命令 xcode-select -p
设置当前xcode命令 xcode-select --switch /Applications/Xcode.app/
切换后在重新编译一下
解决步骤
1.切换当前xcode的版本 xcode-select --switch /Applications/Xcode.app/
2.重新编译出问题的三方包 AliyunLOGiOS
3.将编译好的framework加入项目中
4.在Target->General->Embedded Binaries中加入这个库
5.重新Run即可
总结
出现symbol not found XXX 一般会有如下情况
1.你加入了 XXX 这个库,但是支持的CPU结构和你运行的手机不一致,这个时候要使用lipo -info 查看库支持的CPU结构。
2.使用的XXX版本和所需要的不一致,上面就是解决办法。