React-Native: Uygulama kaydedilmedi hatası


166

Şu anda React-Native öğreticilerinden geçiyorum. Yeni bir yerel reaksiyon projesi yaptığım ve projeyi cihazımda başarıyla çalıştırmayı başladığım Başlangıç ​​eğitimiyle başladım.

Daha sonra Sahne eğiticisini başlattım, kod snippet'ini kopyaladım ve projeyi tekrar çalıştırmayı denedim ve ekranımda aşağıdaki hata mesajını gösterdim:


Kodunuzu paylaşabilir misiniz?
Jagadish Upadhyay

Yanıtlar:


435

Sanırım projenin adı ve kayıtlı bileşeninizle eşleşmemesinden kaynaklanan bir hata.

Projeyi bir adla başlattınız, yani

react-native init AwesomeApp

Ama index.ios.js dosyanıza başka bir bileşen kaydediyorsunuz

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

O zaman gerekir olmak

AppRegistry.registerComponent('AwesomeApp', () => Bananas);

Tamir etmeyi dene.


7
"Muz" android için nasıl çalışır. Ama IOS'ta değil.
Sumit Kushwaha

92
Bileşen adı eşleşse bile aynı sorunla karşılaşan biri için -> Başka bir terminalde çalışan başka bir yerel yanıt / düğüm işlemi olmadığından emin olun.
Nilesh

1
deneyimlerime göre, sistemin yeniden başlatılması bazı şeyleri sıraladı ... göründüğü kadar garip.
Kayote

Eğitici şu anda "AwesomeProject" olarak adlandırılıyor
AdamG

2
ve AwesomeApp yerine Muz isteyen insanlar moduleName:@"AwesemeApp"için AppDelegate.m dosyasındaki satırı değiştirebilirler
Aequitas

42

Çoğu zaman sorun, başka react-native startbir terminalde veya TMUX'un başka bir sekmesinde (TMUX kullanıyorsanız) çalışan başka bir (yani React Native Packager) sunucunuz olmasıdır.

Bu işlemi bulmanız ve kapatmanız gerekir, bu nedenle react-native run-iosörneğin çalıştırdıktan sonra , söz konusu uygulama için kaydedilmiş yeni bir paketleyici sunucusu oluşturur.

Bu işlemi kullanarak şunları bulun:

ps aux | grep react-native

işlem kimliğini (PID) bulun ve killkomutu (örn. kill -9 [PID]) kullanarak paketleyici işlemini öldürün . launchPackager.commandUygulamayı diğer işletim sistemlerinden emin olmayan macOS'ta bulmalısınız .

Sonra run-iostekrar (veya android) çalıştırmayı deneyin . Yeni paketleyici sunucusunu çalıştırdıktan sonra yeni yolu görebilmeniz gerekir, örneğin:

Looking for JS files in
   /Users/afshin/Desktop/awesome-app 

Ben koşmak bile çalışır react-native start --port <otherport>, ben çalışmalıdır react-native run-<platform>?, sayesinde başka bir şekilde
Sebastian Palma

@ SebastiánPalma bildiğim kadarıyla, startkomut paketleyici sunucusunu çalıştırır, bu yüzden uygulamanızı zaten derlediyseniz, bunu yapmaya gerek yoktur run-<platform>.
Afshin Mehrabani

32

MainActivityBu şekilde değiştir ,

@Override
protected String getMainComponentName() {
    return "Bananas"; // here
}

2
KESİNLİKLE! bu benim sorunum tam olarak buydu, ancak bunu değiştirmek yerine AppRegistry.registerComponent değiştirdim
Sijav

Ios ne olacak?
Dinesh R Rajput

+1. CLI'nin neden sadece projemin çalışmamasına yol açacağını ve beni geri değiştirmek zorunda kaldığımda android / ios versiyonuna farklı bir isim vermek isteyip istemediğini merak ediyor.
dokunun

Ben app.js modifiye etmişti
rulo

28

Benim çözüm "AppDelegate.m" de modül adını değiştirmek

itibaren moduleName:@"AwesomeProject"

için moduleName:@"YourNewProjectName"


Bu benim sorunumu çözdü. Teşekkürler!
Cory McAboy

React Native'den iOS simülatörü çalıştırmak için çalıştı!
Emilio

Evet, bu bana yardımcı oluyor. Ek bir ipucu: XCode kullanıyorsanız, Uygulama Adınız için doğru Adı ayarladığınızdan emin olun (Project -> Target -> DisplayName)
suther

17

Her şeyden önce başvurunuzu başlatmalısınız:

react-native start

Ardından, registerComponent öğesinin ilk argümanı olarak uygulama adınızı ayarlamanız gerekir.

İyi çalışıyor.

AppRegistry.registerComponent('YourProjectName', () => YourComponentName);

8

Lütfen projedeki app.json dosyanızı kontrol edin. line appKey yoksa eklemelisiniz

{
  "expo": {
    "sdkVersion": "27.0.0",
    "appKey": "mydojo"
  },
  "name": "mydojo",
  "displayName": "mydojo"
}

3
Son 24 saattir bu hatayla uğraşıyoruz. Bu benim sorunumu çözdü. Teşekkürler!
Balaji Kartheeswaran

7

Benim durumumda MainActivity.java'da react-native-renamecli ( NPM'den) kullandığımda kaçırılan bu satır var

protected String getMainComponentName() {
    return "AwesomeApp";
}

Açıkçası uygulamanızın adını yeniden adlandırmanız gerekir.


4

Düğüm sunucusunun başka bir klasörden çalıştığını düşünüyorum. Öyleyse öldürün ve geçerli klasörde çalıştırın.

Çalışan düğüm sunucusunu bulun: -

lsof -i :8081

Çalışan düğüm sunucusunu öldür: -

kill -9 <PID>

Örneğin:-

kill -9 1653

Düğüm sunucusunu geçerli yanıt yerel klasöründen başlat: -

react-native run-android


3

Ben aynı sorunu vardı ve benim için kök neden başka bir klasörde başka bir proje oluştururken, başka bir tepki yerel klasörden (AwesomeApp) paketleyici koştum (yerli tepki).

Paketleyiciyi yeni uygulamanın dizininden çalıştırmak sorunu çözdü.


1

Bunun nedeni Kök bileşen adının küçük harfle başlaması olabilir.

Yeniden düzeltin veya bir PascalCase adıyla projeyi bir kez daha oluşturun.

örneğin, yeni HelloWord'u tutuştur


1

Verilen tüm cevaplar benim için işe yaramadı.

Başka bir terminalde çalışan başka bir düğüm işlemi vardı, bu komut terminalini kapattım ve her şey beklendiği gibi çalıştı.


1

Gerekirse kayıt index.android.js / index.ios.js bunu

bunun gibi:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

AppRegistry.registerComponent('test', () => app);

1

Bunu app.json dosyasında aşağıdakileri değiştirerek çözdüm. Görünüşe göre büyük harf bu hatayı atıyordu.

Gönderen:

{
  "name": "Nameofmyapp",
  ...
}

Kime:

{
  "name": "nameofmyapp",
  ...
}

0

İçindeki adı değiştirmek yerine AppRegistry,

Reat-native init Bananas'ı çalıştırın, bu Bananas projesi için tepki levhası kodu oluşturacak ve AppRegistry.registerComponentotomatik olarak muzları gösterecektir.

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

0

Çözümlerin hiçbiri benim için işe yaramadı. Aşağıdaki süreci öldürmek zorunda kaldı ve tepki rea-yerli run-android koştu ve işe yaradı.

düğüm ./local-cli/cli.js başlangıç


1
hangi süreçler?
bigmadwolf

@bigmadwolf node ./local-cli/cli.js başlangıç
G. Thabit

0

Ben de aynı problemi yaşadım. Android için bir reaksiyon yerel uygulaması oluşturmak için Windows'u kullanıyordum ve aynı hatayı yapıyordum. İşte işe yarayan.

  • Kökünüzdeki ANDROID klasörüne gidin .
  • İsimli bir dosya oluşturun: local.properties
  • Editörde açın ve şunu yazın:

sdk.dir = C: \ Kullanıcılar \ KULLANICIADI \ AppData \ Local \ Android \ sdk

  • USERNAME yerine makinenizin adını yazın.

Uygulamayı normal şekilde kaydedin ve çalıştırın. Bu benim için çalıştı.


0

Sorun, index.js'de, uygulamayı android / ios paketi için verdiğiniz addan farklı bir şekilde adlandırdığınızda da görünecektir ; muhtemelen bu uygulamayı çıkardığınızda oldu. Bu nedenle, arama yaparken AppRegistry.registerComponent('someappname', () => App), yerel paketler veya viceversa için bir adın da kullanıldığından emin olun .


0

Sorunun benim durumumda nerede olduğunu anladım (Windows 10 OS), ancak Linux'ta da yardımcı olabilir (Deneyebilirsiniz).

Olarak windows power shell, aşağıdaki komutu çalıştırarak bir uygulama (pc açılışta sonra ilk defa) çalıştırmak istediğinizde,

react-native run-android

Bu bir başlatır node process/JS serverbaşka console panelve bu hatayı karşılaşma yok. Çalıştırmak istediğiniz zaman, başka bir uygulamayı , sen gerekir gereken kapatmak olduğunu zaten çalışıyor JS server console panel . Ardından, başka bir uygulama için aynı komutu yürütün power shell, bu komut otomatik olarak bu uygulama için başka bir yeni JS sunucusu başlatır ve bu hatayla karşılaşmazsınız.

Başka bir uygulamayı çalıştırmak için kapatıp yeniden power shell açmanıza gerek yok, başka bir uygulamayı çalıştırmak için kapatmanız gerekiyor node console.


0

Yukarıdakilerin hepsini okuduktan sonra, bunun başka bir nedeni olabileceğini keşfettim.

Benim durumumda:

tepki-doğal-cli: 2.0.1

reaksiyona özgü: 0.60.4

ve aşağıdaki yapı:

resim açıklamasını buraya girin

Birincisi, metro oluşturucusu (tepki-yerel çalışma-android) tarafından çalıştırılan derlemenin manuel olarak yapılması gerektiğinde index.android'in Android Studio'da güncellenmediğine dikkat edilmelidir. Ayrıca Android stüdyosunda "okumuyor"

app.json (varsayılan olarak index.android.js olarak adlandırılan index.js ile birlikte oluşturulur):

 {
    "name": "authApp",
    "displayName": "authApp"
 }

ve bu böyle

(benim durumumda)

import {authApp as appName} from './app.json';

çünkü android stüdyosu authApp'ın ne ifade ettiğini bilmiyor. Ben dize adı ile uygulama adına atıfta ve app.json bu alma kullanarak an an için düzeltmek:

AppRegistry.registerComponent('authApp', () => MyApp);

0

Bu benim için çözdü

AppRegistry.registerComponent('main', () => App);

Yani benim index.jsdosyam

import { AppRegistry } from 'react-native';
import App from './App';
AppRegistry.registerComponent('main', () => App);

Ve benim package.jsondosyam:

"dependencies": {
    "react": "^16.13.1",
    "react-dom": "~16.9.0",
    "react-native": "~0.61.5"
},

0

Bu çözüm 2 günlük hata ayıklamadan sonra benim için çalıştı. Bunu değiştir :

AppRegistry.registerComponent('AppName', () => App);

için

AppRegistry.registerComponent('main', () => App);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.