`

苹果iOS 5限制应用本地存储问题

 
阅读更多

苹果 iOS 5 系统增加了一个新的机制——在设备容量空间不足的情况下自动清除高速缓存文件或临时目录的内容。这意味着,如果你设备的容量快到极限了,应用存储的很多离线内容,包括文章、杂志、图书、漫画以及其他数据都将被清空!如果用户需要,将不得不重新下载这些内容。

  关于苹果 iOS 5 的这次“变革”,困扰了不少开发者。新规则实施之后,用户想使用离线数据将会有很多困难,而且也有开发者反应他们的应用通不过苹果应用审核团队的审核。关于这次更新的讨论非常“火热”,当然也是相当杂乱,因为其中参杂了好几个问题,简单的归纳就是:

  1. 缓存和临时文件夹的语义问题
  2. 苹果相关文件的变化
  3. 应用审核被拒
  4. iTunes 和 iCloud 到底备份了哪些内容
  5. iOS 5 行为变化

苹果iOS 5限制应用本地存储问题

  下面我们来分开讨论以上5个问题:

  1.缓存和临时文件夹的语义问题

  虽然苹果应用使用的临时文件夹同跟目录下的 /tmp 并非同一个文件夹,但是开发者不应该认为它们有什么显著的差别,他们都是临时文件夹,所以性质相同。如果你有过 OS X 、Unix 或 Linux 背景,你应该能理解,苹果其实没有义务向用户保证缓存和临时文件到底能保存多久。

  即使你以前从来没有听说过临时文件夹和缓存文件夹里面的东西会被系统删除这种情况,也不代表这个情况将来会有所改善,特别是苹果已经在文件中申明这些。

  2.苹果相关文件的变化

  最晚到2011年6月29日的时候,iOS发布之前,苹果的文件(web.archive.org存档,被墙)中涉及到<Application_Home>/Documents 的部分是这样描述的:

Use this directory to store user documents and application data files.

使用这个文件夹来存储用户文件和应用数据文件。

  这个说明相当容易理解,这也很清楚的说明了为什么开发者对 iOS 5 中文件目录规则的改变不满。

  关于<Application_Home>/Library/Caches 是这样说明的:

Use this directory to write any application-specific support files that you want to persist between launches of the application or during application updates. Your application is generally responsible for adding and removing these files. It should also be able to re-create these files as needed because iTunes removes them during a full restoration of the device.

使用这个文件夹来写应用在运行期间和更新期间需要用到的任何文件。你的应用必须负责好添加和删除这些文件。而且这些文件应该是可以被重建的,因为 iTunes 会在还原设备备份的时候删除这些文件。

  这段说明中的措词,不可否认是比较模糊的。读这段说明的时候我的第一印象就是苹果在 iOS 5 中实施了一些与本条款相矛盾的根本性改变。但换个角度来说,通过”generally” 和 “able to re-create” 这些字眼,可以明显看出苹果基本上就是在警告开发者系统将怎么对待这些文件了。

  iCloud 数据存储准则(需登录查看) 这样说明:

  To ensure that backups are as efficient as possible, be sure to store your app’s data according to the following guidelines:

1. Only documents and other data that is user-generated, or that cannot otherwise be recreated by your application, should be stored in the <Application_Home>/Documents directory and will be automatically backed up by iCloud.

  2. Data that can be downloaded again or regenerated should be stored in the <Application_Home>/Library/Caches directory. Examples of files you should put in the Caches directory include database cache files and downloadable content, such as that used by magazine, newspaper, and map applications.

  3. Data that is used only temporarily should be stored in the <Application_Home>/tmp directory. Although these files are not backed up to iCloud, remember to delete those files when you are done with them so that they do not continue to consume space on the user’s device.

译者:为了保证数据备份的可能性和有效性,请确保你的应用数据符合以下规则:

1.只有用户生成的文件、其他数据及其他程序不能重新创建的文件,应该保存在<Application_Home>/Documents 目录下面,并将通过iCloud自动备份。

  2.可以重新下载或者重新生成的数据应该保存在 <Application_Home>/Library/Caches 目录下面。举个例子,比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。

  3.只是临时使用的数据应该保存到 <Application_Home>/tmp 文件夹。尽管 iCloud 不会备份这些文件,但在应用在使用完这些数据之后要注意随时删除,避免占用用户设备的空间。

  如果我们暂时暂时忘记很多新闻、杂志、地图应用的唯一目的就是显示离线内容这个事实的话,以上条款还是相当清楚和有意义的。

  3.应用审核被拒

  最近不断有开发者反应在 Documents 文件夹存储 “任何/一些/很多”(any/some/much) 数据的应用被苹果的应用审核团队拒绝。但有些开发者已经成功地向应用审核团队解释他们的应用存储文件的原理,并表明他们的应用是完全遵守开发规则的。

  现在看来,苹果应用审核团队也并没有十足的把握判断到底哪些文件夹中存储的哪些数据是用户生成的,而哪些数据又是可以重新下载和重新生成的。

  4.iTunes 和 iCloud 到底备份了哪些内容

  应用文件夹所有内容都会备份,除了:

  • 应用程序本身bundle(.app)
  • <Application_Home>/tmp
  • <Application_Home>/Library/Caches directory

  这在iCloud 数据存储准则中有很清楚的说明。

  其他的文件也清楚的申明了,应用程序支持文件夹也会被iTunes备份。在讨论中一些开发者建议应用支持文件夹应该比缓存文件夹更安全点(更持久点)。在我看来,自从iCloud 存储推出以来,苹果应用审核团队将会重点打击那些需要存储大量应用支持文件在Documents 文件夹中的应用。

  5.iOS 5 的行为变化

  在 iOS 5 设备中,当用户收到存储空间不足的警告时,如果此时应用没有运行,那么该应用的 <Application_Home>/Library/Caches文件夹中的数据将被清空。

  这意味着在 iOS 5 中应用将没有任何文件夹可以存储以下文件:

  • 没有备份到iTunes/iCloud的文件
  • 删除不会带来危险的文件

  显然,现在要让 iOS 5.0 给开发者有一个文件夹存放文件已经不可能了,但是假如有足够的开发者向苹果表明他们确实需要这样一个文件夹来存储一些数据,我想在将来的版本当中,也许会出现改善。

  给开发者的建议:赶紧给苹果提交漏洞报告

分享到:
评论

相关推荐

    IOS应用源码——应用程序密码锁.zip

    从这些信息中,我们可以推测这个源码项目可能使用Swift或Objective-C语言编写,遵循iOS应用开发的最佳实践,如MVC(模型-视图-控制器)架构。KKPasscodeLock可能是项目的核心组件,用于处理密码输入、验证和存储。...

    ios应用源码之提示用户区app store评分的弹出框 2018128

    总的来说,这份源码提供了实现App Store评分提示的一个实例,涉及到了用户界面设计、用户行为跟踪、本地存储和Apple的官方API。通过研究这些代码,开发者可以学习如何在尊重用户体验的同时,有效地鼓励用户对应用...

    解决ios下后台运行与锁屏时倒计时停止问题

    在iOS平台上,应用程序在进入后台或用户锁定屏幕后,为了节省电量和资源,系统会限制JavaScript的执行。这对于依赖持续运行的JavaScript代码,如倒计时功能,可能会造成困扰。标题"解决ios下后台运行与锁屏时倒计时...

    IOS系统客户端源程序.zip_ios开发_ios源程序_苹果系统客户端源程序

    在iOS开发领域,构建一款苹果手机上的客户端应用是一项复杂而精细的工作。这个“IOS系统客户端源程序.zip”压缩包提供了一套完整的iOS开发示例,适用于开发者学习和参考。在这个项目中,我们可以深入理解iOS应用的...

    解决ios的app内H5页面倒计时在锁屏后停止或延迟的解决方案

    2. **本地存储和唤醒事件**:利用`localStorage`保存当前倒计时的值,当App重新激活(如解锁屏幕)时,通过监听`visibilitychange`事件恢复倒计时。这种方法需要在用户解锁后立即更新页面,以减少视觉上的延迟感。 ...

    毕业设计-苹果手机ios员工管理系统

    【苹果手机iOS员工管理系统】是一个基于苹果iOS平台的软件应用,专为管理企业内部员工信息而设计。这个系统集成了多种功能,旨在提高人力资源部门的工作效率,方便对员工的入职、在职、离职等状态进行跟踪管理。以下...

    IOS开发工程师面试常见问题

    沙盒机制是一种安全措施,用于限制应用之间的交互。每个应用都在自己的沙盒环境中运行,无法直接访问其他应用的数据,从而保护用户隐私和系统安全。 #### 十九、VoiceOver是什么? VoiceOver是一款屏幕阅读器,...

    IOS应用源码之IOS仿微信后台源代码.zip

    在iOS端,开发者通常会使用苹果的PushKit服务来处理推送消息,利用MultipeerConnectivity框架进行设备间的数据传输,以及运用CoreData或SQLite进行本地数据存储。此外,可能会使用到GCD(Grand Central Dispatch)进行...

    iOS应用安全攻防视频.txt

    4. **数据存储安全**:对于本地存储的数据,应使用iOS提供的Keychain服务或其他加密方式对敏感数据进行保护。 5. **错误处理与日志记录**:合理地处理异常情况,避免泄露过多的应用程序内部信息;同时,安全地记录...

    iPad应用开发指南

    - **Core Data框架**:Core Data是iOS中用于模型层对象的持久化框架,可以将应用数据存储到本地文件或数据库中。 - **SQLite数据库**:SQLite是一种轻量级的嵌入式数据库引擎,非常适合在iOS应用中使用。 - **云服务...

    ios 天气应用 仅限于学习交流

    它表明该应用可能存在一些功能上的限制或者未完善的部分,因此不适合商业用途,但非常适合初学者或有经验的开发者研究其代码结构和实现方式,提升自己的iOS开发技能。 【描述】:“源码可以更改,里面有许多不足,...

    IOS设配唯一标示

    传统的iOS设备唯一标识符,如UDID(Unique Device Identifier)和广告标识符(Advertising Identifier, IDFA),由于隐私问题,苹果已经限制了它们的使用。因此,开发者们需要寻找新的解决方案,如OpenUUID和钥匙串...

    iOS游戏应用源代码——htroche-CrowdTrivia-170fdd5.zip

    这个压缩包文件“htroche-CrowdTrivia-170fdd5.zip”看起来包含了一个名为“CrowdTrivia”的iOS游戏应用的源代码。在这个项目中,我们可以探索到iOS应用开发的一些关键知识点,主要集中在Swift编程语言、UIKit框架...

    【iOS.5.Essentials】[PDF+源代码] [iPhone/iPad/iOS]

    《iOS 5 Essentials》是一本专注于苹果移动操作系统iOS 5的详细指南,旨在帮助开发者和爱好者深入理解如何在iPhone、iPad以及iPod touch等设备上构建高性能的应用程序。这本书不仅包含了理论知识,还附带了源代码,...

    iOS5中文版第十七章iClound

    - **定义**:iCloud是苹果公司推出的一项云服务,它可以让用户存储数据(如照片、音乐、应用程序、设备备份等)并进行同步,使得这些数据可以在多个设备之间无缝共享。 - **发展历程**:随着iOS5的发布,iCloud成为...

    XCode的iOS11.0开发包

    10. **安全性强化**:iOS 11加强了用户隐私和数据安全,例如限制了应用对本地照片和联系人的访问,开发者需要遵守这些新规定。 使用XCode的iOS 11.0开发包,开发者可以充分利用这些特性,为用户提供更丰富的功能和...

    ios文件管理器ifile

    越狱是通过修改iOS系统,移除苹果的限制,使用户能够安装未经苹果官方认证的应用。越狱后,用户可以通过Cydia这样的第三方应用商店来安装iFile。 **3. 安全与风险** 虽然iFile提供了许多便利,但使用越狱应用也...

    IOS应用源码之打地鼠游戏.zip

    7. **状态管理与数据持久化**: 游戏可能需要保存玩家的得分、等级等信息,这需要用到NSUserDefaults或Core Data来实现数据的本地存储。 8. **测试与调试**: 开发过程中,开发者通常会使用Xcode的模拟器和真机进行...

    iOS 上的 File Browser.zip

    首先,iOS操作系统以其严格的沙盒机制闻名,每个应用都有自己的存储空间,不能随意访问其他应用的数据。因此,创建一个文件浏览器应用在iOS上需要特殊权限和技巧。File Browser项目很可能使用了`NSFileManager`类来...

Global site tag (gtag.js) - Google Analytics