21 releases (10 stable)

1.9.0 Jun 10, 2024
1.8.0 Dec 4, 2023
1.7.0 Nov 20, 2023
1.5.0 Jul 29, 2023
0.1.4 Dec 30, 2022

#17 in #reverse-engineering

Download history 95/week @ 2024-03-13 63/week @ 2024-03-20 53/week @ 2024-03-27 75/week @ 2024-04-03 63/week @ 2024-04-10 67/week @ 2024-04-17 83/week @ 2024-04-24 84/week @ 2024-05-01 92/week @ 2024-05-08 82/week @ 2024-05-15 90/week @ 2024-05-22 85/week @ 2024-05-29 217/week @ 2024-06-05 119/week @ 2024-06-12 102/week @ 2024-06-19 69/week @ 2024-06-26

518 downloads per month
Used in imessage-exporter

GPL-3.0-or-later

455KB
4.5K SLoC

imessage-database

This library provides interfaces to interact with iMessage Databases.

Installation

This library is available on crates.io.

Documentation

Documentation is available on docs.rs.

Example

use imessage_database::{
    error::table::TableError,
    tables::{
        messages::Message,
        table::{get_connection, Table},
    },
    util::dirs::default_db_path,
};

fn iter_messages() -> Result<(), TableError> {
    /// Create a read-only connection to an iMessage database
    let db = get_connection(&default_db_path()).unwrap();

    /// Create SQL statement
    let mut statement = Message::get(&db)?;

    /// Execute statement
    let messages = statement
        .query_map([], |row| Ok(Message::from_row(row)))
        .unwrap();

    /// Iterate over each row
    for message in messages {
        let mut msg = Message::extract(message)?;

        /// Parse message body if it was sent from macOS 13.0 or newer
        msg.gen_text(&db);

        /// Emit debug info for each message
        println!("{:?}", msg)
    }

    Ok(())
}

Dependencies

~27MB
~507K SLoC