Ionic ios9 issues


#1

hi,

My app is broken on ios9 only.
When the app is loaded, we just get a blank white screen.
it works without issue on ionic serve and android apk.

I’ve updated to ionic v1.1 and angular and dependencies have been updated too.

I went through this post
http://blog.ionic.io/preparing-for-ios-9/

and have applied the patch angular-ios9-uiwebview.patch.js
and the App Transport Security patch via:

(i don’t use radio buttons so took no action here)

i saw this post

and the first answer indicates that

And the white screen of death is mainly because of angular error

I don’t believe this to be an angular error because it only happens in ios9. (i.e. shouldn’t the same issue happen when running ionic serve or in the android apk?)

Does anyone know how i might be able to debug this further?


#2

It likely is a JavaScript error occurring which is preventing the execution of your app. Enable USB Debugging, run your device on your phone and the bring up either the Safari debugging tools on your computer or use a program like GapDebug. Reload your application whilst the debugger is up so that you can see any errors that occurred right on startup (which is likely where it will be) and you should be able to see the error occurring in the console.

Once you’ve done that you should have more of an idea of what the problem is.

Edit: Oh and in response to “shouldn’t the same issue happen when running ionic serve or in the android apk” - no not necessarily, if the error is occurring due to a plugin missing then you could get a Javascript error on one platform and not the other, the browser that is running your application is different on iOS vs Android as well so different problems can occur.


#3

Thanks for the reply.
Just a quick dumb question. Can I use GapDebug to debug ios devices on a windows computer?
Reading the docs it seems like i can as long as i have itunes installed, but wanted to ask before proceeding.

Thanks


#4

Yeah you can, GapDebug was great for when I was working on Windows.


#5

Thanks. I was finally able to get an i-device and the this working.

There are several errors that occur but I have no idea how to proceed solving these. Does anyone have suggestions on what I should do next?

[Error] Error: SyntaxError: DOM Exception 12
setRequestHeader@[native code]
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:19283:33
forEach@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:9177:24
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:19281:14
sendReq@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:19160:21
serverRequest@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:18872:23
processQueue@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:23394:30
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:23410:39
$eval@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:24673:28
$digest@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:24484:36
$apply@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:24778:31
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:26545:42
completeOutstandingRequest@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:14221:15
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:14493:33
(anonymous function) (ionic.bundle.js, line 21157)
(anonymous function) (ionic.bundle.js, line 17936)
processQueue (ionic.bundle.js, line 23402)
(anonymous function) (ionic.bundle.js, line 23410)
$eval (ionic.bundle.js, line 24673)
$digest (ionic.bundle.js, line 24484)
$apply (ionic.bundle.js, line 24778)
(anonymous function) (ionic.bundle.js, line 26545)
completeOutstandingRequest (ionic.bundle.js, line 14221)
(anonymous function) (ionic.bundle.js, line 14493)

[Error] TypeError: undefined is not an object (evaluating ‘window.cordova.plugins.Keyboard’)
(anonymous function) (app.js, line 13)
(anonymous function) (ionic.bundle.js, line 48811)
onPlatformReady (ionic.bundle.js, line 2447)
fire (cordova.js, line 775)
(anonymous function) (cordova.js, line 229)

[Error] Error: SyntaxError: DOM Exception 12
setRequestHeader@[native code]
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:19283:33
forEach@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:9177:24
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:19281:14
sendReq@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:19160:21
serverRequest@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:18872:23
processQueue@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:23394:30
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:23410:39
$eval@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:24673:28
$digest@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:24484:36
$apply@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:24778:31
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:26545:42
completeOutstandingRequest@file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:14221:15
file:///var/mobile/Containers/Bundle/Application/E5184A2E-7312-4977-A15E-D96264B6BF65/ThisApp.app/www/lib/ionic/js/ionic.bundle.js:14493:33
(anonymous function) (ionic.bundle.js, line 21157)
(anonymous function) (ionic.bundle.js, line 17936)
processQueue (ionic.bundle.js, line 23402)
(anonymous function) (ionic.bundle.js, line 23410)
$eval (ionic.bundle.js, line 24673)
$digest (ionic.bundle.js, line 24484)
$apply (ionic.bundle.js, line 24778)
(anonymous function) (ionic.bundle.js, line 26545)
completeOutstandingRequest (ionic.bundle.js, line 14221)
(anonymous function) (ionic.bundle.js, line 14493)


#6

Hi, did you ever find out what the problem was with IOS9? I am having the same issue.
I skipped the patch, the flickering on IOS9 is annoying, but at least it works.


#7

Yes.
there are basically two errors there.
one is the Dom Exception 12
the other is the keyboard undefined

the keyboard one is easy, just need to update ionic keyboard and include in config.xml

the DOM Exception 12 is the most bullshit one. ultimately i figured it out from reading:
http://www.ekreative.com/blog/adapting-my-ionic-framework-hybrid-mobile-app-for-ios-9-problems-and-solutions/455-adapting-my-ionic-framework-hybrid-mobile-app-for-ios-9-problems-and-solutions

and

so i ended up changing the helper function i have to set the token to:

    if (token.length > 1)
        $http.defaults.headers.common.Authorization = 'Token ' + token;
    else
        $http.defaults.headers.common.Authorization = null;

and now is working.