"Инвариантное нарушение: приложение AwesomeProject не было зарегистрировано" при сборке для iOS устройства со статическим jsbundle
во-первых, я не знаю, как реагировать, но я решил, что развертывание на устройстве iOS вместо симулятора не будет слишком сложно сделать с документами. Они были немного редкими, но я кое-что получил, и теперь я застрял. Я создал главный.jsbundle и добавил его в проект Xcode и раскомментировал строку в AppDelegate.м.
когда я развертываю его, я получаю эту ошибку:
2015-03-26 16:13:08.538 AwesomeProject[4753:2477032] >
RCTJSLog> "Running application "AwesomeProject" with appParams: {"rootTag":1,"initialProps":{}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF"
2015-03-26 16:13:08.547 AwesomeProject[4753:2477032] >
RCTJSLog> "Error:
stack:
runApplication main.jsbundle:33769
jsCall main.jsbundle:7157
_callFunction main.jsbundle:7404
applyWithGuard main.jsbundle:877
guardReturn main.jsbundle:7206
callFunctionReturnFlushedQueue main.jsbundle:7413
URL: file:///private/var/mobile/Containers/Bundle/Application/DBC0DAF4-B568-4CF5-B156-9EFEE4E7FF4A/AwesomeProject.app/main.jsbundle
line: 1536
message: Invariant Violation: Application AwesomeProject has not been registered."
2015-03-26 16:13:08.723 AwesomeProject[4753:2477032] >
RCTJSLog> "#CLOWNTOWN (error while displaying error): Network request failed"
11 ответов:
Я уверен, что исправление @krazyeom не имеет ничего общего с этой ошибкой. В моем случае я исправил это, выйдя из терминала, который работал из предыдущего тестового приложения, которое я запускал. Кажется, терминал был смущен и все еще был подключен к процессу, проект которого больше не загружался в XCode. Попробуйте следующее:
- закройте терминал, порожденный React Native.
- полностью выключите XCode (возможно, это не требуется).
- снова открыть все и повторный запуск.
ваша проблема не должна иметь ничего общего с консолью, если вы правильно упаковали свой javascript в приложение ios, он не будет пытаться поговорить с dev server, он просто получит javascript из пакета.
из сообщения об ошибке я бы предположил, что вы, возможно, переименовали свой основной компонент. Будьте уверены, что
'AppName'
передать в
AppRegistry.registerComponent('AppName' /* <- */, ... )
совпадает с
@"AppName"
наAppDelegate.m
по вызову[[RCTRootView alloc] initWithBundleUrl:... moduleName:@"AppName" // <- launchOptions:...
это потому, что сервер react-native все еще наблюдает за старым. Сначала вам нужно закрыть сервер.
вы можете просто убить процесс.
в терминале
ps aux | grep react
убить или pkill процесс, а затем
npm start
AppRegistry определяет точку входа в приложение и предоставляет корневой компонент.
ваш первый параметр не соответствует имени вашего проекта.
AppRegistry.registerComponent('AwesomeProject', () => YourMainComponent);
первый парам
registerComponent
должно быть ваше имя проекта, второй param-это анонимная функция, которая возвращает ваш корневой компонент react.если first param не соответствует имени проекта xcode, вы получаете эту ошибку, что ваше приложение не было зарегистрировано.
в случае, если у вас нет AppRegistry в области вы можете назвать это так
React.AppRegistry.registerComponent
или вы можете назначить егоAppRegistry
ВАРvar { AppRegistry } = React;
AppRegistry.registerComponent('abc',() => ***);
the
'abc'
должно совпадать сmoduleName:@'abc'
в имя файлаAppDelegate.m
у меня была та же проблема. Я решил это, дав одно и то же имя обоим имя модуля AppDelegate и AppRegistry.registerComponent
Если вы используете приложение с
$ react-native run-ios
вам нужно будет переименоватьmoduleName
поле в./ios/[project name]/AppDelegate.m
чтобы соответствовать новому имени проекта. Обновите симулятор телефона, и он должен показать новый код.
вы изменили имя приложения, которое вы регистрируете? Я запустил приложение с именем "tricky", а затем изменил имя в этой строке:
AppRegistry.registerComponent('MyNewApp', () => MyNewApp);
и я начал получать инвариантные ошибки.
Я не поклонник закрытия всего, поэтому я копаю это дальше.
все, что мне нужно было сделать, это в моем окне терминала, я запустил эту команду:
../lala/node_modules/react-native/packager/launchPackager.command ; exit;
мое имя проекта было "lala", так что найти, что есть node_modules в вашем проекте тоже.
замените lala с вашим именем проекта он должен работать.
если есть ошибка говорит, что порт уже используется:
ERROR Packager can't listen on port 8081
тогда у вас есть два варианта:
- уже убить работающая программа.
- или измените порт, перейдя в :
../lala/node_modules/react-native/packager/packager.js
затем найдите свой номер порта, пример 8081, и замените его номером порта, который не используется.var options = parseCommandLine([{ command: 'port', default: 8082, }, {
Сохраните этот файл, а затем снова выполните вышеуказанную команду.
таким образом, я могу запустить несколько react(ors).
ссылка на безымянного человека.
это работает для меня.
У меня была почти такая же проблема, что и у вас несколько дней назад. Для меня это было настоящее устройство.
из всех моих исследований, решение, которое сработало для меня является следующим:
- когда вы запускаете свое приложение, набрав react-native run-android, появляется ошибка.
- Итак, перейдите в каталог, содержащий " adb.exe" ( для меня это было
C:\Users\username\AppData\Local\Android\Sdk\platform-tools\
)- открыть терминал здесь. И введите adb обратный tcp: 8081 tcp: 8081
- затем, перезагрузив приложение на телефоне, он должен работать.