ios app store rejection - Your app uses the “prefs:root=” non-public URL scheme

旧时模样 提交于 2019-11-30 17:40:42

I faced the same rejection form Apple and to open app settings i was using the below code and it's not accepted on iOS11.

let url = URL(string : "prefs:root=")
if UIApplication.shared.canOpenURL(url!) {
    UIApplication.shared.openURL(url!)
 }

So, to open Settings, I used the below code and App was approved.

guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else {
    return
  }
  if UIApplication.shared.canOpenURL(settingsUrl)  {
    if #available(iOS 10.0, *) {
      UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
      })
    }
    else  {
      UIApplication.shared.openURL(settingsUrl)
    }
  }

I had the same problem and I resolved it as following:-

Step 1:- Search for the Prefs:root in your app then you will find something as follows:-

 if let url = URL(string: "App-Prefs:root=Privacy&path=LOCATION") {
 // If general location settings are disabled then open general location settings
    UIApplication.shared.openURL(url)
 }

Step 2:- Change the above code section with the following one:-

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

Now rebuild your app and resubmit to the App Store with no worries :)

I faced the same issue. "prefs:root=" url scheme is not accepted by iOS 11. Using the UIApplicationOpenSettingsURLString value fixed it.

Reference Image

Rupak Shakya

if you need to find with the 'prefs:root is:

Go to your project's target -> then Info -> then URL Types, there you should find URL Schemes with value like 'prefs' or 'prefs:root'

Noel Carcases

At the end the one with the issues was AmazonFling that was not listed on the pods because was installed using another method. See the forums post about it: https://forums.developer.amazon.com/questions/167282/apple-app-rejected-because-of-non-public-apis-refe.html

AmazonFling does not have update yet (as of Apr 27, 2018) so I removed it until they update it.


Fixed in AmazonFling 1.3.2, released on the same day. See https://developer.amazon.com/fr/docs/fling/release-notes.html

Lucky Mehndiratta

We also faced the same issue and resolved it by this:

if let url = URL(string:UIApplication.openSettingsURLString)

    {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }

To find out which library is using that permission, you can use this command in terminal

strings <file path> | grep 'prefs:root'

to search in dependencies compiled files, if you have no luck with search in Xcode.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!