React本机应用程序卡在设备上的启动画面上,但在模拟器中工作

Tho*_*rth 32 xcode ios react-native

我的React Native应用程序在XCode模拟器中运行没有问题,但是当我在物理设备中运行时,我的iPhone出现了问题.应用程序启动并卡在React Native启动画面上,应用程序崩溃/关闭10-15秒后.造成这种情况的原因是什么?如何防止它?

小智 39

似乎我发现了这个问题.根据http://facebook.github.io/react-native/releases/0.45/docs/running-on-device.html#running-your-app-on-ios-devices,当您构建并运行应用程序时您的设备,您的应用程序将从您的计算机上的打包程序加载js文件,以便您可以重新加载您的应用程序.这意味着您的设备必须连接到您的计算机,或者必须与您的计算机位于同一个wifi网络中.如果您的设备无法访问打包器,它将卡在启动画面上并退出.

要可靠地在您的设备上运行,请编辑构建架构并构建发布版本.

  • 我们看到同样的事情,应用程序会超时(或显示"很长一段时间后没有捆绑URL")当手机不在wifi上时.通过Product - > Scheme - > Edit Scheme修复,并将Run步骤切换为Release. (6认同)
  • 我在同一个网络上,但即使切换到发布模式后也没有运气。 (2认同)

Anj*_*... 10

对我来说,当我构建时,它在模拟器中运行良好,但是在实际设备中只有启动画面出现,没有别的。

这是因为我的构建配置是调试模式,这是我猜的默认模式,我不得不将发布/构建配置从调试更改为发布,并且一切都按预期工作。

如果有帮助,请点赞 :)

在此处输入图片说明

  • 这将禁用调试/开发人员菜单。 (2认同)

Mar*_*ark 9

是的,我手机上的 WiFi 被禁用了。启用 WiFi 并恢复业务繁荣


Luk*_*ams 6

无需附加打包程序,就完全有可能在设备上的调试状态下运行应用程序!您必须用于react-native bundle创建脱机捆绑包,并将其添加到Xcode项目中。然后,当打包程序不可用时,您的应用应退回到该捆绑软件。

这曾经在“部署到设备FB”文档中,但不确定为什么不再存在。

调用示例(我们通过TypeScript index.ios.js放置./dist):

react-native bundle --dev true --assets-dest ./ios --entry-file ./dist/index.ios.js --platform ios --bundle-output ios/main.jsbundle
Run Code Online (Sandbox Code Playgroud)

另外,显然有必要告诉您的应用直接从捆绑软件中运行,而不是尝试访问开发服务器,这似乎会导致超时(我们与OP有同样的问题)。

注释掉这一行:

jsCodeLocation = // whatever
Run Code Online (Sandbox Code Playgroud)

并添加以下行:

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
Run Code Online (Sandbox Code Playgroud)