React Native iOS 调试物理设备 WebSocket 连接失败

Posted

技术标签:

【中文标题】React Native iOS 调试物理设备 WebSocket 连接失败【英文标题】:React Native iOS Debugging Physical Device WebSocket Connection Failure 【发布时间】:2017-01-26 09:03:38 【问题描述】:

尝试在物理 ios 设备上运行 react-native 时,WebSocket 连接失败并抛出错误 Error Domain=NSPOSIXErrorDomain Code=61。它可以在运行模拟器上运行。

这不是重复的帖子。我已经阅读了所有其他有类似问题的堆栈溢出帖子并尝试了他们的建议,但没有一个能解决这个问题(有些已经过时,实际上会导致其他问题)。

    React 打包程序正在 port 8081 上运行

    我在同一个 wifi 网络上,没有任何防火墙问题阻止与开发服务器通信。我可以在设备上打开safari,通过IP主机IP地址加载开发服务器。

    我已经清除了守望者,使用watchman watch-del-all

    尝试更改 RCTWebSocketExecutor.m 以使用我的主机的 IP 地址而不是 localhost 不起作用并阻止加载预捆绑文件。不要这样做。这是来自 react-native 网站上旧文档的过时建议。

    尝试在 XCode 中再次运行 clean & build、重启 XCode、重启机器、从设备中删除应用并重新安装。

    jsCodelocation 更新为以下内容也不起作用。

jsCodeLocation = [NSURL URLWithString:@"http://xx.xx.110.78:8081/index.ios.bundle?platform=ios&dev=true"];

我没有让调试再次工作的想法......我可能不得不在 github 上与 react-native 团队一起打开一个问题,但我可能缺少一些东西。

【问题讨论】:

【参考方案1】:

打包程序是否也在<END> Building Dependency Graph 之后停止?当我的 Mac 和我的 iPhone 通过我的家庭 wifi 网络连接时,我遇到了这个问题。在 Mac 和 iPhone 之间设置直接 wifi 连接是可行的,但这并不是一个很好的解决方法

【讨论】:

不,它不会停在<END> Building Dependency Graph。事实上,如果我刷新应用程序,我可以看到<START> request:/index.ios.bundle?platform=ios&dev=true&minify=false,因此应用程序能够在某种程度上与服务器通信。【参考方案2】:

升级到 react-native 0.33(从 0.31)神奇地解​​决了这个问题。

【讨论】:

【参考方案3】:

用 RN 0.33 初始化一个全新的项目,然后在模拟器上运行它,看看你是否可以在 Chrome 上打开开发工具。

如果可以打开开发工具,则无需编辑。只需关闭 Chrome 并在您的设备上启动应用程序,...

【讨论】:

破坏我的整个项目并从头开始不是一种选择,也不是问题的解决方案。我已经重新启动了 chrome,设备并清理了构建文件夹几次,但没有任何运气。 我的意思是你可以开始一个新项目,看看你的开发工具是否适用于新项目。所以也许你可以更接近你的解决方案。您可以在不编辑旧项目的任何内容的情况下完成此操作。

以上是关于React Native iOS 调试物理设备 WebSocket 连接失败的主要内容,如果未能解决你的问题,请参考以下文章

《React Native》之程序调试篇

《React Native》之程序调试篇

React native 卡在从 localhost 加载:使用 USB 调试器在物理设备上的 8081

gl-react-native 不在物理 iOS 设备上显示图像

为啥我不能在 ios 设备上关闭并重新打开 react-native 调试?

React-Native 调试工具/开发者菜单在 iOS 设备上不起作用