<!--
{
  "availability" : [
    "iOS: 16.0.0 -",
    "iPadOS: 16.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 9.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreMotion",
  "identifier" : "/documentation/CoreMotion/CMWaterSubmersionManager",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Core Motion"
    ],
    "preciseIdentifier" : "c:objc(cs)CMWaterSubmersionManager"
  },
  "title" : "CMWaterSubmersionManager"
}
-->

# CMWaterSubmersionManager

An object for managing the collection of pressure and temperature data during submersion.

```
class CMWaterSubmersionManager
```

## Overview

Use this class to receive live depth, water pressure, and water temperature data on Apple Watch Ultra.

Start by assigning a usage description using the <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/NSMotionUsageDescription> key in your app target’s information property list. You also need to include an entitlement to access the live submersion data.

To access data for dives with a maximum depth of 6 m, add the Shallow Depth and Pressure capability to your app. For more information, see <doc://com.apple.documentation/documentation/Xcode/adding-capabilities-to-your-app>.

To enable a maximum depth of 40 m, you must apply for the full Submerged Depth and Pressure entitlement. For more information, see [Express interest in the Submerged Depth and Pressure API](https://developer.apple.com/contact/request/submerged-depth-pressure-api/).

> Note:
> As the wearer approaches the maximum depth, the system sends a measurement with an ``doc://com.apple.coremotion/documentation/CoreMotion/CMWaterSubmersionMeasurement/DepthState/approachingMaxDepth`` submersion state. When they pass the maximum depth, it sends a ``doc://com.apple.coremotion/documentation/CoreMotion/CMWaterSubmersionMeasurement/DepthState/pastMaxDepth`` state, and if they continue to descent past the maximum depth, it sends a ``doc://com.apple.coremotion/documentation/CoreMotion/CMWaterSubmersionMeasurement/DepthState/sensorDepthError`` state.

Next, check whether submersion data is available.

```swift
guard CMWaterSubmersionManager.waterSubmersionAvailable else {
    return false
}
```

If the [`waterSubmersionAvailable`](/documentation/CoreMotion/CMWaterSubmersionManager/waterSubmersionAvailable) property is <doc://com.apple.documentation/documentation/Swift/true>, instantiate a [`CMWaterSubmersionManager`](/documentation/CoreMotion/CMWaterSubmersionManager) object and assign a delegate.

```swift
// Instantiate the submersion manager.
submersionManager = CMWaterSubmersionManager()


// Assign the submersion manager delegate.
submersionManager.delegate = self
```

Your delegate then begins receiving updates from the system. For more information, see [Accessing submersion data](/documentation/CoreMotion/accessing-submersion-data).

## Topics

### Setting the delegate

[`var delegate: (any CMWaterSubmersionManagerDelegate)?`](/documentation/CoreMotion/CMWaterSubmersionManager/delegate)

The object that receives updates about submersion data and events.

### Checking availability and authorization

[`class var waterSubmersionAvailable: Bool`](/documentation/CoreMotion/CMWaterSubmersionManager/waterSubmersionAvailable)

A Boolean value indicating whether the current device supports the submersion manager.

[`class var authorizationStatus: CMAuthorizationStatus`](/documentation/CoreMotion/CMWaterSubmersionManager/authorizationStatus)

A value indicating whether the app has user authorization to receive submersion data.

### Accessing the maximum depth

[`var maximumDepth: Measurement<UnitLength>?`](/documentation/CoreMotion/CMWaterSubmersionManager/maximumDepth)

The maximum depth supported by the water submersion manager.

## Relationships

### Conforms To

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

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

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

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

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

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

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

---

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)