VSCode Debug RN项目
Visual Studio Code使用出了不少问题
VSCode Debug on iOS device
在安装了package React Native Tools
后,尝试把RN项目debug到iOS真机,结果会失败 并且自动debug到模拟器。
后来查看React Native Tools
文档的 iOS devices 部分,发现运行到iOS真机上,需要做如下处理
Debugging on an iOS device requires following manual steps:
1. Install ios-deploy npm install -g ios-deploy.
2. Install a valid iOS development certificate.
3. In your project's launch.json file set target to device. If you need to specify the exact device to run, you can set target to device=<iOS_device_name>, or you can also use runArguments property to specify a particular device to run on in case multiple devices are connected (e.g. "runArguments": [ "--device", "My iPhone" ])
4. Choose the Debug iOS option from the "Configuration" dropdown and press F5.
5. Shake the device to open the development menu and select "Debug JS Remotely".
其中我只处理了
-
第1步,安装
ios-deploy
-
第3步,在lauch.json配置文件中增加
"runArguments": [ "--device", "My iPhone" ]
{ "name": "Debug iOS", "cwd": "${workspaceFolder}", "type": "reactnative", "request": "launch", "platform": "ios" "runArguments": [ "--device", "“xxx”的 iPhone" ] },
查看文档的示例,正好给出了 获取device的命令
ios-deploy -c
[....] Waiting up to 5 seconds for iOS device to be connected
[....] Found 00008020-001014CA2251002E (N841AP, iPhone XR, iphoneos, arm64e) a.k.a. '“xxx”的 iPhone' connected through USB.
其中“xxx”的 iPhone
就是设备名
注意:虽然iPhone连接着Mac,但如果没获取到,说明设备没允许Mac数据通信。可通过
iTunes
查看是否已连上iPhone,连上后就可以成功获取到连接的设备名称。
但是 按照第5步,选择Debug
(没有Debug remotely
),无法 热重载调试了,即更改了App.js想刷新iOS真机上的页面 没反应(内容没变)。
真机上点击Debug
后 界面的报错如下
Connection to http://localhost:8081/debugger-proxy?role=client timed out. Are you running node proxy? If you are running on the device, check if you have the right IP address in `RCTWebSocketExecutor.m
终于找到答案👉解决ReactNative在iPhone真机调试报错:Connection to http://...
然而,我只是打开了Xcode找到并打开了RCTWebSocketExecutor.mm
文件,还没动手改,就试了试 VSC的Start Debugging
按钮,居然运行后 尝试修改<Text>
的文案,cmd+S
时iPHone上app页面内容变了,惊呆了😮
热重载成功,体现在VSC上的差异,如下图
image.png
同时,记录下此时的 活跃端口信息:
$sudo lsof -i:8081
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 24520 dl 24u IPv6 0x6a20760fb6f5a3a9 0t0 TCP *:sunproxyadmin (LISTEN)
node 24520 dl 29u IPv6 0x6a20760fb6f5af29 0t0 TCP localhost:sunproxyadmin->localhost:51024 (ESTABLISHED)
node 24520 dl 43u IPv6 0x6a20760fcfbd03a9 0t0 TCP 172.16.1.72:sunproxyadmin->172.16.4.17:52393 (ESTABLISHED)
node 24520 dl 45u IPv6 0x6a20760fb6f58129 0t0 TCP 172.16.1.72:sunproxyadmin->172.16.4.17:52389 (ESTABLISHED)
node 24520 dl 48u IPv6 0x6a20760fb6f586e9 0t0 TCP 172.16.1.72:sunproxyadmin->172.16.4.17:52390 (ESTABLISHED)
Code\x20H 25251 dl 37u IPv4 0x6a20760fb82b1971 0t0 TCP localhost:51024->localhost:sunproxyadmin (ESTABLISHED)
不行,我不放心,关掉VSC、Xcode,重启VSC再试试,担心这只是昙花一现。 我晕,居然又成功了。哎,多么期望是我做了点什么导致成功的。。。(努力回想做了什么)
呀!我记起来了,我按文章中做了这样一个操作 ⚠️把iPhone Wifi调成和Mac一致 !!! 后来验证确实如此。。。😌
Visual Studio Code Debug on Android
Command 'React Native: Run Android on Device' resulted in an error (执行命令 /Users/dl/Desktop/code_test/RN/AwesomeProject1/node_modules/.bin/react-native run-android --no-packager 时出错: 执行命令 /Users/dl/Desktop/code_test/RN/AwesomeProject1/node_modules/.bin/react-native run-android --no-packager 时出错 (error code 101))
此时在terminal却可以使用npx react-native run-android
成功运行,但有时也不能成功 报错(这两处错误有必然的某种联系吧...)
error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup. Run CLI with --verbose flag for more details.
Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
那请 注意检查 jdk版本 ,因为我下了两个jdk版本,只在 ~/.bash_profile
里设了jdk8为默认的
,没有在~/.zshrc
设默认为jdk8。当打开terminal、vsc时,都默认用~/.zshrc
的配置,会自动使用高版本jdk14。
这样会导致莫名其妙的现象
- terminal通过使用
source ~/.bash_profile
后,使用npx react-native run-android
是正常的 - vsc使用
source ~/.bash_profile
后,虽然jdk切到了jdk8,但Start Debugging
仍然失败。
所以建议,~/.bash_profile
和~/.zshrc
设为一致的,使用jdk8作为JAVA_HOME。
这样处理后, VSC每次启动后 可以正常通过Start Debugging
来 Debug Android
了。
另外, 还要 ⚠️检查 Android 9 (Pie)... 这些安装了没 (安装多个也没事,要至少包括这个),参照 官方文档