【发布时间】:2019-09-18 16:08:37
【问题描述】:
在物理 iPhone 上测试时出现内存错误
当我在物理设备(通过 USB 电缆连接的 iPhone)上运行我的 react-native 应用程序时,我目前遇到了内存问题。我已经追踪到太多的 console.log 输出。我遇到了几种不同的解决方案:
-
在这个 [React-Native 页面][1] Facebook 建议使用
babel-plugin-transform-remove-console插件。它只能在开发模式下工作npm i babel-plugin-transform-remove-console --save-dev,在 .babelrc 中使用以下代码:{ “环境”:{ “生产”: { “插件”:[“转换-删除-控制台”] } } }
注意:我没有.babelrc 文件。我只有一个babel.config.js 文件。
-
有些人推荐使用:
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