近期提审公司的一款应用,遇到UIWebView的坑,在这里总结一下:
目前上传构建包的时候,如果扫描到代码中含有UIWebView源码引用或者静态库就会收到一下邮件:
证明你这个代码中有UIWebView相关问题,通常在xcode全局一搜UIWebView,替换为WKWebView即可。如果你引用三方framework或者pod库中包含UIWebView也会被检测到。
这里推荐一个检测UIWebView的方法:
在控制台,cd 到代码根目录,然后输入
find . -type f | grep -e ".a" -e ".framework" | xargs grep -s UIWebView
结果如下:
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.m:- (void)webViewDidFinishLoad:(UIWebView *)webView {
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.m:- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.m:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.m:- (void)webViewDidStartLoad:(UIWebView *)webView {
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.h: #import
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.h: #define WVJB_WEBVIEW_TYPE UIWebView
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.h: #define WVJB_WEBVIEW_DELEGATE_TYPE NSObject
./Pods/WebViewJavascriptBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.h: #define WVJB_WEBVIEW_DELEGATE_INTERFACE NSObject
./Pods/WebViewJavascriptBridge/README.md:An iOS/OSX bridge for sending messages between Obj-C and JavaScript in WKWebViews, UIWebViews & WebViews.
./Pods/WebViewJavascriptBridge/README.md:2) Instantiate WebViewJavascriptBridge with a WKWebView, UIWebView (iOS) or WebView (OSX):
./Pods/WebViewJavascriptBridge/README.md:##### `[WebViewJavascriptBridge bridgeForWebView:(WKWebVIew/UIWebView/WebView*)webview`
./Pods/WebViewJavascriptBridge/README.md: NSLog(@"Current UIWebView page URL is: %@", responseData);
会详细找到framwork或者.a 中的全部问题。
我这里采用pod方式引用了 WebViewJavascriptBridge
采用pod方式,如果有UIWebView引用如何处理
这里有个podfile的写法
pod 'WebViewJavascriptBridge', '~> 6.0.3'
pre_install do |installer|
dir_web = File.join(installer.sandbox.pod_dir('WebViewJavascriptBridge'), 'WebViewJavascriptBridge')
Dir.foreach(dir_web) {|x|
real_path = File.join(dir_web, x)
if (!File.directory?(real_path) && File.exists?(real_path))
if(x == 'WebViewJavascriptBridge.h' || x == 'WebViewJavascriptBridge.m')
File.delete(real_path)
end
end
}
end
仿照这种方法可以,修改pod中文件,可以指定删除,注意tag和代码层级。
以上,提审UIWebView问题就差不多了~