web-dev-qa-db-ja.com

React DEVモードの場合でも、デバイスで事前にバンドルされたファイルを使用するネイティブ

数日前、デバイス上でXcodeから反応するネイティブアプリをビルドして実行すると、スキームを[デバッグ]に設定しても、アプリは事前にバンドルされたファイルからロードされていることに気付きました。それ以外は、他のすべては開発者モードのようなものです。私はデバイスと開発者の多くのポップアップを振ることができ、コンソールで出力を取得し、ネイティブもログに反応します:

AppParamsでアプリケーション "XXXXX"を実行しています:{"rootTag":1、 "initialProps":{}}。 [〜#〜] dev [〜#〜] === true、開発レベルの警告はオン、パフォーマンスの最適化はオフ

したがって、開発者の多くからリロードしようとすると、実際にはリロードされますが、メッセージが表示されます

事前にバンドルされたファイルからの読み込み

私はアプリを削除し、デバッグスキームを検証し、ビルドをクリーンアップし、ビルドと再実行を試みましたが、結果は変わりませんでした。

誰がこれを引き起こしたのか(リリーススキームでアプリを実行したことがありますが、この問題は一度もありませんでした)、そしてどのように「通常」に戻ることができるのか手掛かりがありますか?

残念ながら、これを再現する方法はわかりません。

  • Xcode:8.2.1
  • 反応ネイティブ:0.40.0

お時間をいただきありがとうございます!

解決済み

私の場合、wifiについて@ while1が指摘したとおりでした。同じWi-Fiに接続されていないデバイスとコンピューター。しかし、コンピューターとデバイスの両方がこのネットワークに接続されていても(何らかの方法で保護されているかもしれませんが)、職場でネットワークがまだ機能していないことを発見しました。とにかく、インターネット接続をiPhoneからコンピューターに共有すると、アプリは最終的にコンピューターからデータをロードしました。確かに、iPhoneは私のコンピューターに接続できず、事前にバンドルされたファイルをロードしていました。

30
Viktor Nilsson

React native 0.40.0では、React nativeはバンドルの場所を自分で推測しようとします。次の点が役立つかどうかを確認してください。

  • AppDelegate.mに次の行があることを確認してください:jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

  • デバイスを確認し、Xcode Macが同じwifiで実行されている。 IOSの内部では、ネイティブでIPを推測しようとする反応をします。

  • 最初にコマンドラインからアプリを実行して、dev packagerサーバーが実行されていることを確認してから、デバイスのxcodeからアプリを実行します。

33
while1

あなたの問題はここにあります:

AppDelegate.mのコードを変更します。

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; // comment this line

jsCodeLocation = [NSURL URLWithString:@"http://xxx.xxx.x.xx:8081/index.ios.bundle?platform=ios&dev=true"]; //uncomment this line  

乾杯:)

13
Codesingh

私は同じ問題に直面しており、上記の点は私にとってはうまくいきませんでした。これらの手順を実行することで機能しました。

  • Xcode-> your project-> info.plistに移動します
  • [App Transport Security settings]で[Allowrary Loads]をYesにします。

この問題は修正されるはずです。

6

同じWi-Fiに接続しているが、ローカルホストとは異なるIPアドレスに接続している場合(RCTWebSocketExecutor.mで設定済み):

次のエラーが見つかった場合は、Xcodeデバッグコンソールを確認してください。

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
  1. 次の回答を使用してください: https://stackoverflow.com/a/32704702/3979621

  2. そして、Codesinghの答えを使用します。ところで、ビルドバリアントを切り替えるときに手動で変更する必要がないように、次のように#ifdef DEBUGディレクティブを使用することをお勧めします。

#ifdef DEBUG
  jsCodeLocation = [NSURL URLWithString:@"http://xxx.xxx.xxx.xxx:8081/index.ios.bundle?platform=ios&dev=true"];
#else
  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
#endif
3
Honza Kalfus

私の場合、それは(ネイティブに反応するための)予期しないネットワーク設定だったので、間違ったIPをgrepした。

IPが正しく検出されている場合は、ビルドレポートを確認してください

ネイティブドキュメントに反応する

0
Benni

私にとっては、macosのポップアップで[ノード]への着信ネットワーク接続を受け入れるかどうかを尋ねるのではなく、[許可]ではなく[拒否]を誤ってクリックしていました。

[システム環境設定]-> [セキュリティとプライバシー]-> [ファイアウォール]-> [ファイアウォールオプション]を開き、ブロックするように設定されたノードの行を見つけて修正し、問題を解決します!

0
Stian Jensen

私にとって、これは私のMacをMojaveにアップデートした後に起こりました。更新により、ファイアウォールの設定がすべての着信接続をブロックするように変更されたことがわかりました...私のファイアウォールのチェックを追跡してくれたStian Jensenに感謝します!

私がしたこと:

  1. [システム環境設定]-> [セキュリティとプライバシー]-> [ファイアウォール]-> [ファイアウォールオプション]を開きます。
  2. 「着信接続をすべてブロックする」のチェックを外します
  3. リストされている接続が信頼できるソースからのものであることを確認してください
0
Myalakin