【问题标题】:Dev mode vs production mode in React Native (Xcode)React Native(Xcode)中的开发模式与生产模式
【发布时间】:2019-09-18 16:08:37
【问题描述】:

在物理 iPhone 上测试时出现内存错误

当我在物理设备(通过 USB 电缆连接的 iPhone)上运行我的 react-native 应用程序时,我目前遇到了内存问题。我已经追踪到太多的 console.log 输出。我遇到了几种不同的解决方案:

  1. 在这个 [React-Native 页面][1] Facebook 建议使用 babel-plugin-transform-remove-console 插件。它只能在开发模式下工作npm i babel-plugin-transform-remove-console --save-dev,在 .babelrc 中使用以下代码:

    { “环境”:{ “生产”: { “插件”:[“转换-删除-控制台”] } } }

注意:我没有.babelrc 文件。我只有一个babel.config.js 文件。

  1. 有些人推荐使用:

    if (!DEV) { 控制台.log = () => {}; }

如果您未处于 DEV 模式,我相信这会将任何 console.log 实例设置为空对象。

在 App Store 中被接受的问题

由于发生此内存错误时的错误,Apple 拒绝了我的应用程序。因此,我假设 console.log() 语句正在与应用程序一起编译,并且它们也遇到了内存错误。他们没有告诉我有内存错误,只是说它在那个特定的点上不起作用。

开发模式与生产模式

上面的选项 1 和 2 都假定生产模式与开发模式。但是,当我使用 Xcode 编译应用程序以上传到 App Store 时,我如何知道它将处于什么模式?

当我从 Xcode 中选择 Product>Archive 时,是否会自动将其置于生产模式而不是开发模式?或者我还需要做些什么来确保它在生产模式下编译它?

【问题讨论】:

  • 您是如何发现您的内存问题来自过多日志的?我想知道,因为我曾使用过大量日志的大型应用程序,并且从未出现过内存问题,即使没有使用您提到的解决方案(例如 babel 插件等)。只是.. anwyays,如果我的帖子回答了你的问题,请告诉我✌️
  • @colakollektiv 当我注释掉console.log 时没有内存问题,当我取消注释它们时有。一些输出是几页 json 数据。但如果这不应该是一个问题,那么我不确定还发生了什么。
  • 好的。我现在在我的一个应用程序中使用此解决方案if (!DEV) { console.log = () => {}; } 我没有内存问题,但有安全问题(在 Android 上使用adb logcat 显示生产版本的日志)。我想如果您想确保在 prod 中删除了您的日志,您可以尝试为 android 构建一个发布 apk 并运行 adb logcat,然后查找您的日志 - 它们不应该在那里。
  • 添加可能不相关的情况,当我尝试记录ref 对象(例如console.log({ref}))时,我的console.log 卡住了。当我评论这些日志时一切正常

标签: ios xcode react-native


【解决方案1】:

当您在 Xcode 中归档您的应用程序时,它将处于“PROD”模式(也称为发布模式)。在 Xcode 中,您可以在 Xcode 中的 DEV(也称为调试模式)和 PROD 中运行您的应用程序。这将使您更容易深入了解此内存问题。 为此:

1.在顶部栏中选择您正在使用的方案,点击“编辑方案”

2。然后将“构建配置”设置为发布,并取消选中“调试可执行文件”

您可以选择任何模拟器或连接的设备,按“播放”按钮运行发布版本,并附带所有性能优化。

【讨论】:

  • 那么,当您archive 使用 XCode 时,它​​是否使用配置文件中的信息进行编译?比如babel.config.js、package.json等?
  • tbh 我不记得自己曾经处理过这个问题,但我确信 React Native 在后台做了很多事情。你可以看看这个以获得更多细节:reactnative.dev/docs/next/publishing-to-app-store
【解决方案2】:

归档后您拥有的是生产代码。

在我的情况下,当我的生产应用程序偶然发现一个记录React.createRef() 对象的代码时,它就卡住了。在开发模式下一切正常。

您可以尝试使用if(__DEV__){...} 记录任何内容,因为所有console.log 仍在生产中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 2017-12-21
    • 2017-01-27
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多