React-native~UIWebView完美切换至WKWebView

亲爱的小伙伴儿们你们好:node

        今天上传ipa到appstore在预审核的时候收到一份邮件,才知道Apple在2020年4月份中止接受使用UIWebView api的APP,因此你们在上传APP的过程当中也许会收到相似内容的邮件,如图:react

这里要着重说一下,已经上线的app虽然会收到这封提示邮件,可是并不影响发版(前提app要审核经过)。若是是第一次上线的话,那影响就大了,直接被拒。因此 仍是要把这个问题完全解决,不能留下技术债。android

1、环境简介

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

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
复制代码

2、问题排查:

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

3、选择的方案:

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

yarn add react-native-webview --save  
react-native link react-native-webview     
import { WebView } from 'react-native-webview';
复制代码

      替换以后,发现项目依赖的sdk,由于版本有些老,依赖的仍是UIWebview。这个时候下载最新的sdk直接替换 就能够了。api

4、遇到的坑:

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

找到项目中node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js
      一、if (version.indexOf('iOS') !== 0 )  替换成    if (!version.includes("iOS" ))
      二、if(simulator.availability!=='(available)')  替换成  if(simulator.isAvailable!== true)
      三、使用 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冲突markdown

须要把ios/build文件删除 而后从新build  
rm -rf ios/build
复制代码

      (4)android项目的兼容问题,若是您的项目中使用了androidx,能够忽略此问题。

           须要把依赖androidx的类,按照下面写法作一下修改:app

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()
复制代码

结束语:

      由于每一个工程,所依赖的软硬件环境都不同。若是小伙伴 在按照以上方案操做以后,遇到其余问题,能够留言。咱们一块儿研究分析。

相关文章
相关标签/搜索