iOS 14 上 WKWebView无法加载本地文件的bug

2020年9月更新----

  此bug仅已在iOS 14正式版上修复,不要再安装beta版iOS 14了。

 


 

bug由来:

WKWebView大家都很熟悉,iOS上加载HTML的利器! 但是有些情况我们并不仅仅需要加载在线的url网址,还可能用来加载本地的HTML文件或者HTML代码。

可就在iOS 14发布之后,我们发现无法加载本地HTML了!

找bug:

打印本地HTML路径没有发现任何问题,测试发现iOS 13及以下都是可以加载的!但是为什么同样的方法代码在iOS 14上就不好使呢!!!

没办法升级最新的Xcode 12 beta版,用模拟器调试,网上搜索可能的答案,不断尝试。。

有人说要将资源文件从项目中拷贝到Document文件夹里。。。测试发现模拟器好使,但是真机依然不行。。。

绝望中。。。。。。

模拟器和真机的路径有什么不一样的地方??

拿出一部测试机,开始了iOS 14 beta版的升级。。。不用真机调试真的不行啊!!还从网上找了iOS 14 beta3真机调试包(因为我还是用的Xcode11.6),下载地址:https://download.csdn.net/download/xuexixiaoshizhe/12658226

又是漫长的调试过程,临近下班,神奇的一幕出现了,居然有个旧项目的安装包不受影响!!

哇塞!感觉一下子看到了生的希望!!!!马上对比可能出现问题的所有代码,不放过任何一个细节。。。

考虑到真机和模拟器的区别、旧项目可以运行(真是老天助我,设备上存留一个旧安装包)的细节,我把焦点放在了项目名称上。。。

最近升级Xcode的小伙伴可能会发现,当我修改项目的Display Name的时候,PRODUCT_NAME也跟着一起更改了!而且也不会再直接写进info.plist中,包括Version等信息。。。

以前打包出来可能是abc.ipa,现在变成了某某安装包.ipa,这一小小的改动害人不浅啊!

事实证明,重新将项目Display Name名称改为英文之后,测试居然通过了。。。通过了!!

但是,问题来了,看着手机桌面上英文名字的APP,又陷入了沉思。。。老板和客户不会允许我随便改APP名字的啊!

解决办法:

1、首先给APP起一个英文名,最简单的那种,反正是为了打包用的,用户不会看见。

2、修改Display Name为你刚你起的英文名,这时候运行一下,发现手机桌面上已成功变成了英文名。有能力的小伙伴可以直接去修改project.pbxproj中的PRODUCT_NAME的值,一样的功效。

3、参考以前Xcode修复info.plist的方式,将info.plist中的CFBundleDisplayName值修改为你APP的中文名字。

 

大功告成!在运行一下,发现一切又回到了熟悉的模样。第2步和第3步的顺序不能颠倒哦!!至于为什么,小伙伴自己慢慢体会吧!着急下班,有问题可以留言哦!

至于这是不是iOS 14文件路径的bug,还有待考证。估计苹果一时半会不会测出来中文路径带来的问题,毕竟人家是用英语开发的。。。

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
本demo是WKWebView的基本使用和交互 ,实现了原生调用js的方法、js调用原生的方法、通过拦截进行交互的方法;修改内容 加入沙盒 / /加载沙盒 不带参数 // NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // NSString * path = [paths objectAtIndex:0]; // path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; // NSURL *url = [NSURL URLWithString:[[NSString stringWithFormat:@"file://%@",path] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]] relativeToURL:[NSURL fileURLWithPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject]]; // [self.wkView loadFileURL:url allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; // 带参数 /* NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString * path = [paths objectAtIndex:0]; path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; NSURL * url = [NSURL fileURLWithPath:path isDirectory:NO]; NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; [queryItemArray addObject:[NSURLQueryItem queryItemWithName:@"version" value:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]]]; [urlComponents setQueryItems:queryItemArray]; [self.wkView loadFileURL:urlComponents.URL allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; */
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheLittleBoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值