2016-03-04 16 views
18

React Nativeを使用してiOSアプリケーションを構築し、電話でテスト可能にしようとしています。React-Native iosアプリケーションがクラッシュするとレポートが表示されない

携帯電話をコンピュータに接続し、電話機に直接「ビルド」すると、アプリが正しく構築され、正常に開いて正常に動作します。問題はありません。

iTunes Connectの「TestFlight」または「Crashlytics」のファブリックを使用してファイルをアーカイブして電話に送信しようとすると、アプリが開くとすぐにクラッシュします。これは、起動画面を簡単に示していますが、これ以上はありません。

さらに、TestFlight、Crashlytics、またはXcodeでクラッシュレポートはありません。電話を差し込むと、クラッシュレポートはありません。ここでは、何が壊れているのかについての情報なしに、ここでは暗闇の中で操作しています。同様の問題をオンラインで見つけることができなかったので、私はちょうど尋ねると思った。何が間違っている可能性がある任意のアイデア?

コードやその他のデータが必要な場合は教えてください。いくつかは秘密ですが、私はおおよそのバージョンを投稿しようとします。

+1

私はこの問題についてまだ聞いていません。バンドルを使用するようAppDelegate.mを更新したと仮定しても問題ありませんか?私が想定しているのは、RNバージョンが好きなのです。正気のチェックと同じように、おそらく新しい新鮮なアプリを構築して、それが期待どおりに機能することを確認してください。それから、試行錯誤し、破られるまでそれにスケッチのあるビットを追加する。吸いますが、それはまっすぐに思い浮かぶものです。 –

+0

Ha yeah。それはまさに私がやることにしたものです。クラッシュレポートがないにもかかわらず、新アプリがうまく動作するようになっても、自分のアプリについては何かであるように見えます。アプリを1つのHello Worldページに導きます。 – Sasha

+1

その場合、私はあなたのコードを共有することなくここで多くの助けを得ることになるとは思わない。残念ながら、TestFlightとCrashlyticsは、ネイティブ側でクラッシュが発生した場合にのみ通知します。 JSのクラッシュレポートを取得するには、https://getsentry.com/、https://trackjs.com/などのようなものを試す必要があります。 –

答えて

11

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; 
    } 

最後の行が問題でした。私のローカルシミュレータで、私はそれを差し込んで私の携帯電話にアプリケーションを構築する場合、これは正常に動作します。メッセージモデルがBaseModelから継承する場合、var msg = new Message(data, relations); msg.classNameを呼び出すとMessageが返されます。

しかし、TestFlightやFabric.ioでアプリケーションをバンドル/アーカイブ/送信すると、のように、クラス名が変更されてしまいます。そこで代わりに、私がこれを行うと、var msg = new Message(data, relations); msg.className - 't'のようなランダムな変数名が返されます。 - 't'

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 
} 

しかし、this.props.classNameの値を予想通り、'Message'ませんでした:私のホームページはクラス名のオフに働いていたswitch文が含まれているため

これは、私のアプリで問題でしたありました。そして、colorの値にトンネルしようとすると、nullcolorプロパティにアクセスしようとしていたため、エラーが発生しました。

なぜ報告されなかったのですか(私はChrisの提案に従い、Sentryをインストールしましたが、まだそのエラーを報告していないようです)。

しかし、それは何が起こっていたのです。私がTestFlight/Fabricを介して電話機にアプリケーションをインストールしたときに、細工/脆化がしか発生しなかったため、そのような状況でアプリがクラッシュしたのです。

これにより、似たようなバグに遭遇している人は誰でも自分の髪を引き裂くことがなくなります。

+0

あなたと同じ問題があります。問題をどのように追跡しましたか?ちょうど試行錯誤? –

+0

はい、残念ながら。私は、アプリケーションの巨大なセクションをコメントアウトするだけで、問題を1つのファイルに絞り込みました。そして、レンダリングの手順を実行するのではなく、ページにデータを印刷しました。 TestFlightよりもFabric.ioの方が簡単です。なぜなら、後者は1回の配布で約100倍の時間がかかるからです。それはまだ非常に面倒だが、あまりにも悪くはない。 – Sasha

+0

すばらしい、ありがとう!だから、Fabric.ioを使うことで、TestFlightの必要性がなくなりますか? –

1

まだこの問題があるかどうかはわかりませんが、もしそうなら、Bugsnagをreact native error reportingにチェックアウトすることをお勧めします.JavaScriptレイヤーとネイティブレイヤー(Java/Cocoa)の両方でクラッシュが報告されます。

Sashaが言及したように、ネイティブクラッシュレポートを解決するために難しい問題の1つは、縮小や難読化を使用する際に元のスタックトレースを復元することです。これはBugsnagでJSソースマップを完全にサポートすることでネイティブレイヤーでのiOSの象徴化やAndroid Proguardのサポートなどがあります。

は、このことができます場合は、私に教えてください - 私はすべてが開発段階にうまく働いたのに対し、生産段階のクラッシュの私自身の経験を共有したいBugsnag

+0

私はOPと同じ問題を抱えていますが、私はBugsnagを使用しています。なんらかの理由で、エラーは報告されていません。 – Lee

+0

私はリリースに影響するリリース時のクラッシュ(OPと同じ)を調査するのに苦労しました。 クラッシュサイクラは、私に(そして役に立たない)小型化されたスタックトレースを提供します。 BugsnagとSentryダッシュボードが空になります。 JS例外のように見えますが、Bugsnag/Sentryハンドラがロードされる前にクラッシュが発生したようです。 – paws

+0

あなたの会社に広告を掲載しているため – connorbode

1

@創設者です。

私は、ロガーによって引き起こされる同様の問題を抱えていました。私は製造段階でバンドルしていないので、console.tron.logの1行で完全なステルスで私のアプリをクラッシュさせた。 (これはちょっと私のせいで、私のリンターについては「コンソールなし」の設定で気にしなかったので)

私は自分のルートレベルファイルroot.jsで紹介しているコードスニペットです。

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

誰かが間違っていることを理解する時間を無駄にする前にこれを見つけてください。

関連する問題