CMWaterSubmersionManager returns CMErrorDomain code 105

Dear All,

I am developing a watchOS app for Apple Watch Ultra that needs to use the Apple depth / water submersion APIs with the entitlement.

The app is configured with the shallow depth and pressure entitlement right now, and I have verified that the entitlement is present both in the signed Watch app and in the embedded provisioning profile.

App configuration:

  • Platform: watchOS
  • Device: Apple Watch Ultra
  • Entitlement used: com.apple.developer.submerged-shallow-depth-and-pressure = true
  • Info.plist contains: WKSupportsAutomaticDepthLaunch = true WKBackgroundModes includes underwater-depth

I verified the built Watch app with:

codesign -d --entitlements :- /path/to/WatchApp.app

The output contains:

<key>com.apple.developer.submerged-shallow-depth-and-pressure</key> <true/>

I also verified the embedded provisioning profile with:

security cms -D -i /path/to/WatchApp.app/embedded.mobileprovision

The embedded profile also contains:

<key>com.apple.developer.submerged-shallow-depth-and-pressure</key> <true/>

The built Watch app Info.plist also confirms:

WKSupportsAutomaticDepthLaunch = true WKBackgroundModes includes underwater-depth

At runtime, my diagnostics show:

  • Requested source: Automatic or Apple Sensor
  • Runtime source: Automatic / Apple Sensor
  • Capability resolved by the app: Shallow
  • Resolved provider: Apple Sensor — Shallow
  • Sample source: Apple Shallow
  • CMWaterSubmersionManager.waterSubmersionAvailable: true
  • Depth automation: available
  • Provider start is called
  • First provider event is received
  • Submersion state: unknown
  • No submersion event is received
  • No depth measurement is received
  • No temperature sample is received
  • Provider state: error
  • Raw error: Domain: CMErrorDomain Code: 105 Description: The operation couldn’t be completed.

The relevant runtime failure is:

CMErrorDomain 105

The app also does not appear in:

Apple Watch Settings → General → Auto-Launch → When Submerged

This is the key point that I cannot clarify from the documentation.

My questions are:

  1. Is the entitlement

    com.apple.developer.submerged-shallow-depth-and-pressure

    sufficient for a watchOS app to appear in:

    Apple Watch Settings → General → Auto-Launch → When Submerged?

  2. Is the shallow depth entitlement sufficient to receive runtime events from CMWaterSubmersionManager, including submersion and depth measurements?

  3. Or is the full submerged depth entitlement required for:

    • appearing in the “When Submerged” auto-launch list;
    • receiving CMWaterSubmersionManager submersion events;
    • receiving CMWaterSubmersionManager depth measurements?
  4. What does CMErrorDomain code 105 mean in the context of CMWaterSubmersionManager?

  5. If the shallow entitlement is sufficient, what other conditions could cause CMWaterSubmersionManager to return CMErrorDomain 105 before delivering any submersion or depth samples?

To summarize:

  • The shallow entitlement is present in the source entitlements file.
  • The shallow entitlement is present in the signed Watch app.
  • The shallow entitlement is present in the embedded provisioning profile.
  • The built Info.plist contains WKSupportsAutomaticDepthLaunch = true.
  • The built Info.plist contains WKBackgroundModes = underwater-depth.
  • CMWaterSubmersionManager.waterSubmersionAvailable returns true.
  • The app does not appear in the Watch “When Submerged” list.
  • CMWaterSubmersionManager fails with CMErrorDomain 105 before delivering submersion/depth samples.

Any help will be strongly appreciated.

Thank you.

CMWaterSubmersionManager returns CMErrorDomain code 105
 
 
Q