簡體   English   中英

React-Native ios應用程序在沒有報告的情況下崩潰

[英]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值,我會遇到錯誤,因為我試圖訪問nullcolor屬性。

為什么沒有報告,我不知道(我跟着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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM