RJ168
RJ168

Reputation: 1046

How to open WIFI setting in Swift 3

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?

Upvotes: 8

Views: 13399

Answers (7)

ankit gandhi
ankit gandhi

Reputation: 27

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

Upvotes: 3

Lito
Lito

Reputation: 2328

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

Upvotes: 4

winklerrr
winklerrr

Reputation: 14727

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

Upvotes: 3

chawki
chawki

Reputation: 887

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

Upvotes: 6

Sandeepk2r
Sandeepk2r

Reputation: 178

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 😊😊

Upvotes: 0

SSF
SSF

Reputation: 7

Use the following for iOS 10 and above:

if let url = URL(string:"App-Prefs:root=Settings&path=General") { 
    UIApplication.shared.openURL(url)
}

Upvotes: -1

Sina KH
Sina KH

Reputation: 565

Just use:

UIApplication.shared.openURL(URL(string:"prefs:root=WIFI")!)

Upvotes: -1

Related Questions