MacCatalyst 应用程序中的框架无法打开 sqlite 文件

Framework in MacCatalyst app fails to open sqlite file

我正在制作一个需要从 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 上都试过了,结果相同。

找到问题了。您不能直接访问包内的 sqlite 文件,您必须先将文件从包中复制出来。事后看来,这很明显,因为 sqlite 可能会尝试以读写模式打开文件,而这对包内的文件不起作用。