Ubuntu运行Metro服务,React Native跨设备编译至iOS真机咨询
Ubuntu运行Metro并部署React Native到iOS物理设备的可行方案
前置条件
- Ubuntu已配置React Native基础开发环境:
node(v16+)、watchman、openjdk-11-jdk,项目代码已克隆到本地。 - Mac设备装有最新兼容版Xcode,已将iOS物理设备添加到Apple开发者账号,设备信任该Mac,且Mac能正常通过Xcode给设备签名、安装App。
- Mac、Ubuntu、iOS设备处于同一局域网,提前用
ip addr(Ubuntu)记录本机局域网IP。
步骤1:配置iOS项目指向Ubuntu的Metro服务
在Mac上操作:
- 打开项目
ios/[你的项目名]/Info.plist,添加App Transport Security配置,允许HTTP请求:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSAllowsLocalNetworking</key> <true/> </dict> - 打开Xcode的Scheme配置:点击顶部项目名称 →
Edit Scheme→Run→Arguments,在Environment Variables中添加两个变量:RCT_METRO_PORT:值设为8081(Metro默认端口)RCT_DEBUG_SERVER_HOST:值设为[Ubuntu局域网IP]:8081
步骤2:用Xcode将App安装到iOS设备
- 用数据线连接iOS设备到Mac,Xcode中选择该设备为运行目标,点击
Build and Run。安装完成后保持Xcode调试会话开启,设备不要断开Mac。
步骤3:在Ubuntu启动Metro并完成调试连接
- 进入Ubuntu的项目目录,启动Metro并绑定本地IP:
npx react-native start --host [你的Ubuntu局域网IP] --port 8081 - 在iOS设备上打开已安装的App,摇晃设备调出开发者菜单,选择
Configure Bundler,输入[UbuntuIP]:8081后点击Apply。 - 再次打开开发者菜单,选择
Reload,App会从Ubuntu的Metro服务加载JS代码。此后在Ubuntu修改代码,可通过开发者菜单的Reload实时更新设备上的App。
常见问题处理
- 网络连接失败:检查Ubuntu防火墙是否开放8081端口,执行
sudo ufw allow 8081放行;确认三台设备的局域网IP属于同一网段。 - 签名报错:确保Xcode中开发者账号配置正确,设备已添加到账号的设备列表中,且证书未过期。
内容的提问来源于stack exchange,提问作者Yevhen Lv
相关产品推荐
相关产品推荐

