ios 应用商店拒绝 - 您的应用使用“prefs:root=”非公共 URL 方案

Posted

技术标签:

【中文标题】ios 应用商店拒绝 - 您的应用使用“prefs:root=”非公共 URL 方案【英文标题】:ios app store rejection - Your app uses the "prefs:root=" non-public URL scheme 【发布时间】: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 也是如此。他们可能会使用这个 【参考方案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)
    
  

【讨论】:

由于prefs:root= 问题,我也被拒绝了。 ***.com/a/51093121/419348【参考方案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 中搜索不成功,则在依赖项编译文件中搜索。

【讨论】:

以上是关于ios 应用商店拒绝 - 您的应用使用“prefs:root=”非公共 URL 方案的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用商店 NSBluetoothAlwaysUsageDescription - 拒绝

iOS应用程序因苹果应用商店而被拒绝,因为UIWebview

iOS 构建问题 App Store prefs:root=

应用商店拒绝适用于 iPad 上 iOS 10.1.1 的 iPhone 应用

应用商店拒绝:性能:应用完整性

Xamarin 表单:iOS 应用程序被应用商店审核团队拒绝,并出现缺少 Info.plist 键的问题