记录苹果构建吃包,苹果报itms-90809,cordova 需要将UIWebView转为WKWebView

本文详细介绍了如何解决苹果审核中常见的itms-90809错误,主要针对使用Cordova构建的应用。通过升级cordova-ios到5.1.1以上版本,添加cordova-plugin-wkwebview-engine插件,并调整config.xml配置,以及排查和替换项目中的UIWebView使用,确保应用符合苹果的新政策。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接

cordova官网

https://cordova.apache.org/howto/2020/03/18/wkwebviewonly.html

cnblogs
https://www.cnblogs.com/VoiceOfDreams
stackoverflow
https://stackoverflow.com/questions/57722616/itms-90809-deprecated-api-usage-apple-will-stop-accepting-submissions-of-app

步骤

1. 添加cordova-ios 需要是5.1.1 以上

cordova platform add ios@5.1.1 --save

2.增加cordova-plugin-wkwebview-engine

cordova  plugin add cordova-plugin-wkwebview-engine

根据参考链接cnblogs使用wkwebview 会有跨域问题,需要增加cordova plugin add cordova-plugin-wkwebview-file-xhr

cordova  plugin add cordova-plugin-wkwebview-file-xhr

我在引入cordova-plugin-wkwebview-engine后启动app白屏,后面引入cordova-plugin-wkwebview-file-xhr后问题解决。

3. 修改config.xml

<platform name="ios">
    <preference name="WKWebViewOnly" value="true" />
    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>
    <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
    <preference name="InterceptRemoteRequests" value="all" />
</platform>

4. 旧有cordova plugin处理

最好移除重新添加。升级旧的plugin。避免plugin中有使用UIWebview

5.排查项目中的UIWebview

在项目目录下执行grep -r UIWebview .查找包含UIWebview的文件,大体都是注释了的代码

6.打包文件中排查

(由参考链接评论中找到的方法)

cd ~/Library/Developer/Xcode/Archives/<date>/myapp.xcarchive/Products/Applications/myapp.app
nm myapp | grep UIWeb
for framework in Frameworks/*.framework; do
  fname=$(basename $framework .framework)
  echo $fname
  nm $framework/$fname | grep UIWeb
done

7. 其他

xcode 项目下CordovaLib.xcodeproj下移除UIWebview相关代码(本步骤不清楚是否一定要执行,执行完上面的步骤提交苹果还报itms-90809可以试试看,另外参考链接的评论中也提供了其他的方法可以参考看看)

==========================end==================
菜鸟也想飞的更高

<think>好的,用户遇到了ITMS-90809的错误,这个错误是因为使用了已经被废弃的UIWebView。用户提到他们是因为使用UIWebView来获取UserAgent导致的这个问题。现在需要找到解决方案,替换为WKWebView。 首先,我需要确认UIWebViewWKWebView的区别。UIWebView是旧版的Web视图组件,而WKWebView苹果推荐的替代品,具有更好的性能和安全性。所以,替换成WKWebView是正确的方向。 接下来,用户当前使用UIWebView获取UserAgent。需要找到如何使用WKWebView来实现同样的功能。UIWebView获取UserAgent的方法可能是在初始化时或者通过某个回调获取,而WKWebView的方式可能不同。 查阅苹果的文档,WKWebView可以通过evaluateJavaScript方法来执行JavaScript代码,从而获取UserAgent。或者,也可以使用WKWebView的实例方法来获取。不过,可能需要注意的是,WKWebView的UserAgent可能需要异步获取,因为它的初始化可能需要时间。 另外,可能还需要考虑是否需要在应用的全局设置中设置UserAgent,或者只是临时获取。如果是全局设置,可能需要使用WKWebView的配置来设置默认的UserAgent。 然后,我需要编写示例代码,展示如何用WKWebView替换UIWebView来获取UserAgent。例如,创建一个WKWebView实例,然后在其加载完成后执行JavaScript来获取UserAgent,或者在初始化时设置UserAgent。 还要注意,WKWebView的使用可能需要处理异步回调,因为它的方法是异步执行的,不像UIWebView可能是同步的。因此,在代码中需要处理回调函数,确保UserAgent在获取之后再进行后续操作。 此外,用户可能需要修改项目中所有使用UIWebView的地方,不仅仅是获取UserAgent的部分,确保完全替换为WKWebView,以避免其他潜在的警告或错误。 最后,提醒用户在替换后进行充分的测试,确保获取UserAgent的功能正常,并且应用的其他部分没有因为替换WebView组件而出现问题。同时,建议检查所有第三方库,确保它们也没有使用UIWebView,如果有的话,需要更新到使用WKWebView的版本。</think>你的错是苹果强制要求使用WKWebView替代UIWebView引起的。以下是详细解决方案: **分步解决指南:** 一、定位问题根源 1. 全局搜索`UIWebView`关键字 2. 特别注意获取UserAgent的代码段,类似: ```swift let webView = UIWebView() let userAgent = webView.stringByEvaluatingJavaScript(from: "navigator.userAgent") ``` 二、替换为WKWebView方案 ```swift // 新版获取方式(Swift示例) let webView = WKWebView() webView.evaluateJavaScript("navigator.userAgent") { (result, error) in if let userAgent = result as? String { print("获取成功:\(userAgent)") // 保存到UserDefaults或全局变量 UserDefaults.standard.set(userAgent, forKey: "UserAgent") } } ``` 三、全局设置UserAgent(可选) 若需要设置默认UA: ```swift WKWebViewConfiguration().applicationNameForUserAgent = "CustomUserAgent" ``` 四、注意事项 1. 异步处理:WKWebView所有操作都是异步的,需使用闭回调 2. 生命周期:保持webView实例的强引用直到回调完成 3. 兼容性:iOS 11+适用,如需支持更低版本需做版本判断 五、检查第三方库 1. 执行`grep -r "UIWebView" .` 2. 若发现第三方库UIWebView- 更新库到最新版本 - 联系库作者要求更新 - 必要时更换替代库 **验证步骤:** 1. 删除DerivedData 2. 完整清理项目(Cmd+Shift+K) 3. 使用Xcode 14+编译 4. 使用`nm`命令检查二进制文件: ```bash nm YourApp.app/YourApp | grep UIWebView ``` 应无任何输出 **扩展建议:** - 使用UserAgent缓存机制提升性能 - 在App启动时预取UserAgent - 关键业务逻辑添加UA备用方案 完成修改后重新打提交即可通过苹果审核。整个过程需要重点关注异步回调的处理和第三方库的兼容性检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值