UIWebView 导致苹果审核被拒,请用 WKWebView 替换。内附升级指导

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 支持,所以不涉及。

修改方式

我不会简单地一句话描述 “请大家升级引擎版本” 来解决。很多开发到中后期、甚至已经上线运营的游戏项目不太可能大动干戈升级整个引擎版本。我们只需要精准地动点儿小手术就行了。

虽然 Cocos 引擎团队会持续地升级兼容平台的新接口、新要求,但确实很难把几年前的所有历史版本全部对新接口适配一遍后重新发布,还请大家能够理解。所以正确的解法就是:

  1. 新立项的时候,尽量用最新版的引擎。Dashboard 功能的推出也是为了方便这一点。
  2. 对于固定在老版本上的已有项目,根据上述 Pull Reuqest 里改动的文件,自己做手工合并。
13赞

完美解决 牛逼啊大佬

牛皮,够迅速!:smiley_cat:

删除,无视掉

大哥,我修改了之后,报了另一个错误,麻烦帮我看看
Undefined symbols for architecture armv7:
“cocos2d::experimental::ui::WebViewImpl::loadURL(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, bool)”, referenced from:
cocos2d::experimental::ui::WebView::loadURL(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, bool) in libcocos2d iOS.a(UIWebView.o)
“cocos2d::experimental::ui::WebViewImpl::setOpacityWebView(float)”, referenced from:
vtable for cocos2d::experimental::ui::WebViewImpl in libcocos2d iOS.a(UIWebViewImpl-ios.o)
“cocos2d::experimental::ui::WebViewImpl::getOpacityWebView() const”, referenced from:
vtable for cocos2d::experimental::ui::WebViewImpl in libcocos2d iOS.a(UIWebViewImpl-ios.o)
“cocos2d::experimental::ui::WebViewImpl::setBounces(bool)”, referenced from:
cocos2d::experimental::ui::WebView::setBounces(bool) in libcocos2d iOS.a(UIWebView.o)
“cocos2d::experimental::ui::WebViewImpl::setBackgroundTransparent()”, referenced from:
vtable for cocos2d::experimental::ui::WebViewImpl in libcocos2d iOS.a(UIWebViewImpl-ios.o)

3.2版本如何升级?

V2.2.1 怎么也因为这个被拒绝呢

2.2.1没替换成WKWebView吗

1.9.3 修改了后,引擎没有导出 WebView 库,没使用相关功能的没问题
但是使用了的,各种链接出错。。。不知道怎么修改

和你一样,各种报错

cocos2d-x-3.10添加依赖库,替换cocos/ui/UIWebViewImpl-ios.h、cocos/ui/UIWebViewImpl-ios.mm后完美解决。十分感谢

官方的类名,4.0引擎里叫UIWebView.h,这样可以过?苹果是检查名字还是怎么查的?

为什么我升级到了2.1.3后还是收到了苹果的这个拒绝呢,还有哪些需要注意的吗?

我知道了原来MAC上面如果安装有两个版本的creator,一定要将MAC工程中的一些引用路径指向新的creator

1.9.3后来有成功了吗

怎么v2.3.2版本的打包ios还有这个问题啊

Cocos Creator 用户,可以根据 https://github.com/cocos-creator/cocos2d-x-lite/pull/1837/files126 这个 pull request 做手工合并。

1.9.3 按照修改了, 提交后依然收到

ITMS-90809: Deprecated API Usage - App updates that use UIWebView will no longer be accepted as of December 2020. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

学到了 mark

4.0没有js版本咋办?

有解决吗兄弟