Реагировать на встроенное приложение, застрявшее на заставке на устройстве, но работает в симуляторе

My React Native приложение работает в симуляторе XCode без проблем, но когда я запускаю на физическом устройстве, у меня iPhone, есть проблема. Приложение запускается и застревает на заставке React Native, через 10-15 секунд приложение вылетает/закрывается. Какова причина этого и как я могу его предотвратить?

Ответ 1

Кажется, я нашел проблему. Согласно https://facebook.github.io/react-native/docs/running-on-device, когда вы создаете и запускаете приложение на своем устройстве, ваше приложение будет загружать файлы js из упаковщика на ваш компьютер, поэтому вы может вживую перезагрузить ваше приложение. Это означает, что ваше устройство должно быть подключено к вашему компьютеру или должно быть в той же сети Wi-Fi, что и ваш компьютер. Если ваше устройство не может получить доступ к упаковщику, оно застрянет на заставке и выйдет.

Чтобы надежно работать на вашем устройстве, отредактируйте схему сборки и версию выпуска сборки.

Ответ 2

Должно быть вполне возможно запустить приложение в отладке, на устройстве, без прикрепленного пакета! Вы должны использовать react-native bundle для создания автономного пакета и добавить его в свой проект Xcode. Затем ваше приложение должно вернуться к этому пакету, когда пакет не доступен.

Раньше это было в документах FB для развертывания на устройстве, не зная, почему его больше нет.

Пример вызова (наш index.ios.js помещается в ./dist на TypeScript):

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"];

Ответ 3

Для меня, когда я строил, он работал нормально в симуляторе, но в реальном устройстве только заставка появлялась, и больше ничего.

Это произошло потому, что моей конфигурацией сборки был режим отладки, который, по-моему, является стандартным, мне пришлось изменить конфигурацию выпуска/сборки с отладки на выпуск, и все работало как ожидалось.

enter image description here

Ответ 4

Я попытался отключить мой iPhone от Интернета, проблема исчезла в последующих запусках.

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

Ответ 5

У меня была такая же проблема.
Что я сделал в Xcode, перейдите в Продукты → Схема → Изменить схему → Выберите вкладку "Выполнить" → "Изменить конфигурацию сборки" на "Release" (по умолчанию это был режим отладки) и запустите приложение в устройство.

Это было намного быстрее и запускало его как родное приложение.

Ответ 6

Вам, вероятно, нужно подписать приложение.

В навигаторе проекта нажмите на свое приложение. Затем выберите цель из списка проектов и целей. На вкладке "Общие" найдите раздел "Подпись". Здесь вам нужно указать команду.

Смотрите эту ссылку для получения дополнительной информации: https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//apple_ref/doc/uid/TP40012582-CH27-SW4

Ответ 7

Для меня я использую фреймворк Firebase на моем проекте. Я забыл добавить файл GoogleService-Info.plist в свой проект xcode. После добавления проблема исчезла.

Ответ 8

Прошло некоторое время с тех пор, как я опубликовал это, но решение состоит в том, чтобы удалить папки node_modules и запустить npm install, чтобы получить чистую.

Ответ 9

Я столкнулся с этой проблемой, когда я реагировал на язык-всплеск-экран. После его удаления он работает

Ответ 10

Эта проблема может возникнуть из-за следующих возможностей:

  1. Ваша схема запуска настроена на release вместо debug, поэтому всегда ожидайте загрузки main.jsbundle вместо запуска с сервера отладки. Измените его с помощью Product-> Schema-> Изменить Schema-> Выполнить-> Настройка сборки: отладка

Проверьте в журнале Xcode, что любое сообщение, такое как NSURLConnection finished with error - code -1004 или NSURLConnection finished with error - code -1022. Перейдите на Project-> Target-> Build Phases-> + → Фаза нового сценария запуска

  1. (-1004) Вы сконфигурировали свой проект XCode из эскиза и забыли ввести скрипт кода-реактивного реагирования на этапах сборки:

Для приведенной ниже версии React Native 50: export NODE_BINARY=node../node_modules/react-native/packager/react-native-xcode.sh

Для более export NODE_BINARY=node../node_modules/react-native/scripts/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>