TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
PiniMessage Exporter 是一支用 Rust 寫的開源命令列工具,把 macOS chat.db 與 iOS 備份裡的 iMessage 聊天紀錄還原成 HTML 或 TXT 開放檔案。它走 GPL-3.0、嚴格唯讀、讀不到只存在 iCloud 的訊息,這篇拆解資料來源、四種附件轉檔模式,以及採用前要評估的硬邊界。
用 AI 摘要這篇文章:
iMessage Exporter 是一支用 Rust 寫的開源命令列工具,會把 macOS 或 iOS 備份裡的 iMessage 聊天紀錄讀出來,還原成在任何瀏覽器都打得開的 HTML 或純文字檔。它走 GPL-3.0 授權、嚴格唯讀,而且只讀你提供的來源裡實際存在的資料。換句話說,它能把蘋果圍牆裡的訊息搬出來,但有幾條邊界會直接決定它能不能用在你身上:商業衍生要連同授權一起開源、沒辦法把訊息匯回另一個 Apple ID、也讀不到只存在 iCloud 雲端而本機沒有副本的訊息。這篇把資料來源、匯出格式、附件處理與這幾條硬邊界一次拆開。
如果你過去也想把某個即時通訊平台的對話搬出來保存,例如用過 閒魚聊天匯出工具那類 exporter,這裡的邏輯類似:封閉平台把資料鎖在自己的資料庫,你要靠自己把它讀出來變成開放檔案。差別在於 iMessage 的資料庫是蘋果私有的 SQLite 結構,訊息本體還套了一層蘋果自己的編碼,逆向工程起來更費工,也更依賴作者持續跟著蘋果改版。
iMessage 的訊息本體存在一個 SQLite 資料庫(macOS 上是 ~/Library/Messages/chat.db),但裡面的欄位、附件指向,以及訊息本體用的蘋果私有編碼(例如 typedstream 與 payload_data plist)都不是蘋果公開文件會教你讀的格式。iMessage Exporter 做的事,是靠逆向工程把這些私有結構還原成 Rust 原生資料結構,讓 Linux 與 Windows 也能讀同一份資料,不必依賴 macOS 系統 API。README 在 Special Thanks 段落點名 SQLiteFlow、Xplist,以及 GNU Project 與 Archive.org,分別用來拆解 chat.db 結構、payload_data plist 與 typedstream 格式。訊息存在這種關聯式資料庫,也代表你想自己挖原始資料,可以搭配 支援 SQLite 的資料庫客戶端直接進去翻 schema,只是欄位意義要自己摸。
作者在 README 開頭把專案目標寫成「提供目前對 iMessage 資料最完整、最精確的呈現」。這句是作者自己的定位宣稱,不是第三方驗證過的結論;不過專案在 GitHub 拿到五千多顆星、持續更新到 4.2.0,是支援這個宣稱的客觀跡象,至少說明它被相當多人拿來真的用,而不是只停在概念展示。
Pin靠逆向工程跨平台是有代價的。蘋果每次改 schema、改附件的雜湊命名規則、或改訊息本體的編碼方式,這套工具都得跟著更新才能繼續正確讀取。這也是 README 特別把支援範圍標到具體蘋果版本(目前到 macOS Tahoe 26.6 與 iOS 26.6)的原因:它能正確解析的範圍,是被作者實際拆解過的版本範圍,超出這個範圍的訊息格式未必會壞,但作者沒辦法保證。實務上,遇到蘋果大改版時,先用 -d 診斷模式確認資料庫讀得到、schema 看得出來,再正式匯出,會比直接跑穩當。
整支工具是唯讀的。作者在 FAQ 回答能不能把對話匯回另一個 Apple ID 時直接寫道,他不願意被信任去對使用者的 iMessage 資料有寫入權限,這套軟體是唯讀。這條設計選擇決定了工具的性格:它是單向的逃生口,把訊息搬出來變成你可以長期保存、自由搬移的開放檔案;它不會同步回去,也無法拿來把訊息灌回蘋果生態。想把對話整批搬到新手機或另一個 Apple ID 的人,到這裡就要明白:匯出可以,匯回不行。
資料來源有三種。最常見的是 macOS 本機的 chat.db,預設路徑是 ~/Library/Messages/chat.db,你也可以用 -p 指定別的位置,例如外接硬碟裡拷貝出來的舊資料庫,或從當機搬不出來的舊 Mac 拆硬碟拿出來的檔案。另一條路是一份 iOS 裝置備份,加密備份也支援,指令列會問你備份密碼,或用 --cleartext-password 帶入(作者提醒這會讓密碼出現在畫面與 shell 歷史紀錄,建議盡量用互動輸入)。沒有 Mac 的人,也可以用越獄 iOS 抓出來的 sms.db 當來源,但要加上 --platform macOS 讓程式用 macOS 的 schema 去讀。
iOS 備份這條路對沒有 Mac、或 Mac 已經報銷的人特別有用。你可以在 Windows 上用 iTunes 或 Apple Devices App、在 macOS 上透過 Finder 做一份本機加密備份,再用 -p 指到那個備份資料夾、加 -a iOS 讓工具知道來源是 iOS。備份密碼要記得,加密備份裡的訊息不給密碼是讀不出來的。
真正會卡住人的限制是 iCloud。如果開了「訊息在 iCloud」同步,而且訊息已經被系統卸載到雲端、本機沒有完整副本,iMessage Exporter 讀不到那些只存在 iCloud 的內容。FAQ 的講法很直白:它只能讀你提供的來源裡實際存在的資料,無法讀只存在 iCloud 的資料。匯出前你得先回 macOS 的訊息 App,點進對話的資訊鈕把附件完整下回本機,或先關閉 iCloud 同步讓本機補齊。對附件已經被系統自動卸載的舊對話,這一步是必要前置,不是可選的優化,跳過它你會拿到一份看似完整、其實缺一大塊附件的匯出。
匯出格式只有 txt 與 html 兩種,沒有原生 PDF。需要 PDF 歸檔的人要多走一步:先用 html 匯出,再用 Safari 打開、列印成 PDF;這個流程要加上 --no-lazy 旗標,把圖片的 lazy-loading 關掉,PDF 才會把所有圖片嵌進去,不然匯出的 PDF 會是空的圖框。官方 PDF 流程指名用 Safari 列印,其他瀏覽器未必能正確處理這份 HTML 對本機附件的參照。
README 給的代表範例是這條指令:
imessage-exporter -f html -c full
意思是:從預設位置讀 chat.db,匯出成 HTML,附件用 full 模式轉成網頁相容格式,輸出放在 ~/imessage_export。你可以加日期區間 -s 與 -e 只匯某段時間,這在做法律保存或合規歸檔時很實用,例如只匯出某一年、或某段專案期間的對話。也可以用 -t 指定聯絡人,例如 -t "[email protected],5558675309" 只匯與某幾個號碼或信箱的對話;它支援子字串匹配,-t "+1555" 會撈出所有這個前綴的號碼。被過濾的聯絡人只要出現在群組對話裡,那個群組對話也會被匯出,這對「我要某個同事講過的所有話」這類需求很關鍵。
輸出時每個對話會獨立一個檔案;沒辦法對應到任何對話的訊息會被集中到 orphaned.html 或 orphaned.txt,這通常是資料庫因為刪除對話而留下斷鏈造成的,作者選擇保留這些孤兒訊息,避免資料無聲消失。HTML 匯出還能自訂外觀:每個 HTML 檔會參照輸出目錄裡的 style.css,你只要建這個檔就能蓋過預設樣式,而且因為自訂樣式載入順序在預設之後,同一個優先級下會贏過預設。對要把匯出結果交給律師、主管或家人看的情境,這層樣式控制比陽春的純文字檔更實用。
附件怎麼處理是會影響匯出成果的決定,README 的 --copy-method 提供四種模式。disabled 是預設值,完全不複製附件,HTML 只用檔案路徑指向原始位置,一旦你之後搬移了原始附件,匯出檔裡的圖就會斷,這個模式只適合你明確知道資料庫與附件永遠不會搬家的情況。clone 把所有附件原封不動複製一份,畫質與格式都不轉換,好處是零損耗、壞處是 HEIC 在非蘋果環境打不開。basic 複製全部附件,並把 HEIC 影像轉成 JPEG,讓絕大多數瀏覽器與看圖軟體都能直接顯示。full 再進一步,把 HEIC 轉 JPEG、CAF 與 AMR 音訊轉 MP4、MOV 影片轉 MP4、動態 HEICS 貼圖轉 GIF,目標是產出一份在任何平台、任何瀏覽器都開得了的匯出。
後面兩種需要外部轉檔器,而且平台有差。圖片在 macOS 用系統內建的 sips,在 Linux 與 Windows 要自己裝 ImageMagick;音訊在 macOS 用 afconvert,在其他平台要用 ffmpeg;影片則不論平台都要 ffmpeg。這代表 Linux 與 Windows 使用者選 full 之前,得先確認這些工具都裝好,不然轉檔這一步會在過程中失敗。-d 診斷模式會列出系統上偵測到的轉檔器,選 full 之前先跑一次診斷、確認該裝的都裝了,是比事後除錯省事的做法。對長期歸檔的需求,full 模式換來的 MP4 與 JPEG 比蘋果原生的 HEIC 與 MOV 更不容易在十年後變成打不開的孤兒格式,這是它對「資料真正搬出蘋果圍牆」這個目標的關鍵價值。
最新版本 4.2.0(代號 Stream Orchid,2026 年 6 月 18 日發布)補上幾塊以前匯不出來的東西。貼圖與 Genmoji 可以內嵌在訊息文字裡做行內渲染,不再只是獨立附件;只含貼圖或表情符號的訊息會放大成 jumbomoji 風格,與 iMessage 介面看到的尺度一致。Digital Touch 訊息(心跳、火球、草圖、親吻這類)能渲染成靜態 SVG 畫面嵌在 4:5 的黑色畫布上,照片類的 Digital Touch 會保留原照片當底圖再疊上手繪覆蓋,影片類的則嵌入影片播放器。商業客服對話的 Quick Replies、互動表單(提交與接收兩端都渲染)、清單選擇器也納入匯出,這代表你跟銀行或電商客服的往來也能完整留下來。README 把支援範圍標到涵蓋 macOS Tahoe 26.6 與 iOS 26.6 的全部 iMessage 特性,比部分第三方轉述還新。
Pin對想救回刪除訊息的人,FAQ 給的是一個有限但誠實的答案。蘋果自己有 30 天的刪除復原期限,這段時間內從對話或單則訊息刪掉的內容會被搬去另一個集合,iMessage Exporter 會把這些訊息還原回所屬對話。超過 30 天、或已經被系統永久刪除的訊息,就救不回來。少數情況下訊息已從 chat_message_join 表移除、但還留在 messages 表裡,這類孤兒訊息會出現在剛剛提到的 orphaned 檔案中,不會無聲消失。語音訊息只要還沒被系統刪掉就會一起匯出;已經過期被系統刪掉的,因為檔案本體已經不在磁碟上,就沒辦法了。如果你匯出的動機是為了舉證某段已刪除的對話,這個 30 天期限就是你要計算的硬邊界。
授權是 GPL-3.0,這是一種強 copyleft 授權:你可以自己用、可以內部部署,但把這套程式碼包進你自己要對外發布的產品,衍生作品也得用相同的 GPL-3.0 釋出原始碼。對個人備份與公司內部歸檔沒有影響,對想做商用 iMessage 備份服務、或把這套邏輯封裝成閉源產品出售的人就是硬門檻。如果你是後者,採用前要先評估的不是功能夠不夠,而是你的產品能不能接受相同授權釋出。
唯讀這條前面講過,它是單向出口。你匯出後的檔案完全歸你掌控,可以備份、可以搬到別台電腦、可以用任何工具搜尋,但這些檔案與蘋果的訊息資料庫不會再雙向同步。作者在 FAQ 也直接說這套軟體沒有搜尋功能,他自己搭配另一個開源工具 ripgrep 在匯出的檔案裡找字,這呼應了它「把資料變成你自己掌控的檔案」的定位。想把訊息從舊機器搬到新機的人,iMessage Exporter 可以幫你把對話變成可攜檔案,這與 Mac 應用搬移工具是互補的兩件事:一個搬應用與設定,一個搬訊息內容。
iCloud 缺口這條也要再算進去。訊息一定要實際存在你提供的來源裡,開了 iCloud 同步又沒把附件下回本機的人,匯出前要先處理這件事,不然結果會缺東缺西,而且缺的地方不會特別提醒你。一個比較保險的做法,是匯出前先在訊息 App 把每個要保留的對話附件都點開讓它下載,或乾脆暫時關掉 iCloud 同步一陣子讓本機補完整份。
macOS 使用者還有一個容易漏的前置:終端機要有 Full Disk Access,不然程式讀不到 chat.db,會直接報錯退出。這個設定在系統設定的大類「隱私與安全」裡的「完整磁碟存取」,把你的終端機 App(例如 Terminal.app 或 iTerm)勾進去即可。iOS 備份來源沒有這個限制,但加密備份要備好密碼。
安裝有四條路。官方推薦用 Rust 的 cargo install imessage-exporter,這會抓最新發布版;macOS 也可以 brew install imessage-exporter,但 Homebrew 公式未必是最新版,README 自己也標明它可能落後;Apple Silicon 與 Intel Mac 都有預編譯 binary 可以從 GitHub Releases 頁下載,適合不想裝 Rust 工具鏈的人;想自己編就 clone 專案再 cargo run --release。無論走哪條路,裝完先跑一次 imessage-exporter -d 的診斷模式、確認資料庫讀得到與轉檔器都到位,是比直接開始匯出穩當的第一步。如果你追求的是圖形介面、或希望它自動從 iCloud 撈訊息、或想把訊息寫回蘋果生態,這套工具都不是答案,把這三條期待先放掉,再評估它符不符合你要的備份與歸檔流程。
每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。




