首先,我不知道反应,但我认为部署到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"
答案 0 :(得分:120)
我非常确定@ krazyeom的修复程序与此错误无关。在我的情况下,我通过退出从我以前运行的测试应用程序运行的终端来修复此问题。终端似乎很困惑,仍然挂钩了一个进程,其项目不再在XCode中加载。请尝试以下方法:
答案 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)
引用无名人士。
它对我有用。
我几天前遇到了几乎相同的问题。对我来说这是一个真实的设备。
从我的所有研究中,对我有用的解决方案如下:
C:\Users\username\AppData\Local\Android\Sdk\platform-tools\
)答案 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'
这帮助我解决了问题。