首页 > 解决方案 > 访问本地存储,将 Cordova App 迁移到 Swift App

问题描述

我们正处于在新的 Swift 应用程序中完全重写旧版 Cordova 应用程序的尾声,我们面临的问题是在迁移时,Cordova 应用程序会在设备上存储一些信息,例如刷新令牌以及何时强制执行将我们的用户升级到我们希望让他们保持登录状态的新应用程序。

Cordova 应用程序正在使用一个名为 LokiJS 的库来执行此操作,并且 sql lite db 将这些信息存储在/var/mobile/Containers/Data/Application/{UUID}/Library/NoCloud/目录中的 live 中。新的 Swift 应用程序将使用相同的包标识符,因此我们应该能够访问这个目录,尽管到目前为止我还没有找到访问它的方法。

在 for 中没有 /Library/NoCloud 的目录SearchPathDirectoryFileManager如果我们使用.libraryDirectory并附加“NoCloud”,我们会得到:"The folder “NoCloud” doesn’t exist."或者甚至列出 .libraryDirectory 的 subpathsOfDirectory 我们得到:"The file “Library” couldn’t be opened because there is no such file."应用程序的 UUID 也会在每次安装时发生变化,所以没有知道原始完整路径的方法。

有没有人有过这样做的经验?Cordova 应用程序必须有一种方法可以读取/写入它,但我似乎找不到任何具体的解决方案,我们实现这一点非常重要,值得注意的是我们的 Android 应用程序可以访问这个 Loki db。

标签: iosswiftcordovansfilemanagerlokijs

解决方案


解决了!

好吧,在搞砸之后,我发现我使用了错误的路径,我将目录设置为:

let libraryDirectory = try! FileManager.default.url(for: .libraryDirectory, in: .userDomainMask, appropriateFor: nil, create: true)

并尝试列出其内容:

FileManager.default.subpathsOfDirectory(atPath: "\(libraryDirectory.absoluteString)/NoCloud")

事实上我应该一直在使用,

FileManager.default.subpathsOfDirectory(atPath: "\(libraryDirectory.path)/NoCloud")

这向我展示了一切:)所以要访问我需要的数据库文件的内容是

String(contentsOfFile: "\(libraryDirectory.path)/NoCloud/{db_file_name}", encoding: .utf8)

推荐阅读