Message Album
← Все руководства

Как сохранить всю переписку iMessage на Mac

Почему в «Сообщениях» нет команды экспорта, какие бесплатные способы всё же работают, как добраться до истории, которая не синхронизировалась с Mac, и как получить альбом, который откроется и через годы.

· 4 min read

В приложении «Сообщения» на macOS нет команды экспорта. Её никогда не было. Поищите этот вопрос — и в верхних результатах окажутся ветка поддержки Apple и пост на Reddit, что довольно красноречиво говорит о том, насколько хорошо встроенные средства решили задачу.

Вот что работает на самом деле.

Где лежит переписка

На Mac «Сообщения» хранят всё в базе SQLite по пути ~/Library/Messages/chat.db, а вложения — в ~/Library/Messages/Attachments/. macOS защищает и то, и другое: без полного доступа к диску, выданного в «Системных настройках», ни одно приложение их не прочитает, а сама папка по умолчанию скрыта в Finder.

Отсюда следуют две вещи, и они объясняют почти всю путаницу вокруг темы:

  1. Любому инструменту, сохраняющему переписку, нужен полный доступ к диску. Само по себе это не тревожный знак, а единственный путь, который допускает macOS. Важно другое: что инструмент делает после того, как прочитал файл.
  2. База данных — закрытая внутренняя деталь реализации Apple. Её структура меняется между версиями macOS без предупреждения. Поэтому инструментам нужны обновления, и поэтому сохранённый альбом никогда не должен быть в формате Apple.

Способ 1: печать в PDF (бесплатно, встроено, ограниченно)

  1. Откройте «Сообщения», выберите переписку.
  2. Прокрутите в самый верх ветки, удерживая Command + стрелка вверх, пока старые сообщения не перестанут подгружаться.
  3. Файл › Напечатать, затем 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:

  1. Подключите iPhone или iPad и откройте Finder.
  2. Выберите устройство в боковом меню.
  3. Нажмите Создать резервную копию сейчас. И зашифрованные, и незашифрованные копии содержат «Сообщения». Поставьте флажок Зашифровать локальную копию, если нужны ещё «Здоровье» и другие защищённые данные.
  4. Направьте инструмент сохранения на эту копию, а не на медиатеку Mac.

Копия содержит то, что есть на телефоне, а этого обычно больше, чем дошло до Mac.

Как понять, полное ли сохранение

Задайте любому инструменту один вопрос: что он делает, когда чего-то не хватает?

Вложения, которые никогда не загружались локально, и внутренние данные Apple, которые не удаётся разобрать, — обычное дело. Инструмент, который сообщает о них явными предупреждениями, даёт понять, что у вас на руках. Инструмент, который молча их отбрасывает, оставляет альбом, выглядящий полным и таковым не являющийся, и вы узнаете об этом лишь в день, когда пойдёте искать конкретную фотографию.

Проверьте и числа. Если инструмент сообщает, сколько сообщений он прочитал из источника и сколько записал в результат, эти два числа должны совпадать либо разница должна быть объяснена.

Что делать с альбомом дальше

Альбом, существующий в одном месте, не сохранён — он подготовлен. Скопируйте его куда-то ещё: внешний диск, другой компьютер или облако на ваш выбор. Поскольку хорошее сохранение — это обычная папка с обычными файлами, речь идёт просто о копировании папки.

Если сохранение включает контрольные суммы, держите манифест рядом. Это единственное, что позволит через пять лет подтвердить: копия, на которую вы смотрите, цела.