25

I'm using swift with ios 8.3. I want to open settings app from my application. I know that using the code

UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)

will open my app settings. But I don't want to open my app settings. I just want to open the settings app and stay in the main page. If possible, navigate to "Cellular". Is there any way to acheive this?

Cœur
  • 37,241
  • 25
  • 195
  • 267

4 Answers4

41

Try this.

if let appSettings = URL(string: UIApplication.openSettingsURLString) {
    UIApplication.shared.open(appSettings, options: [:], completionHandler: nil)
}

Xcode 11.5 - iOS > 10

Cublax
  • 1,232
  • 1
  • 11
  • 20
Derek Soike
  • 11,238
  • 3
  • 79
  • 74
18

Update on 11-Oct-2016:

It won't work in iOS10 anymore. So far I haven't found any workaround. If you guys have any solution please let me know. thanks.

======================================

if the iOS version <= iOS9, you need set URL types: enter image description here

You can do in this way:

    let url:NSURL! = NSURL(string : "prefs:root=")
    UIApplication.sharedApplication().openURL(url)

I have a demo on github: http://github.com/zhihuitang/SettingDemo.git

And you can find all available URLs as follows: http://iphonedevwiki.net/index.php/Preferences.app Preferences app registers a private URL scheme, prefs:, the list below details opening specific views 1[2]

prefs:root=General&path=About
prefs:root=General&path=ACCESSIBILITY
prefs:root=AIRPLANE_MODE
prefs:root=General&path=AUTOLOCK
prefs:root=General&path=USAGE/CELLULAR_USAGE
prefs:root=General&path=Bluetooth
prefs:root=General&path=DATE_AND_TIME
prefs:root=FACETIME
prefs:root=General
prefs:root=General&path=Keyboard
prefs:root=CASTLE
prefs:root=CASTLE&path=STORAGE_AND_BACKUP
prefs:root=General&path=INTERNATIONAL
prefs:root=LOCATION_SERVICES
prefs:root=ACCOUNT_SETTINGS
prefs:root=MUSIC
prefs:root=MUSIC&path=EQ
prefs:root=MUSIC&path=VolumeLimit
prefs:root=General&path=Network
prefs:root=NIKE_PLUS_IPOD
prefs:root=NOTES
prefs:root=NOTIFICATIONS_ID
prefs:root=Phone
prefs:root=Photos
prefs:root=General&path=ManagedConfigurationList
prefs:root=General&path=Reset
prefs:root=Sounds&path=Ringtone
prefs:root=Safari
prefs:root=General&path=Assistant
prefs:root=Sounds
prefs:root=General&path=SOFTWARE_UPDATE_LINK
prefs:root=STORE
prefs:root=TWITTER
prefs:root=General&path=USAGE
prefs:root=VIDEO
prefs:root=General&path=Network/VPN
prefs:root=Wallpaper
prefs:root=WIFI
prefs:root=INTERNET_TETHERING

hope this helpful to you.

DàChún
  • 4,751
  • 1
  • 36
  • 39
  • That code is what I am using now. Sachin Rocken, could you paste your code here? Let's see what is the problem. – DàChún Nov 30 '15 at 09:23
  • let url:NSURL! = NSURL(string : "prefs:root=General") UIApplication.sharedApplication().openURL(url) That doesn't work. – Keenan Dec 07 '15 at 02:26
  • 2
    @User9527 , I tried your code. In viewdidload I used let url:NSURL! = NSURL(string : "prefs:root=") UIApplication.sharedApplication().openURL(url) and it's not working. I don't know how it's working for you. Could you please give a sample project using any sharing services available. –  Dec 07 '15 at 10:46
  • @Sachin Rocken, I made a demo in github, please check if it works with you:https://github.com/zhihuitang/SettingDemo.git – DàChún Dec 10 '15 at 10:39
  • It is actually working if you consider this tip here to "configure the URL Schemes in your project": https://gist.github.com/phynet/471089a51b8f940f0fb4 – Florian Blum Mar 24 '16 at 22:52
  • 1
    Have anybody got the solution for iOS 10? – Ravi Ojha Oct 13 '16 at 04:38
  • Under iOS 10 "prefs:###" has been changed to "App-Prefs:###". The rest of the string should be the same. – jcpennypincher Mar 08 '17 at 00:25
  • Please use my code which i have given above. Its successfully working mine – Boosa Ramesh Oct 30 '17 at 11:51
  • 1
    This API is private and Apple will most likely reject your app if you will want to send it to the store. – Kacper Cz Oct 31 '19 at 06:06
10

YES, They made changes in iOS 10, Please change "prefs:" to "App-Prefs:"

guard let profileUrl = URL(string:"App-Prefs:root=General&path=ManagedConfigurationList") else {
    return
}

if UIApplication.shared.canOpenURL(profileUrl) {
    UIApplication.shared.open(profileUrl, completionHandler: { (success) in
        print(" Profile Settings opened: \(success)")
    })
}

Jeremy Wiebe
  • 3,894
  • 22
  • 31
Boosa Ramesh
  • 379
  • 3
  • 19
2

Xcode 14: you can do:

// System settings:
let url = URL(string: UIApplication.openSettingsURLString)!
UIApplication.shared.open(url)

// Notifications settings:
URL(string: UIApplication.openNotificationSettingsURLString)!
UIApplication.shared.open(url)
Breno Valadão
  • 128
  • 1
  • 4