Skip to content

deccylol/iMessageWrapped

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

iMessageWrapped

UI for visualizing data and relationships from iMessage's chat.db. More complete being the year-in-review stories feature on the dashboard.

chat.db

Since there is no public API for messages, this is a macOS app and will not support iOS. Typically, the database file lives at ~/Library/Messages/chat.db. The two files chat.db-shm and chat.db-wal are shared memory and write-ahead log files used for concurrent access. However, it is not good practice to modify the original chat.db provided by iMessage. This project will not write to the database, however it is strongly recommended to copy chat.db elsewhere in the file-system.

iMessageWrapped will copy the provided chat.db to a temporary directory and create new shared memory and log files.

That is, you should copy ~/Library/Messages/chat.db somewhere else, then give this copy to iMessageWrapped so it can make another copy.

Architecture

Unidirectional from data to the UI.

App

Manages the entry-point and high-level state: onboarding, loading, presentation.

Data

Manages the database and it's entities (Chat, Message, Handle) using GRDB to bridge the SQL to Codable Swift structures.

Domain

Logic and analysis for interpreting data. Creates snapshots (e.g., this calendar year) and pre-processes the data. Defines StoryGenerators for additional filters and results for the UI format. Interacts with the Contacts API to resolve phone numbers and contact photos.

Interface

Presentation and rendering for displaying data from the domain.

Permissions

  • Contacts for identifying phone numbers and photographs to show them in the UI
  • File-system to access chat.db

New Integration

Analysis in Dashboard

Total WIP, these typically are written in Domain/Analyzers/ and displayed in the dashboard view.

Currently:

  • A chart to show volume over time
  • Ghosted threads where you haven't responded in 7+ days

Stories

New stories land in Domain/Stories/Generators/. Each new StoryGenerator requires the StoryContext describing messages and handles that can be filtered for your target result. The end product is a StoryPage with the relevant information to display. Each StoryPage is tied to a Interface/Stories/StoryLayouts/ to describe the appearance in the UI. New stories must be registered in Domain/Stories/StoryOrchestrator.swift. (but I don't want to keep adding them to the static factory)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages