Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cordova app hanging during startup on iOS 10

I just installed Xcode 8 beta in order to test my existing Cordova app in iOS 10 beta (via Simulator). When the app is launched, it just hangs on the loading page - seems the deviceready event is not being fired.

So I also installed iOS 10 beta on my iPad Air (just in case it's a Simulator issue), but I get the same results.

The app works fine on iOS 9.3 (both device and Simulator).

Anyone encountered/fixed this problem?

UPDATE

Other symptoms of this problem include:

  • the app will start correctly if you background the app (switch back to the home screen) then foreground the app (switch back to the app)
  • some plugins will not work correctly until you do the above switching
like image 929
DaveAlden Avatar asked Jul 16 '16 10:07

DaveAlden


People also ask

Does Cordova work for iOS?

You can use cordova run ios --list to see all available targets and cordova run ios --target=target_name to run application on a specific device or emulator (for example, cordova run ios --target="iPhone-6" ). You can also use cordova run --help to see additional build and run options.

Does Apple accept Cordova apps?

Apple can reject any application for any reason. People using hybrid technologies like Cordova may run into this problem if they don't actually use the device features Cordova gives them access to.

What browser does Cordova use on iOS?

Safari for iOS is using WebKit2 (starting from iOS 8). Details about WebKit2. This seems to answer to your question. This plugin makes Cordova use the WKWebView component instead of the default UIWebView component, and is installable only on a system with the iOS 9.0 SDK.

How do I debug a Cordova app on safari?

To enable debugging on iOS, In the iOS device, go to Settings → Safari → Advanced → Enable 'Web Inspector' From the Mac, Safari → Preferences → Advanced → Enable 'Show Develop menu in menu bar' Once this is done, start the Cordova application and connect your iOS device with USB cable.


1 Answers

OK, I found the problem and the solution thanks to this post:

It seems that iOS 10 requires additional entries in the Content-Security-Policy meta tag, namely gap: and file:. After adding these, my Content-Security-Policy looks like this:

<meta http-equiv="Content-Security-Policy" content="default-src * gap: file:; style-src 'self' 'unsafe-inline'; img-src 'self' data:; script-src * 'unsafe-inline' 'unsafe-eval'"> 

And the app starts up and works fine on iOS 10.

Hope this helps others.

like image 145
DaveAlden Avatar answered Oct 04 '22 18:10

DaveAlden