"不变违规:应用程序AwesomeProject尚未注册"使用静态jsbundle构建iOS设备时

cmp*_*cmp 58 ios react-native

首先,我不知道反应,但我认为部署到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"
Run Code Online (Sandbox Code Playgroud)

xan*_*ont 124

我很确定@ krazyeom的修复与此错误无关.在我的情况下,我通过退出从我以前运行的测试应用程序运行的终端来修复此问题.终端似乎很困惑,并且仍然挂钩了一个进程,其项目不再在XCode中加载.请尝试以下方法:

  1. 关闭由React Native生成的终端.
  2. 完全关闭XCode(可能没有必要).
  3. 重新打开所有内容并重新运行.

  • 我也尝试过这个,所以我认为也不是这个。 (3认同)
  • 我不需要重启xcode.关闭终端,然后再次运行.从一个不同的反应原生项目离开了终端 (3认同)
  • 我不认为这与重启Xcode或终端有关. (2认同)

tad*_*llo 52

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

从错误消息我猜你可能已经重命名了你的主要组件.确保'AppName'你进入了

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

@"AppName"AppDelegate.m的电话匹配

[[RCTRootView alloc] initWithBundleUrl:...
                            moduleName:@"AppName" // <-
                         launchOptions:...
Run Code Online (Sandbox Code Playgroud)

  • 最好的解释。主要组件的名称必须与您在 AppDelegate.m 中的模块名称相匹配的事实 (3认同)
  • 如果更改正在运行的应用程序,则必须重新启动程序包管理器. (2认同)

小智 26

这是因为本地反应服务器仍在观看旧服务器.您需要先关闭服务器.

你可以杀死这个过程.

在终端

ps aux | grep react
Run Code Online (Sandbox Code Playgroud)

杀死或杀死该过程然后

npm start
Run Code Online (Sandbox Code Playgroud)

  • 这是我的问题.如果你已经开始了几个项目,请小心!您需要意识到,反应服务器可能仍在后台运行,用于您启动的第一个项目.一旦我杀死了默认的'awesomeproject',我的新应用就开始运行了. (2认同)

alu*_*cic 19

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

您的第一个参数与您的项目名称不符.

AppRegistry.registerComponent('AwesomeProject', () => YourMainComponent);
Run Code Online (Sandbox Code Playgroud)

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

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

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

var {
  AppRegistry
} = React;
Run Code Online (Sandbox Code Playgroud)


小智 13

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

应用程序.json

{ "name": "MyNewApp", "displayName": "MyNewApp" }
Run Code Online (Sandbox Code Playgroud)

索引.js

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

主活动.java

`@Override protected String getMainComponentName() {
return "MyNewApp"; }
Run Code Online (Sandbox Code Playgroud)


小智 12

AppRegistry.registerComponent('abc',() => ***); 
Run Code Online (Sandbox Code Playgroud)

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


小智 8

我遇到过同样的问题.我通过给AppDelegate的moduleNameAppRegistry.registerComponent提供相同的名称来解决它

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

  • 这是区分大小写的! (2认同)

Mar*_*son 5

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

AppRegistry.registerComponent('MyNewApp', () => MyNewApp);
Run Code Online (Sandbox Code Playgroud)

我开始得到不变的错误.


Ali*_*bas 5

app.json检查项目根目录下文件中的应用程序名称。

该名称应与文件中的名称相同AppDelegate.m