【问题标题】:iOS App Rejection due to 2.23 - iOS Data Storage GuidelinesiOS App Rejection due to 2.23 - iOS 数据存储指南
【发布时间】:2015-05-01 23:44:40
【问题描述】:

这是来自 Apple 关于拒绝的消息:

2.23 - 应用程序必须遵循 iOS 数据存储指南,否则将被拒绝 2.23 详情

在启动和下载内容时,您的应用会存储 6.5 MB,这不会 遵守 iOS 数据存储指南。

接下来的步骤

请确认只有用户使用您创建的内容 应用程序,例如文档、新文件、编辑等,由 iCloud 备份为 iOS 数据存储指南要求。此外,检查任何 您的应用程序使用的临时文件仅存储在 /tmp 目录;请记住删除或删除存储在 当确定不再需要它们时,此位置。

可以重新创建但必须保留才能正常运行的数据 您的应用 - 或者因为用户希望它可以离线使用 - 应标有“不备份”属性。对于 NSURL 对象,添加 NSURLIsExcludedFromBackupKey 属性以防止 相应的文件被备份。对于 CFURLRef 对象,使用 对应的 kCRUFLIsExcludedFromBackupKey 属性。

我检查了我的应用程序的设备和模拟器数据文件。我发现如果应用程序使用了一段时间,它的总应用程序数据在启动时可以存储 5-6 MB。但是我卸载并重新安装了应用程序并再次检查,我在应用程序启动时看到 ~3MB 数据存储。

我没有存储任何 Core Data 数据库或任何其他数据库文件。但我已经意识到 Google Analytics 和 Google Tag Manager 在这条路径上存储了一些 sqlite 数据:“AppData/Library”。我的意思是它不存储在此路径上:“AppData/Library/Caches”。 iOS 数据存储指南有什么不同吗?

顺便说一下,iCloud 应用程序已禁用。

我还使用 SDWebImage 下载图像,它在启动时存储了近 3 MB 的图像,并将图像数据存储在此路径上:“AppData/Library/Caches”

您知道我应该如何处理这个问题吗?

【问题讨论】:

  • 我最近收到了来自 Apple 的相同信息。您是否将任何数据存储在 /Documents/ 或其他位置?
  • @orkenstein 是的,Adjust 和 ad-x(第三方营销库)在 /Documents 目录中存储了一些文件。它的意义何在?
  • 根据 Apple 规则 /Documents 应该只包含用户创建的数据。否则,必须设置 NSURLIsExcludedFromBackupKey(以防止同步到 iCloud)。因此,我的建议是,您必须为 /Documents 中的每个文件手动设置 NSURLIsExcludedFromBackupKey。
  • 默认情况下 iCloud 备份 - 是。检查这个:stackoverflow.com/questions/8752513/…
  • 我认为这是您的应用程序大小 + /Documents、/Library/Cache 中的所有文件。等

标签: ios objective-c app-store appstore-approval


【解决方案1】:

我昨天刚收到同样的拒绝消息。

我在application:didFinishLaunchingWithOptions: 中使用以下代码来查看我的应用程序在文档文件夹中的内容以及关于iCloud 备份的每个项目的权限是什么:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSArray *documents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:basePath error:nil];
NSURL *URL;
NSString *completeFilePath;
for (NSString *file in documents) {
    completeFilePath = [NSString stringWithFormat:@"%@/%@", basePath, file];
    URL = [NSURL fileURLWithPath:completeFilePath];
    NSLog(@"File %@  is excluded from backup %@", file, [URL resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsExcludedFromBackupKey] error:nil]);
}

我在该文件夹中有一些与 iCloud 同步的文件。因此,我没有将这些文件保存在另一个地方,而是将 NSURLIsExcludedFromBackupKey 键的资源值设置为 YES 以排除这些文件被 iCloud 备份,如下所示:

NSURL *URL = [NSURL fileURLWithPath:photoPath];
[URL setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];

我今天再次发送我的应用程序,看看是否有效。

希望对您有所帮助。

【讨论】:

  • 只是为了更新你们,我的应用在这次修改后被接受了。 :)
  • 我很好奇审核团队是如何发现大小的,因此我按照他们提到的步骤进行操作,我看到的数字是几 KB,而不是 100 MB。我还从@Glauco Neves 的 sn-p 检查了 application:didFinishLaunchingWithOptions 并且没有。我们用 iCloud 的截图回复审核组,他们在审核 iOS 数据存储时仍然指出应用程序存储了 134.34 MB。..
  • 我遇到了同样的问题。他们告诉我我正在使用 6Mb。正如他们所说:“在启动和内容下载时,您的应用程序在用户的 iCloud 上存储了 6.32MB,这不符合 iOS 数据存储指南。”但是我没有在我的应用程序中启用 iCloud...@Bastet 你能解决这个问题吗?我无法使用 Glauco Neves 代码。
  • @Miguel,经过另一次代码审查,我们发现有一个我们错过了设置此选项的文件夹。我们现已通过审核。
  • @Miguel 你解决了吗?我不知道是什么导致了这个问题。是一些第三方库吗?
【解决方案2】:

最近,我们因同样的问题被 Apple 审核小组拒绝,

在启动和内容下载时,您的应用会在用户的 iCloud 上存储 9.65MB,这不符合 iOS 数据存储指南。

他们建议遵循上述问题中提到的相同后续步骤

在我们的例子中,我们已经在下载内容时在代码中设置了这个NSURLIsExcludedFromBackupKey。我们通知审核团队我们已经这样做了,因此他们将我们重定向到 Apple 开发者技术支持 (DTS) 以更好地解决问题。

DTS 回复说是我们的 AppIcon 文件导致了问题。

AppIcon 正在 iCloud 中备份,因为 Apple 要求在下载应用程序时在设备上显示图标。事实证明,我们的应用程序的 AppIcons 文件太大而导致拒绝,因为它正在将大量数据备份到 iCloud。 App Review 团队没有向我们明确传达这一点,因为他们中的一些人不知道跟踪 AppIcons 的新工具更改。

现在我们知道了原因,我们使用 ImageOptim 优化了我们的图标并将大小最小化到 75KB。

我们提交了我们的应用程序,希望它会在 1 到 2 天内获得批准。 :)

我希望这对遇到同样问题的人有所帮助。 :)

【讨论】:

  • 我想我也有同样的问题。谢谢分享!
  • 很高兴为您提供帮助。希望这个解决方案对你有用。 :) @M.Y.
  • 感谢您发布此信息。我怀疑我遇到了同样的问题。他们说我的应用程序使用了 6.7 MB 的 iCloud 存储空间,但它在 iCloud 设置中只显示了大约 6 KB。但是我的应用程序图标占用了大约 10 MB。
  • 好的,如果 Apple Review 团队在优化应用图标后批准您的应用,请告诉我。 :) @Sigma4Life
  • @KarenAnne 我的应用在优化图标后获得批准。
【解决方案3】:

最近遇到了同样的问题,刚刚翻译了 Glauco 对 Swift 的回答(尽管它可能写得更迅速)

let directories = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
    if let documentDirectory = directories.first {
        do {
            let documents = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentDirectory)
            for files in documents {
                let urlForm = NSURL.fileURLWithPath(documentDirectory + "/" + files)
                do {
                    try print("\(files): \(urlForm.resourceValuesForKeys([NSURLIsExcludedFromBackupKey]))")
                } catch {
                    print("can't find key")
                }
            }
        } catch {
            print("can't retrieve contents")
        }
    }

设置资源值的代码

let urlToExclude = NSURL.fileURLWithPath(quoteSavePath!)
    do {
        try urlToExclude.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey)
    } catch { print("failed to set resource value") }

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2012-09-12
    相关资源
    最近更新 更多