2015-03-26 23 views
55

Po pierwsze, nie wiem, reagować, ale pomyślałem, że wdrożenie na urządzeniu z systemem iOS zamiast symulatora nie byłoby zbyt trudne zrobić z dokumentami. Były trochę skąpe, ale gdzieś się znalazłem, a teraz utknąłem. Utworzono plik main.jsbundle i dodałem go do projektu Xcode i odkomentowałem wiersz w AppDelegate.m."Naruszenie niezmienne: aplikacja AwesomeProject nie została zarejestrowana" Podczas budowania na urządzenie iOS ze statycznym jsbundle

Kiedy wdrożyć go uzyskać ten błąd:

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" 

Odpowiedz

119

jestem całkiem pewny @ fix krazyeom nie ma nic wspólnego z tym.. W moim przypadku naprawiłem to przez zamknięcie terminalu, który był uruchomiony z poprzedniej uruchomionej aplikacji testowej. Wygląda na to, że terminal był zdezorientowany i nadal był podłączony do procesu, którego projekt nie był już załadowany w XCode. :

  1. Zamknięcie T erminalna odrodzona przez React Native.
  2. Całkowicie zamknij XCode (może nie być konieczne).
  3. Ponownie otwórz wszystko i uruchom ponownie.
+2

Nie sądzę, że ma to związek z ponownym uruchomieniem Xcode lub Terminal. –

+0

Próbowałem też, więc nie sądzę, że to też. – cmp

+0

To z pewnością naprawiło mój problem, ja też uruchomiłem mój drugi test React Native, gdy napotykałem ten komunikat o błędzie. W drugim czytaniu nie sądzę, że jest to ten sam problem, jaki masz ... –

0

mam podobny komunikat w konsoli.

wiadomość: Inwariant Naruszenie: Zastosowanie AwesomeProject nie została zarejestrowana „

Właśnie dodałem REACT_EDITOR=atom w pliku ~/.bashrc

5

Czy zmieniłeś nazwę aplikacji, którą rejestrujesz? Zacząłem aplikację o nazwie „trudne”, a później zmienił nazwę na tej linii:

AppRegistry.registerComponent('MyNewApp',() => MyNewApp); 

i zacząłem coraz niezmiennego błędu.

+0

W takim przypadku zmień także nazwę docelową lub wpisz nowy kod w Info.plist. –

48

Twój problem nie powinien mieć nic wspólnego z konsolą, jeśli poprawnie spakowałeś javascript do aplikacji ios, która nie będzie próbowała komunikować się z serwerem dev, otrzyma javascript z pakietu.

Z komunikatu o błędzie, domyślam się, że mogła zostać zmieniona nazwa głównego składnika. Bądź pewny, że 'AppName' przechodzą do

AppRegistry.registerComponent('AppName' /* <- */, ...)

meczów z @"AppName" na swojej AppDelegate.m na wezwanie do

[[RCTRootView alloc] initWithBundleUrl:... 
          moduleName:@"AppName" // <- 
         launchOptions:... 
+2

Musisz ponownie uruchomić menedżera pakietów, jeśli zmienisz uruchomioną aplikację. – GreenAsJade

+1

najlepsze wytłumaczenie. fakt, że nazwa głównego składnika musi być zgodna z nazwą modułu w AppDelegate.m – CarmenA

26

to dlatego, że serwer reagować-rodzimy nadal oglądać starą . Musisz najpierw wyłączyć serwer.

Możesz po prostu zabić ten proces.

w terminalu

ps aux | grep react 

zabijania lub pkill procesu i

npm start 
+2

To był mój problem. Ostrożnie, jeśli zacząłeś kilka projektów! Musisz zdać sobie sprawę, że serwer reagowania może nadal działać w tle dla pierwszego rozpoczętego projektu. Kiedy zabiłem domyślny "awesomeproject", moja nowa aplikacja zaczęła i działała poprawnie. – program247365

+0

Dziękuję, to było to. – rxb

8

miałem ten sam problem.Rozwiązałem go podając tę ​​samą nazwę zarówno AppDelegate za moduleName i AppRegistry.registerComponent

Jeśli uruchamiając aplikację z $ react-native run-ios trzeba będzie zmienić nazwę pola moduleName w ./ios/[project name]/AppDelegate.m dopasować nową nazwę projektu . Odśwież symulator telefonu i powinien pokazać nowy kod.

+0

TO JEST PRAWIDŁOWA ODPOWIEDŹ –

+0

Zgadzam się, inne odpowiedzi mi nie pomogły, dodałem bardziej szczegółowe informacje o tym, jak to naprawić – jcollum

+2

Wielkość liter ma znaczenie! –

1

Nie jestem zwolennikiem zamykania wszystkiego, więc przekopuję się dalej.

Wszystko co musiałem zrobić, to w moim oknie terminala, wpadłem polecenie:

../lala/node_modules/react-native/packager/launchPackager.command ; exit; 

Nazywam projektu było „Lala”, więc uważają, że jest node_modules w projekcie zbyt.

Zamień lala na nazwę projektu, która powinna działać.

Jeśli wystąpi błąd mówi port jest już w użyciu:

ERROR Packager can't listen on port 8081 

Wtedy masz dwa wyjścia:

  • Zabij programu już działa.
  • Lub Zmień port, przechodząc na: ../lala/node_modules/react-native/packager/packager.js, a następnie znajdź numer portu, na przykład 8081, i zastąp go numerem portu, który nie jest używany.
var options = parseCommandLine([{ 
      command: 'port', 
      default: 8082, 
     }, { 

Zapisz ten plik, a następnie ponownie uruchomić powyższą komendę.

W ten sposób mogę uruchomić wiele reakcji (lub).

18

AppRegistry definiuje punkt wejścia do aplikacji i zapewnia składnik główny.

Twój pierwszy parametr nie pasuje do nazwy twojego projektu.

AppRegistry.registerComponent('AwesomeProject',() => YourMainComponent); 

Pierwszy param od registerComponent musi być nazwa projektu, drugi param jest anonimowa funkcja, która zwraca Twój główny składnik reagować.

Jeśli pierwszy parametr nie pasuje do nazwy projektu xcode, pojawia się błąd, że aplikacja nie została zarejestrowana.

W przypadku, gdy nie ma AppRegistry w zakresie można nazwać jak ten React.AppRegistry.registerComponent lub można przypisać go do AppRegistry var

var { 
    AppRegistry 
} = React; 
+0

To mi pomogło. Dzięki. – Sushruth

+0

Pomogło mi to, gdy robiłem [samouczek reagowania] (https://facebook.github.io/react-native/docs/tutorial.html) po utworzeniu projektu za pomocą ich "Pierwsze kroki". instrukcja init AwesomeProject. – jacks205

1

dostał ten sam błąd, ponowne uruchomienie wszystko łącznie z Xcode i terminal pracował dla mnie.

10
AppRegistry.registerComponent('abc',() => ***); 

'abc' musi być taka sama jak moduleName:@'abc' w nazwie pliku AppDelegate.m

+0

Przypadkowo to zepsułem. Twoja odpowiedź rozwiązana dla mnie, dziękuję. – SudoPlz

1

Reference bezimienny człowiek.

to działa dla mnie.


Miałem prawie ten sam problem, który obecnie masz kilka dni temu. Dla mnie to było prawdziwe urządzenie.

Od wszystkich moich badań, roztwór, który pracował dla mnie jest następująca: pojawia

  1. Po uruchomieniu aplikacji, wpisując reagować-rodzimy run-android, błąd .
  2. więc osiągnąć swój katalog zawierający „adb.exe” (dla mnie to było
    C:\Users\username\AppData\Local\Android\Sdk\platform-tools\)
  3. otworzyć terminal stąd. I wpisz adb reverse tcp: 8081 tcp: 8081
  4. Następnie, ponownie ładując aplikację na telefonie, powinna działać.