当iOS应用程序在后台运行时如何打开SQLite数据库

5

我的应用在后台捕获位置数据并保存在sqlite数据库中。当设备未锁定时,它运行良好,但当设备被锁定时,我无法访问sqlite数据库。它总是给我一个错误代码为SQLITE_AUTH(错误代码:23)的错误。

我已经尝试了以下选项:

  1. 从功能中禁用数据保护。(不起作用)
  2. 根据Failed to create SQLite3 database with file protection in iOS,我尝试了下面的代码:

sqlite3_open_v2([dbPath UTF8String], &myDatabase, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_FILEPROTECTION_COMPLETE, NULL)

但仍然无效。

请问如何在后台访问sqlite数据库。

1个回答

0

你需要从iTunesconnect中为你的应用启用数据保护

1. 为你的应用启用数据保护。例如:

2. 将以下文件保护键和值添加到您的plist或授权文件中,

<key>com.apple.developer.default-data-protection</key>
<string> NSFileProtectionCompleteUntilFirstUserAuthentication</string>

类型必须与您从iTunes服务器获取的能力集相匹配。

3. 重新构建并测试是否解决了问题


文件数据保护

除了内置于iOS设备中的硬件加密功能外,苹果还使用一种名为“数据保护”的技术来进一步保护存储在设备闪存中的数据。数据保护允许设备响应常见事件,如来电,同时也为用户数据提供高级加密。关键系统应用程序,如信息、邮件、日历、联系人、照片和健康数据值默认使用数据保护,而安装在iOS 7或更高版本上的第三方应用程序会自动接受此保护。

数据保护通过构建和管理密钥层次结构来实现,并建立在每个iOS设备内置的硬件加密技术之上。数据保护是通过将每个文件分配给一个类来在逐个文件的基础上控制的;可访问性取决于是否解锁了该类密钥。随着Apple文件系统(APFS)的推出,现在文件系统能够进一步将密钥细分为每个范围的基础上(文件的某些部分可以有不同的密钥)。请参阅文件数据保护章节中的详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接