React-Native: Aplikasi belum terdaftar kesalahan

166

Saat ini saya sedang melalui tutorial React-Native. Saya mulai dengan tutorial Memulai, di mana saya membuat proyek asli reaksi baru dan berhasil menjalankan proyek pada perangkat saya.

Saya kemudian memulai tutorial Alat Peraga , saya menyalin cuplikan kode dan mencoba menjalankan proyek lagi dan memiliki pesan kesalahan berikut muncul di layar saya:

Adam
sumber
Bisakah Anda membagikan kode Anda?
Jagadish Upadhyay

Jawaban:

435

Saya kira itu adalah kesalahan yang disebabkan oleh tidak cocoknya nama proyek dan komponen terdaftar Anda.

Anda telah memulai proyek dengan satu nama, yaitu

react-native init AwesomeApp

Tetapi dalam file index.ios.js Anda mendaftarkan komponen lain

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

Ketika itu harus menjadi

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

Coba perbaiki.

Slowyn
sumber
7
"Pisang" beberapa cara kerjanya untuk android. Tetapi tidak pada iOS.
Sumit Kushwaha
92
Untuk seseorang yang menghadapi masalah yang sama bahkan jika nama komponennya cocok -> Pastikan Anda tidak memiliki proses reaksi-asli / simpul lain yang berjalan di terminal lain.
Nilesh
1
dari pengalaman saya, sistem reboot diurutkan hal-hal ... seaneh kedengarannya.
Kayote
Tutorial saat ini disebut "AwesomeProject"
AdamG
2
dan bagi orang-orang yang menginginkan Pisang alih-alih AwesomeApp dapat mengubah moduleName:@"AwesemeApp"baris dalam file AppDelegate.m mereka
Aequitas
42

Sebagian besar masalahnya adalah Anda memiliki react-native startserver lain (yaitu React Native Packager) yang berjalan baik di terminal lain atau tab TMUX lain (jika Anda menggunakan TMUX).

Anda perlu menemukan proses itu dan menutupnya, jadi setelah menjalankan react-native run-iosmisalnya, itu akan membuat server pembuat paket baru yang terdaftar untuk aplikasi spesifik itu.

Temukan saja proses itu menggunakan:

ps aux | grep react-native

temukan id proses (PID) dan bunuh proses paket menggunakan killperintah (mis kill -9 [PID].). Anda harus menemukan launchPackager.commandaplikasi di macOS, tidak yakin tentang sistem operasi lain.

Kemudian coba jalankan run-ios(atau android) lagi. Anda harus dapat melihat path baru setelah menjalankan server packager baru, misalnya:

Looking for JS files in
   /Users/afshin/Desktop/awesome-app 
Afshin Mehrabani
sumber
Berhasil, bahkan jika saya berlari react-native start --port <otherport>, haruskah saya berlari react-native run-<platform>dengan cara lain?, Terima kasih
Sebastian Palma
@ SebastiánPalma sejauh yang saya tahu, startperintah menjalankan server paket jadi jika Anda sudah mengkompilasi aplikasi Anda, tidak perlu melakukan run-<platform>.
Afshin Mehrabani
31

Ubah MainActivityseperti ini,

@Override
protected String getMainComponentName() {
    return "Bananas"; // here
}
Daniyar Saumbayev
sumber
2
PERSIS! itulah yang sebenarnya menjadi masalah saya, meskipun alih-alih memodifikasi ini, saya telah memodifikasi AppRegistry.registerComponent untuk itu
Sijav
bagaimana dengan Ios?
Dinesh R Rajput
+1. Membuat saya bertanya-tanya mengapa CLI bertanya apakah saya ingin memberikan versi android / ios nama yang berbeda ketika itu hanya akan menyebabkan proyek saya tidak berfungsi dan saya harus mengubahnya kembali.
Sentuh
Saya telah memodifikasi app.js
roll
28

Solusi saya adalah mengubah nama modul di "AppDelegate.m"

dari moduleName:@"AwesomeProject"

untuk moduleName:@"YourNewProjectName"

pengguna8637708
sumber
Ini memperbaiki masalah saya. Terima kasih!
Cory McAboy
Bekerja untuk saya menjalankan simulator iOS dari React Native!
Emilio
Ya, itu membantu saya keluar. Petunjuk tambahan: Jika Anda menggunakan XCode, pastikan, Anda telah menetapkan Nama yang tepat untuk Nama-Aplikasi Anda (Proyek -> Target -> DisplayName)
suther
17

Pertama-tama Anda harus memulai aplikasi Anda:

react-native start

Kemudian, Anda harus menetapkan nama aplikasi Anda sebagai argumen pertama registerComponent.

Ini bekerja dengan baik.

AppRegistry.registerComponent('YourProjectName', () => YourComponentName);
Rafael Ferraro
sumber
8

Silakan periksa file app.json Anda dalam proyek. jika belum ada baris appKey maka Anda harus menambahkannya

{
  "expo": {
    "sdkVersion": "27.0.0",
    "appKey": "mydojo"
  },
  "name": "mydojo",
  "displayName": "mydojo"
}
mperk
sumber
3
Telah ikut campur dengan kesalahan ini selama 24 jam terakhir. Ini memperbaiki masalah saya. Terima kasih!
Balaji Kartheeswaran
7

Dalam kasus saya ada baris ini di MainActivity.java yang terlewatkan ketika saya menggunakan react-native-renamecli (dari NPM)

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

Tentunya Anda harus mengganti nama menjadi nama aplikasi Anda.

xemasiv
sumber
4

Saya pikir server simpul berjalan dari folder lain. Jadi bunuh dan jalankan di folder saat ini.

Temukan server simpul yang berjalan: -

lsof -i :8081

Bunuh menjalankan server simpul: -

kill -9 <PID>

Misalnya:-

kill -9 1653

Mulai node server dari folder asli reaksi saat ini: -

react-native run-android

Arshid KV
sumber
3

Saya memiliki masalah yang sama dan bagi saya akar penyebabnya adalah bahwa saya menjalankan (mulai asli-reaks) paket dari folder asli-reaksi (AwesomeApp), sementara saya membuat proyek lain di folder lain.

Menjalankan paket dari direktori aplikasi baru menyelesaikannya.

la5zl0
sumber
1

Ini juga bisa karena nama komponen Root dimulai dengan huruf kecil.

Perbaiki atau buat proyek sekali lagi dengan nama PascalCase.

misal menyalakan HelloWord baru

Venkat
sumber
1

Semua jawaban yang diberikan tidak berhasil untuk saya.

Saya memiliki proses simpul lain yang berjalan di terminal lain, saya menutup terminal perintah itu dan semuanya berfungsi seperti yang diharapkan.

Khemraj
sumber
1

Anda perlu mendaftarkannya di index.android.js / index.ios.js

seperti ini:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

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

Saya menyelesaikan ini dengan mengubah yang berikut di file app.json. Tampaknya huruf kapital melempar kesalahan ini.

Dari:

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

Untuk:

{
  "name": "nameofmyapp",
  ...
}
Alex Sarnowski
sumber
0

Daripada mengubah nama menjadi AppRegistry,

Jalankan init-asli Pisang init, ini akan membuat kode boilerplate reaksi untuk proyek Pisang dan AppRegistry.registerComponentsecara otomatis akan mengarah ke pisang

AppRegistry.registerComponent('Bananas', () => Bananas);
vipul srivastav
sumber
0

Tidak ada solusi yang bekerja untuk saya. Saya harus membunuh proses berikut dan menjalankan re-native run-android dan berhasil.

simpul ./local-cli/cli.js mulai

G. Thabit
sumber
1
yang mengikuti proses ini?
bigmadwolf
@bigmadwolf node ./local-cli/cli.js start
G. Thabit
0

Saya memiliki masalah yang sama. Saya menggunakan Windows untuk membuat aplikasi reaksi asli untuk Android dan mengalami kesalahan yang sama. Inilah yang berhasil.

  • Arahkan ke folder ANDROID di root Anda.
  • Buat file dengan nama: local.properties
  • Buka di editor dan tulis:

sdk.dir = C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk

  • Ganti USERNAME dengan nama mesin Anda.

Simpan dan jalankan aplikasi secara normal. Itu berhasil bagi saya.

Utsav Chawla
sumber
0

Masalahnya juga akan muncul ketika, di index.js, Anda telah memberi nama aplikasi secara berbeda dari nama yang Anda berikan untuk paket android / ios ; mungkin ini terjadi ketika Anda telah mengeluarkan aplikasi. Jadi pastikan saat menelepon AppRegistry.registerComponent('someappname', () => App), someappname juga digunakan untuk paket asli atau sebaliknya.

Gabriel P.
sumber
0

Saya menemukan di mana masalahnya dalam kasus saya (OS Windows 10), tetapi mungkin juga membantu di Linux (Anda mungkin mencoba).

Di windows power shell, ketika Anda ingin menjalankan aplikasi (pertama kali setelah boot pc) dengan menjalankan perintah berikut,

react-native run-android

Itu memulai node process/JS serverdi yang lain console panel, dan Anda tidak menemukan kesalahan ini. Tapi, ketika Anda ingin menjalankan aplikasi lain , Anda harus perlu menutup yang sudah berjalan JS server console panel . Dan kemudian jalankan perintah yang sama untuk aplikasi lain dari power shell, perintah itu akan secara otomatis memulai server JS baru untuk aplikasi ini, dan Anda tidak akan menemukan kesalahan ini.

Anda tidak perlu menutup dan membuka kembali power shell untuk menjalankan aplikasi lain, Anda harus menutup node console untuk menjalankan aplikasi lain.

Shamsul Arefin Sajib
sumber
0

Setelah membaca semua hal di atas, saya menemukan bahwa mungkin ada alasan lain untuk ini.

Dalam kasus saya:

react-native-cli: 2.0.1

asli-reaksi: 0.60.4

dan struktur berikut:

masukkan deskripsi gambar di sini

Pertama-tama harus dicatat bahwa index.android belum diperbarui di Android Studio ketika build dijalankan oleh Metro builder (react-native run-android) sehingga harus dilakukan secara manual. Juga di Android studio tidak "membaca" itu

app.json (dibuat secara default bersama dengan index.js, yang berganti nama menjadi index.android.js):

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

dan ini seperti

(dalam kasus saya)

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

menyebabkan fakta bahwa android studio tidak tahu apa yang merujuk authApp. Saya memperbaiki untuk saat ini mengacu pada nama aplikasi dengan nama stringnya dan tidak menggunakan impor itu dari app.json:

AppRegistry.registerComponent('authApp', () => MyApp);
Carmine Tambascia
sumber
0

Ini menyelesaikannya untuk saya

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

Jadi index.jsfile saya

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

Dan package.jsonfile saya :

"dependencies": {
    "react": "^16.13.1",
    "react-dom": "~16.9.0",
    "react-native": "~0.61.5"
},
Babajide M. Moibi
sumber
0

Solusi ini bekerja untuk saya setelah 2 hari debugging. Ubah ini:

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

untuk

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