ios - 访问本地存储,将 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 的目录SearchPathDirectory
,FileManager
如果我们使用.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。
解决方案
解决了!
好吧,在搞砸之后,我发现我使用了错误的路径,我将目录设置为:
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)
推荐阅读
- reactjs - react-scripts and bundle - 是否所有的“需要”和“依赖项”都添加到了最终的包中?
- list - 如何在 Flutter 中使用 List Iterable 函数
- javascript - 如何在 React 组件中获得焦点元素并更改状态?
- r - 如何用正则表达式清理数据框列?
- rust - 如何独立于渲染引擎运行系统
- css - 将应用程序部署到 AWS 后,CSS url 路径在 Gatsby 中不起作用
- android - getDefinedWebViewPackageName:java.lang.NoSuchMethodException:getDefinedWebViewPackageName 在android studio中创建通知没有这样的方法
- c - 从标准输入读取并将每个单词存储在数组的单独列中
- javascript - TypeError: require(...).registerUser 不是一个函数
- ruby - 用于 ruby 的 Google 云视频智能 API 示例