最近开发的一个RN项目(项目使用了codePush热更新)在Xcode运行时报No bundle URL present,但是debug模式下时是正常的,切换到release模式时就报No bundle URL present,网上查找如下方法(但是不适用于我的情况,哭辽。。。)
1. 出错之后npm install ,重新react-native run-ios
不行
2. 删除ios目录下的build,重新react-native run-ios
还是不行;
3. host配置127.0.0.1
看了下我的127.0.0.1还是在host里面的。。。
4. 把代理的shadowwocks的网络代理,从全局代理变成自动代理
我特么根本没装shadowwock。。。
5. 之前在运行另一个项目,需要关掉模拟器再试
我电脑都重启了,更别说模拟器了。。。
以上几个方法来自文章https://www.jianshu.com/p/deb5df24a498
刚接触RN项目不久,一脸懵x真是头疼。最后看到一篇文章提供了一个方法,文中博主的言论给了我一点提示,文章提到说“发现是RCTBridgeDelegate中的代理方法找不到jsBundleURL ,下面的方法中返回的是一个nil。原因是真机运行时找不到RN的代码,即找不到入口”,找啊找啊,终于在AppDelegate文件中看到这句
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL*jsCodeLocation;
#ifdef DEBUG
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"fallbackResource:nil];
#else
undefined
#endif
.....
以上可以看出在debug模式下是有入口的,但是release模式时就是undefined了,于是乎我就抱着试一试的心态把undefined替换成了debug模式下的入口脚本,即
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL*jsCodeLocation;
#ifdef DEBUG
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"fallbackResource:nil];
#else
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
//jsCodeLocation =[CodePush bundleURL]; //使用codepush热更新机制且配置都正确的情况下,//若出现IOS更新版本后重启应用莫名其妙回滚上一个版本可以换成这句 试一试
//undefined
#endif
然后就这样成功运行起来了,哈哈哈
好记性不如烂笔头,以防以后遇到这类问题时又到处碰壁,特发表此文章以记录小菜鸟的心路历程。。。
第一次写文章,如有不当之处请大佬们赐教
网友评论