it-swarm.com.ru

React родное приложение зависло на заставке на устройстве, но работает в симуляторе

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

25
Thomas Charlesworth

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

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

32
Guannan He

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

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

Пример вызова (наш 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
Luke Williams

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

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

 enter image description here

2
Anjum....

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

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

2
Guy

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

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

См. Эту ссылку для получения дополнительной информации: https://developer.Apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//Apple_ref/doc/uid/TP-0000W22

1
TheJizel

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

1
Mehmet

У меня была такая же проблема.
То, что я сделал в XCode, перейдите в Продукты -> Схема -> Редактировать схему -> Выберите вкладку Выполнить -> Измените конфигурацию сборки на Выпуск (по умолчанию это был режим отладки) и запустите приложение в устройство. 

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

0
Udaya Sri

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

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 из эскиза и забыли ввести скрипт кода-реактивного реагирования на этапах сборки:

Для приведенной ниже версии 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