Bare React Native CLI集成Expo模块后npx react-native run-ios执行失败
解决Bare React Native CLI集成Expo生物识别后
npx react-native run-ios端口报错问题 问题核心
在Bare RN CLI项目中集成Expo生物识别模块后,Android端运行正常,Xcode直接启动、归档操作也没问题,但执行npx react-native run-ios时,模拟器和真机均报错Error: GetEnv.NoInteger: is not an integer,本质是脚本读取RCT_METRO_PORT环境变量时无法识别为整数,导致PhaseScriptExecution失败——这是Expo配置与RN CLI默认端口传递逻辑冲突,导致端口参数格式异常引发的。
可行解决方案
1. 手动指定Metro端口启动
直接在启动命令中明确整数端口,绕开环境变量读取问题:
npx react-native run-ios --port 8081
或者分两步操作,先启动Metro再运行iOS项目:
# 先启动Metro并指定端口 npx react-native start --port 8081 # 新开终端窗口运行iOS项目 npx react-native run-ios
2. 修改iOS构建脚本的端口逻辑
- 打开iOS项目的
Info.plist,确认NSAllowsArbitraryLoads设置为YES(避免Expo配置干扰端口传递) - 打开Xcode,进入项目
Build Phases,找到Bundle React Native code and images脚本,修改端口读取代码:
把原脚本中类似export RCT_METRO_PORT="${RCT_METRO_PORT:=8081}"的行,替换为直接指定整数端口:
或者添加强转逻辑确保端口为整数:export RCT_METRO_PORT=8081RCT_METRO_PORT=${RCT_METRO_PORT:-8081} export RCT_METRO_PORT=$(printf "%d" "$RCT_METRO_PORT")
3. 用环境变量固定端口
在项目根目录新建/编辑.env文件,添加固定端口配置:
RCT_METRO_PORT=8081
或者直接修改package.json的启动脚本:
{ "scripts": { "ios": "RCT_METRO_PORT=8081 npx react-native run-ios" } }
之后执行npm run ios即可启动项目。
4. 清理缓存重置环境
清理可能存在的缓存冲突:
# 重置Metro缓存 npx react-native start --reset-cache # 清理iOS Pod依赖并重新安装 cd ios && pod deintegrate && pod install && cd .. # 清理Xcode构建缓存 xcodebuild clean -workspace YourProject.xcworkspace -scheme YourProject
内容的提问来源于stack exchange,提问作者Midhun
相关产品推荐
相关产品推荐

