I want to open WIFI setting section from my iOS application, my code was working well before Swift 3 with iOS 9.2
if let settingsURL = URL(string: AppSetting
Edited 26-02-20, Pay attention, in versions later than ios 10 your binary will be rejected
It's possible on iOS 10 and Swift 3
let url = URL(string: "App-Prefs:root=WIFI") //for WIFI setting app
let app = UIApplication.shared
app.openURL(url!)
We can't do this anymore on iOS 11, we can just open the settings :
if let url = URL(string:UIApplicationOpenSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
let url = UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
You can't directly open the Wi-Fi settings tab from your app. You are just allowed to open the settings app in general.
The following code works with Swift 4
+ iOS 9+
:
func openWifiSettings() {
print("Opening Wi-Fi settings.")
let shared = UIApplication.shared
let url = URL(string: UIApplicationOpenSettingsURLString)!
if #available(iOS 10.0, *) {
shared.open(url)
} else {
shared.openURL(url)
}
}
Source: Apple developer documentation open and openURL
It was actually possible in iOS 9
to open the Wi-Fi settings tab directly (using private API URL schemes) but this was considered as bug usage.
Therefore: Don't use App-Prefs:root
or pref:root
URL schemes as they will lead to rejection of your app by Apple's review check.
Source: Apple developer forum post from Apple's eskimo.
If you need to connect to a certain Wi-Fi network NEHotspotConfigurationManager
maybe helps.
Source: Apple technical Q&A QA1942
Just use:
UIApplication.shared.openURL(URL(string:"prefs:root=WIFI")!)
let url=URL(string: "App-Prefs:root=Privacy&path=Location")
if UIApplication.shared.canOpenURL(url!)
{
UIApplication.shared.open(url!, options: [:], completionHandler: {sucess in
})
}
else{
UIApplication.shared.open(url!, options: [:], completionHandler: {sucess in
})
}
Use the following for iOS 10 and above:
if let url = URL(string:"App-Prefs:root=Settings&path=General") {
UIApplication.shared.openURL(url)
}