访问本地存储,将 Cordova App 迁移到 Swift App

时间:2021-06-28 08:11:56

标签: ios swift cordova nsfilemanager lokijs

我们即将在新的 Swift 应用程序中完全重写旧的 Cordova 应用程序,我们面临的问题是在迁移时,Cordova 应用程序会在设备上存储一些信息,例如刷新令牌和当我们强制将用户升级到新应用时,我们希望他们保持登录状态。

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

SearchPathDirectoryFileManager 中没有 /Library/NoCloud 目录,如果我们使用 .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 数据库。< /p>

1 个答案:

答案 0 :(得分:0)

解决了!

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

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")

它向我展示了一切:) 所以要访问我需要的 db 文件的内容

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