热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于ipad:应用程序必须遵循iOS数据存储指南,否则将被拒绝

AppsmustfollowtheiOSDataStorageGuidelinesortheywillb


Apps must follow the iOS Data Storage Guidelines or they will be rejected


我开发了一个应用程序,可以从网上下载 mp3 文件(大小接近 6 到 8 mb)并存储在 NSDocumentDirectory 中。我的应用程序今天被拒绝并说










1
2
3
4
5
6
7
8
9
10
11
12


"Apps must follow the iOS Data Storage Guidelines or they will be rejected"

 We found that your app does not follow the iOS Data Storage Guidelines, which is

 required per the App Store Review Guidelines. The iOS Data Storage Guidelines

 indicate that only content that the user creates using your app, e.g., documents,

 new files, edits, etc., may be stored in the /Documents directory - and backed up

 by iCloud.

 Temporary files used by your app should only be stored in the /tmp directory;

 please remember to delete the files stored in this location when the user exits

 the app."



我曾经将音乐文件存储在 NSDocumentDirectory 中。

所以,这是我第一次这样做,我无法弄清楚实际问题。我应该怎么做才能重新提交我的应用程序以供接受。

这是我的代码










1
2
3
4
5
6
7
8
9
10
11


 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

 NSString *documentsDirectoryPath = [[paths objectAtIndex:0]stringByAppendingPathComponent:[NSString stringWithFormat:@"psalmsMusic%d.mp3",i]];

NSLog(@"ddddddd psalmsMusic%d.mp3",i);

i++;

 NSLog(@"path %@",documentsDirectoryPath);

 [receivedData writeToFile:documentsDirectoryPath atomically:YES];



真的需要一些帮助。


我的应用程序出于同样的原因被拒绝,解决方案非常简单,而不是将下载的文件保存到 Documents 目录,您必须将它们保存到缓存目录,该目录是一个临时目录,不会备份到iCloud 并且可以在某些情况下被操作系统随机删除...这是您将文件保存到缓存目录

的方式










1
2
3
4


NSString *filePath = [[self applicationCachesDirectory] stringByAppendingPathComponent:fileName];

BOOL flag = [[NSFileManager defaultManager] createFileAtPath:filePath contents: receivedData attributes:nil];



编辑










1
2
3
4
5
6


NSString *filePath = [[self applicationCachesDirectory]  stringByAppendingPathComponent:[NSString stringWithFormat:@"psalmsMusic%d.mp3",i]];

NSLog(@"ddddddd psalmsMusic%d.mp3",i);

i++;

BOOL flag = [[NSFileManager defaultManager] createFileAtPath:filePath contents: receivedData attributes:nil];

if ( flag )

  NSLog("success");





相关讨论





  • 好的,请您将我的代码与您的代码进行比较。我仍然对如何在 NSCachesDirectory 中保存 mp3 文件有一些疑问


  • @neerajPK 检查编辑,,您所要做的就是将文件名附加到 cachesDirectiory 路径...并在方法 createFileAtPath:contents: 第一个参数是您要写入的路径,第二个参数是您要在该路径上写入的 NSData


  • 好的,一个疑问,我将如何与我的设备同步应用程序缓存数据。我的意思是我将如何获取下载的数据?通过iTunes?


  • 嗯,这有点背后的意义。您的数据不会通过 iTunes 或 iCloud 同步!


  • 那么,我将如何播放下载的 mp3 文件?


  • 与您在文档目录中播放它们时使用的方式相同,您只需将源路径更改为与您下载文件的路径相同!


  • 解决中心说。"可以重新创建但必须保留以使您的应用程序正常运行的数据 - 或者因为客户希望它可以离线使用 - 应该用"不备份"属性标记。对于NSURL 对象,添加 NSURLIsExcludedFromBackupKey 属性,防止对应的文件被备份。对于 CFURLRef 对象,使用对应的 kCFURLIsExcludedFromBackupKey 属性。" 所以我想如果我下载后需要使用 mp3,我应该说不要备份?


  • 但是当使用缓存时,建议在应用程序退出时删除所有文件?所以如果我在退出应用程序之前删除所有文件,我将如何获得 mp3?


  • 不,应用程序关闭时缓存文件不会被删除!只有当手机存储达到最低限制时才会删除它......只要设备有足够的存储空间,文件就会保留在那里!


  • 你有 2 个选项,要么将它们保存到缓存目录,要么将它们标记为不备份(但我不认为此选项适用于 ios 5),我选择将下载的文件存储在缓存目录中,我的应用程序工作正常而且我没有收到用户的任何抱怨!


  • 好的,会选择第一个选项。我想我可以像 NSDocumentDictionary 一样从 iTunes 访问下载的歌曲>


  • 确保它可以在 ios 4 和 ios 5 上运行,如果它是你要找的,请不要忘记接受这个问题


  • @ahmad,NSCache 的工作方式与 NSDocumentDirectory 相同吗?


  • NSCache 对象是一个类似于集合的容器或缓存,用于存储键值对,类似于 NSDictionary 类。你的意思是 NSCahcesDirectory,据我所知,它们的工作方式相同(编码方面),但它们在 iOS 处理它们的方式上有所不同






Apple 希望减少您的备份占用空间。

首先,停止使用 Documents。不合适。

如果您能够相当容易地再次下载文件,则应将它们存储在不会备份的地方。我建议缓存。如果它们被清除,您应该重新下载它们。

如果难以再次下载它们,您应该将它们存储在库文件夹中的其他位置。

您可以使用以下命令找到 Caches 目录:










1
2


NSArray *paths = NSSearchPathForDirectoriesInDomains(

                        NSCachesDirectory, NSUserDomainMask, YES);


基本上,这就是你现在所拥有的,但是你使用 NSCachesDirectory 来代替 NSDocumentDirectory。

如果你控制文件名,这很好。如果你不这样做,你可能应该创建一个子目录并从那里工作,这样你就不会与任何东西发生冲突。



相关讨论




  • 我将如何使用 NSCachesDirectory 来存储文件,


  • 对不起,我还有一些疑问


  • 好的,我可以替换这段代码 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);和你的..?


  • 是的。这并不能保证您不会遇到 Apple 的其他问题,但它应该可以解决这个问题。


  • 好的,非常感谢。还有一个疑问,我从哪里可以从我的 ipad 获取这些下载的数据,我的意思是位置。






一旦 iCloud 在 Apple 中实现,文档目录数据就与 iCloud Storage 有某种关联。因此,Apple 现在拒绝在文档目录中使用大量数据存储的应用程序。

您需要将数据存储在其他位置。将 MP3 文件存储在其他位置。

此链接可能对您有所帮助。

http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_(iPhone)

希望它能解决你的问题。

另一个在后面…………

iOS 数据存储指南指出,只有用户使用您的应用创建的内容,例如文档、新文件、编辑等,才能存储在 /Documents 目录中 - 并由 iCloud 备份。

您的应用程序使用的临时文件应该只存储在 /tmp 目录中;请记住在用户退出应用程序时删除存储在此位置的文件。

可以重新创建但必须保留以使您的应用程序正常运行的数据 - 或者因为客户希望它可以离线使用 - 应该使用"不备份"属性进行标记。对于 NSURL 对象,添加 NSURLIsExcludedFromBackupKey 属性以防止相应文件被备份。对于 CFURLRef 对象,使用相应的 kCFURLIsExcludedFromBackupKey 属性。

有关详细信息,请参阅 http://developer.appcelerator.com/question/134926/ipad-app-rejected-ios-data-storage-guidelines。


根据 iOS 存储指南(可在 http://developer.apple.com/icloud/documentation/data-storage/ 找到),您应该将所有用户生成的内容放在 Documents 目录中,并且所有重新Caches 目录中的可下载内容。所以你应该没问题把 sqLite 数据库放在那里。

背景是从 iOS 5 开始,Documents 目录被备份到 iCloud。由于许多应用程序倾向于将其完整数据存储在那里,iCloud 备份变得相当大,这会占用可用空间并产生网络流量,这反过来又会激怒用户,因为他/她想知道为什么。为了缓解这种情况,Apple 现在似乎更仔细地查看了保存在 Documents 目录中的内容,以及这是否可能是可再生的内容(例如可下载的文件)。

请注意,当设备上的可用空间不足时,操作系统可以并且将在 iOS 5 上清除 Caches 目录。因此,您的应用程序不能再假设所有内容都像以前一样存在,而是每次访问缓存中的内容时都必须重新检查。

希望这会有所帮助...!



相关讨论





  • 那么,我可以将我的 mp3 数据保存到缓存中,然后可以访问吗?


  • 是的,这就是你需要做的。


  • 我想我可以像 NSDocumentDictionary 一样从 iTunes 访问下载的歌曲






指南说只有不能从 Internet 重新创建(下载)的重要文件才应该进入文档目录,因为这是 t


您不能存储在 NSDocumentDirectory 中,因为此目录现在用于与 iCloud 同步。但是您可以使用 NSCachesDirectory 或使用临时目录作为存储音乐文件的苹果评论状态。



相关讨论





  • 你能帮我一些代码存储在 NSCachesDirectory 中吗?






我的应用也因为同样的原因被拒绝 - (2.3)

试试这个 -

NSString *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

当您的设备将与云同步时,这样做的好处是,那时应用程序数据不会同步,因为它在 NSCachesDirectory 而不是 NSDocumentDirectory。

而缺点是,无论何时您将使用您的设备并且您的设备中的内存较少。那么 CPU 可能会清除缓存以获取可用空间。因此,如果您有任何数据供离线使用,您可能会丢失。

2) 如果你不能使用 NSCachesDirectory (可能是因为你的数据太重要了) 那么你可以用这种方式 -

使用此方法并提供您的数据库路径 - 'addskipbackupattributetoitematurl'

通过此链接 - 如何使用 addSkipBackupAttributeToItemAtURL API?






推荐阅读
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • Mr.J 的 jQuery 学习笔记:第三十一讲——深入解析事件操作(on/off)方法
    `on()` 方法用于在选定元素及其子元素上绑定一个或多个事件处理程序。从 jQuery 1.7 版本开始,`on()` 方法取代了 `bind()`、`delegate()` 和 `live()` 方法,成为统一的事件绑定方式。该方法不仅支持直接绑定事件,还支持事件委托,使得事件处理更加灵活和高效。通过 `off()` 方法,可以移除之前使用 `on()` 绑定的事件处理程序,从而实现对事件的动态管理。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有