UIWebView 的问题
苹果在 iOS 13 上,要求开发者必须用 WKWebView 替代 UIWebView,按照苹果2019年12月13日的文档 Updating Apps that Use WebViews 里给出的时间要求是:
- 2020年4月,新应用必须使用 WKWebView 代替 UIWebView
- 2020年12月,应用更新必须使用 WKWebView 代替 UIWebView
注意一下这事的时间线:
- 2019-09-05,Cocos 引擎开发组已经更新了 Cocos2d-x 和 Cocos Creator 里的代码完成 WKWebView 替换 UIWebView 的工作
- 2019-09-20,苹果是正式推送 iOS 13 更新给消费者
- 2019-12-13,苹果发出了强制升级 WKWebView 的通知
所以其实时间还是很充裕的,但大家可能也没太重视。今天已经5月20日了,所以新提交应用必须按要求完成替换。正好昨晚有开发者给我发来一个问题,苹果商店提交审核被拒,理由是:
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).
也就是说,如果你还在用带了 UIWebView 的引擎老版本,不升级到 WKWebView 的话,苹果 AppStore 审核已经不让通过了。
涉及的引擎版本
我罗列一下,引擎各产品线更新到 WKWebView 的情况如下:
也就是说,如果你用的是:
- Cocos2d-x v3.17.2 以及更早版本
- Cocos Creator v2.1.2 以及更早版本
那么不从引擎里替换掉 UIWebView 调用代码的话,将导致原生包在 AppStore 审核被拒。
Cocos Creator 3D 尚未添加 WebView 支持,所以不涉及。
修改方式
我不会简单地一句话描述 “请大家升级引擎版本” 来解决。很多开发到中后期、甚至已经上线运营的游戏项目不太可能大动干戈升级整个引擎版本。我们只需要精准地动点儿小手术就行了。
-
Cocos2d-x 用户,可以根据 https://github.com/cocos2d/cocos2d-x/pull/20098/files 这个 pull request 来做手工合并。
-
Cocos Creator 用户,可以根据 https://github.com/cocos-creator/cocos2d-x-lite/pull/1837/files 这个 pull request 做手工合并。
虽然 Cocos 引擎团队会持续地升级兼容平台的新接口、新要求,但确实很难把几年前的所有历史版本全部对新接口适配一遍后重新发布,还请大家能够理解。所以正确的解法就是:
- 新立项的时候,尽量用最新版的引擎。Dashboard 功能的推出也是为了方便这一点。
- 对于固定在老版本上的已有项目,根据上述 Pull Reuqest 里改动的文件,自己做手工合并。