有些用户可能希望使用专家模式直接操作备份中存储的原始文件。这些文件通常由 SQLite 数据库(.sqlite3、.sqllitedb 和 .db)或 Plist(通常为 .plist)文件组成。
iPhone Backup Extractor 内置了 Plist 编辑器,其用户可以自动将数据导出为 PDF、HTML、VCard、ICAL、VCF 或 CSV 格式,以便轻松访问。不过,希望从这些文件中提取数据的用户需要一个 SQLite 数据库客户端。
如何处理 SQLite 数据库?
用户可以尝试以下三款应用程序中的任意一款:
- SQLiteFlow(付费,macOS 和 iOS)。SQLiteFlow 是我们首选的 macOS SQLite 工具。
- Base 2(付费,macOS)。Base 是我们在 macOS 上的第二推荐 SQLite 工具之一,可以直接下载,也有 App Store 版。
- DB Browser for SQLite(免费,macOS 和 Windows)。DB Browser 以前名为 SQLite Database Browser。这是我们为 Windows 推荐的工具,而且是免费的。它们也提供 macOS 版本。
这些信息可信吗?
Reincubate 与这些产品都没有关联,也不会因提及它们而获得任何报酬。
如何直接处理 Apple 的数据库文件?
例如,要手动访问联系人数据,用户应提取 Libray/AddressBook/AddressBook.sqllitedb,然后用 SQLite 查看器打开提取出的文件。选择“Execute SQL”选项卡,将以下内容粘贴到“SQL string”字段中:
SELECT ABPerson.first, ABPerson.last, ABMultiValue.value
FROM ABPerson, ABMultiValue
WHERE ABMultiValue.record_id = ABPerson.ROWID
按下 Execute Query 按钮后,应该会在“Data returned”字段中返回完整的联系人列表。
要访问短信数据,用户应提取 Libray/SMS/SMS.db,用 SQLite 查看器打开提取出的文件,选择 Browse data 选项卡,然后从 Table 下拉菜单中选择 message。点击放大镜按钮后,用户应该会在“Data returned”字段中看到完整的短信历史记录。
我们的一位用户发现下面这个查询很有用,因此我们把它收录在这里供用户参考。请记住,数据库格式会随 iOS 版本而变化,因此这些查询往往需要随时间调整。
SELECT ROWID,
ABPerson.first,
ABPerson.last,
ABPerson.Organization AS organization,
ABPerson.Department AS department,
DATETIME(ABPerson.Birthday + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Birthday,
ABPerson.JobTitle as jobtitle,
ABPerson.Organization,
ABPerson.Department,
ABPerson.Note,
ABPerson.Nickname,
DATETIME(ABPerson.CreationDate + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Created,
DATETIME(ABPerson.ModificationDate + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Modified,
( SELECT value FROM ABMultiValue
WHERE property = 3 AND record_id = ABPerson.ROWID AND label = (
SELECT ROWID FROM ABMultiValueLabel
WHERE value = '_$!<Work>!$_'
)
) AS phone_work,
( SELECT value FROM ABMultiValue
WHERE property = 3 AND record_id = ABPerson.ROWID AND label = (
SELECT ROWID FROM ABMultiValueLabel
WHERE value = '_$!<Mobile>!$_'
)
) AS phone_mobile,
( SELECT value FROM ABMultiValue
WHERE property = 3 AND record_id = ABPerson.ROWID AND label = (
SELECT ROWID FROM ABMultiValueLabel
WHERE value = '_$!<Home>!$_'
)
) AS phone_home,
( SELECT value FROM ABMultiValue
WHERE property = 4 AND record_id = ABPerson.ROWID AND label IS null
) AS email,
( SELECT value FROM ABMultiValueEntry
WHERE parent_id IN (
SELECT ROWID FROM ABMultiValue WHERE record_id = ABPerson.ROWID
) AND key = (
SELECT ROWID FROM ABMultiValueEntryKey WHERE lower(value) = 'street'
)
) AS address,
( SELECT value FROM ABMultiValueEntry
WHERE parent_id IN (
SELECT ROWID FROM ABMultiValue WHERE record_id = ABPerson.ROWID
) AND key = (
SELECT ROWID FROM ABMultiValueEntryKey WHERE lower(value) = 'city'
)
) AS city
FROM ABPerson
ORDER BY ABPerson.first
我们在这里维护着各种 App 的关键文件列表。
日期和时间字段返回的只是数字,该如何解读?
你可能会难以解读数据库中的许多字段。别忘了,iPhone Backup Extractor 可以自动为你提取这些数据!不过,如果你打算自己处理,会发现日期是以自 2001-01-01 或 1970-01-01 以来的秒数表示的,具体取决于日期字段的位置。在 Excel 中,你可以使用类似 =1/1/2001 + A1/60/60/24 的公式,其中 A1 是你的时间数据。你可能还需要调整数值,以适应你所在的时区。
