73

首先,我不知道反应,但我认为使用文档部署到 iOS 设备而不是模拟器不会太难。它们有点稀疏,但我到了某个地方,现在我被困住了。我创建了一个 main.jsbundle 并将其添加到 Xcode 项目并取消注释 AppDelegate.m 中的行。

当我部署它时,我收到此错误:

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"
4

14 回答 14

141

我很确定@krazyeom 的修复与此错误无关。就我而言,我通过退出从我之前运行的测试应用程序运行的终端来解决此问题。终端似乎很困惑,并且仍然挂接到一个不再在 XCode 中加载项目的进程。尝试以下操作:

  1. 关闭由 React Native 生成​​的终端。
  2. 完全关闭 XCode(可能没有必要)。
  3. 重新打开一切并重新运行。
于 2015-03-27T16:35:09.193 回答
81

您的问题不应该与控制台有关,如果您将 javascript 正确捆绑到 ios 应用程序中,它将不会尝试与开发服务器通信,它只会从捆绑包中获取 javascript。

从错误消息中我猜你可能已经重命名了你的主要组件。确保'AppName'您传递到

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

@"AppName"on your AppDelegate.mon call for匹配

[[RCTRootView alloc] initWithBundleUrl:...
                            moduleName:@"AppName" // <-
                         launchOptions:...
于 2015-03-27T21:35:33.913 回答
30

这是因为 react-native 服务器还在看旧的。您需要先关闭服务器。

你可以杀死这个过程。

在终端

ps aux | grep react

杀死或 pkill 进程,然后

npm start
于 2015-03-28T14:13:34.933 回答
24

AppRegistry 定义应用程序的入口点并提供根组件。

您的第一个参数与您的项目名称不匹配。

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

第一个参数registerComponent必须是你的项目名称,第二个参数是匿名函数,它返回你的根反应组件。

如果第一个参数与 xcode 项目名称不匹配,则会收到应用程序尚未注册的错误。

如果您的范围内没有 AppRegistry,您可以这样调用它, React.AppRegistry.registerComponent或者您可以将其分配给AppRegistryvar

var {
  AppRegistry
} = React;
于 2015-05-24T18:54:20.687 回答
19

重命名项目名称和几个文件后,我遇到了这个问题。要解决它,只需确保 index.js app.json、MainActivity.java 和 AppDelegate.m 中的应用程序名称相同。

应用程序.json

{ "name": "MyNewApp", "displayName": "MyNewApp" }

index.js

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

MainActivity.java

`@Override protected String getMainComponentName() {
return "MyNewApp"; }
于 2020-08-31T10:23:32.163 回答
16
AppRegistry.registerComponent('abc',() => ***); 

'abc'必须与moduleName:@'abc'文件名中的相同AppDelegate.m

于 2016-01-16T16:17:24.370 回答
15

我遇到过同样的问题。我通过为AppDelegate 的 moduleNameAppRegistry.registerComponent赋予相同的名称来解决它

如果您正在运行该应用程序,$ react-native run-ios则需要重命名该moduleName字段./ios/[project name]/AppDelegate.m以匹配项目的新名称。刷新手机模拟器,它应该会显示新代码。

于 2015-04-15T14:08:29.217 回答
5

您是否更改了您正在注册的应用程序的名称?我使用名称“tricky”启动了应用程序,然后在此行中更改了名称:

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

我开始得到不变的错误。

于 2015-03-27T20:15:38.127 回答
2

这是很久以后的事了,但我仍然遇到同样的问题。我试图遵循重新启动所有路径,但它没有修复它。最终为我解决这个问题的是确保我的 app.json 'name' 字段(在 'displayName' 字段中使用相同的值)与我的 RCTRootView 中的 'moduleName' 字段匹配。匹配这些,一切都很时髦。希望这可以帮助那里的人。

于 2020-05-15T05:47:04.600 回答
1

我不喜欢关闭一切,所以我进一步挖掘。

我所要做的就是在终端窗口中,运行以下命令:

../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,
        }, {

保存此文件,然后再次运行上述命令。

这样我可以运行多个反应(或)。

于 2015-05-10T09:52:37.587 回答
1

遇到同样的错误,重新启动包括 xcode 和终端在内的所有内容都对我有用。

于 2015-06-28T19:06:01.863 回答
1

引用一个无名的人。

这个对我有用。


几天前,我遇到了与您目前遇到的几乎相同的问题。对我来说,这是一个真正的设备。

根据我的所有研究,对我有用的解决方案如下:

  1. 当您通过键入 react-native run-android 启动应用程序时,会出现错误。
  2. 因此,到达包含“adb.exe”的目录(对我来说是
    C:\Users\username\AppData\Local\Android\Sdk\platform-tools\
  3. 从这里打开一个终端。然后输入 adb reverse tcp:8081 tcp:8081
  4. 然后,通过在手机上重新加载应用程序,它应该可以工作。
于 2017-05-28T16:39:35.133 回答
0

我在控制台中收到了类似的消息。

消息:不变违规:应用程序 AwesomeProject 尚未注册。”

我刚刚添加REACT_EDITOR=atom了 ~/.bashrc 文件。

于 2015-03-27T02:58:04.220 回答
0

通常,这Error与使用的不同版本有关react-navigation

如果您使用的是 react-navigation 4.0

"react-navigation": "^4.1.0",

您必须确保从正确的位置导入正确的元素

在你的app.js

import { createAppContainer, createSwitchNavigator } from 'react-navigation'
import { createStackNavigator } from 'react-navigation-stack'
import { createBottomTabNavigator } from 'react-navigation-tabs'

这帮助我解决了这个问题。

于 2020-10-24T17:14:54.237 回答