gpt4 book ai didi

ios - 如果未附加调试器,则 React Native 应用程序在启动时无响应

转载 作者:可可西里 更新时间:2023-11-01 05:59:20 29 4
gpt4 key购买 nike

我有一个 React Native (0.59.8) 应用程序,它在模拟器上运行得非常好,通过 Xcode 部署到设备时非常好,但只有在用户尚未登录的情况下,才在应用程序启动时通过 TestFlight 分发大约 3 分钟时无响应。

这是发生的事情:

  • 我通过 TestFlight 安装我的应用
  • 打开应用程序。
  • 欢迎页面上有一个“开始”按钮,可将用户带到登录屏幕。我点击那个按钮
  • 大约 2-3 分钟没有任何 react
  • 应用程序进入登录屏幕,一切开始完美运行。

  • 一些观察:
  • 这仅发生在 TestFlight 存档构建上,它不会发生在模拟器上或通过 Xcode > Run 部署时。
  • 这发生在多个物理设备上(虽然都是 iPhone X,但我们目前没有任何其他设备可供测试)。
  • 当应用程序处于“崩溃”状态时,旋转我的手机会将所有内容完美地旋转到陆地空间方向。即,应用程序实际上正在运行并响应/布局正确的旋转。但是,底部的选项卡栏图标布局不会正确更改为横向/纵向方向。
  • 如果用户未在我的应用程序中登录,而我终止应用程序并重新启动,则会出现同样的问题。
  • 一旦用户登录,一切正常。
  • 如果我终止应用程序并在用户登录时重新启动,我的主页将位于选项卡栏中并具有一些可点击的 View 。 ScrollView 完美流畅地滚动,但标签栏按钮和可点击链接不起作用。当我让它保持几分钟时,它会崩溃,并在 Console.app 中显示来自我 iPhone 的以下日志:

  • ——
    *** Terminating app due to uncaught exception 'RCTFatalException: Unhandled JS Exception: Exception in HostFunction: std::bad_alloc', reason: 'Unhandled JS Exception: Exception in HostFunction: std::bad_alloc, stack:
    <unknown>@<null>:<null>
    <unknown>@4:3638
    value@1033:573
    onLayout@1033:1815
    y@95:576
    P@95:719
    E@95:773
    M@95:1940
    H@95:2699
    j@95:2514
    <unknown>@95:14003
    Ue@95:83341
    De@95:13673
    We@95:13846
    receiveEvent@95:14222
    value@28:3311
    <unknown>@28:822
    value@28:2565
    value@28:794
    value@<null>:<null>
    '
    *** First throw call stack:
    (0x208f5d27c 0x2081379f8 0x100c2703c 0x100c23574 0x208f64900 0x208e464d0 0x208e47104 0x100c3a6b0 0x100c7a1d4 0x100c79f34 0x20899ca38 0x20899d7d4 0x208978dec 0x20897992c 0x208981e08 0x208b7d114 0x208b7fcd4)
  • 我可以通过向下滑动来刷新我的主页,它开始刷新(这需要一两秒钟来获取数据),但它永远保持刷新状态。
  • 在“挂起”状态下,我的手机在一两分钟内变得非常热,所以我怀疑 CPU 处于 100%,尽管我不知道如何验证它。
  • 我每周只发送一次构建,上周没有出现这样的问题,我已经更改了项目的数百个部分,所以我不确定问题是从什么时候开始的,因为它不会发生在模拟器或设备测试中通过Xcode。

  • 我的依赖来自 package.json :
    "dependencies": {
    "@babel/runtime": "^7.4.5",
    "@bankify/react-native-animate-number": "^0.2.1",
    "@react-native-community/async-storage": "^1.4.2",
    "@types/algoliasearch": "^3.30.12",
    "@types/react-native-permissions": "^1.1.1",
    "algoliasearch": "^3.33.0",
    "art": "sebmarkbage/art#19/head",
    "base-64": "^0.1.0",
    "global": "^4.3.2",
    "immutability-helper": "^3.0.1",
    "iso-639-1": "^2.0.5",
    "lerna": "^3.14.1",
    "lodash": "^4.17.11",
    "portable-fetch": "^3.0.0",
    "q": "^1.5.1",
    "querystring": "^0.2.0",
    "react": "16.8.6",
    "react-art": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-native": "^0.59.8",
    "react-native-geolocation-service": "^2.0.1",
    "react-native-gesture-handler": "^1.2.1",
    "react-native-intercom": "^13.1.0",
    "react-native-linear-gradient": "^2.5.4",
    "react-native-loading-spinner-overlay": "^1.0.1",
    "react-native-onesignal": "^3.2.14",
    "react-native-permissions": "^1.1.1",
    "react-native-simple-radio-button": "^2.7.3",
    "react-native-static-safe-area-insets": "^1.3.3",
    "react-native-svg": "^9.5.1",
    "react-native-svg-charts": "^5.2.0",
    "react-native-swipeout": "^2.3.6",
    "react-native-web": "^0.11.4",
    "react-native-webview": "^5.10.0",
    "react-navigation": "^3.11.0",
    "react-redux": "^7.0.3",
    "redux": "^4.0.1",
    "redux-api-middleware": "^3.0.1",
    "redux-persist": "^5.10.0",
    "redux-refresh-token": "^0.1.0",
    "reselect": "latest",
    "superagent": "^5.0.5",
    "url": "^0.11.0"
    },

    有没有人遇到过这样的问题?可能是什么原因?似乎它与布局和状态更改的某种组合有关,但我不知道如何调试,因为它只发生在存档的“发布”版本上。

    更新:我已经设法附加到 Xcode 上的调试版本,还有一些其他观察结果:
  • 在性能监视器中,RAM 使用率永远越来越高。
  • 整个 CPU 被 React Javascript 线程消耗:

    enter image description here
  • 当我通过摇动设备重新加载应用程序时,RAM 使用仍然存在 .即我的应用程序现在使用 1.5GB,我重新加载应用程序,它没有重置为某个合理的值,它从 1.5GB 继续并不断增加。 (虽然我杀死并重新打开应用程序时它显然会重置)
  • 只有 RAM(标有 RAM 的那个)使用量在增加。 JSC 使用量为 0 MB。这是性能监视器的屏幕截图:

  • enter image description here
  • 当/如果几分钟后事情变得“正常”,那么在正常的 RAM 使用情况下,一切都会变得非常顺畅,UI 和 JS 线程的速度均为 60fps。

  • 更新 2 :
  • 当我在 Xcode 调试器中暂停应用程序时,JS 线程始终处于相同的功能:

  • enter image description here
  • 在最后一部分,我没有远程调试 JS。当我摇晃设备并远程选择 Debug JS 时,什么也没发生(尽管 CPU 仍然用完了,而且 RAM 越来越大)。我暂停了执行,它卡在这里:

  • enter image description here
  • 当我尝试重新加载它时,它崩溃了,甚至没有响应震动(开发人员菜单没有出现)。我杀死了应用程序并重新启动,它卡在启动屏幕(甚至没有到达欢迎屏幕),再次卡在与上一个屏幕截图的同一行。
  • 不确定是否相关,但我收到了无穷无尽的错误,例如 nw_socket_handle_socket_event [C4.1:1] Socket SO_ERROR [61: Connection refused]在日志中。

  • 更新 3:
  • 我启用了 Debug JS Remotely第二天再次启动了我的应用程序,而没有更改一行代码,并且它开始时没有出现任何问题。我可以验证健康运行的应用程序没有这些问题:

  • enter image description here
  • 我禁用了远程 JS 调试,问题又来了。我认为这解释了为什么我在本地测试中没有问题(因为我总是远程调试 JS)但有问题。我正在更新 What is causing a few minutes of touch unresponsiveness on React Native app start 的问题标题至 React Native app unresponsive on start if debugger is not attached来反射(reflect)这个问题。
  • 最佳答案

    在澄清问题之后(它只卡在没有附加调试器的调试版本中)之后就更清楚了。我已阅读 react native ios application crash if remote debug is not enabled事实证明这是完全相同的:日志导致 JS 线程挂起。如果连接没有问题,它们会被路由到调试器,但是当没有调试器时,它会使控制台膨胀。

    我已添加 babel-plugin-transform-remove-console脚本到我的开发依赖项,它只在 Release模式下触发,问题就消失了。 (如果我没有在调试版本上附加调试器,它仍然会发生,但无论如何我在开发时总是附加一个)

    编辑:似乎在升级到 React Native 0.60 之后(还有一些结构上的变化)babel-plugin-transform-remove-console无明显原因或错误停止工作。我已将以下代码添加到我的应用程序的主 index.js从生产版本中删除日志记录:

    if (!__DEV__) {
    global.console.log = () => {}
    global.console.warn = () => {}
    global.console.error = () => {}
    }

    它运行完美,不需要任何插件。

    关于ios - 如果未附加调试器,则 React Native 应用程序在启动时无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56695144/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com