9

From what I understand by using code like this:

NSURL* appUrl = [NSURL URLWithString: @"URL"];
[[UIApplication sharedApplication] openURL:appUrl];

I can open Map, YouTube, Safari, Mail, iTunes and the App Store, when a user say presses a button.

But I was wondering is it possible to open the Settings app with this method.

Basically, the first time the user opens my app I want a UIAlertView to pop up to let the user know that they can change a specific setting if they want, and either they press OK or they press settings to take them to the settings app.

I know that Apple do that in some situations, but is it possible for developers to do that?

Christian Gossain
  • 5,942
  • 12
  • 53
  • 85
  • possible duplicate of [Opening the Settings app from another app](http://stackoverflow.com/questions/5655674/opening-the-settings-app-from-another-app) – Flexo Oct 15 '11 at 21:08

6 Answers6

16

As per @bnduati's answer, in iOS 8 you can use the following code to open your app's settings in the settings app:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

Old answer:

From iOS 5.1 through iOS 7, it was not possible to open the settings app from another application.

You might want to investigate this framework for providing in-app settings.

There are quite a few other questions that discuss this topic:

iPhone - how to put Settings bundle seen through System Settings App into your own App?

Launch iPhone setting screen from Application?

How to send a user to the main iPhone Settings screen from within your iPhone App

Community
  • 1
  • 1
Greg
  • 33,450
  • 15
  • 93
  • 100
9

In iOS 8 and later you can send the user to your app's settings in the following way:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Tim Arnold
  • 8,359
  • 8
  • 44
  • 67
bnduati
  • 601
  • 1
  • 8
  • 10
6

You can use this on iOS 5.0 and later:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
davidcann
  • 1,360
  • 1
  • 15
  • 17
3

I don't know if this is possible or not, but one issue is that the user would then need to navigate back to your app. You can instead have your own preferences view that can write to the same file that the preferences app will use by using NSUserDefaults.

[[NSUserDefaults standardUserDefaults] setObject:value forKey:key];

[[NSUserDefaults standardUserDefaults] stringForKey:key]

Peter DeWeese
  • 18,141
  • 8
  • 79
  • 101
1

Swift Syntax:

UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
Dustin Williams
  • 3,912
  • 2
  • 16
  • 19
0

Swift 3

private func showAlertPrivacy() {
    let alertController = UIAlertController(title: nil, message: "messagePrivacy", preferredStyle: .alert)
    let alertNo = UIAlertAction(title: "No", style: .default) { (_) in

    }
    alertController.addAction(alertNo)

    let alertSetting = UIAlertAction(title: "Settings", style: .default) { (_) in

        UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: { (_) in

        })
    }
    alertController.addAction(alertSetting)

    present(alertController, animated: true) { 

    }
}
Giang
  • 3,553
  • 30
  • 28