How to open WIFI setting in Swift 3

2020-03-24 06:46发布

问题:

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: AppSettingsWifiUrl) {
    UIApplication.shared.openURL(settingsURL)
}

But after updating it is not working with Xcode 8 + Swift 3 + iOS 10, can anybody help here?

回答1:

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


回答2:

 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

            })
        }


回答3:

iOS 9+

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.


iOS 11+

If you need to connect to a certain Wi-Fi network NEHotspotConfigurationManager maybe helps.

Source: Apple technical Q&A QA1942



回答4:

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


回答5:

This thing will work with iOS 10 also but you have to add URL types in ur project setting info. URL schemes should be prefs If you need I will share the screen shot so that you can easily achieve.

Thanks