React Native, используя предварительно упакованный файл на устройстве, даже если DEV-режим

Несколько дней назад, когда я создавал и запускал свое собственное родное приложение из Xcode на устройстве, я понял, что даже если я настрою свою схему на Debug, приложение по-прежнему загружается из предварительно упакованного файла. Кроме этого, все остальное похоже на режим разработчика. Я могу встряхнуть устройство и всплывающие всплывающие окна разработчика, в консоли я получаю вывод и реагирую на собственные также журналы:

Запуск приложения "XXXXX" с помощью appParams: { "RootTag": 1, "initialProps": {}}. DEV === true, уровень развития предупреждение включено, оптимизация производительности отключена

Поэтому, когда я пытаюсь перезагрузить утилиту разработчика, она действительно перезагружается, но с сообщением

Загрузка из предварительно упакованного файла

Я попытался удалить приложение, проверить Debug-схему, очистить сборку, а также построить и запустить снова, без какого-либо другого результата.

Кто-нибудь знает, что могло бы привести к этому (я уже запускал приложение с помощью схемы выпуска, но у меня никогда не было этой проблемы), и как я могу вернуться к "нормальному"?

К сожалению, я не знаю, как воспроизвести это.

  • Xcode: 8.2.1
  • React-native: 0.40.0

Спасибо за ваше время!

решаемые

В моем случае это было как @while1, указывали на Wi-Fi. Мое устройство и компьютер, где они не подключены к одному и тому же Wi-Fi. Однако я нашел сеть на своем рабочем месте, где она по-прежнему не работает, даже если и компьютер, и устройство подключены к этой сети (как-то защищено?). В любом случае, когда я поделился своим подключением к Интернету своим компьютером с моего iPhone, приложение, наконец, загрузило данные с моего компьютера. Так что iPhone действительно не смог подключиться к моему компьютеру и, следовательно, загрузил предварительно упакованный файл.

Ответ 1

В реакции native 0.40.0, React native попробуйте угадать местоположение пакета самостоятельно. Посмотрите, помогут ли следующие пункты:

  • Убедитесь, что ваша AppDelegate.m имеет следующую строку: jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

  • Проверьте, что ваше устройство и ваш Mac Xcode работают на одном и том же Wi-Fi. Внутренне для IOS, реагируйте на native, попробуйте угадать ip самостоятельно.

  • Попробуйте запустить приложение сначала через командную строку, поэтому сервер dev packager запущен, а затем запустите приложение через xcode на вашем устройстве.

Ответ 2

так что ваша проблема здесь:

Измените код в 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  

Приветствия:)

Ответ 3

Для тех, кто подключен к одному и тому же Wi-Fi, но к другому IP-адресу, чем localhost (вы установили его в 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 Info.plist file.
  • Используйте следующий ответ: fooobar.com/info/18948/...

  • И затем используйте Codesingh ответ. BTW Я рекомендую использовать директиву #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