React-native~UIWebView完美切换至WKWebView

1,341 阅读2分钟

亲爱的小伙伴儿们大家好:

        今天上传ipa到appstore在预审核的时候收到一份邮件,才知道Apple在2020年4月份停止接受使用UIWebView api的APP,所以大家在上传APP的过程中也许会收到类似内容的邮件,如图:

这里要着重说一下,已经上线的app虽然会收到这封提示邮件,但是并不影响发版(前提app要审核通过)。如果是第一次上线的话,那影响就大了,直接被拒。所以 还是要把这个问题彻底解决,不能留下技术债。

一、环境简介

    我们的项目是一个React-native 项目,我先把项目的依赖软硬件环境描述一下:

react-native:'0.50.0'
node: '10.16.3'
JDK: '1.8.0_73'
MACOS: '10.14.6'
Xcode: '11.3'
androidStudio: '3.5'
vscode: '1.38.0'

全局安装:react-native-cli  、yarn

二、问题排查:

        在根目录下 执行grep -r UIWebView . 检测使用 uiwebview 的组件和sdk。

三、选择的方案:

采用react-native-webview:’8.0.0‘ 来替换代码中Webview组件。

yarn add react-native-webview --save  
react-native link react-native-webview     
import { WebView } from 'react-native-webview';

      替换之后,发现项目依赖的sdk,因为版本有些老,依赖的还是UIWebview。这个时候下载最新的sdk直接替换 就可以了。

四、遇到的坑:

     (1)运行ios模拟器 报错找不到模拟器Could not find iPhone * simulator  。

   找到项目中node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js
      1、if (version.indexOf('iOS') !== 0 )  替换成    if (!version.includes("iOS" ))
      2、if(simulator.availability!=='(available)')  替换成  if(simulator.isAvailable!== true)
      3、使用 react-native run-ios --simulator="iPhone *"  指定模拟器运行

        如果不想指定模拟器,可以在Xcode中设置一下,iphone-6版本的模拟器。然后可直接运行react-native run-ios即可。

     (2)运行react-native run-ios 报config.h 报错。

cd node_modules/react-native/third-party/glog-0.3.4
运行../../scripts/ios-configure-glog.sh

       (3)遇到PCH was compiled with module cache path问题。

这个问题是由 copy 工程 引起的缓存cache冲突

需要把ios/build文件删除 然后重新build  
rm -rf ios/build

      (4)android项目的兼容问题,如果您的项目中使用了androidx,可以忽略此问题。

           需要把依赖androidx的类,按照下面写法做一下修改:

     import android.support.annotation.RequiresApi;
     import android.support.v4.content.ContextCompat;
     import android.support.v4.content.FileProvider;

      (5)android项目DexArchiveMergerException: Unable to merge dex 问题      

  在主工程的gradle种添加
           defaultConfig {
                multiDexEnabled true
           }
  添加 google()

结束语:

      因为每个工程,所依赖的软硬件环境都不一样。如果小伙伴 在按照以上方案操作之后,遇到其他问题,可以留言。我们一起研究分析。