Как сохранить всю переписку iMessage на Mac
Почему в «Сообщениях» нет команды экспорта, какие бесплатные способы всё же работают, как добраться до истории, которая не синхронизировалась с Mac, и как получить альбом, который откроется и через годы.
· 4 min read
В приложении «Сообщения» на macOS нет команды экспорта. Её никогда не было. Поищите этот вопрос — и в верхних результатах окажутся ветка поддержки Apple и пост на Reddit, что довольно красноречиво говорит о том, насколько хорошо встроенные средства решили задачу.
Вот что работает на самом деле.
Где лежит переписка
На Mac «Сообщения» хранят всё в базе SQLite по пути ~/Library/Messages/chat.db, а вложения — в ~/Library/Messages/Attachments/. macOS защищает и то, и другое: без полного доступа к диску, выданного в «Системных настройках», ни одно приложение их не прочитает, а сама папка по умолчанию скрыта в Finder.
Отсюда следуют две вещи, и они объясняют почти всю путаницу вокруг темы:
- Любому инструменту, сохраняющему переписку, нужен полный доступ к диску. Само по себе это не тревожный знак, а единственный путь, который допускает macOS. Важно другое: что инструмент делает после того, как прочитал файл.
- База данных — закрытая внутренняя деталь реализации Apple. Её структура меняется между версиями macOS без предупреждения. Поэтому инструментам нужны обновления, и поэтому сохранённый альбом никогда не должен быть в формате Apple.
Способ 1: печать в PDF (бесплатно, встроено, ограниченно)
- Откройте «Сообщения», выберите переписку.
- Прокрутите в самый верх ветки, удерживая Command + стрелка вверх, пока старые сообщения не перестанут подгружаться.
- Файл › Напечатать, затем PDF › Сохранить как PDF.
Это работает, и для короткой переписки это правильный ответ. Два реальных ограничения: всю ветку приходится подгружать прокруткой, что мучительно на многолетней истории, и PDF не может содержать воспроизводимое видео или аудио.
Способ 2: запросить базу самому (бесплатно, технично)
Поскольку chat.db — обычный файл SQLite, его можно запрашивать напрямую. Сначала дайте полный доступ к диску вашему терминалу, затем:
sqlite3 ~/Library/Messages/chat.db
Есть три ловушки, в которые попадают те, кто делает это вручную:
- Отметки времени — не Unix-время. «Сообщения» хранят наносекунды с 2001-01-01, так что понадобится
datetime(message.date/1000000000 + 978307200, 'unixepoch'). textчасто равен NULL. Современные сообщения держат содержимое вattributedBody— сериализованном typedstream Apple, а не в простом столбцеtext. Правильно его разобрать — самая трудная часть всей задачи, а наивная трактовка двоичных данных как UTF-16 даёт мусор, который выглядит почти правильно.- Открывайте только для чтения. Используйте
file:...?mode=ro, чтобы случайный запрос никогда не смог записать в вашу работающую базу «Сообщений».
Если хотите пройти этот путь как следует, а не вручную, imessage-exporter бесплатен, открыт и разбирает typedstream корректно.
Способ 3: сохранить в альбом (то, чего на самом деле хочет большинство)
Результат, к которому стремится большинство, — папка, которую можно держать у себя: переписка целиком, читаемая без специальных программ, с целыми фотографиями и видео.
Это значит сохранение, которое даёт:
- Каждое сообщение обеих сторон, по порядку, с отметками времени.
- Каждое вложение, скопированное в исходном качестве, а не ужатое внутрь документа.
- Формат, не зависящий от инструмента, который его создал. Простые HTML, JSON и Markdown подходят. Проприетарная база — нет.
К этой категории относятся imessage-exporter, iMazing, Decipher TextMessage и Message Album, которым сделан этот сайт. Особый упор Message Album — как раз последний пункт: результат представляет собой самодостаточный офлайновый сайт без фреймворков, CDN, внешних шрифтов и сервера, плюс манифест контрольных сумм SHA-256. Исходя из того, что вещь, которую вы храните, не должна переставать работать оттого, что исчезла какая-то зависимость.
Как добраться до истории, не синхронизированной с Mac
Этот шаг пропускает большинство руководств, и именно он часто виноват в том, что сохранение выходит неполным.
На вашем Mac есть только те сообщения, которые на него синхронизировались. Если переписка началась до того, как у вас появился этот Mac, или «Сообщения в iCloud» выгрузили старые вложения, сохранение из медиатеки самого Mac молча пропустит часть.
Решение — сохранять из резервной копии iPhone:
- Подключите iPhone или iPad и откройте Finder.
- Выберите устройство в боковом меню.
- Нажмите Создать резервную копию сейчас. И зашифрованные, и незашифрованные копии содержат «Сообщения». Поставьте флажок Зашифровать локальную копию, если нужны ещё «Здоровье» и другие защищённые данные.
- Направьте инструмент сохранения на эту копию, а не на медиатеку Mac.
Копия содержит то, что есть на телефоне, а этого обычно больше, чем дошло до Mac.
Как понять, полное ли сохранение
Задайте любому инструменту один вопрос: что он делает, когда чего-то не хватает?
Вложения, которые никогда не загружались локально, и внутренние данные Apple, которые не удаётся разобрать, — обычное дело. Инструмент, который сообщает о них явными предупреждениями, даёт понять, что у вас на руках. Инструмент, который молча их отбрасывает, оставляет альбом, выглядящий полным и таковым не являющийся, и вы узнаете об этом лишь в день, когда пойдёте искать конкретную фотографию.
Проверьте и числа. Если инструмент сообщает, сколько сообщений он прочитал из источника и сколько записал в результат, эти два числа должны совпадать либо разница должна быть объяснена.
Что делать с альбомом дальше
Альбом, существующий в одном месте, не сохранён — он подготовлен. Скопируйте его куда-то ещё: внешний диск, другой компьютер или облако на ваш выбор. Поскольку хорошее сохранение — это обычная папка с обычными файлами, речь идёт просто о копировании папки.
Если сохранение включает контрольные суммы, держите манифест рядом. Это единственное, что позволит через пять лет подтвердить: копия, на которую вы смотрите, цела.