【问题标题】:React native app stuck on splash screen on device but works in simulatorReact 本机应用程序卡在设备的初始屏幕上,但在模拟器中工作
【发布时间】:2017-07-09 20:29:04
【问题描述】:

我的 React Native 应用程序在 XCode 模拟器中运行没有问题,但是当我在物理设备(我的 iPhone)中运行时,出现了问题。应用程序启动并卡在 React Native 初始屏幕上,10-15 秒后应用程序崩溃/关闭。这是什么原因,我该如何预防?

【问题讨论】:

  • 我有一个类似的。我的应用程序可以在模拟器和 iphone 5S 及更高版本的设备上运行。然而,在 iphone 5 和 4S 上登录应用程序自行关闭后。
  • 我面临着完全相同的问题,我的应用在 iOS 模拟器中运行良好,但在首次加载后无法在我的设备上运行。

标签: ios xcode react-native


【解决方案1】:

看来我找到了问题所在。根据https://facebook.github.io/react-native/docs/running-on-device,当您在设备上构建和运行应用程序时,您的应用程序将从您计算机上的打包程序加载 js 文件,因此您可以实时重新加载您的应用程序。这意味着您的设备必须连接到您的计算机或必须与您的计算机在同一个 wifi 网络中。如果您的设备无法访问打包程序,它将卡在启动屏幕上并退出。

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

【讨论】:

  • 我们看到了同样的情况,当手机不在 wifi 上时,应用程序会超时(或在一段时间后显示“没有捆绑 URL 存在”)。由 Product -> Scheme -> Edit Scheme 修复,并将 Run 步骤切换到 Release。
  • 这也是给我的。谢谢。
  • 我在同一个网络上但即使切换到发布模式也没有运气。
  • 将手机和电脑切换到同一个 WI-FI 网络对我有用。谢谢!
  • 在切换到发布模式后仍然无法工作(第一次)——说我的 iPhone 没有连接。必须拔掉并重新插入手机,然后继续尝试发布版本,直到它工作为止。
【解决方案2】:

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

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

如果有帮助,请点赞:)

【讨论】:

  • 这会禁用调试/开发者菜单。
  • 亲爱的@Anjum。在存档部分,我使用的是 Debug 而不是 Release。我想创建一个存档并将其推送到 TestFlight。我收到了这个问题。我应该使用 Release 吗?
【解决方案3】:

应该完全可以在设备上调试运行应用程序,而无需附加打包程序!您必须使用react-native bundle 创建一个离线包,并将其添加到您的 Xcode 项目中。然后,当打包程序不可用时,您的应用程序应该回退到该捆绑包。

这曾经在 Deploying to Device FB 文档中,不知道为什么它不再存在。

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

react-native bundle --dev true --assets-dest ./ios --entry-file ./dist/index.ios.js --platform ios --bundle-output ios/main.jsbundle

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

注释掉这一行:

jsCodeLocation = // whatever

并添加这一行:

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

【讨论】:

  • 我总是创建包,但不更改 jsCodeLocation。我没有任何超时,但仍然遇到此问题
【解决方案4】:

是的,我的手机上的 WiFi 已禁用。启用 WiFi 并重振旗鼓

【讨论】:

    【解决方案5】:

    我尝试将我的 iPhone 与 Internet 断开连接,但问题在之后的启动中消失了。

    所以有些东西试图做网络事情并导致延迟。 这是一个快速的解决方法,但在我们找到具体的罪魁祸首之前会一直这样做。

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题。
      我所做的是在 Xcode 中转到 Products -> Scheme -> Edit Scheme -> 选择 Run 选项卡 -> 将构建配置更改为 Release(默认为调试模式) 并在设备。

      它的运行速度要快得多,并且可以像原生应用一样运行。

      【讨论】:

        【解决方案7】:

        您可能需要对应用进行签名。

        在项目导航器下,单击您的应用。然后从项目和目标列表中选择您的目标。在“常规”选项卡中,找到“签名”部分。您需要在此处指定一个团队。

        查看此链接了解更多信息:https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//apple_ref/doc/uid/TP40012582-CH27-SW4

        【讨论】:

          【解决方案8】:

          我在使用 react-native-splash-screen 时遇到了这个问题。删除后,它正在工作

          【讨论】:

          • 没有说我们在哪里使用这个包。
          • 我同意。但不确定为什么在删除包后会起作用。我将此添加为答案,因为这解决了我的问题。
          • 2020 年我面临这个问题。我会试试这个,让你知道
          【解决方案9】:

          由于以下可能性,可能会出现此问题:

          1. 您的运行模式设置为release 而不是debug,因此始终期望加载main.jsbundle,而不是从调试服务器运行。通过 Product->Schema-> Edit Schema->Run-> Build Configuration 改变它:Debug

          在 Xcode 日志中检查任何消息,例如 NSURLConnection finished with error - code -1004NSURLConnection finished with error - code -1022 转到 Project->Target->Build Phases-> + -> New Run Script Phase

          1. (-1004) 您已经从草图配置了您的 XCode 项目,但忘记在构建阶段输入 react-native xcode 脚本:

          对于以下版本的 React Native 50: export NODE_BINARY=node ../node_modules/react-native/packager/react-native-xcode.sh

          对于更高版本的 React Native 50: export NODE_BINARY=node ../node_modules/react-native/scripts/react-native-xcode.sh

          1. (-1022) 您的应用程序 ATS 问题,检查 Info.plist,您可以使用以下代码关闭 ATS: <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

          【讨论】:

            【解决方案10】:

            对我来说,我在我的项目中使用了 firebase 框架。我忘记了将 GoogleService-Info.plist 文件添加到我的 xcode 项目中。添加后问题就消失了。

            【讨论】:

              【解决方案11】:

              刚刚经历了这一点,经过一个小时的调试后,我意识到我最近启用了我的系统防火墙并将其设置为“阻止所有传入连接”。

              奇怪的是,android 在物理设备上运行良好,但物理设备上的 iOS 无法连接到 RN 服务器。放宽了防火墙规则,现在 iOS 可以连接到 RN 服务器了。

              【讨论】:

                【解决方案12】:

                发生在我的 iOS 设备上。我连接的是 4G,而不是 WiFi。我连接到 WiFi,它立即开始工作。

                【讨论】:

                  【解决方案13】:

                  当我在 TestFlight 上上传版本时,我遇到了同样的问题,所以我所做的是

                  react-native link react-native-splash-screen
                  

                  因为我的闪屏插件是如何取消链接的。这对我有用。

                  【讨论】:

                    【解决方案14】:

                    最好检查所有拨出电话。例如,如果您调用 http 请求来获取用户或在从存储中获取用户期间,则可能会发生这种情况。

                    如果此调用返回错误,您将卡在启动画面中。

                    此外,假设您有使用这些调用的导航,情况会更糟。

                    【讨论】:

                      【解决方案15】:

                      以上所有解决方案都不适合我。

                      在我的情况下真的很奇怪。我公司的路由器同时发送 2.4G 和 5.0G wifi。真机调试时,只能连接2.4G wifi。

                      【讨论】:

                        【解决方案16】:

                        在我的情况下,应用程序堆栈在两个(调试和发布)构建方案的初始屏幕上。

                        问题在于推送通知和 Firebase 的功能。加这个就行了。 How you can do this

                        也许对你有帮助:)

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2022-08-20
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2019-06-18
                          • 2018-01-29
                          • 2017-11-14
                          相关资源
                          最近更新 更多