How do I open phone settings when a button is clicked in Swift?

In Swift, you can open the phone settings page with the click of a button. To open, you can use the method. In Swift, you are able to use predefined expressions to open specific screens outside of the app. This predefined expression will help you to open the settings screen from your app. This is a very useful feature in iOS.

Here is the Main Function

if let url = URL(string:UIApplication.openSettingsURLString) {
   if UIApplication.shared.canOpenURL(url) {, options: [:], completionHandler: nil)

Here's How This Code Works

  • The UIApplication.openSettingsURLString constant is used to get the URL of the phone settings.

  • The if statement checks if the URL can be opened by the shared application instance.

  • If the URL can be opened, the open method of the shared application instance is called to open the settings.

You can place this code in the action method of the button to open the phone settings when the button is clicked.


import UIKit
class TestController: UIViewController {
   private lazy var clickButton: UIButton = {
      let button = UIButton()
      button.addTarget(self, action: #selector(handleButtonClick), for: .touchUpInside)
      button.backgroundColor = .darkGray
      button.setTitle("Open Settings", for: .normal)
      button.setTitleColor(.white, for: .normal)
      button.titleLabel?.font = UIFont.systemFont(ofSize: 18, weight: .semibold)
      button.layer.cornerRadius = 5
      button.translatesAutoresizingMaskIntoConstraints = false
      return button
   override func viewDidLoad() {
   private func initialSetup() {
      view.backgroundColor = .white
      navigationItem.title = "Settings"
      clickButton.widthAnchor.constraint(equalToConstant: 150).isActive = true
      clickButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
      clickButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
      clickButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
   @objc private func handleButtonClick() {
      if let url = URL(string:UIApplication.openSettingsURLString) {
         if UIApplication.shared.canOpenURL(url) {
  , options: [:], completionHandler: nil)


Keep in Mind When Opening Phone Settings in iOS Swift

  • In iOS 8 and later, the UIApplication.openSettingsURLString constant is accessible. To access the phone settings, you might need to take an alternative route if your program is compatible with an older version of iOS.

  • Before launching the open function, you should always verify that the app can access the URL for the phone settings. This is due to the possibility that not all devices have the phone settings app loaded or that parental restrictions have blocked access to the app.

  • The phone settings software is launched in a distinct process when the open method is triggered with the phone settings URL. This means that if the device runs out of memory, your software may be stopped and put on hold.

  • When the phone settings app is launched or when an effort to launch it fails, the open method's finish handler is triggered. This finish handler can be used to handle any problems or carry out further operations in your program.

  • It is best practice to inform the user why the app requires access to the phone settings when the phone settings app is opened. Confusion can be decreased and the customer experience can be improved.


When navigating phone settings, it's important to keep in mind that the UIApplication.openSettingsURLString constant is available in iOS 8 and later, and you should always check if the app can open the phone settings URL before calling the open method. Additionally, it's a good practice to provide a message to the user explaining why the app needs to access the phone settings and to handle any errors or perform additional actions in your app using the open method's completion handler.

Updated on: 04-May-2023


Kickstart Your Career

Get certified by completing the course

Get Started