【问题标题】:ios app store rejection - Your app uses the "prefs:root=" non-public URL schemeios 应用商店拒绝 - 您的应用使用“prefs:root=”非公共 URL 方案
【发布时间】:2018-04-26 10:23:22
【问题描述】:

我最近将我的应用程序的新版本上传到了 iTunes Connect。我的应用被这个注释拒绝了

您的应用使用“prefs:root=" 非公共 URL 方案

我几乎可以肯定我没有在我的应用程序上使用任何 Url 方案我尝试通过终端在我的整个项目中使用grep -R 查找首选项:root(不区分大小写,也能够匹配 App-Prefs 或其他.

我也使用了很多 cocoapods 库,所以......我的问题是...... 有没有办法找出哪个库正在使用该权限?

xcode 上的搜索结果截图

我的项目中使用的框架:

  • AmazonFling
  • 来自 CocoaPods 的许多其他人(因为不相关而未列出:请参阅我的回答)

【问题讨论】:

  • 我也遇到过这个问题你想检查是否有任何“App-Prefs:root=" url 是通过 app 打开的?如果是,那么这是主要原因,因为这些不是公共 URL 方案
  • 用于通过 Xcode Search 面板搜索整个项目搜索
  • 我需要检查我在我的应用程序上使用它的位置,因为我找不到它,而苹果确实可以
  • UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!) 只有这个 API 被允许,其他的都不允许。
  • 检查整个代码,即使 cocoapods 也是如此。他们可能会使用这个

标签: ios xcode cocoapods app-store-connect


【解决方案1】:

我遇到了来自 Apple 的相同拒绝,打开应用设置时我使用了以下代码,但它在 iOS11 上不被接受。

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

所以,为了打开设置,我更新了代码并且它工作了。

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)
    }
  }

【讨论】:

【解决方案2】:

我遇到了同样的问题,我解决了如下:-

第 1 步:- 在您的应用中搜索 Prefs:root,您会发现如下内容:-

 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)
 }

第 2 步:- 将上面的代码部分更改为以下代码:-

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

现在重新构建您的应用并重新提交到 App Store,不用担心 :)

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。 iOS 11 不接受 "prefs:root=" url 方案。使用 UIApplicationOpenSettingsURLString 值修复它。

    Reference Image

    【讨论】:

    • 及时了解指南是避免此类问题的最佳方式。
    【解决方案4】:

    如果你需要用'prefs:root 查找是:

    转到您项目的目标 -> 然后是 Info -> 然后是 URL Types,在那里您应该会找到具有“prefs”或“prefs:root”等值的 URL 方案

    【讨论】:

    • App Store 将拒绝使用 pres:root 指南 2.5.1 - 性能 - 软件要求的应用程序您的应用程序使用“prefs:root=”非公共 URL 方案,这是一个私有实体。 App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致用户体验不佳。 在未来提交此应用程序时继续使用或隐藏非公共 API 可能会导致终止您的 Apple Developer 帐户,以及从 App Store 中删除所有相关应用。
    【解决方案5】:

    最后,有问题的是 AmazonFling,它没有在 pod 上列出,因为它是使用另一种方法安装的。请参阅有关它的论坛帖子:https://forums.developer.amazon.com/questions/167282/apple-app-rejected-because-of-non-public-apis-refe.html

    AmazonFling 还没有更新(截至 2018 年 4 月 27 日),所以我将其删除,直到他们更新为止。


    在同一天发布的 AmazonFling 1.3.2 中修复。见https://developer.amazon.com/fr/docs/fling/release-notes.html

    【讨论】:

    • 根据其他AmazonFling API用户的说法,Apple的错误信息实际上是“”您的应用使用或引用了以下非公共API:com.apple.springboard.lockcomplete”我>”。这个可以通过grep -R 'com.apple.springboard.lockcomplete'找到
    • Apple 稍后会告诉我有关跳板的信息。但感谢您的评论!
    【解决方案6】:

    我们也遇到了同样的问题并通过以下方式解决:

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

    【讨论】:

      【解决方案7】:

      要找出哪个库正在使用该权限,您可以在终端中使用此命令

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

      如果在 Xcode 中搜索不成功,则在依赖项编译文件中搜索。

      【讨论】:

        猜你喜欢
        • 2019-04-05
        • 2019-02-17
        • 1970-01-01
        • 2019-05-15
        • 2017-01-17
        • 2019-05-14
        • 2013-05-03
        • 2014-03-28
        • 1970-01-01
        相关资源
        最近更新 更多