正如克里斯盖尔曼建议,问题是一个JavaScript错误。我不确定有类似问题的人会找到这个线索,但如果他们这样做,这是发生的奇怪的错误。
我创建了一个简单的ORM系统,带有一个BaseModel和一系列从它继承的模型。 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;
}
最后一行是问题所在。在我的本地模拟器上,如果我通过插入来将应用程序构建到手机中,这可以正常工作。如在中,如果消息模型继承自BaseModel,则调用var msg = new Message(data, relations); msg.className
返回Message
。
但是,通过TestFlight或Fabric.io捆绑/存档/发送应用程序的一些信息会缩小JavaScript的范围,从而改变类名称。所以相反,如果我这样做 - var msg = new Message(data, relations); msg.className
- 我会找回一个随机变量名称,如't'。
这是在我的应用程序的一个问题,因为我的主页载有工作脱类名的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
属性。
为什么没有报告,我不知道(我遵循克里斯的建议和安装Sentry,但它似乎仍然没有报告该错误)。
但是,这是怎么回事。缩小/丑化发生在只有当我通过TestFlight/Fabric安装在手机上的应用程序,这就是为什么应用程序只在这些条件下坠毁。
希望这可以避免任何人因撕掉头发而陷入类似的错误。
我还没有听说过这个问题。我正确地假设你已经更新了你的AppDelegate.m来使用这个包吗?假设我是,好奇你正在使用哪个RN版本。就像一个健全的检查,也许尝试建立一个新的应用程序,并确保按预期工作。然后,试验和错误,加入粗略的比特直到它破裂。糟透了,但这正是我想到的。 –
哈耶。这正是我决定要做的。看起来似乎是关于我的应用程序的东西,即使没有崩溃报告,因为新鲜的应用程序工作正常,我的应用程序只能放到单个Hello World页面。 – Sasha
在这种情况下,如果不分享您的代码,我认为您不会在这里找到很多帮助。不幸的是TestFlight和Crashlytics只会在本机出现故障时告诉你。你必须尝试像https://getsentry.com/,https://trackjs.com/或类似的东西来获取JS崩溃报告。 –