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

时间:2015-03-26 20:16:03

标签: 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"

14 个答案:

答案 0 :(得分:120)

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

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

答案 1 :(得分:49)

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

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

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

@"AppName"上的AppDelegate.m匹配

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

答案 2 :(得分:26)

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

你可以杀死这个过程。

在终端

ps aux | grep react

杀死或杀死该过程然后

npm start

答案 3 :(得分:19)

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

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

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

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

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

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

var {
  AppRegistry
} = React;

答案 4 :(得分:10)

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

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

答案 5 :(得分:8)

我有同样的问题。我通过给 AppDelegate的moduleName AppRegistry.registerComponent

提供相同的名称来解决它

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

答案 6 :(得分:5)

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

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

我开始得到不变的错误。

答案 7 :(得分:2)

这很晚了,但我仍然遇到同样的问题。我尝试遵循重新启动所有内容的路径,但没有解决。 最终为我解决此问题的方法是确保我的app.json“名称”字段(在“ displayName”字段中使用相同的值)与我的RCTRootView中的“ moduleName”字段匹配。 匹配那些,一切都很古怪。 希望这可以帮助某人。

答案 8 :(得分:2)

重命名项目名称和几个文件后出现此问题。要解决此问题,只需确保应用程序的名称在index.js app.json,MainActivity.java和AppDelegate.m中是相同的。

app.json

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

index.js

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

MainActivity.java

`@Override protected String getMainComponentName() {
return "MyNewApp"; }

答案 9 :(得分: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,
        }, {

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

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

答案 10 :(得分:1)

得到同样的错误,重新启动包括xcode和终端在内的所有内容。

答案 11 :(得分: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. 然后,通过在手机上重新加载应用程序,它应该可以正常工作。

答案 12 :(得分:0)

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

消息:不变违规:应用程序AwesomeProject尚未注册。&#34;

我刚在〜/ .bashrc文件中添加了REACT_EDITOR=atom

答案 13 :(得分: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'

这帮助我解决了问题。