前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS小技能:UIWebView 被拒的解决方案(用更安全的WKWebView替代UIWebView)

iOS小技能:UIWebView 被拒的解决方案(用更安全的WKWebView替代UIWebView)

作者头像
公众号iOS逆向
发布2022-12-19 17:30:07
2.9K0
发布2022-12-19 17:30:07
举报
文章被收录于专栏:iOS逆向与安全iOS逆向与安全

引言

背景:202012之后苹果将不接受使用UIWebView

UIWebView 被拒的解决方案:使用WKWebView替代UIWebView

1、查 SDK是否用 UIWebView 的 API 2、移除/升级含UIWebView的第三方SDK(例:AFNetworking) 3、使用WKWebView替代UIWebView 4、WKWebView与JS交互案例(点击页面图片,调用iOS方法进行图片放大显示) WKScriptMessageHandler协议必须实现的函数,是APP与js交互,提供从网页中收消息的回调方法- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message;// message: 收到的脚本信息

WKWebView比UIWebView更安全

基于NSURLProtocol实现iOS应用底层所有网络请求拦截(含网页ajax请求拦截【不支持WKWebView】NSURLProtocol 只能拦截 UIURLConnection、NSURLSession 和 UIWebView 中的请求; 对于 WKWebView 中发出的网络请求也无能为力,如果真的要拦截来自 WKWebView 中的请求,还是需要实现 WKWebView 对应的 WKNavigationDelegate,并在代理方法中获取请求。

I 使用WKWebView替换UIWebView

1.1 移除/升级包含UIWebView的第三方SDK(grep -r "UIWebView" .

代码语言:javascript
复制
➜  retail git:(develop) grep -r "UIWebView" .
Binary file ./retail.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate matches
./Pods/Pods.xcodeproj/project.pbxproj:  337C8A9592224E2629F71F4759AE0DF2 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 55098EA6EA9BE396074DA1E1980C154A /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Project, ); }; };
./Pods/Pods.xcodeproj/project.pbxproj:  6326910744CB757A56F0D16A8892445E /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F1F2113749BAA47EBE9F2FE1F43FDA51 /* UIWebView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };

  • NJKWebViewProgress
代码语言:javascript
复制
 ./Pods/NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgress.m:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

AXWebViewController (0.7.2) 使用了NJKWebViewProgress iOS8.0以下使用了NJKWebViewProgress作为进度条, 因此对于上架审核没有影响。

  • ZBarSDK
代码语言:javascript
复制
./Pods/Headers/Private/ZBarSDK/ZBarHelpController.h:                              < UIWebViewDelegate,
./Pods/Headers/Private/ZBarSDK/ZBarHelpController.h:    UIWebView *webView;
./Pods/ZBarSDK/iphone/ZBarHelpController.m:    webView = [[UIWebView alloc]
./Pods/ZBarSDK/iphone/ZBarHelpController.m:- (void) webViewDidFinishLoad: (UIWebView*) view
./Pods/ZBarSDK/iphone/ZBarHelpController.m:- (BOOL)             webView: (UIWebView*) view
./Pods/ZBarSDK/iphone/ZBarHelpController.m:              navigationType: (UIWebViewNavigationType) nav

代码语言:javascript
复制
pod 'LBXScan/LBXNative','~> 2.4.1' #系统原生API封装库
pod 'LBXScan/LBXZXing','~> 2.4.1'
#pod 'LBXScan/UI','~> 2.3'
pod 'LBXScan/UI','~> 2.4.1'
pod 'LBXZBarSDK','~> 1.3' 删除UIWebView

1.2 移除/替换自己项目使用UIWebView API的代码

自己是否用了该 API 只需要在 Xcode 中全局搜索即可

II 升级包含UIWebView的第三方SDK的具体例子

代码语言:javascript
复制
    pod 'AFNetworking','~> 4.0.1'#2、 Migrate UIWebview to WKWebView #4441
  #4.x  iOS 9  macOS 10.10  watchOS 2.0  tvOS 9.0  Xcode 11+ is required.

2.1 Installing AFNetworking 4.0.1 (was 3.2.1)正式移除了UIWebView分类

  • 新版本主要移除的类如下

处理afn的接口问题,老版本的post get formdata的请求形式在4.0都有了调整,因此需要更改工程中的相应的方法

  • 例如

修改为:

代码语言:javascript
复制
    [manager GET:urlStr parameters:params  headers:@{} progress:^(NSProgress * _Nonnull downloadProgress) {

see also

iOS小技能:打包注意事项(私有API检测)https://blog.csdn.net/z929118967/article/details/128236066

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • I 使用WKWebView替换UIWebView
    • 1.1 移除/升级包含UIWebView的第三方SDK(grep -r "UIWebView" .)
      • 1.2 移除/替换自己项目使用UIWebView API的代码
      • II 升级包含UIWebView的第三方SDK的具体例子
        • 2.1 Installing AFNetworking 4.0.1 (was 3.2.1)正式移除了UIWebView分类
        • see also
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档