亲爱的小伙伴儿们大家好:
今天上传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()
结束语:
因为每个工程,所依赖的软硬件环境都不一样。如果小伙伴 在按照以上方案操作之后,遇到其他问题,可以留言。我们一起研究分析。