iOS 真机 No bundle URL present

整了好几天,终于搞清楚突然出现的No bundle URL present,不爱写博客的我,也写篇博客来分享一下

 

先说解决方式:如果设置了 export SKIP_BUNDLING=TRUE ,那么删除掉这句话,重新Build

真机调试时避免每次都构建bundle,这一步太花时间了,而且调试时,也是从packager加载的bundle,构建本地bundle这一步,就根本没什么用,所以相信很多人都会开启skip

心路历程:

就是这张图片,如果你也被他折磨,如果不是脑残的没有运行packager或者添加了代理,那希望这篇博客对你能有点用

 

网上搜索的帖子,各种解决方案,东拼西凑,如果大概尝试一下,没有特别有效的解决手段,真的不要在网上再浪费时间,就应该自己去跟一下代码,自己去摸索一下

一开始,被网上的各种解决方式带昏了头脑,根本不知道到底是node的问题,还是RN代码的问题,还是iOS的问题,索性,直接在XCode中直接搜索No bundle URL present,立刻找到位置,RCTxxBridge.mm中

如果self.bundleURL为空,则输入No bundle URL present,真机debug一下,果然是nil,继续跟踪

这个bundleURL在_parentBridge中,一路往上跟踪,居然发现,在AppDelegate.m中

初始化的时候,这个jsCodeLocation就是需要初始化bundleURL,跟踪RCTBundleURLProvider的这个方法,找到了这URL判定的代码如下

guessPackagerHost,这个方法名也真是醉了,猜一下host

这个ipGuess居然在Mainbundle中的一个ip.txt的文件中读取的,如果读取不到,就设置为localhost,那如果是模拟器的话,当然是访问的到了,当然,前提是不要随便改自己的host文件

在product中,找到app,显示包内容,ip.txt文件呢,没有啊!!!对,就是这个原因,所以才会出现No bundle URL present

新建test工程,按部就班Build,正常访问packager,找到app,Show in Finder,显示包内容,然后一个ip.txt在里面静静的躺着,打开一下,果然是主机ip,真是想手动掀桌!

好吧,现在再找一下这个ip.txt是啥时候加进来的,重新盯着app内容,再次构建,出现ip.txt的时候,回看了一眼日志

运行Bundle React Native code and images脚本的时候,加进去的,查看react-native-xcode.sh

如果设置了SKIP_BUNDING直接退出

脚本末尾,执行了构建Bundle的命令,可这脚本不光光就只干构建Bundle这一件事,构建Bundle命令的前一步,获取IP,并把IP写到ip.txt中

问题的症结清楚了,初次构建的时候,在没有设置SKIP_BUNDLING的情况下,创建过了ip.txt,之后设置了SKIP_BUNDLING,如果进行了clean操作,或者COPY到其他机器,总之就是重建app了,这个ip.txt的生成步骤,就被这么跳过了

如果您能看到这,那解决方式也可以更加简单,直接在guessPackagerHost方法中,找不到的时候,不要返回localhost,直接需要的地址就行,再追踪问题的时候,也看到了,判断isPackagerRunning,就是直接去访问url/status这个地址,获取bundle地址,就是直接拼凑出对应的 bundleURL,可以尝试在浏览器中,直接访问这些地址,看看数据的长相呢

转载请注明出处,希望大家还是多自己追踪一下代码,谢谢!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值