Shallow Depth and Pressure entitlement

Following https://developer.apple.com/documentation/coremotion/accessing_submersion_data I'm trying to "just get it started".

I have a provisioning profile with the Shallow Depth and Pressure active, I have set the com.apple.developer.submerged-depth-and-pressure to true in the entitlements file, and get no errors or warning when compiling and starting the app on my Apple Watch Ultra.

When my view appears, I init the submersion manager with the following code:

guard CMWaterSubmersionManager.waterSubmersionAvailable else {
      return
}

submersionManager = CMWaterSubmersionManager()
submersionManager?.delegate = self

Logger.shared.info("SubmersionManager initialized")

I get the printout SubmersionManager initialized, but then I get:

An error occurred: The operation couldn’t be completed. (CMErrorDomain error 110.)

Googling this error tells me this error means: CMErrorNotEntitled

And I cannot find WHY the app is not entitled.. I find no information that this entitlement is not publicly available or anything.

Be sure to appreciate the difference between "com.apple.developer.submerged-depth-and-pressure" and "com.apple.developer.submerged-shallow-depth-and-pressuer" (note with the -shallow- in there)! The "full" one is apparently the one that will require special approval by request; the "-shallow-" one is apparently more "public".

For others who are reading this: also note that any "old" (mine was from some months ago) Provisioning Profile will have to be re-created. That is, re-created using a distribution certificate (or development certificate?), which in turn needs to be (re)created from a Signing Request plus App ID, such that your App ID may need to be (re)created because that's where you check the Capabilities boxes; including the "Shallow Depth And Pressure" one. Probably seems obvious to others, but I didn't know that Capabilities were something that had to be set up in App Store Connect.

Hi, were you able to fix your problem using the below instructions. I followed and I am still stuck with a (CMErrorDomain error 110.) My identifier has the capability. I made certs after adding the capability. I made provisioning profile which has the identifier with the shallow depth and pressure capability with both iPhone and Watch added to it. I am still getting this error.

Make sure your app complies to all of the below for the Watch App target:

  • Add the entitlement as per @BenKoning's message
  • Add a NSMotionUsageDescription to the Info.plist
  • Add the value underwater-depth to the WKBackgroundModes key in the Info.plist

Once all done it should hopefully work: https://developer.apple.com/documentation/coremotion/accessing_submersion_data

Shallow Depth and Pressure entitlement
 
 
Q