<!--
{
  "availability" : [
    "iOS: 27.0.0 -",
    "iOSAppExtension: -",
    "iPadOS: 27.0.0 -",
    "macCatalyst: 27.0.0 -",
    "macOS: 27.0.0 -",
    "tvOS: 27.0.0 -",
    "visionOS: 27.0.0 -",
    "watchOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "NowPlaying",
  "identifier" : "/documentation/NowPlaying/MediaSession",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Now Playing"
    ],
    "preciseIdentifier" : "s:10NowPlaying12MediaSessionC"
  },
  "title" : "MediaSession"
}
-->

# MediaSession

A local Now Playing session that publishes metadata and commands to the system.

```
@MainActor class MediaSession<Representable> where Representable : MediaSessionRepresentable
```

## Overview

Use a session to represent media playback happening on the current device. The session
automatically observes your [`MediaSessionRepresentable`](/documentation/NowPlaying/MediaSessionRepresentable) model and syncs changes to the system’s
Now Playing interface.

For more information, see [Publishing media sessions](/documentation/NowPlaying/publishing-media-sessions)

Create a session by providing a session representable:

```swift
let session = MediaSession(myModel)
```

Call [`requestToBecomeApplicationPrimary()`](/documentation/NowPlaying/MediaSession/requestToBecomeApplicationPrimary()) to make this your app’s primary Now Playing
session when you want to display playback controls:

```swift
try await session.requestToBecomeApplicationPrimary()
```

## Topics

### Initializers

[`init(Representable)`](/documentation/NowPlaying/MediaSession/init(_:))

Creates a new local Now Playing session.

### Instance Properties

[`var canBecomeApplicationPrimary: Bool`](/documentation/NowPlaying/MediaSession/canBecomeApplicationPrimary)

A Boolean value that indicates whether this session can become the app’s primary session.

[`let id: String`](/documentation/NowPlaying/MediaSession/id)

The unique identifier for this session.

[`var isApplicationPrimary: Bool`](/documentation/NowPlaying/MediaSession/isApplicationPrimary)

A Boolean value that indicates whether this is currently the primary application session.

[`var isSystemPrimary: Bool`](/documentation/NowPlaying/MediaSession/isSystemPrimary)

A Boolean value that indicates whether this is currently the primary system session.

### Instance Methods

[`func requestToBecomeApplicationPrimary() async throws`](/documentation/NowPlaying/MediaSession/requestToBecomeApplicationPrimary())

Attempts to make this session your app’s primary media session.

[`func requestToBecomeSystemPrimary() async throws`](/documentation/NowPlaying/MediaSession/requestToBecomeSystemPrimary())

Requests to make this session the primary system media session.

## Relationships

### Conforms To

[`Observable`](/documentation/Observation/Observable)

[`SendableMetatype`](/documentation/Swift/SendableMetatype)

[`Identifiable`](/documentation/Swift/Identifiable)

[`Sendable`](/documentation/Swift/Sendable)

[`Copyable`](/documentation/Swift/Copyable)

[`Escapable`](/documentation/Swift/Escapable)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)