WKWebView は、Apple が iOS 8 で導入した新世代の組み込みブラウザコンポーネントです。これは、古い UIWebView コンポーネントを置き換えるように設計されています。このコンポーネントは、画像リソースの読み込みに影響を与えないページスクロール、メインプロセスに影響を与えないクラッシュ保護、メモリ使用量の削減など、マルチプロセスレンダリングを特長としています。 UIWebView と比較して、WKWebView はパフォーマンス、安定性、およびユーザーエクスペリエンスが大幅に向上しています。数年間の反復 ( iOS 8 から iOS 9 、iOS 10 、iOS 11 、および iOS 12 ) の後、WKWebView はリリースの初期段階で発生したすべての問題を徐々に解決し、安定性を向上させてきました。
iOS 12 のリリース後、Apple API はユーザーに UIWebView API を徐々に破棄するように促し始めました。 2019 年 8 月以降、開発者が UIWebView コンポーネントを含むアプリを App Store に承認のために提出すると、次の警告が表示され、すぐに WKWebView に切り替えるように促されます。
さらに、Apple は 2019 年 12 月 23 日に、App Store は 2020 年 4 月以降 UIWebView を使用して開発された新しいアプリを受け入れなくなり、2020 年 12 月以降 UIWebview を使用して開発された既存のアプリのアップデートを受け入れなくなると発表しました。
この状況に対応して、mPaaS は WKWebView に対応しており、UIWebView から WKWebView への切り替えをサポートしています。 UIWebView から WKWebView への切り替え後も HTML5 ページの安定性を確保するために、mPaaS の WKWebView への対応プロセスは次の 2 つの段階に分かれています。
ステージ 1:2019 年 11 月以降、mPaaS ベースラインは UIWebView と WKWebView の共存をサポートし、カナリアデプロイ機能を通じて徐々に WKWebView に切り替えます。
ステージ 2:2020 年 3 月以降、mPaaS ベースラインは UIWebView 関連のコードをすべて削除し、すべての HTML5 サービスは WKWebView に切り替えられます。
mPaaS 10.1.60 ベースラインは、ステージ 1 の適応を完了しています。 mPaaS HTML5 コンテナとミニプログラムコンポーネントを統合するユーザーは、次の手順 (ベースラインのアップグレード) に従って、できるだけ早く最新の 10.1.60 ベースラインにアップグレードし、WKWebView に切り替える (WKWebView の使用) 必要があります。
ベースラインのアップグレード
アプリのリリース状況に基づいて、mPaaS HTML5 コンテナとミニプログラムコンポーネントを統合するユーザーは、次の原則に基づいてアクションを実行し、WKWebView に対応するためにベースラインをアップグレードする必要があります。
2020 年 4 月より前に App Store でリリースされたアプリの場合:既存のサービスを WKWebView に切り替える際の安定性を確保するために、10.1.60 ベースラインにアップグレードして、オンラインカナリアデプロイとロールバックをサポートすることをお勧めします。アップグレード手順については、「バージョン 10.1.60 へのアップグレード手順」をご参照ください。
2020 年 4 月より前に App Store でまだリリースされていない新しいアプリの場合:App Store は 4 月以降 UIWebView を使用した新しいアプリを受け入れなくなるため、UIWebView 関連のコードを含まないバージョン 10.1.68 を使用し、サービスの回帰テストと検証に備える必要があります。アップグレード手順については、「mPaaS 10.1.68-Beta へのアップグレード手順」をご参照ください。
WKWebView の使用
mPaaS コンテナーは、デフォルトで UIWebView を使用して HTML5 ページを読み込みます。 mPaaS フレームワークは、グローバルな有効化とカナリアデプロイメントの有効化の 2 つの WKWebView 有効化メソッドをサポートしています。
10.1.60 ベースライン
10.1.60 ベースラインでは、UIWebView と WKWebView が mPaaS コンテナに共存し、デフォルトでは UIWebView を使用して HTML5 ページが読み込まれます。次の方法で WKWebView をグローバルに有効化すると、mPaaS コンテナによって読み込まれるすべてのページで WKWebView が使用されるようになります。
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//...
// グローバルに WKWebView を有効にする
[MPNebulaAdapterInterface shareInstance].nebulaUseWKArbitrary = YES;
//...
}WKWebView を有効にした後、現在の HTML5 ページの UA を表示できます。 UA に次の図に示す WK 文字列が含まれている場合、このページは WKWebView を使用するように正常に切り替えられています。
その他の説明
WKWebView がグローバルに有効化された後、オンライン HTML5 ページの機能安定性を確保するために、mPaaS フレームワークは、WKWebView から UIWebView に迅速に切り替えるためのオンライン損失停止機能を提供します。プロシージャは次のとおりです。
オフラインパッケージまたは URL に UIWebView を使用しないように、構成スイッチ をリアルタイムパブリッシングコンポーネントに追加します。
構成スイッチのキー (key) は h5_wkArbitrary で、値 (value) は次のとおりです。
{
"enable": true,
"enableSubView": false,
"exception": [
{
"appId": "^(70000000|20000193)$"
},
{
"url": "https://invoice[.]starbucks[.]com[.]cn/"
},
{
"url":"https://front[.]verystar[.]cn/starbucks/alipay-invoice"
}]
}次の表に、値の構成項目を示します。
構成項目 | 説明 | 備考 | |
enable | WKWebView を有効にするかどうか。有効にする場合は | デフォルトは | |
enableSubView | ミニプログラムに埋め込まれた webView で WKWebView を有効にするかどうか。有効にする場合は | デフォルトは | |
exception | appId | オフラインパッケージの appId 正規表現に一致するすべての HTML5 ページで WKWebView は使用されません。 | デフォルトは |
url | url 正規表現に一致するすべての HTML5 ページで WKWebView は使用されません。 | ||
10.1.68-beta ベースライン
バージョン 10.1.68-beta のコンテナは、デフォルトで WKWebView を使用してオフラインパッケージとミニプログラムを読み込みます。現在の HTML5 ページの UA を表示できます。 UA に次の図に示す WK 文字列が含まれている場合、現在のページは WKWebView を使用するように正常に切り替えられています。