はじめに

Cordova iOS アプリで Deprecated となっている UIWebView から WKWebView へと移行する方法。

TL;DR

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. 前置き
    2. 本題: WKWebView への移行方法
      1. cordova-ios バージョン変更
      2. プラグイン追加
      3. config.xml 編集
  5. まとめ
  6. 参考文献

環境・条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.4
BuildVersion: 19E287

$ node -v
v12.7.0

$ npm -v
6.14.5

$ cordova -v
9.0.0 (cordova-lib@9.0.1)

$ cordova platform
Installed platforms:
ios 5.1.1

$ cordova plugins
cordova-plugin-device 2.0.3 "Device"
cordova-plugin-wkwebview-engine 1.2.1 "Cordova WKWebView Engine"
cordova-plugin-wkwebview-file-xhr 2.1.1 "Cordova WKWebView File XHR Plugin"

詳細

前置き

経緯などを書いてるだけなのでスキップして OK

2020/06/02、とある Cordova 製 iOS アプリを App Store Connect にアップロードしたところ、最初は問題なく処理されたのにいざ審査に進むと「バイナリが無効」となった。

もともと UIWebView を使っていて、アップロード時に以下の通知メールが届くことは認識していたが、「December 2020」との表記もあったため(よろしくは無いのだが様々な事情で)そのままとしていた。

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.

しかし、いざ審査に進むと「バイナリが無効」となり、下記記事に行き当たったが自分の状況には当てはまらず。。。

手順や設定に何かミスがあったかなと思い、再度アップロードするも今度はアップロードすら成功せず。

その時に受信したメールが以下。同じように見えるが「as of December 2020」の表記が消えており、どうも UIWebView を使っていることが原因な模様。

ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.


さらに調べて [速報] [iOS] UIWebViewが使えなくなる最終期限が告知されました - Qiita に行き当たる。

引用すると以下の通り。

2020年4月から、新規のApp Store申請時にUIWebView APIが含まれていると、リジェクトされる模様です。
アップデートについては2020年12月までにUIWebViewからWKWebViewへの修正が必要です。
2020年5月から、新規アプリにUIWebView APIが含まれていると、App Store Connectへのアップロード時にビルドが受け付けられない(ビルドを審査提出できない)です。

なので、初審査で UIWebView が含まれていたことがどうもダメだったっぽい。

本題: WKWebView への移行方法

参考: CordovaのUIWebView→WKWebView移行についてまとめ - Qiita

基本的に上記ページを参考にすれば OK。

cordova-ios バージョン変更

cordova-ios のバージョン確認、4.0.0 以降なら OK

1
2
3
$ cordova platform
Installed platforms:
ios 5.1.1

3.x.x であればプラットフォームを再構築すると良いはず。

1
$ cordova platform remove ios && cordova platform add ios

プラグイン追加

cordova plugin addapache/cordova-plugin-wkwebview-engine を追加。

1
2
3
4
$ cordova plugin add cordova-plugin-wkwebview-engine
Installing "cordova-plugin-wkwebview-engine" for android
Installing "cordova-plugin-wkwebview-engine" for ios
Adding cordova-plugin-wkwebview-engine to package.json

config.xml 編集

公式ページ、前述の Qiita を参考に config.xml に以下の設定を追加。

1
2
3
4
5
6
7
8
9
10
 <?xml version='1.0' encoding='utf-8'?>
<widget id="foo.bar.app" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
...
+ <feature name="CDVWKWebViewEngine">
+ <param name="ios-package" value="CDVWKWebViewEngine" />
+ </feature>
+ <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
+ <preference name="WKWebViewOnly" value="true"/>
...
</widget>

基本的にはこれで OK。他にもハマりポイントがいくつかあるようなので、そちらは CordovaのUIWebView→WKWebView移行についてまとめ - Qiita を参照。

まとめ

参考文献

関連記事