2

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

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

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

两者具有相同的内容。

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

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

4

1 回答 1

2

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

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

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

为了找到 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 的引用,这些引用似乎在内部用于包装。

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

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

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

于 2013-01-11T14:20:30.253 回答