2016-09-30 3 views
10

So erstellen wir eine iOS App, die mit einem Knopfdruck öffnet die App Einstellungen des Geräts. Ich habe gesehen, dass sich die Methode mit iOS 10 und Swift 3 leicht geändert hat, also verwende ich eine Bedingung, um zu prüfen, auf welcher iOS-Version sich der Benutzer befindet, bevor er den Code ausführt.iOS 10 Öffnen Einstellungen Crash

if let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) { 

    if #available(iOS 10.0, *) { 

     // iOS 10.0. 

     UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil) 

    } else { 

     // Fallback on earlier versions. 

     UIApplication.shared.openURL(settingsUrl) 
    } 
} 

Das funktioniert völlig in Ordnung, auf einem iOS-Gerät 9, aber nicht auf einem iOS-10 ein. Das Problem ist, dass, während die App den Benutzer an die Einstellungen App in iOS 10 sendet, es sofort ohne Absturzprotokolle abstürzt. Wenn ich dieselbe Methode verwende, um eine Website wie Google zu öffnen, funktioniert das auf iOS 9 und 10 einwandfrei. Ich habe viel geforscht und es scheint, dass sie einige Dinge mit den URL-Schemas geändert haben, aber keine finden Fixes/Problemumgehungen.

+0

ich die app unabhängig getestet auf dem Gerät, wenn es nicht durch Xcode läuft, wenn das was du meinst? Ich bekomme immer noch das gleiche Verhalten. – BenSDConway

+0

Es ist für eine benutzerdefinierte Tastaturerweiterung, also zeigen wir in der Container-App einfach eine Schaltfläche, die beim Anklicken direkt zur Einstellungs-App gesendet wird, anstatt selbst dort navigieren zu müssen. Es stürzt ab, bevor der Benutzer in der Einstellungs-App etwas tun kann. Es ist hauptsächlich eine UX-Sache, aber ziemlich vital, glauben wir. – BenSDConway

+0

Wenn Ihre App weiterhin iOS 9 unterstützt, verwenden Sie die ältere 'openURL'-Methode unabhängig von der iOS-Version. Das ist vollkommen gültig und sicher. – rmaddy

Antwort

6

fand ich eine Möglichkeit, Einstellungen App in iOS zu öffnen, indem Sie eine Einstellung Bündel zu meinem Projekt hinzugefügt und mit diesem Code:

let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL 
    UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil) 

Es sieht wie folgt aus ist der einzige Weg, die Sie verwenden können, um zu öffnen native Einstellungen, wenn Ihre Anwendung keine benutzerdefinierte Tastatur hat.

+0

Es ist nicht relevant mit irgendwelchen Tastatureinstellungen. Dieses Code-Snippet verhindert nicht, dass die Einstellungen-App auf iOS 10 abstürzt. Die Einstellungen stürzen ab, wenn sie von einer App aus geöffnet werden, unabhängig vom Simulator oder vom echten Gerät. Ich habe ein neues Projekt mit einem einzigen Knopf erstellt, nur um die Einstellungen zu öffnen.Und Öffnen von Einstellungen aus der App verursacht den Absturz in iOS 10. Nur als Referenz, relevante Thread: http://StackOverflow.com/Questions/39659720/Open-phone-settings-when-Button-is-clicked-in-my- app-ios-10-swift-3-issue – Mesbah

5

Benutzerdefinierte URL-Schema ist nicht offiziell von Apple dokumentiert. Unter iOS 10 funktioniert es nicht mehr. Die App darf Benutzer nur zu Ihre App eigenen Einstellungen Seite bringen. Ihre App stürzt ab, wenn sie in iOS 10 keine Einstellungsseite hat.

Sie können versuchen, die Seite Einstellungen wie folgt über die API "Graubereich" zu öffnen. Aber ich war nicht erfolgreich in Swift. Viel Glück!

The "prefs" URL Scheme not woring in iOS 10 (Beta 1 & 2)

+0

Können Sie auf die "Apple Documentation" verweisen, auf die Sie sich beziehen? – Mesbah

+0

Entschuldigung, meine Schuld. Ich möchte sagen, ich habe nicht benutzerdefinierte URL-Schema in ihrem Dokument gefunden. – User9527

0

Ihr Code korrekt ist, nicht darum kümmern. Dies liegt nur daran, dass in den Einstellungen Ihrer App nichts ist (z. B. jegliche Art von Berechtigungen wie Kamerazugriffsberechtigung oder Zugriffsberechtigung für Fotos usw.). Alles, was Sie tun müssen, ist eine Erlaubnis einzuholen, bevor Sie zu Ihrer App-Einstellungsseite weiterleiten, dann wird es perfekt funktionieren.

. HINWEIS: Ihre App ist nicht abgestürzt immer, es ist nur in den Hintergrund gehen, weil es nichts zu zeigen (Ihre App-Einstellungen enthält nur Ihre Berechtigung und Zugriffsinformationen.)

Verwandte Themen