Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open phone settings when button is clicked in my app

I recently upgraded to Xcode 8 and converted my code to Swift 3. I am making a custom keyboard (extension) which worked perfectly fine till iOS 9, but i am facing a couple of issues in iOS 10.

  1. The container app of the custom keyboard contains a button which directs the user to the keyboard settings to add the keyboard

Issue: This button click is not working in iOS 10 i.e the user is not directed to the settings. I have configured the URL Schemes in my project and have tried the following code :

@IBAction func btnGetStarted(_ sender: AnyObject) {

    let settingsUrl = URL(string: UIApplicationOpenSettingsURLString)
    if let url = settingsUrl {
        UIApplication.shared.openURL(url)
    }
}

Also tried :

@IBAction func btnGetStarted(_ sender: AnyObject) {

if let settingsURL = URL(string:"prefs:root=General&path=Keyboard/KEYBOARDS") {
 UIApplication.shared.openURL(settingsURL)
 }
}
  1. The custom keyboard also contains emoji images. The user requires to enable "Allow Access" in the settings to use the emoji images. If the user does not enable "Allow access" then he cannot use the emoji images. If the "Allow access" is not enable and the user tries to click the emoji a toast pops up which tells the user to go to settings and enable "Allow access".

Issue: This toast does not pop up when the app is run in iOS 10

Code of the toast:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){

    let pbWrapped: UIPasteboard? = UIPasteboard.general

    if let pb = pbWrapped {
        if  currentKeyboard == XXXXXX.emoji {
            if let data = UIImagePNGRepresentation(dataEmoji[(indexPath as NSIndexPath).row]) {
                pb.setData(data, forPasteboardType: "public.png")

                  self.makeToast(pasteMessage, duration: 3.0, position: .center)
            }
        }

    } else {
        var style = ToastStyle()
        style.messageColor = UIColor.red
        style.messageAlignment = .center
        //style.backgroundColor = UIColor.whiteColor()

        self.makeToast("To really enjoy the keyboard, please Allow Full Access in the settings application.", duration: 8.0, position: .center, title: nil, image: UIImage(named: "toast.png"), style: style, completion: nil)
    }
}

I did check out few solutions on stackoverflow but none of them worked for me, as I said before my app works perfectly fine on all versions except iOS 10. Please can someone help me out?

like image 389
Khadija Daruwala Avatar asked Dec 25 '22 01:12

Khadija Daruwala


2 Answers

Swift 3 iOS 10

let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)
like image 79
Włodzimierz Woźniak Avatar answered Dec 28 '22 16:12

Włodzimierz Woźniak


@persianBlue: This is working on Xcode8 + iOS10.

UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
like image 44
RJ168 Avatar answered Dec 28 '22 16:12

RJ168