Reputation: 6526
It seems that Apple has moved a lot of the app configurations to the App path with iOS 11, how to open the app path programmatically in Settings? I tried "App-Prefs:root=\(Bundle.main.bundleIdentifier!)"
but this doesn't seem to work.
Please note that my question is specific to: How to open the app path in settings: NOT how to open the settings
Upvotes: 35
Views: 26960
Reputation: 880
SWift 5
In some case we can not open App's setting after trying all the above. To solve this problem 100% just make sure these two step are followed
Step 1. Right click on the project file -> Add New File -> Add Settings.Bundle in project and edit according to your requirements.
Step 2. Now add some code in your buttons action.
if let url = URL(string: UIApplication.openSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
Note: Using "prefs:Root" is forbidden by apple and your app will be rejected. So, avoid using this api.
Upvotes: 0
Reputation: 3362
Here is the code you're looking for, I guess:
if let url = URL(string: UIApplicationOpenSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
And in addition, the updated version for swift 5 :
if let url = URL(string: UIApplication.openSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
Upvotes: 63
Reputation: 1001
UIApplicationOpenSettingsURLString
has been renamed to UIApplication.openSettingsURLString
.
if let url = URL(string: UIApplication.openSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
Upvotes: 1
Reputation: 1660
Swift 4.2, iOS 12
Opening just the settings is possible with the function below:
extension UIApplication {
...
@discardableResult
static func openAppSettings() -> Bool {
guard
let settingsURL = URL(string: UIApplication.openSettingsURLString),
UIApplication.shared.canOpenURL(settingsURL)
else {
return false
}
UIApplication.shared.open(settingsURL)
return true
}
}
Usage: UIApplication.openAppSettings()
But be careful to NOT use "non-public URL scheme", such as: prefs:root=
or App-Prefs:root
, because otherwise your app will be rejected. This happened to me recently since I was trying to have a deeplink to the wifi section in the settings.
Upvotes: 16
Reputation: 7012
And if you want to make it work for both, older and newer iOS-versions, then do:
if let url = URL(string:UIApplicationOpenSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}
}
Upvotes: 4
Reputation: 3281
openURL
has been deprecated since iOS 10, so I would advise you to use:
if let url = URL(string:UIApplicationOpenSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: { success in
log.debug("Open app settings success: \(success)")
})
}
}
Upvotes: 2