真机升级livereload缺失后,无法从真机远程调试js

Posted

技术标签:

【中文标题】真机升级livereload缺失后,无法从真机远程调试js【英文标题】:After upgrade livereload missing on real device, cannot debug js remotely from real device 【发布时间】:2016-12-05 05:30:12 【问题描述】:

将 react native 从 0.26 更新到 0.29 后,开发菜单中缺少实时重新加载和热代码推送项,因此我每次都必须手动重新加载应用程序。但是,它在模拟器中工作。升级时我搞砸了什么?我尝试更新到 0.30,但没有帮助。

另外,从真实设备远程调试不起作用,只能在模拟器中运行应用程序时起作用。我收到此错误: 运行时尚未准备好调试,但我确定打包服务器正在运行,它没有在断点处暂停。有什么想法吗?

反应版本:15.2.1 守望者版本:4.5.0

谢谢:)

【问题讨论】:

奇怪的问题。我正在运行0.29.2,并且存在实时和热菜单项。如果您还没有,我会删除该应用程序,然后从 XCode 重新安装。另外,删除javascript缓存npm start -- --reset-cache 是的,这很奇怪,我尝试了您的建议,但没有帮助。我也在使用“react-native init testProject”启动的新项目上进行了尝试,但存在同样的问题。当我尝试使用 rninit 使用 react-native@0.27 创建新项目时,它可以工作,我可以调试并且有 livereload 和 hotcode reload。不能是 AppDelegate.m 中的 jsCodeLocation 吗?在 0.27 中,您必须指定 IP 地址,现在文档说您应该取消注释 [jsbundle mainbundle] 行,但我没有看到任何行被注释掉... 也许吧,但我也在使用新的AppDelegate.m 设置,但它是为react-native-navigator 配置的,所以有点不同。也许这是与您使用的设备有关的错误。我在 iPad 上运行它有帮助。如果你在这里没有得到任何答案,也许你可以file an issue 我在 iPhone 6 ios 9.3.3 和 iPad mini 2 iOS 9.3.2 上都试过了,同样的情况。我以为我搞砸了一些特定于设备的东西,但是当我开始新项目 RN@0.27 时,我在两个设备上都进行了实时重新加载和热代码推送和调试。无论如何,我会在github上提出一个问题。感谢您的帮助。 嗯,我刚刚意识到我正在使用 0.30,而且我一直在使用它。所以我认为我们做错了什么。我最近做的唯一一件事就是导入一些库,然后删除这些导入。我觉得很奇怪,当编译仍然有效并且应用程序被渲染时,一半的按钮丢失了......对我来说,重新加载根本不起作用。 【参考方案1】:

找出使实时重新加载工作所需的配置:

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

还要注意,如果没有“?platform=ios&dev=true”,热重载对我不起作用(“不平衡调用开始/结束”错误)。

在 RCTWebSocketExecutor.m 中:

host = @"http://192.168.0.200";

192.168.0.200 - 您计算机的地址。计算机和设备都必须在同一个网络中。 在“shake”开发菜单中的“Live Reload”项目出现之后,我也开始在服务器控制台中看到日志:

并且还像@jmancherje 提到的那样“必须在同一个 wifi 网络上”

【讨论】:

我什至不需要添加服务器。额外的参数和捆绑包足以让我的实时重新加载再次工作。谢谢。 不要忘记在 info.plist 中设置 App Transport Security 以允许 http 调用:facebook.github.io/react-native/docs/running-on-device-ios.html 我刚刚开始了一个全新的项目,这两个步骤并没有为我解决错误。远程调试抛出错误,开发菜单中不存在热重载 而对我来说,只需更改为正确的计算机 IP 就可以了(虽然现在显然是更高版本)... 关于如何在 RN 0.44 上执行此操作的任何建议? AppDelegate.m 和 RCTWebSocketExecutor.m 文件现在不同了。 RCTWebSocketExecutor.m 是 NSString *host = [[_bridge bundleURL] host] ?: @"localhost"; 和 AppDelegate.m 是 jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];【参考方案2】:

我认为您的 jsbundle 没有在真实设备上加载,当您存档并安装它时,您必须将它用于实时构建。

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

并使用以下行从 xcode 安装

jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];

【讨论】:

以上是关于真机升级livereload缺失后,无法从真机远程调试js的主要内容,如果未能解决你的问题,请参考以下文章

[issue] [iOS 10] 升级后无法真机测试 Could not find Developer Disk Image

iOS 10 升级后无法真机测试 Could not find Developer Disk Image

远程真机调试 | 三星 Android 10上线

远程使用 STF 平台真机问题汇总

真香!iOS云真机全新上线!

关于uniapp地图真机运行正常,打包后无法使用