React Native iOS构建失败:react-native-screens v4.0及以上版本无法编译
我之前也碰到过一模一样的问题,当时折腾了好一阵才摸清楚门道,给你分享几个亲测可行的排查和修复方案:
先检查Xcode版本是否达标:react-native-screens v4.x及以上版本对Xcode的最低版本要求提上去了,而你用的React Native 0.76.9官方就推荐用Xcode 15.0或更高版本。如果你的Xcode版本低于15.0,编译器根本识别不了新版本库里面用的C++新语法(就是你碰到的constexpr变量初始化报错)。赶紧去App Store或者Apple开发者平台更到最新稳定版Xcode,装完再试构建,大概率能解决。
手动修改react-native-screens的C++编译标准:
- 打开iOS项目的
ios/你的项目名.xcworkspace - 左侧导航栏找到
Pods目录,展开后选中react-native-screens这个target - 切换到
Build Settings标签,搜索C++ Language Dialect - 把它的值改成
GNU++17或者C++17(之前可能是C++11这种老标准) - 先按
Cmd+Shift+K清理项目,再去~/Library/Developer/Xcode/DerivedData删掉对应项目的缓存文件夹,最后重新跑pod install再构建试试。
- 打开iOS项目的
换个v4.x系列的稳定版本试试:你现在直接降到v3虽然能跑,但其实可以试试v4.x里的其他版本,比如v4.16.0或者最新的v4.x稳定版——毕竟v4.11.1可能刚好和RN 0.76.9有兼容性bug。执行这几条命令就行:
npm uninstall react-native-screens npm install react-native-screens@4.16.0 cd ios && pod install && cd ..装完再构建看看还会不会报错。
检查Podfile的post_install脚本:如果你的
ios/Podfile里有post_install的钩子代码,说不定不小心强制把所有Pod的C++标准改低了。比如有没有类似这样的代码:post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['CLANG_CXX_LANGUAGE_STANDARD'] = 'c++11' end end end要是有,这会导致react-native-screens v4.x用不了新语法,要么把这行代码删掉,要么改成只针对你自己的项目target设置,别影响Pods里的库。改完重新跑
pod install再试。
如果上面的方法都不管用,那暂时降级到v3.35.0确实是个应急的办法,但长期来看还是建议把Xcode升到符合要求的版本,这样才能用上react-native-screens的新功能和bug修复。
内容来源于stack exchange

