Як зберегти всю розмову 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, які не вдається розібрати, — звична річ. Інструмент, що повідомляє про них явними попередженнями, дає зрозуміти, що у вас на руках. Інструмент, який мовчки їх відкидає, лишає альбом, який виглядає повним і таким не є, і ви дізнаєтеся про це лише того дня, коли підете шукати конкретну фотографію.
Перевірте й числа. Якщо інструмент повідомляє, скільки повідомлень він прочитав із джерела і скільки записав у результат, ці два числа мають збігатися або різниця має бути пояснена.
Що робити з альбомом далі
Альбом, що існує в одному місці, не збережений — він підготовлений. Скопіюйте його кудись іще: зовнішній диск, інший комп’ютер або хмару на ваш вибір. Оскільки добре збереження — це звичайна папка зі звичайними файлами, ідеться просто про копіювання папки.
Якщо збереження містить контрольні суми, тримайте маніфест поряд. Це єдине, що дасть змогу через п’ять років підтвердити: копія, на яку ви дивитеся, ціла.