#export #diagnostics #imessage #backup #run #html #format

app imessage-exporter

导出 iMessage 数据并运行 iMessage 诊断

23 个版本 (12 个稳定版)

2.0.1 2024年8月3日
1.9.0 2024年6月10日
1.8.0 2023年12月4日
1.7.0 2023年11月20日
0.1.4 2022年12月30日

#13 in 命令行工具

Download history 73/week @ 2024-05-04 82/week @ 2024-05-11 82/week @ 2024-05-18 74/week @ 2024-05-25 94/week @ 2024-06-01 216/week @ 2024-06-08 121/week @ 2024-06-15 98/week @ 2024-06-22 91/week @ 2024-06-29 103/week @ 2024-07-06 130/week @ 2024-07-13 117/week @ 2024-07-20 228/week @ 2024-07-27 309/week @ 2024-08-03 120/week @ 2024-08-10 109/week @ 2024-08-17

每月779次下载

GPL-3.0-or-later

2MB
13K SLoC

二进制文档

imessage-exporter 二进制文件可以将 iMessage 数据导出为 txthtml 格式。它还可以运行诊断以查找 iMessage 数据库中的问题。

安装

安装此软件有几种方法。

此二进制文件可在 crates.io 上获得。

cargo install imessage-exporter 是正常使用的最佳安装方式。

卸载步骤

$ cargo uninstall imessage-exporter

Homebrew

此二进制文件可通过 brew 获取。

brew install imessage-exporter 将安装应用程序,但可能不是最新版本。

卸载步骤

$ brew uninstall imessage-exporter

预构建的二进制文件

发布页面 提供了适用于 Apple Silicon 和 Intel-based Mac 的预构建二进制文件。

卸载步骤

$ rm path/to/imessage-exporter-binary

手动安装

  • clone 仓库
  • cd 进入仓库
  • cargo run --release 编译

如何使用

-d, --diagnostics
        Print diagnostic information and exit
        
-f, --format <txt, html>
        Specify a single file format to export messages into
        
-c, --copy-method <compatible, efficient, disabled>
        Specify an optional method to use when copying message attachments
        Compatible will convert HEIC files to JPEG
        Efficient will copy files without converting anything
        If omitted, the default is `disabled`
        
-p, --db-path <path/to/source>
        Specify an optional custom path for the iMessage database location
        For macOS, specify a path to a `chat.db` file
        For iOS, specify a path to the root of an unencrypted backup directory
        If omitted, the default directory is ~/Library/Messages/chat.db
        
-r, --attachment-root <path/to/attachments>
        Specify an optional custom path to look for attachments in (macOS only)
        Only use this if attachments are stored separately from the database's default location
        The default location is ~/Library/Messages/Attachments
        
-a, --platform <macOS, iOS>
        Specify the platform the database was created on
        If omitted, the platform type is determined automatically
        
-o, --export-path <path/to/save/files>
        Specify an optional custom directory for outputting exported data
        If omitted, the default directory is ~/imessage_export
        
-s, --start-date <YYYY-MM-DD>
        The start date filter
        Only messages sent on or after this date will be included
        
-e, --end-date <YYYY-MM-DD>
        The end date filter
        Only messages sent before this date will be included
        
-l, --no-lazy
        Do not include `loading="lazy"` in HTML export `img` tags
        This will make pages load slower but PDF generation work
        
-m, --custom-name <custom-name>
        Specify an optional custom name for the database owner's messages in exports
        Conflicts with --use-caller-id
        
-i, --use-caller-id
        Use the database owner's caller ID in exports instead of "Me"
        Conflicts with --custom-name
        
-b, --ignore-disk-warning
        Bypass the disk space check when exporting data
        By default, exports will not run if there is not enough free disk space
        
-h, --help
        Print help
-V, --version
        Print version

示例

将数据导出为 html 并将附件以网络兼容格式从默认的 iMessage 数据库位置复制到您的家目录

imessage-exporter -f html -c compatible

将数据导出为 txt 并将附件以原始格式从默认的 iMessage 数据库位置复制到当前工作目录中的新文件夹 output

imessage-exporter -f txt -o output -c efficient

从位于 ~/iphone_backup_latest 的未加密 iPhone 备份中导出 txt 并将其复制到当前工作目录中的新文件夹 backup_export

imessage-exporter -f txt -p ~/iphone_backup_latest -a iOS -o backup_export

/Volumes/external/chat.db 导出为 html/Volumes/external/export,不复制附件

imessage-exporter -f html -c disabled -p /Volumes/external/chat.db -o /Volumes/external/export

/Volumes/external/chat.db 导出为 html/Volumes/external/export,附件位于 /Volumes/external/Attachments

imessage-exporter -f html -c efficient -p /Volumes/external/chat.db -r /Volumes/external/Attachments -o /Volumes/external/export 

从默认的 macOS iMessage 数据库位置导出从 2020-01-012020-12-31 的消息,以 txt 格式导出到 ~/export-2020

imessage-exporter -f txt -o ~/export-2020 -s 2020-01-01 -e 2021-01-01 -a macOS

功能

点击此处 查看功能列表。

注意事项

HTML 导出

在 Safari 中的 HTML 导出时,引用本地文件时,必须在 Develop > Developer Settings... 菜单中允许 Safari 从本地文件系统读取

此外,由于文件存储在 ~/Library 中,您需要在系统设置中授予浏览器完整磁盘访问权限。

注意:传递有效的 --copy-method 时,此操作不是必需的。

PDF 导出

我无法以合理的方式使 PDF 导出工作。用户可以按照上面 Safari 的步骤操作,然后打印为 PDF。

wkhtmltopdf

wkhtmltopdf 即使启用了标志,也拒绝渲染本地图像

let mut process = Command::new("wkhtmltopdf")
.args(&vec![
    "--enable-local-file-access".to_string(),
    html_path,
    pdf_path.to_string_lossy().to_string(),
])
.spawn()
.unwrap();

即使授予了 cargoimessage-exporterwkhtmltopdf 完整磁盘访问权限,并且在将文件复制到与 HTML 文件相同的目录后,此问题仍然存在。

浏览器自动化

有几个 Rust 的 chomedriver 包装器。使用异步的这些包装器会使二进制文件过大(超过 10mb),并且有太多的依赖。在 headless-chrome crate 中的同步实现可以工作,但 在生成大型 PDF 时超时,即使使用极端的超时时间。

依赖项

~38MB
~611K SLoC