【发布时间】:2021-06-29 12:55:50
【问题描述】:
我正在制作一个需要从sqlite 文件加载一些数据的框架。它在 iOS 上运行良好,但在 Mac Catalyst 上无法打开文件并出现以下错误:
[NavigationDataProvider.swift:37] createDB() - NavigationData has been loaded from path /Users/username/Library/Developer/Xcode/DerivedData/AppName-finyqxyzgukrabcenmuloduaikbf/Build/Products/Debug-maccatalyst/NavigationData.framework/Resources/navdata.sqlite
2021-06-29 15:50:19.857298+0300 AppName[18534:531626] [logging-persist] cannot open file at line 45068 of [d880193994]
该文件似乎不存在,但如果我从 Mac 上的终端手动检查它,它确实存在:
% file /Users/.../navdata.sqlite: SQLite 3.x database, last written using SQLite version 3035005
那么这是 Mac Catalyst 的某种权限问题吗?不应该,因为该文件包含在框架包中,但它仍然不起作用。请问有什么想法吗?
我得到这样的路径:
Bundle(for: NavigationDataProvider.self).path(forResource: "navdata", ofType: "sqlite")
我也尝试过Bundle.main,但没有成功。我在 Xcode 的生产版本和最新的 Xcode-beta 上都试过这个,结果相同。
【问题讨论】:
-
但是现在我查看路径,它实际上指向../Developer/Xcode/DerivedData/,这不是应用程序的安装位置。为什么?
-
@EricAya
Bundle(identifier: "com.xxx.NavigationData")导致同样的问题。路径在 Developer/Xcode/DerivedData 中,尝试运行查询时出现相同的错误。 -
我只是在这里玩一个预感。您是否将数据库(或添加文件)拖到 Xcode 项目中?
-
不记得了,应该没关系,因为它包含在目标中?我的意思是,Xcode 应该将文件复制到包中,然后将包复制到设备/模拟器上,而不是直接访问文件...
标签: swift sqlite mac-catalyst