2016-09-30 8 views
10

私たちは、ボタンを押すことでデバイスの設定アプリを開くiOSアプリを作成しています。私は、メソッドがiOS 10とSwift 3で若干変更されていることを確認しました。したがって、コードを実行する前にユーザーがどのiOSバージョンを使用しているかを確認する条件を使用しています。iOS 10設定を開くクラッシュ

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) 
    } 
} 

これはiOS 9デバイスでは問題なく動作しますが、iOS 10では正常に動作しません。問題は、アプリがiOS 10の設定アプリにユーザーを送信している間、クラッシュログなしで直ちにクラッシュすることです。この同じ方法を使ってGoogleのようなウェブサイトを開くと、iOS 9と10の両方で完全に正常に動作します。私は多くの研究を行い、URLスキームでいくつか変更したようですが、修正プログラム/回避策。

+0

私は独立してアプリをテストしています。 Xcodeを実行していないときはデバイス上で何を意味するのでしょうか?私はまだ同じ振る舞いをします。 – BenSDConway

+0

これはカスタムキーボード拡張用ですので、コンテナアプリ内では、ボタンをクリックするだけで設定アプリに直接送信されます。ユーザーが設定アプリで何かをする機会を得る前にクラッシュします。これは主にUXのものですが、私たちが信じることは非常に重要です。 – BenSDConway

+0

あなたのアプリがまだiOS 9をサポートしている場合、iOSのバージョンに関係なく、古い「openURL」メソッドを使用してみませんか?それは完全に有効で安全です。 – rmaddy

答えて

6

私は私のプロジェクトに設定バンドルを追加し、このコードを使用してのiOSの設定アプリを開く方法を見つけました:

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

これはあなたが開くために使用することができる唯一の方法であるように見えますアプリケーションにカスタムキーボードがない場合はネイティブ設定アプリケーションを使用します。

+0

キーボードの設定とは関係ありません。このコードスニペットは、iOS 10での設定のアプリクラッシュを防ぎません。シミュレータまたは実際のデバイスに関係なく、アプリから開いている間に設定がクラッシュする1つのボタンで新しくプロジェクトを作成しました。設定を開くだけです。そして、アプリからの設定を開き、iOS 10のクラッシュを引き起こした。参考のために、関係するスレッド:http://stackoverflow.com/questions/39659720/open-phone-settings-when-button-is-clicked-in-my- app-ios-10-swift-3-issue – Mesbah

5

カスタムURLスキームはAppleによって正式に文書化されていません。 iOS 10ではこれ以上動作しません。アプリはユーザーにあなたのアプリケーションの設定ページだけを持って来ることができます。 iOS 10に設定ページが表示されない場合、アプリケーションがクラッシュする可能性があります。

「グレイエリア」APIで設定ページを開くことができます。しかし、私はスイフトで成功していない。がんばろう!

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

+0

"Apple Documentation"を参照できますか? – Mesbah

+0

申し訳ありませんが、私のせいです。ドキュメントにカスタムURLスキームが見つかりませんでした。 – User9527

0

あなたのコードが正しいか、それについて心配しないでください。これは、あなたのアプリの設定には何もありません(つまり、カメラアクセス許可や写真アクセス許可などの権限はありません)。あなたがしなければならないことは、あなたのアプリケーションの設定ページにリダイレクトする前に、どんな種類の許可を求めているだけです。

注:アプリがクラッシュし得ていないされて表示するものがないのため、それだけでバックグラウンドになるだろう(アプリの設定は、あなたの許可とアクセス情報のみが含まれています。)

関連する問題