“不变的违规:应用程序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的进程。 尝试以下操作:
- closures由React Native生成的terminal。
- 完全closuresXCode(可能没有必要)。
- 重新打开一切,然后重新运行。
你的问题不应该与控制台有任何关系,如果你正确地将你的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.m
的moduleName:@'abc'
相同
我遇到过同样的问题。 我通过给AppDelegate的moduleName和AppRegistry.registerComponent同名来解决这个问题
如果使用$ react-native run-ios
运行应用程序,则需要重命名./ios/[project name]/AppDelegate.m
的moduleName
字段以匹配项目的新名称。 刷新手机模拟器,它应该显示新的代码。
你有没有改变你注册的应用程序的名称? 我以“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如下:
- 当您通过inputreact-native run-android启动您的应用程序时,会显示错误。
- 所以,到达您的目录包含“adb.exe”(对我来说,它是
C:\Users\username\AppData\Local\Android\Sdk\platform-tools\
) - 从这里打开一个terminal。 然后inputadb reverse tcp:8081 tcp:8081
- 然后,通过在手机上重新加载应用程序,它应该工作。
我在控制台中得到了类似的消息。
消息:不变违规:应用程序AwesomeProject尚未注册。
我只是在〜/ .bashrc文件中添加了REACT_EDITOR=atom
。