Use the MSMessage class to create interactive message objects. To create a message that can be updated by the conversation’s participants, instantiate a message with a session using the init(session:) method. Otherwise, instantiate the message using the init() method.


Setting Required Properties

Before using an MSMessage object, you must set both its url and layout properties:

  • Encode app-specific data in the message’s url property. Use the NSURLComponents class to easily access, set, or modify a URL’s component parts.

  • Define the message’s appearance using the message’s layout property. Use the MSMessageTemplateLayout class to set an image, video, or audio file for the message. This class also defines a number of text elements, such as the message’s title, subtitle, caption, and subcaption.

Handling Messages

When a message from an iMessage app arrives, the following situations generate their corresponding events:

  • The message is associated with an existing session. The previous message is moved to the bottom of the transcript and updated with the new message’s content.

  • Your iMessage app is running. The system calls your MSMessagesAppViewController object’s didReceive(_:conversation:) method.

When a user selects a message from an iMessage app, the behavior varies depending on where the message appears:

  • iOS device with the iMessage app installed.

  • iOS device without the iMessage app installed. The system opens the App Store for iMessage and prompts the user to install the iMessage app.

  • macOS. The system attempts to open the URL. If the system does not recognize the URL, it displays an error message.


Creating Messages


Initializes a new message that is not part of a session.

init(session: MSSession)

Initializes a new message that is part of the provided session.

Message Properties

var accessibilityLabel: String?

A localized string that describes the message.

var error: Error?

An error object describing why the system failed to send the message.

var isPending: Bool

A Boolean value that indicates whether the message is pending or whether it has been sent or received.

var layout: MSMessageLayout?

A layout object that defines the message’s appearance.

var senderParticipantIdentifier: UUID

A UUID identifying the participant that sent the message.

var session: MSSession?

The session that this message belongs to.

var shouldExpire: Bool

A Boolean value that determines whether the message should expire after being read.

var summaryText: String?

A succinct description of the message.

var url: URL?

A URL that encodes data to be transmitted with the message.


Inherits From