iOS上很多采用Web存储API来实现持久性数据存储的App,都在近期iOS升级到5.1版本后,受到了的严重影响。受到影响的App多用PhoneGap或者其他采用WebKit API来实现数据存储的开发工具开发。比如,这一款App看起来正受着影响:
其他的开发者表示:
“我收集的统计数据表明,用户经常因为App每次打开之后,之前的设置常常被删除,而抛弃一款App。这其实是一个相当致命的错误,应该被马上纠正。而且不要忘了,开发者纠正以后,到Apple允许新版本上架,还有段时间要等。”
准确地说,WebKit被用于存储本地数据文件到Library/Webkit中。Library/Webkit这个存储目录在过去被操作系统看做是永久的,并且备份于iCloud中。而iOS 5.1中,数据被存储于Library/Caches中,这意味着这都被当成了临时数据,并有可能被删除。W3C的候选意见,对localStorage给出的评价是(原文点击这里):
“用户代理应该将本地存储中的数据分散开,这是基于安全性的考虑,或者在用户需要他们这么做时他们应该如此。”
一个嵌入式浏览器和传统Web浏览器并不完全一样。如果你在Webkit中用SQLite,那这将不包含在W3C HTML5 API中,因为这些API已不再提供Web SQL。
这个问题的复杂性在于,还会存在一个Bug(详情点击这里),它导致升级App至新版本之后数据的丢失。还有其他问题存在于目前的Web App,以及应用了嵌入式UIWebView的App中。
PhoneGap在这个问题上是有一定弹性的。因为它可以调用本地API,这将在可能出现问题时继续工作。不过不好的情况是,代码会因此更针对特定平台,而破坏其跨平台性。
从Apple开发者论坛上在iOS 5.1的beta版发布期间的讨论,可以看出Apple已经意识到这个问题,但正式版发布时仍没得到解决。这给我们的感觉是,Apple似乎恼怒于众多的App(无论Web还是本地)运用Web存储来加速,而不是仅用来存储用户创建的内容。Apple觉得,这是在给iOS设备上本来就捉襟见肘的存储空间施加更大压力。
想扩大一部iPad或者iPhone的存储空间,除了花更多的钱再买一部,我们都知道别无他法。
这的确是个问题。不过你不能否认的是,Apple认为PhoneGap一类的开发工具,或者体验接近本地App的Web App,这对于Apple而言某种程度绕过了它的商业开发体系,而它绝对不鼓励这么做。Apple更喜欢的还是完全采用iOS SDK开发的App。
Apple从真正意义上的本地App受益,这导致了Apple平台常显出一定程度的排他性。而且App只能从App Store上获得,同时Apple从中抽取一定比例费用。
官方的iOS数据存储指南可以点击这里获得。
文章发表于2012年4月1日。
原文作者Tim Anderson,著名IT自由记者。
原文链接: