2011年10月30日星期日

开发者应对iOS 5限制本地存储的非官方指南

  众所周知,由于 iOS 5 新增的机制,在设备容量空间不足的情况下系统会自动清除高速缓存文件或临时目录的内容,迫使开发者将应用存储的数据最小化。

  在 iOS 5 系统中,那些涉及到离线工作、需要用到本地存储的应用都会有相同的问题。很多的果迷热衷于使用这一类应用,尤其是在那些没有 Wi-Fi 网络的地方(地铁、飞机)。如果某一天你安装了一些很大的应用或者同步了大量的图书、音乐,这时候系统的自动清除机制被激活,随之而来的问题就是,你在地铁里、飞机上想要打发时间的时候突然发现找不到之前下载好的一些离线数据了。(如果对此还不清楚,可以看看这篇文章。)

  苹果设计这个机制的初衷是为了保护好的用户体验,但是现在看来,苹果设计师还没有考虑得万分周全(或者是用户和开发者暂时还不能接受这种“激进”做法)。

  作为开发者,现在要让苹果提供另外一个可以存储离线下载数据的文件夹已经不可能了,但是假如有足够的开发者向苹果表明他们确实需要这样一个文件夹来存储一些数据,我想在将来的版本当中,这种欠妥当情况也许会出现改善。

开发者应对iOS 5限制本地存储的非官方指南

  开发者应该怎么做?

  如果 APP 目前是把文件存储在 Documents 文件夹

  现在它在 iOS 5 中运行是不会有任何问题出现的,只是用户可能会抱怨 iCloud 备份了太多数据,浪费时间和存储空间。

  但是当你的应用下次更新时,很可能会被苹果应用审核团队以在 Documents 文件夹存储太多数据为由拒绝,这绝对会是让你头疼的事情。

  如果 APP 目前已经(或打算)把文件存储在 Caches 目录

  请确保你的应用能漂亮的处理任何存储在 Caches 目录里的文件(被)消失的情况,一种解决这个问题的办法是创建一份应用存储在 Caches 目录里的文件的 URL(统一资源定位符) 列表。

  显然开发者要把这个列表文件存储在一个更持久的不同地方。可以在应用启动时检查一下列表中的文件是否还呆在那里。如果发现有任何文件丢失,可以弹出提示框告知用户这个情况,然后询问是否重新下载。当然如果设备是离线状态,你的任何道歉和解释都将被认为是白痴行为。

  要考虑到实际情况可能更复杂,比如有时候只有部分数据仍然有效,你需要决定怎么和多少提示需要显示。

  迁移现有的数据

  如果你打算更新应用,把数据存储在 Caches 目录里,以适应苹果 iOS 5/iCloud 的新规则,那么你可能会需要把原来存储在 Documents 目录里面的文件迁移到 Caches 目录。可以肯定,Apple 的应用审核团队不会对此进行测试,因为他们不会有你旧版本存储有数据的应用,所以,选择迁移数据可能是个正确的选择。

  记住不要在应用启动时在主线程里面做大量数据迁移的工作,因为这可能会引起“启动时间看门狗”的注意,并被它终结掉。

  提早警告用户

  当应用运行时,你可以经过用户设备存储空间不足,这种警告并不会改变文件被清除的命运,但至少可以让更多的人知道这个问题的存在,从而引起苹果的注意。

  让苹果知道这是个大问题

  向苹果相关人员提交漏洞报告,或者疯狂的在twitter、微博、博客里面抱怨,或者像中国的网店主一样到淘宝公司门口举牌抗议,更可以学习华尔街事件的做法(不建议)。

  用户应该怎么做?

  知道现在,存储了大量数据的应用在备份时都是个大麻烦,因为 iTunes 备份进程不得不运行很长一段时间,特别是我们确实有那么多有用的数据需要备份的时候。

  在 iCloud 备份过程中,用户可能不愿意使用免费的 5 GB 标配空间来备份他们认为不重要的数据(当然更不愿意付费购买额外空间),这是用户可以设置关闭某个应用的 iCloud 备份。设置的具体路径在:

iCloud > Storage & Backup > Manage Storage > Backups

  根据上面的路径进入设置界面,可以选择 开启/关闭 每个应用的 iCloud 备份,并不是每一个用户都会知道有这么个设置功能,所以可以在程序帮助文档、支持邮件中说明,或者,还是用老办法,弹出一个漂亮的提示框,告知用户这一切。当然,这好像是苹果应该做的事情。

  最后,想说的是,苹果推出了新机制,大部分总是以用户体验更好为初衷的,但是限制本地存储的新机制或许对部分用户和开发者都存在欠妥的地方,本文只是应对 iOS 5 限制本地存储的非官方指南,希望文中没有提供有害的建议,仅供参考。

  原文作者:Our4.org,原文链接