iOS小技能:UIWebView 被拒的解决方案(用更安全的WKWebView替代UIWebView)
引言
背景: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" .
)
➜ 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
./Pods/NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgress.m:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
AXWebViewController (0.7.2) 使用了NJKWebViewProgress iOS8.0以下使用了NJKWebViewProgress作为进度条, 因此对于上架审核没有影响。
- ZBarSDK
./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
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的具体例子
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都有了调整,因此需要更改工程中的相应的方法
- 例如
修改为:
[manager GET:urlStr parameters:params headers:@{} progress:^(NSProgress * _Nonnull downloadProgress) {
see also
iOS小技能:打包注意事项(私有API检测)https://blog.csdn.net/z929118967/article/details/128236066
相关文章
- Android开发之SoundPool使用详解
- 【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)
- 你了解吗?小程序要怎么在硬件设备上运行
- Aiseesoft iPhone Cleaner for Mac(ios清理软件)中文版v1.0.18
- 为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?
- Android 序列化框架 Gson 原理分析,可以优化吗?
- iOS呼吸动画
- iOS 悬浮可拖动可点击按钮
- Android Automotive Framework调试技巧
- Android 开场动画
- Android 主题theme说明 摘记
- Android开发 去掉标题栏方法 摘记
- Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR
- 关于Android12安装apk出现-108异常INSTALL_PARSE_FAILED_MANIFEST_MALFORMED的解决方法
- Android 多module情况下module依赖aar问题处理
- Android7.0以上的分享图片文件错误及解决方法
- Android开发 对接微信分享SDK总结
- Android RecyclerView使用ListAdapter高效刷新数据
- Android自动化测试工具调研
- Android 自动取色并设置沉浸式状态栏