web-dev-qa-db-ja.com

Reactネイティブアプリはデバイスのスプラッシュ画面にスタックしますが、シミュレーターでは動作します

My ReactネイティブアプリはXCodeシミュレーターで問題なく動作しますが、物理デバイス、iPhoneで実行すると問題が発生します。アプリが起動し、Reactネイティブスプラッシュスクリーン、10〜15秒後にアプリがクラッシュ/閉じる。これの原因は何ですか、どのように防ぐことができますか?

30

問題が見つかったようです。 https://facebook.github.io/react-native/docs/running-on-device によると、デバイスでアプリをビルドして実行すると、アプリはパッケージャーをコンピューターにインストールし、アプリをライブリロードできます。つまり、デバイスをコンピューターに接続するか、コンピューターと同じwifiネットワークに接続する必要があります。デバイスがパッケージャーにアクセスできない場合、スプラッシュ画面にスタックして終了します。

デバイスで確実に実行するには、ビルドスキーマとビルドリリースバージョンを編集します。

37
Guannan He

パッケージャーを接続せずに、デバイス上でデバッグでアプリを実行することは完全に可能であるはずです! react-native bundleを使用してオフラインバンドルを作成し、Xcodeプロジェクトに追加する必要があります。その後、パッケージャーが利用できない場合、アプリはそのバンドルにフォールバックする必要があります。

これは、Deploying to Device FBのドキュメントにありましたが、なぜもう存在しないのかわかりません。

サンプル呼び出し(TypeScriptによってindex.ios.js./distに配置されます):

react-native bundle --dev true --assets-dest ./ios --entry-file ./dist/index.ios.js --platform ios --bundle-output ios/main.jsbundle

また、開発サーバーにアクセスするのではなく、バンドルから直接実行するようにアプリに指示する必要があるようです。これにより、タイムアウトが発生するようです(OPと同じ問題がありました)。

この行をコメントアウトします。

jsCodeLocation = // whatever

そして、次の行を追加します。

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
6
Luke Williams

私が構築したとき、それはシミュレータでうまく機能していましたが、実際のデバイスではスプラッシュ画面だけが来ていて、他には何もありませんでした。

これは、ビルド構成がデフォルトのデバッグモードであったため、リリース/ビルド構成をデバッグからリリースに変更する必要があり、すべてが期待どおりに機能するためです。

enter image description here

3
Anjum....

IPhoneをインターネットから切断しようとしましたが、その後の起動で問題はなくなりました。

そのため、何かがネットワーク関連のことをしようとしており、遅延を引き起こしています。これは簡単な修正ですが、特定の犯人が見つかるまでそれを行います。

2
Guy

私は同じ問題を抱えていました。
Xcodeで行ったことは、Products-> Scheme-> Schemeの編集-> Runタブを選択->ビルド構成をReleaseに変更(デフォルトはデバッグモードでした) )およびデバイスでアプリを実行します。

はるかに高速で、ネイティブアプリのように実行されました。

2
Udaya Sri

おそらくアプリに署名する必要があります。

[プロジェクト]ナビゲーターで、アプリをクリックします。次に、プロジェクトとターゲットのリストからターゲットを選択します。 [全般]タブで、[署名]セクションを見つけます。ここでチームを指定する必要があります。

詳細については、このリンクを参照してください: https://developer.Apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//Apple_ref/doc/uid/TP40012582-CH27 -SW4

1
TheJizel

私は、プロジェクトでfirebaseフレームワークを使用しています。 xcodeプロジェクトにGoogleService-Info.plistファイルを追加するのを忘れていました。追加すると問題はなくなりました。

1
Mehmet

反応ネイティブスプラッシュスクリーンだったこの問題に直面しました。それを削除した後、それは働いています

0
Sujit

この問題は、次の可能性により発生する可能性があります。

  1. 実行スキーマはreleaseではなくdebugに設定されているため、常にmain.jsbundle、デバッグサーバーから実行する代わりに。変更するProduct-> Schema-> Edit Schema-> Run-> Build Configuration:Debug

Xcodeログで、NSURLConnection finished with error - code -1004 または NSURLConnection finished with error - code -1022 Project-> Target-> Build Phases-> +-> New Run Script Phaseに移動します

  1. (-1004)スケッチからXCodeプロジェクトを構成し、ビルドフェーズで反応ネイティブxcodeスクリプトを入力するのを忘れました:

React Native 50:export NODE_BINARY=node ../node_modules/react-native/packager/react-native-xcode.sh

React Native 50:export NODE_BINARY=node ../node_modules/react-native/scripts/react-native-xcode.sh

  1. (-1022)アプリのATSの問題、Info.plistを確認し、以下のコードを使用してATSをオフにできます:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
0
dayitv89