Research Messages.app, com.apple.MobileSMS, iMessage, SMS/RCS surfaces, chat.db, and related private frameworks, agents, daemons, XPC services, scripting hooks, URL schemes, storage, and supported extension APIs on macOS.
This is private, local-only reverse-engineering research. Do not treat private APIs, database access, dyld-cache symbols, app entitlements, AppleScript commands, or SIP-disabled behavior as public-release, App Store, customer-facing, or redistributed surfaces unless that separate analysis is explicitly opened.
| Field | Value |
|---|---|
| Active OS | macOS 26.5.2 |
| Active OS build | 25F84 |
| Xcode path | /Applications/Xcode-beta.app/Contents/Developer |
| SDK comparison | macOS 27.0 SDK |
| SDK path | $(xcrun --show-sdk-path --sdk macosx) |
| Primary app path | /System/Applications/Messages.app |
| Bundle identifier | com.apple.MobileSMS |
| App version | 26.0 |
| App build | 1450.600.61.1.5 |
- Active app path
- App bundle identifier, URL schemes, and scripting flags
- App extension, plugin, URL, AppleScript, and intent surface inventory
- App entitlement snapshot
- AppleScript scripting dictionary
-
chat.dbtable and column inventory without row data -
chat.dbschema/index/trigger capture without row data -
chat.dbrelationship, foreign-key, and trigger-lifecycle capture without row data - Active and SDK framework constellation inventory
- App binary linked-library inventory
- SDK
.tbdsymbol skim forIMCore - Filtered dyld shared cache export probe
- Live dyld cache residency and interface-tooling boundary capture
- LaunchAgent and XPC service inventory
- XPC ownership and entitlement correlation capture
- Public iPhoneOS 27.0 SDK header inventory for Messages, MessageUI, and Shared With You
- Private
.tbdnotification and type-family inventory - Read-only Objective-C runtime metadata capture for IM private frameworks
- Read-only Objective-C runtime metadata capture for IMD persistence, daemon, and MessagesKit surfaces
- Focused hook, XPC, automation, query, and listener runtime inventory
- Bounded app-open log observation
- First-pass notification delivery classification from launchd and SDK symbol evidence
- Bounded app-open notification observer baseline without payload values
- Generated Swift/Objective-C interfaces from dyld cache or SDK metadata
- OS comparison against another macOS build
- Messages app extensions:
MSMessagesAppViewController,MSConversation,MSMessage, andMSSession. - Shared with You / collaboration metadata for app-owned shared state.
- App Intents and App Shortcuts for app-owned actions, not personal Messages access.
MFMessageComposeViewControllerfor user-visible compose/send flows.- macOS Apple Events through
Messages.appfor limited local, user-controlled automation.
These are not equivalent surfaces. A Messages extension lives inside visible user interaction. Shared with You carries app-owned collaboration metadata. App Intents expose app actions. Message UI presents a composer. Apple Events automate a local Mac app with permission and a small scripting dictionary.
Verified from the iPhoneOS 27.0 SDK local headers.
MSConversation exposes:
- participant identifiers scoped to this device:
localParticipantIdentifierandremoteParticipantIdentifiers selectedMessagewhen the extension is invoked from a message in the transcript- staging APIs:
insertMessage,insertSticker,insertText, andinsertAttachment - send APIs:
sendMessage,sendSticker,sendText, andsendAttachment
Important boundary: the send APIs require the extension app to be visible and to have had a recent touch interaction since launch or the last send. This makes them user-present extension operations, not background send primitives.
MSMessagesAppViewController exposes:
activeConversation- presentation style and context
- lifecycle callbacks for becoming active and resigning active
- compact/expanded callbacks for message selection, message receipt, send start, send cancellation, and presentation transitions
- transcript presentation hooks such as
contentSizeThatFits, message tint color, and message corner radius
MSMessage exposes:
sessionfor grouping message updatesisPending- sender participant identifier
- layout, URL payload, expiration, accessibility label, summary text, and send error
Inference: Apple’s supported iMessage extension surface is a constrained UI-extension model for app-specific payloads and transcript UI, with app-owned state encoded through message URLs/layouts and updated through visible user interaction.
MFMessageComposeViewController exposes:
- capability checks:
canSendText,canSendSubject,canSendAttachments, andisSupportedAttachmentUTI - initial
recipients,body,subject, attachments, and optional interactiveMSMessage - attachment APIs for file URLs and data
insertCollaborationItemProviderfor collaboration item providers- delegate completion with
MessageComposeResultCancelled,MessageComposeResultSent, orMessageComposeResultFailed
Important boundary: MessageComposeResultSent means the user sent or queued the message; the actual delivery can still occur later when the device is able to send.
The UPI category adds setUPIVerificationCodeSendCompletion behind the managed com.apple.developer.upi-device-validation entitlement. That completion reports actual SMS transmission only for that narrow managed-entitlement validation flow.
SWCollaborationMetadata exposes:
- globally unique
collaborationIdentifier - local
localIdentifier - app-owned
title - default and user-selected share options
- initiator handle/name fields used for local confirmation, not transmitted to recipients
SWStartCollaborationAction carries collaboration metadata and can be fulfilled with a URL plus collaboration identifier.
SWUpdateCollaborationParticipantsAction carries collaboration metadata plus added and removed SWPersonIdentity arrays.
Inference: Shared With You collaboration APIs model app-owned shared objects and participant changes. They do not expose personal Messages history.
~/Library/Messages/chat.dband attachments.IMCore,IMDPersistence,IMDaemonCore,IMFoundation,IMSharedUtilities, and related IM private frameworks.imagent,IMDPersistenceAgent, transfer/transcoding agents, BlastDoor support, and Messages CloudKit sync components.- Private entitlements such as
com.apple.private.imcore.imdpersistence.database-access,com.apple.private.security.storage.Messages, andcom.apple.MessagesBlastDoorServicemach lookup.
These are research surfaces only. They may explain how the system works locally, but they are not supported integration contracts.
Verified from Messages.app/Contents/Info.plist:
AppleEventSupportedistrue.NSAppleScriptEnabledistrue.OSAScriptingDefinitionisMessages.NSPrincipalClassisSMSApplication.- URL schemes include
sms,sms-private,itms-messages,itms-messagess,imessage,iChat,Messages, andim. - The app advertises
NSUserActivityTypesforcom.apple.Messagesandcom.apple.Messages.StateRestoration. - The app has a shortcut item with type
com.apple.mobilesms.newmessage. - The app declares privacy copy for contacts, location, microphone, camera, media library, SMS data, phone number, photos, call records, and focus status.
Verified with:
sdef /System/Applications/Messages.appThe scripting dictionary exposes:
- service types:
SMS,iMessage,RCS - transfer directions:
incoming,outgoing - transfer states:
preparing,waiting,transferring,finalizing,finished,failed - account connection states:
disconnecting,connected,connecting,disconnected - application elements: read-only
participants,accounts,fileTransfers, andchats - commands:
send,login, andlogout - classes:
participant,account,chat, andfile transfer
Important boundary: send can target a participant or chat, but the dictionary does not expose general historical search, direct chat.db rows, hidden account control, arbitrary message mutation, or remote/server-side iMessage operation.
Verified table inventory from ~/Library/Messages/chat.db without reading row data:
_SqliteDatabasePropertiesattachmentchatchat_handle_joinchat_lookupchat_message_joinchat_recoverable_message_joinchat_servicedeleted_messageshandleindex_state_metricskvtablemessagemessage_attachment_joinmessage_processing_taskpersistent_tasksrecoverable_message_partscheduled_messages_pending_cloudkit_deletesync_chat_slicesync_deleted_attachmentssync_deleted_chatssync_deleted_messagesunsynced_removed_recoverable_messages
High-signal schema notes:
messageis the main message record table. It includes identifiers, text/attributed body fields, service/account fields, delivery/read/send state, attachment cache state, reactions/replies/threading, expressive send style, CloudKit sync fields, safety/off-grid/satellite flags, scheduled send state, and indexing state.chatis the conversation table. It includes GUIDs, style/state, account and service names, display and group identifiers, archive/filter/recovery/deletion state, CloudKit sync fields, and pending review/blackhole flags.handlestores address/person identifiers and service/country fields.- Join tables map chats to handles, chats to messages, messages to attachments, and chats to recoverable message parts.
- Foreign keys confirm cascade relationships for
chat_handle_join,chat_message_join,message_attachment_join,chat_lookup,chat_service,sync_chat_slice, and recoverable-message joins. - Sync and deleted-item tables indicate CloudKit-backed lifecycle bookkeeping.
- SQLite triggers enforce attachment-path cleanup, deleted GUID tracking,
sync_deleted_*bookkeeping, orphan cleanup, plugin cleanup, cached room names, chat-service projection, failed-message metadata, and index-state metrics. persistent_tasksandmessage_processing_taskindicate queued local work, but the first pass did not decode task flags or payload blobs.
No message text, addresses, attachment names, or row counts were captured in this documentation pass.
Verified from codesign -d --entitlements :- /System/Applications/Messages.app.
Notable areas:
- storage:
com.apple.private.security.storage.Messages,MessagesMetaData, and home-relative read-write exceptions for/Library/Messages/,/Library/SMS/, Messages caches, Biome, and media paths - persistence:
com.apple.private.imcore.imdpersistence.database-access - IDS/Madrid:
com.apple.private.ids.messagingvalues includingcom.apple.madrid,com.apple.madrid.lite, and relay values - agents/services: mach lookup exceptions for
IMDPersistenceAgent,IMRemoteURLConnectionAgent,MessagesBlastDoorService,IMTranscoderAgent,identityservicesd,commcenter,telephonyutilities.callservicesdaemon,suggestd.messages, and many collaboration/safety services - CloudKit/social layer: CloudKit SPI, SocialLayer, file provider sharing, Shared With You/collaboration-related privileges
- TCC/privacy: address book, photos, media library, microphone, camera, location, focus status, communication notifications, time-sensitive and critical alerts
- safety/intelligence: communication safety, TextUnderstanding, summarization, translation, message-payload provider, and related private Biome streams
Inference: Messages is a heavily privileged platform app coordinating local database access, IDS transport, content processing, CloudKit sync, safety checks, and local automation. Third-party code should not expect to reproduce this entitlement profile.
Verified active framework/app inventory includes:
- public:
Message.framework,InstantMessage.framework,TelephonyMessagingKit.framework - IM private:
IMCore,IMCorePipeline,IMDPersistence,IMDaemonCore,IMFoundation,IMSharedUtilities,IMSharedUI,IMTransferAgent,IMTransferAgentClient,IMTransferServices,IMTranscoding,IMTranscoderAgent,IMRCSTransfer,IMDMessageServices,IMAssistantCore,IMAVCore - Messages private:
MessagesKit,MessagesHelperKit,MessagesCloudSync,MessagesBlastDoorSupport,MessagesSettingsUI,MessageProtection,MessageSecurity,MessageUIMacHelper - Siri/agent adjacent:
SiriMessagesFlow,SiriMessagesFlowCommon,SiriMessagesUI,SiriMessageBus,SiriMessageTypes
The active app binary links to iOSSupport frameworks including ChatKit, IMCore, and IMSharedUtilities, plus macOS private frameworks including IDSFoundation, FTServices, and FTClientServices.
Many private framework directories do not expose a direct on-disk Mach-O binary at the framework root on this macOS build. Their live implementations appear to be dyld shared cache residents or otherwise represented through framework metadata/stubs. Use dyld shared cache extraction for live symbol work.
Verified by the local spelunk objc-runtime helper loading:
/System/Library/PrivateFrameworks/IMCore.framework/IMCore/System/Library/PrivateFrameworks/IMSharedUtilities.framework/IMSharedUtilities/System/Library/PrivateFrameworks/IMFoundation.framework/IMFoundation/System/Library/PrivateFrameworks/IMDPersistence.framework/IMDPersistence/System/Library/PrivateFrameworks/IMDaemonCore.framework/IMDaemonCore/System/Library/PrivateFrameworks/MessagesKit.framework/MessagesKit
The narrow IM* capture produced 888 Objective-C classes and 150 Objective-C protocols on macOS 26.5.2. This is runtime metadata, not a generated public interface; method and property names are observed selectors/properties and still need behavior confirmation before being treated as stable contracts.
The IMD*, IMDaemon*, and selected CK* MessagesKit capture produced 456 Objective-C classes and 105 Objective-C protocols. See types.md for the stable type-family inventory.
High-signal observed class families:
- account and identity:
IMAccount,IMAccountController,IMAccountUtilities,IMHandle,IMAddressBook,IMContactStore,IMBusinessNameManager - chat/message model:
IMChat,IMMessage,IMHandle,IMChatHistoryController,IMChatRegistry,IMChatItem,IMMessagePartChatItem,IMAssociatedMessageItem - attachments and transfer:
IMAttachment,IMAttachmentBlastdoor,IMFileTransfer, preview generators, and attachment metadata classes - persistence/indexing:
IMDDatabase,IMDDatabaseClient,IMDChatRecord,IMDMessageRecord,IMDAttachmentRecord,IMDCoreSpotlight*indexers - automation/hooks:
IMAutomation,IMAutomationMessageSend,IMAutomationBatchMessageOperations,IMCoreAutomationHook,IMCoreAutomationNotifications - collaboration and shared state:
IMCollaboration*,IMCloudKit*, nickname, pinning, and sync-related classes
Observed selector/property examples:
IMAccountexposes account state, aliases, relay capability, registration, login, service, block-list, buddy-list, profile, andcanSendMessagesproperties/selectors.IMChatand adjacent chat classes expose local conversation state and history/controller relationships, but this capture does not prove a supported send or mutation contract outside the platform app.IMD*classes line up with thechat.dbschema and Spotlight/CloudKit lifecycle tables, supporting the persistence-agent model described above.
Inference: Messages' local architecture has a visible split between user/app model classes (IMAccount, IMChat, IMMessage, attachments), daemon/persistence classes (IMD*), and explicit automation/testing hooks (IMAutomation*, IMCoreAutomation*). The runtime metadata confirms these names exist in the active OS runtime; it does not establish that third-party processes can call them safely or with sufficient entitlements.
See runtime.md for app-open log observations covering imagent, IMDPersistenceAgent, mark-read database calls, App Intents focus filtering, Spotlight indexing, and the message-entry UI responder.
See hooks.md for the focused hook-surface inventory generated from Objective-C runtime metadata.
High-signal private hook families include:
IMDaemonChatSendMessageProtocol, with private selectors for send, edit, scheduled-message, group-photo, attachment resend, junk-report, and translation operationsIMDaemonChatModifyReadStateProtocol, with mark-read, mark-saved, expressive-send, and notify-recipient selectorsIMDaemonAutomationProtocol, with explicit automation, simulation, replay, and test selectorsIMDMessageQueries,IMDChatQueries, andIMDNotificationQueries, with persistence/query selectors that line up withchat.db, unread counts, index state, and SharePlay notification state- listener and routing classes such as
IMDIncomingClientConnectionListener,IMDPersistenceServiceListener,IMDBackgroundMessagingAPIListener,IMDaemonCore.ClientConnection, andIMDaemonCore.XPCClientConnectionRouteProvider
Inference: Messages' private hooks are protocol and daemon oriented. They are better evidence for Apple-client-to-daemon architecture than for a supported local integration path.
Verified from the macOS 27.0 SDK IMCore.tbd:
IMCorereexportsInstantMessageandIMFoundation.- The SDK includes many Swift symbols under the
IMCore.ImportExportnamespace. - High-signal demangled symbol families include attachment, participant, and conversation import/export iterators, async batches, export statistics, progress reporting, and CloudKit sync completion state.
Inference: the SDK-visible IMCore export surface includes modern Swift import/export plumbing for records, attachments, participants, and conversations, not only legacy Objective-C IM types.
Demangled IMCore families from the macOS 27.0 SDK include:
ImportExportRecordExportIteratingImportExportProgressReportingImportExport.AttachmentExportIteratorImportExport.ParticipantExportIteratorImportExport.ConversationExportIteratorImportExport.ArchiveImportIteratorImportExport.Attachment,Participant, andConversationbatch typesImportExport.ExportOptionsImportExport.ExportStatisticsImportExport.RecordCountsImportExport.AttachmentDownloaderImportExport.MessageExportExclusionFilter
Observed MessageExportExclusionFilter cases include promotional, transactional, balloon plugins, junk, system, chat bot, default, deleted, expired, all cases, and business.
Verified with:
dyld_info -exports -objc -all_dyld_cacheThe active arm64e shared cache is split under /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/.
Observed export/symbol hints:
IMCoreAttachmentBlastdoorErrorDomainIMCoreDuetLogHandleIMCoreSpotlightIndexReasonIsCriticalIMCoreSpotlightIndexReasonIsIncomingMessageIMCouldBeChatBotKeyIMIsRunningInIMDPersistenceAgentIMIsRunningInImagentIMiMessagePrivacyPolicyNotificationMessageServiceLogHandleNSStringFromIMCoreSpotlightIndexReasonNSStringFromIMPersistentTaskExecutorStatusNSStringFromIMPersistentTaskLaneIMCoreAutomationNotificationsIMCoreRecentsMetadataBuilderIMCoreSpotlightUtilities
Boundary: dyld_info reported that it cannot print live Objective-C metadata from dylibs in the dyld shared cache. A later class/protocol/selector pass needs a different extraction path or a controlled runtime helper.
Verified LaunchAgents:
| Label | Program | High-signal services or triggers |
|---|---|---|
com.apple.imagent |
IMCore.framework/imagent.app |
Mach services for APS/imagent, Messages notifications delegates, Spotlight messages, incoming-call-filter, Madrid IDS wake; launch events for AuthKit user info and com.apple.private.IMCore.LoggedIntoHSA2 |
com.apple.imautomatichistorydeletionagent |
IMDPersistence.framework/IMAutomaticHistoryDeletionAgent.app |
daily xpc activity plus com.apple.imautomatichistorydeletionagent.prefchange |
com.apple.imcore.imtransferagent |
IMTransferServices.framework/IMTransferAgent.app |
Mach service com.apple.imtransferservices.IMTransferAgent; IDS transfer launch notification |
Verified XPC services:
| Bundle identifier | Visible name | Notes |
|---|---|---|
com.apple.imdmessageservices.IMDMessageServicesAgent |
Message Services Agent | application XPC service |
com.apple.imdpersistence.IMDPersistenceAgent |
Messages Database Agent | user XPC service with explicit Apple-signed allowed-client list |
com.apple.imtranscoding.IMTranscoderAgent |
Messages Transcoding Agent | application XPC service with GPU access |
IMDPersistenceAgent.xpc allowed clients include Apple-signed MobileSMS.spotlight, imagent, IMDMessageServicesAgent, Safari variants, iChat, AddressBook.FaceTimeService, imtool, assistantd, ContactsAgent, messages.AssistantExtension, IMAutomaticHistoryDeletionAgent, messages.StorageManagementExtension, Control Center, Photos, Game Center, FaceTime, Finder, SocialLayer, CoreDuet, People, Ask To, Suggestd, OmniSearch, diagnostics, and internal incubation tools.
Inference: database access is brokered through a privileged XPC service with a tight Apple-signed client allowlist, not a generic local IPC endpoint for third-party callers.
- Which live dyld-cache classes and methods back
IMChat,IMHandle,IMAccount, and scripting bridge keys on macOS 26.5.2? - Which XPC messages are exchanged between
Messages.app,imagent,IMDPersistenceAgent,MessagesBlastDoorService, and transfer/transcoding agents? - Which
chat.dbtask flags and message state integer values map to named IMCore constants? - Which fields are stable across macOS 26.5.2 and macOS 27.0 SDK assumptions?
- Which remaining unclassified notification constants are posted in-process, through distributed notification center, through Darwin notify, or only used as local symbols?
- Which Apple Events operations require app launch, explicit Automation consent, or foreground user context?
docs/frameworks/messages-phone-status.mdresearch/Messages/README.mddocs/frameworks/Messages/surfaces.mddocs/frameworks/Messages/agents.mddocs/frameworks/Messages/xpc-ownership.mddocs/frameworks/Messages/storage.mddocs/frameworks/Messages/symbols.mddocs/frameworks/Messages/notifications.mddocs/frameworks/Messages/types.mddocs/frameworks/Messages/hooks.mddocs/frameworks/Messages/runtime.mddocs/frameworks/Messages/experiments.md- Apple Developer Documentation: Messages framework
- Apple Developer Documentation: Shared with You framework
- Apple Developer Documentation: Shared with You Core
SWCollaborationMetadata - Apple Developer Documentation: MessageUI
MFMessageComposeViewController - Apple Developer Documentation: App Intents framework