My React Native应用程序在XCode模拟器中运行没有问题,但是当我在物理设备中运行时,我的iPhone出现了问题。应用程序启动并卡在React Native启动画面上,应用程序崩溃/关闭10-15秒后。造成这种情况的原因是什么?如何防止它?
答案 0 :(得分:36)
似乎我发现了这个问题。根据{{3}},当您在设备上构建并运行应用程序时,您的应用程序将从计算机上的打包程序加载js文件,以便您可以重新加载应用程序。这意味着您的设备必须连接到您的计算机,或者必须与您的计算机位于同一个wifi网络中。如果您的设备无法访问打包器,它将卡在启动画面上并退出。
要在您的设备上可靠地运行,请编辑构建架构并构建发布版本。
答案 1 :(得分:5)
完全可以在设备上的调试中运行应用程序,而无需附加打包器!您必须使用react-native bundle
创建脱机捆绑包,并将其添加到Xcode项目中。然后,当打包程序不可用时,您的应用程序应该回退到该捆绑包。
以前这是在部署到设备FB文档中,不知道为什么它不再存在。
示例调用(我们的index.ios.js
由TypeScript放置在./dist
中:
react-native bundle --dev true --assets-dest ./ios --entry-file ./dist/index.ios.js --platform ios --bundle-output ios/main.jsbundle
此外,显然有必要告诉您的应用程序直接从捆绑包运行而不是尝试访问开发服务器,这似乎会导致超时(我们遇到与OP相同的问题)。
注释掉这一行:
jsCodeLocation = // whatever
并添加以下行:
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
答案 2 :(得分:2)
我尝试将我的iPhone与互联网断开连接,问题在以后的发布中消失了。
所以有些东西试图做网络的东西并导致延迟。 这是一个快速解决方案,但直到我们找到具体的罪魁祸首才会这样做。
答案 3 :(得分:2)
我遇到了同样的问题 我在Xcode中所做的是去产品 - >方案 - >编辑方案 - >选择“运行”标签 - >将构建配置更改为Release(默认为调试模式),然后在设备中运行该应用程序。
它更快,并像本机应用程序一样运行它。
答案 4 :(得分:1)
您可能需要在应用中签名。
在项目导航器下,单击您的应用程序。然后从项目和目标列表中选择目标。在" General"选项卡,找到'签名'部分。您需要在此指定一个团队。
答案 5 :(得分:1)
对我来说,我在我的项目上使用firebase框架。我忘记了将 GoogleService-Info.plist 文件添加到我的xcode项目中。添加后,问题就消失了。
答案 6 :(得分:0)
我遇到了这个问题,我反应本机启动画面。删除后,它正在工作
答案 7 :(得分:0)
由于以下可能性,可能会引发此问题:
release
而不是debug
,因此始终希望加载main.jsbundle
,而不是从调试服务器运行。通过 Product-> Schema-> Edit Schema-> Run-> Build Configuration进行更改: Debug 检查Xcode日志中是否有NSURLConnection finished with error - code -1004
或NSURLConnection finished with error - code -1022
之类的消息。
转到项目->目标->构建阶段-> +->新运行脚本阶段
对于以下版本的React Native 50:
export NODE_BINARY=node
../node_modules/react-native/packager/react-native-xcode.sh
对于更高版本的React Native 50:
export NODE_BINARY=node
../node_modules/react-native/scripts/react-native-xcode.sh
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
答案 8 :(得分:0)
发生在我的iOS设备上。我已连接到4G,而不是WiFi。我已连接到WiFi,它立即开始工作。
答案 9 :(得分:0)
当我在 TestFlight 上发布发行版时,我面临着同样的问题,所以我所做的是
react-native link react-native-splash-screen
因为我的闪屏插件是如何取消链接的。这对我有用。
答案 10 :(得分:0)
刚刚经历了这一点,经过一个小时的调试,我意识到我最近启用了系统防火墙并将其设置为“阻止所有传入连接”。
奇怪的是,Android在物理设备上运行良好,但是物理设备上的iOS无法连接到RN服务器。放宽了防火墙规则,现在iOS可以连接到RN服务器了。
答案 11 :(得分:0)
最好检查所有拨出电话。例如,如果您确实调用了http请求来获取用户,或者在从存储中获取用户时,就会发生这种情况。
如果此调用返回错误,您将陷入“启动”屏幕。
另外,假设您有使用这些调用的导航会更糟。
答案 12 :(得分:0)
以上所有解决方案都不适合我。
我的情况真的很奇怪。我公司的路由器同时发送2.4G和5.0G wifi。在真实设备上调试时,仅可连接到2.4G wifi。
答案 13 :(得分:0)
是的,我在手机上禁用了WiFi。启用WiFi并重新开始营业