iOS端
时不时会遇到这种错误,现将几种可能导致此类错误的汇总如下
最常见的两种,上图描述也有所提出
1)package server 没有启动
上述的1)还分为两种情况:一个是package server 确实没有启动 ,另一个是当前运行了不值一个RN的项目,同时监听8081端口,导致后启动那个报错,
解决方案时第二个RN项目改监听端口为非8081
[NSURL URLWithString:@"http://127.0.0.1:8082/index.ios.bundle?platform=ios&dev=true"]
与此同时
react-native start --port 8082
2)没有.jsbundle 文件
此时多出现在release模式下,需要将js代码打包成.jsbundle
react-native bundle --entry-file ./index.ios.js --bundle-output ./bundle/main.jsbundle --platform ios --assets-dest ./bundle/ --dev false
上面两种比较基本,下面两种就出现的时候,就比较让人头疼
3) debug 模式,package server 已经启动,且只有8081端口。仍然出现此类错误。
[[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
[NSURL URLWithString:@"http://127.0.0.1:8081/index.ios.bundle?platform=ios&dev=true"];
有上述两种方式,通常jsBundleURLForBundleRoot
方式没有问题,但是当切换网络环境的时候(通俗讲,换地方办公)时,可能会出现上述错误,我出现的两次,一次是公司搬家,换到新地方,之前好好的,这次死活都有问题。第二次时公司电脑带回家,在公司好好的,到家就报上述问题。
[RCTBundleURLProvider sharedSettings] 本身是一个单例,在上一个网络环境下成功运行是的ip地址,和切换网络环境后的地址不一样。此时就会出现,明明已经有package server 却扔提示找不到的问题。
此时使用第二种方式
[NSURL URLWithString:@"http://127.0.0.1:8081/index.ios.bundle?platform=ios&dev=true"]
这种方式一般用于运行模拟器,如果是真机运行仍然可能会出现上述错误;真机运行 则需要将127.0.0.1 改为mac 电脑ip地址。
127.0.0.1 叫做本地换回地址,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。
真机本地是没有package server 服务的。
4)release 模式下,.jsbundle 文件也有,依然提示上面错误,此时你需要检查一下 Build Phases ->Coph Bundle Resources 种是否有包含.jsbundle
image.png
网友评论