遭遇苹果ITMS-90809错误:哪些Cordova插件导致应用被App Store拒审
ITMS-90809(UIWebView弃用)报错排查
常见认知误区
- 苹果的检测逻辑是扫描最终编译进IPA二进制的UIWebView类符号、函数引用,不是匹配源码文本里的“UIWebView”字符串。
- 你在Xcode搜索到的
CDVUIWebViewEngine、CDVUIWebViewDelegate、带UIWebView字样的宏定义、变量名等代码,本身不会触发报错——这些代码外层都包裹了#if !WK_WEB_VIEW_ONLY的条件判断,只要编译开关正确开启,这些代码根本不会被打进最终安装包。 - 哪怕插件层面标注“已升级到最新版”,只要存在版本残留、编译开关没开、依赖版本错配的情况,旧的UIWebView代码分支依然会被链接进二进制。
对应你项目的实际问题根源
对照你提供的依赖配置,几个明确的触发点:
package.json中声明的cordova-ios@^5.1.1版本和你当前使用的cordova-lib@9.0.1版本不匹配:旧声明会在安装时自动拉取带UIWebView兼容逻辑的cordova-ios旧版本,哪怕你手动升级了本地平台文件,配置没改会导致重装的时候又回退到旧版。cordova-plugin-inappbrowser@^3.2.0版本过老:这个版本的InAppBrowser原生代码默认保留UIWebView兼容分支,哪怕你在源码里看到入口方法传的是WKWebView实例,只要编译配置没强制排除,UIWebView相关符号依然会被链接进二进制。- 没有显式开启WK-only编译开关:
cordova-plugin-ionic-webview@^5.0.0本身是纯WKWebView实现,但如果全局编译开关没设置,cordova-ios默认会保留兼容模式的UIWebView引擎类链接,哪怕你根本没主动调用。 - dependencies和devDependencies中重复声明了低版本基础cordova插件:多版本冲突会导致部分插件加载旧的UIWebView兼容代码。
分步修复操作
- 彻底清理项目残留
- 删除根目录下的
node_modules文件夹、package-lock.json文件 - 执行
cordova platform rm ios完全移除iOS平台,不要在旧平台文件基础上覆盖升级
- 删除根目录下的
- 修正依赖配置版本
- 将
package.json中的cordova-ios版本从^5.1.1调整为^6.3.0(匹配当前cordova-lib 9.0.1支持的稳定版本) - 将
cordova-plugin-inappbrowser版本从^3.2.0调整为^5.0.0(已彻底移除UIWebView引用的版本) - 删掉dependencies和devDependencies中重复声明的cordova插件条目(比如devDependencies里重复的
cordova-plugin-device、cordova-plugin-splashscreen、cordova-plugin-statusbar等,保留dependencies中的最新版本即可,避免多版本冲突)
- 将
- 开启强制WKWebView编译开关
- 在
config.xml的<platform name="ios">节点下,添加配置:<preference name="WKWebOnly" value="true" />,强制排除所有UIWebView相关的条件编译分支
- 在
- 重新编译并本地校验
- 执行
npm install安装所有修正后的依赖 - 重新添加iOS平台,用Xcode Archive生成IPA
- 上传前在终端执行命令校验二进制是否残留UIWebView符号:解压IPA包,进入
Payload/对应App名称.app/目录,执行nm -arch arm64 你的App可执行文件名 | grep -i _UIWebView - 如果命令无任何输出,说明二进制已完全移除UIWebView引用,再上传就不会触发ITMS-90809报错
- 执行
你之前操作未生效的核心原因:升级插件、重装平台时没有清理旧版本文件残留,也没有开启WK-only编译开关,导致UIWebView相关代码虽然在源码层面被条件判断包裹,但因为开关未开启,实际被编译进了最终二进制包。
内容的提问来源于stack exchange,提问作者D.Hodges
相关产品推荐
相关产品推荐

