iOS 6本地存储文件出现两次

时间:2013-01-10 13:21:48

标签: ios ios6 sencha-touch local-storage sencha-touch-2.1

我有一个使用本地存储的应用程序(使用sencha'Ext.data.proxy.LocalStorage')离线查看某些内容。我因违反iOS数据存储指南而被iTunes拒绝。

我认为它可能与iOS 5.1之前iOS中的/ Documents文件夹中的localStorage有关。为了确认在较新版本中我检查了文档文件夹是空的,但我仍然找到了.file__0.localstorage。

奇怪的是,同样的文件(但没有前导点)也存在于library / caches文件夹中,应该是它。

两者都有相同的内容。

有谁知道这会怎么样?我已经在Sencha支持中询问过,但它似乎与Sencha框架无关。

注意:我没有使用PhoneGap,只使用Sencha。

1 个答案:

答案 0 :(得分:2)

使用Sencha创建一个非常小的Hello World应用程序写入本地存储我可以重现此行为。它似乎在应用程序退出时,它会将localstorage文件的副本写入/ Documents文件夹。

这对我来说似乎很可疑,它让我想起了iOS 5.1的PhoneGap补丁,它还备份了localStorage文件。

使用iOS 5.1 Apple开始将localStorage文件放在Library / Caches文件夹中,这打破了许多应用程序,因为数据不再可靠存储。因此,PhoneGap和其他人开始实施Workarrounds,将localStorage文件备份到文档文件夹,并在需要时自动恢复。

试图找到Sencha做类似事情的证据,我打开了生成的.app包,找到了一个包含本机包装器代码的stbuild_template文件。它当然是编译的,但搜索字符串“localStorage”会产生一些有趣的结果,如:

restoreLocalStorage
preserveLocalStorage
Could not remove source file while backing up localstorage Could not copy localstorage backup . Caches WebKit/LocalStorage .file__0.localstorage file__0.localstorage
SNLocalStoreageFix

此外,我发现了许多对NimbleKit的引用,它似乎在内部用于包装。

此主题还暗示了Sencha Touch 2.1中iOS 5.1本地存储问题的解决方案,OP正在使用该解决方案:http://www.sencha.com/forum/showthread.php?194674-Localstorage-and-native-iOS-5.1-apps&s=04149e771f9c4eea15cb6f6d97069ff6

所有这些都证明了Sencha为iOS 5.1实现了一个workarround,它将localStorage放在/ Documents文件夹中。由于您只使用localStorage文件进行缓存,Apple拒绝了您,因为您将非用户数据存储在/ Documents中。

我认为使用PhoneGap可以选择禁用此备份。所以你可能想考虑使用它或询问Sencha是否有类似的选项来禁用它。