RN项目在真机上运行报错 "No bundle URL present"

最近开发的一个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

然后就这样成功运行起来了,哈哈哈



好记性不如烂笔头,以防以后遇到这类问题时又到处碰壁,特发表此文章以记录小菜鸟的心路历程。。。

第一次写文章,如有不当之处请大佬们赐教

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。