Do we need to explicitly install wkwebview for Ionic 4?

I have ported my Ionic 3 to Ionic 4, starting with a new project and adding everything back.

In Ionic 3, I had installed the package for the wkwebview-engine. Do we need to do this or any configuration for Ionic 4? I understood it was now just included by default, but want to make sure, as I am currently getting the error…

[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]: unrecognized selector sent to instance 0x165b62a0'

The full call stack when the exception is throws is…

2019-07-15 12:29:01.202982+0800 my app[470:518203] DiskCookieStorage changing policy from 2 to 0, cookie file: file:///private/var/mobile/Containers/Data/Application/0E2D25B3-DCDE-4773-8714-650B03D0778D/Library/Cookies/Cookies.binarycookies
      2019-07-15 12:29:01.359887+0800 my app[470:518203] Apache Cordova native platform version 5.0.1 is starting.
      2019-07-15 12:29:01.361263+0800 my app[470:518203] Multi-tasking -> Device: YES, App: YES
      2019-07-15 12:29:01.406496+0800 my app[470:518203] CDVWKWebViewEngine: trying to inject XHR polyfill
      2019-07-15 12:29:01.438223+0800 my app[470:518203] -[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]: unrecognized selector sent to instance 0x1656cea0
      2019-07-15 12:29:01.438835+0800 my app[470:518203] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]: unrecognized selector sent to instance 0x1656cea0'
      *** First throw call stack:
      (0x1ceafb3d 0x1c137067 0x1ceb4fd1 0x1ceb30c3 0x1cddbdc8 0x1077a3 0x1d08ef 0x1d008f 0x1d052d 0x1cdba1 0xf186b 0x220e1eb7 0x220e1ad9 0x220e805b 0x220e55bb 0x22155159 0x1c3985 0xf1641 0x221515c5 0x22352a4b 0x22357c1d 0x2236a7c5 0x2235535b 0x1e790c13 0x1e790acd 0x1e790db7 0x1ce6bfdd 0x1ce6bb05 0x1ce69f51 0x1cdbd1af 0x1cdbcfd1 0x2214ae2d 0x22145a53 0xf153b 0x1c5aa4eb)
      libc++abi.dylib: terminating with uncaught exception of type NSException

When trying to run from xcode

Ionic info

Dev-Mac-mini:myapp Development$ ionic info

  Ionic:

    ionic (Ionic CLI)             : 4.12.0 (/usr/local/lib/node_modules/ionic)
    Ionic Framework               : @ionic/angular 4.4.0
    @angular-devkit/build-angular : 0.13.8
    @angular-devkit/schematics    : 7.2.4
    @angular/cli                  : 7.3.8
    @ionic/angular-toolkit        : 1.4.1

  Cordova:

    cordova (Cordova CLI) : 9.0.0 (cordova-lib@9.0.1)
    Cordova Platforms     : ios 5.0.1
    Cordova Plugins       : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 3.1.2, (and 11 other plugins)

  System:

    Android SDK Tools : 26.1.1 (/Users/Development/.android-sdk-macosx/)
    ios-deploy        : 1.9.4
    ios-sim           : 8.0.1
    NodeJS            : v10.15.3 (/usr/local/bin/node)
    npm               : 6.4.1
    OS                : macOS High Sierra
    Xcode             : Xcode 9.4.1 Build version 9F2000

My config.xml is as follows…

?xml version='1.0' encoding='utf-8'?>
  <widget android-versionCode="16" id="com.company.myapp" ios-CFBundleVersion="15" version="1.3.0.4" windows-packageVersion="1.2.6.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
      <name>myapp</name>
      <description></description>
      <author email="support@mycompany.com" href="www.mycompany.com"></author>
      <content src="index.html" />
      <access origin="*" />
      <allow-intent href="http://*/*" />
      <allow-intent href="https://*/*" />
      <allow-intent href="tel:*" />
      <allow-intent href="sms:*" />
      <allow-intent href="mailto:*" />
      <allow-intent href="geo:*" />
      <preference name="ScrollEnabled" value="false" />
      <preference name="android-minSdkVersion" value="19" />
      <preference name="deployment-target" value="10.0" />
      <preference name="WKSuspendInBackground" value="false" />
      <preference name="BackupWebStorage" value="none" />
      <preference name="SplashMaintainAspectRatio" value="true" />
      <preference name="FadeSplashScreenDuration" value="300" />
      <preference name="SplashShowOnlyFirstTime" value="false" />
      <preference name="SplashScreen" value="screen" />
      <preference name="SplashScreenDelay" value="3000" />
      <platform name="android">
          <allow-intent href="market:*" />
          <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
          <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
          <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
          <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
          <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
          <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
          <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
          <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
          <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
          <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
          <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
          <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
          <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
          <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
          <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
          <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
          <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
          <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
      </platform>
      <platform name="ios">
          <allow-intent href="itms:*" />
          <allow-intent href="itms-apps:*" />
          <icon height="57" src="resources/ios/icon/icon.png" width="57" />
          <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
          <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
          <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
          <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
          <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
          <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
          <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
          <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
          <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
          <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
          <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
          <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
          <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
          <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
          <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
          <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
          <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
          <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
          <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
          <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
          <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
          <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
          <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
          <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
          <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
          <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
          <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
          <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
          <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
          <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
          <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
      </platform>
      <plugin name="cordova-plugin-whitelist" spec="1.3.3" />
      <plugin name="cordova-plugin-statusbar" spec="2.4.2" />
      <plugin name="cordova-plugin-device" spec="2.0.2" />
      <plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
      <plugin name="cordova-plugin-ionic-webview" spec="^3.0.0" />
      <plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
  </widget>

Thanks in advance for any info.

[EDIT1]

A bit more info.

I set xcode to break on exceptions, and now I can see…

I have set my deployment target to 10.0 ie in config.xml I set as I was trying to use an older iPhone that only seems to update to ios 10.3.

Is it the case that ios 11.0 is now the minimum version we can support?

cordova-plugin-ionic-webview >= 3 requires iOS 11 to work.

If you need to support iOS 10, then use cordova-plugin-ionic-webview 2.x (latest is 2.5.1 at the moment)

1 Like

Thanks for that. I’ll try removing the current and adding 2.5.1

Can confirm that adding the older version it now runs on ios 10.

So I removed the existing, and added 2.5.1…

cordova plugin rm cordova-plugin-ionic-webview
cordova plugin add cordova-plugin-ionic-webview@2.5.1

Also, in my config.xml added

<preference name="deployment-target" value="10.0"
1 Like