[英]React-Native ios App crashes without report
我正在使用React Native構建一個iOS應用程序,並嘗試在手機上測試它。
如果我將手機插入計算機並直接“構建”到手機,該應用程序正確構建並正確打開/運行,沒問題。
但是,如果我嘗試將其存檔並使用iTunes Connect的TestFlight或Fabric with Crashlytics將其發送到手機,則應用程序會在打開時立即崩潰。 它簡要地顯示了啟動屏幕,但沒有更多。
此外,沒有崩潰報告 - 在TestFlight,Crashlytics或XCode中,一旦我重新插入手機。所以我在黑暗中操作,沒有任何有關什么破壞的信息。 一直無法在網上找到類似的問題,所以我想我只是問。 什么想法可能會出錯?
如果您可能需要查看任何代碼或其他數據,請與我們聯系。 其中一些是保密的,但我會嘗試發布一個近似版本。
正如Chris Geirman所說,問題是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;
}
最后一行是問題所在。 在我的本地模擬器上,如果我通過插入應用程序將應用程序構建到我的手機,這可以正常工作。 如同,如果Message模型繼承自BaseModel,則調用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
- 我會找回一個隨機變量名,比如'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
屬性。
為什么沒有報告,我不知道(我跟着Chris的建議並安裝了Sentry,但似乎仍然沒有報告該錯誤)。
但那就是發生了什么。 只有當我通過TestFlight / Fabric在手機上安裝應用程序時才會發生縮小/丑化,這就是應用程序僅在這些條件下崩潰的原因。
希望這可以避免任何遇到類似錯誤的人撕掉他們的頭發。
我想分享我自己的生產階段崩潰經驗,而一切在開發階段都很好。
我遇到了由Reactotron記錄器引起的類似問題。 由於我沒有將它捆綁在生產階段,因此一行console.tron.log使我的應用程序完全隱身崩潰。 (這有點我的錯,因為我沒有用“無控制台”的設置對我的linter說些什么)
這是我在根級別文件root.js中介紹的代碼片段。
if (__DEV__) {
...
console.tron = Reactotron;
...
}
希望有人在浪費時間找出錯誤之前找到這個。
不確定你是否還有這個問題 - 但如果你這樣做,我建議你查看Bugsnag以反應本機錯誤報告 - 它報告了JavaScript層和本機層(java / cocoa)的崩潰。
反應原生崩潰報告中要解決的難題之一(正如Sasha所提到的)是在使用縮小和/或混淆時恢復原始堆棧跟蹤 - 這在Bugsnag中通過提供對JS源映射的完全支持以及iOS符號來處理和原始圖層的Android Proguard支持。
如果這有幫助,請告訴我 - 我是@ Bugsnag的創始人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.