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 引擎團隊會持續地升級兼容平台的新接口、新要求,但確實很難把幾年前的所有歷史版本全部對新接口適配一遍后重新發布,還請大家能夠理解。所以正確的解法就是:
1. 新立項的時候,盡量用最新版的引擎。Dashboard 功能的推出也是為了方便這一點。
2. 對於固定在老版本上的已有項目,根據上述 Pull Reuqest 里改動的文件,自己做手工合並。