React-Native ios应用程序崩溃而不报告

我正在使用React Native构build一个iOS应用程序,并试图在手机上进行testing。

如果我将手机插入计算机并直接“build立”到手机,则应用程序已正确构build,并可正确打开/操作,没有任何问题。

但是,如果我尝试使用iTunes Connect的TestFlight或Crashlytics Fabric将其存档并将其发送到手机,则应用程序在打开时会立即崩溃。 它简要地显示了启动屏幕,但没有更多。

此外,没有崩溃报告 – 在TestFlight,Crashlytics或XCode中,一旦我把电话插回去,所以我在黑暗中操作,没有任何关于破坏的信息。 在网上找不到类似的问题,所以我想我只是问。 任何想法可能会出错?

请让我知道是否有任何代码或其他数据,你可能需要看到。 其中一些是保密的,但我会尝试发布一个近似的版本。

正如克里斯·盖尔曼(Chris Geirman)所build议的那样,问题在于JavaScript错 我不确定有类似问题的人会find这个线程,但是如果他们这样做的话,这里是发生的奇怪的错误。

我创build了一个简单的ORM系统,有一个BaseModel和一系列从它inheritance的模型。 BaseModel构造函数如下所示:

constructor(props = {}, relations = {}) { Object.keys(props).forEach((k) => { // Save props to object this[k] = props[k]; }); this.relations = relations; this.className = this.constructor.name; } 

最后一行是问题。 在我的本地模拟器上,如果我通过插入来将应用程序构build到手机中,这可以正常工作。 如在消息模型从BaseModelinheritance,调用var msg = new Message(data, relations); msg.className var msg = new Message(data, relations); msg.className返回Message

但是,通过TestFlight或Fabric.io捆绑/存档/发送应用程序的一些细节和丑化 JavaScript,使得类名称被改变。 所以相反,如果我这样做 – var msg = new Message(data, relations); msg.className var msg = new Message(data, relations); msg.className – 我会找回一个随机的variables名称,比如't'。

这是我的应用程序中的一个问题,因为我的主页包含一个关于className的switch语句:

 iconContent() { return { Message: { icon: <Image style={styles.feedItemIconImage} source={ require('../assets/img/icon_message.png') } />, color: c.grass }, ... }[this.props.className] // from the model item } 

但是'Message'并不像预期的那样, this.props.className的值是't' 。 所以,如果我试图挖掘color值,我会遇到一个错误,因为我试图访问nullcolor属性。

为什么没有报告,我不知道(我遵循克里斯的build议,并安装了哨兵,但它似乎还没有报告错误)。

但是那是怎么回事? 只有当我通过TestFlight / Fabric在手机上安装应用程序时才会发生缩小/丑化,这就是为什么应用程序只会在这些情况下崩溃。

希望这可以避免任何人因撕掉头发而陷入类似的错误。

不知道如果你仍然有这个问题 – 但如果你这样做,我build议检查Bugsnag 反应本机错误报告 – 哪些报告JavaScript层以及本地层(Java /cocoa)崩溃。

在对本机崩溃报告(如Sasha提到的)进行反应时,要解决的难题之一是在使用缩小和/或混淆时恢复原始堆栈跟踪 – 这是在Bugsnag中通过提供对JS源地图的全面支持以及iOS符号化并在本机层支持Android Proguard。

让我知道这是否有帮助 – 我是一个创始人@ Bugsnag

我想分享一下我自己的生产阶段崩溃的经验,而在开发阶段一切正常。

我有类似的问题,由Reactotronlogging器造成的。 由于我没有把它捆绑在制作阶段,所以一行console.tron.log将我的应用完全隐身。 (它有点儿是我的错,因为我没有给我的棉绒与'无控制台'设置)

以下是我在根级文件root.js中介绍的代码片段。

  if (__DEV__) { ... console.tron = Reactotron; ... } 

希望有人find这个之前浪费时间搞清楚什么是错的。

Interesting Posts