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

首先,我不知道有什么反应,但是我认为部署到iOS设备而不是模拟器对于文档来说不会太困难。 他们有点稀疏,但我得到了一个地方,现在我卡住了。 我创build了一个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" 

我很确定@ krazyeom的修复与这个错误没有任何关系。 在我的情况下,我通过退出正在运行的前一个testing应用程序运行的terminal来解决这个问题。 terminal似乎感到困惑,仍然挂在一个项目不再载入XCode的进程。 尝试以下操作:

  1. closures由React Native生成的terminal。
  2. 完全closuresXCode(可能没有必要)。
  3. 重新打开一切,然后重新运行。

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

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

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

与您的AppDelegate.m上的@"AppName"匹配

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

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

你可以杀死这个过程。

在terminal

 ps aux | grep react 

杀死或pkill的过程,然后

 npm start 

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

你的第一个参数不符合你的项目名称。

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

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

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

如果你没有AppRegistry的范围,你可以把它React.AppRegistry.registerComponent或者你可以把它分配给AppRegistry var

 var { AppRegistry } = React; 
 AppRegistry.registerComponent('abc',() => ***); 

'abc'必须与文件名AppDelegate.mmoduleName:@'abc'相同

我遇到过同样的问题。 我通过给AppDelegate的moduleNameAppRegistry.registerComponent同名来解决这个问题

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

你有没有改变你注册的应用程序的名称? 我以“tricky”这个名字开始了这个应用程序的开发,后来改了这个名字:

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

我开始得到不变的错误。

我不是closures一切的粉丝,所以我进一步挖掘。

我所要做的只是在terminal窗口中,我运行这个命令:

 ../lala/node_modules/react-native/packager/launchPackager.command ; exit; 

我的项目名称是“lala”,所以发现在你的项目中也有node_modules。

用你的项目名称代替lala它应该工作。

如果有错误说端口已经在使用中:

  ERROR Packager can't listen on port 8081 

那么你有两个select:

  • 杀死已经运行的程序。
  • 或者通过进入: ../lala/node_modules/react-native/packager/packager.js更改端口,然后find您的端口号,例如8081,并replace为未使用的端口号。
  var options = parseCommandLine([{ command: 'port', default: 8082, }, { 

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

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

得到了同样的错误,重新启动包括xcode和terminal为我工作的一切。

引用一个无名的人。

这个对我有用。


我几乎和前几天有同样的问题。 对我来说这是一个真正的设备。

从我所有的研究中,为我工作的解决scheme如下:

  1. 当您通过inputreact-native run-android启动您的应用程序时,会显示错误。
  2. 所以,到达您的目录包含“adb.exe”(对我来说,它是
    C:\Users\username\AppData\Local\Android\Sdk\platform-tools\
  3. 从这里打开一个terminal。 然后inputadb reverse tcp:8081 tcp:8081
  4. 然后,通过在手机上重新加载应用程序,它应该工作。

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

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

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