iOS: fallback to use [UIScreen mainScreen] when [UIScreen screens] fail
authorRichard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Mon, 24 Nov 2014 10:21:07 +0000 (11:21 +0100)
committerJani Heikkinen <jani.heikkinen@theqtcompany.com>
Wed, 26 Nov 2014 09:47:19 +0000 (10:47 +0100)
On iOS 7.1 [UIScreen screens] sometimes (and against documentation) returns
an empty array, which will lead to a crash. This patch will add a fallback
path that uses [UIScreen mainScreen] instead when the screen count is 0.

Task-number: QTBUG-42345
Change-Id: Ie72578ff7ecd0c8fbc971fafea45047bf1347cd9
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
src/plugins/platforms/ios/qiosintegration.mm

index 9a722ead37f3d824cb99d25ef479365634ceb2ea..461f160892628bcfa28ce7b466547442181b405a 100644 (file)
@@ -88,7 +88,13 @@ QIOSIntegration::QIOSIntegration()
     // Set current directory to app bundle folder
     QDir::setCurrent(QString::fromUtf8([[[NSBundle mainBundle] bundlePath] UTF8String]));
 
-    for (UIScreen *screen in [UIScreen screens])
+    NSMutableArray *screens = [[[UIScreen screens] mutableCopy] autorelease];
+    if (![screens containsObject:[UIScreen mainScreen]]) {
+        // Fallback for iOS 7.1 (QTBUG-42345)
+        [screens insertObject:[UIScreen mainScreen] atIndex:0];
+    }
+
+    for (UIScreen *screen in screens)
         addScreen(new QIOSScreen(screen));
 
     // Depends on a primary screen being present