React Native iOS构建报arm64架构Undefined symbols错误求助
iOS端接入react-native-static-server报arm64未定义符号错误修复
错误原因
报错核心是Xcode在arm64架构构建的链接阶段,找不到RCTRegisterModule符号的实现。RCTRegisterModule是React Native核心提供的原生模块注册方法,react-native-static-server内置的FPStaticServer原生类依赖该方法完成模块注册,出现该问题的常见诱因:
react-native-static-server长期未适配新版React Native(0.60+)的自动链接规则,podspec未正确声明对React核心库的依赖,导致自动链接失效- 项目CocoaPods配置异常,未正确关联React-Core静态库
- 项目编译参数配置缺失,原生模块注册代码未被正确加载
- 架构配置冲突,真机/模拟器的arm64架构构建规则互相干扰
- 开启
use_frameworks!时未做静态库兼容配置,破坏RN原生模块的静态链接逻辑
修复步骤
按以下顺序操作即可解决链接错误:
- 清理原有Pods依赖缓存
进入项目的ios目录,执行以下命令清理旧的依赖配置:pod deintegrate rm -rf Podfile.lock Pods build - 调整Podfile配置
打开ios/Podfile:- 如果项目开启了
use_frameworks!,修改为静态链接模式:use_frameworks! :linkage => :static,避免动态库链接导致RN核心符号丢失 - 保持post_install钩子中默认的RN配置即可,不需要额外添加依赖过滤规则
- 如果项目开启了
- 校验Xcode编译参数
用Xcode打开ios目录下的xcworkspace文件,选中项目主target:- 进入
Build Settings页,搜索Other Linker Flags,确认Debug、Release模式下均已添加-ObjC、-lc++两个参数,保证OC类、RN模块注册的代码段被正确链接 - 搜索
Excluded Architectures,确认真机构建配置下没有排除arm64架构;如果是做模拟器构建,可临时给模拟器配置添加arm64排除项,避免和真机架构冲突 - 进入
Build Phases->Link Binary With Libraries,确认列表中存在React-Core.a库,如果不存在手动从Pods的React-Core产物中添加即可
- 进入
- 重新安装依赖构建
回到ios目录执行pod install,回到Xcode按Cmd+Shift+K清理构建缓存,重新执行构建即可解决链接报错。
额外注意事项
构建成功后要保证静态资源能被正常访问,需要确认:
- 存放React构建产物的
portals目录,在Xcode中是通过Create folder references方式引入的(引入后目录图标为蓝色),不要选Create groups,否则资源不会被按目录结构打包到MainBundle中,会导致静态服务启动后返回404 - 静态服务启动时增加非空判断,
source为空时不要渲染WebView,避免WebView加载空地址报错
内容的提问来源于stack exchange,提问作者Suleyman Baris Eser
相关产品推荐
相关产品推荐

