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
值,我会遇到一个错误,因为我试图访问null
的color
属性。
为什么没有报告,我不知道(我遵循克里斯的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这个之前浪费时间搞清楚什么是错的。