I was recently implementing the Fall Detection API in Swift/SwiftUI for watchOS, and I had a lot of trouble getting it working. The documentation was very sparse, and I ended up wasting a lot of hours trying to figure out how to use the API. I was finally able to get it working after about 95% of the way through, but I was still stuck on one error “Fall Detection entitlement is required for this API”. Thanks to Brett Best from the iOS Developer community on Slack, who is an expert in iOS development. Brett was able to help me figure out the last piece of the puzzle, and I was finally able to get the API working. I was so relieved to finally have it working, and I decided to write this article to help others who might be struggling with the same issue.
In this article, I will walk you through the steps on how to use the Fall Detection API in Swift for watchOS. I will also provide some tips that I learned along the way that will hopefully help you avoid some of the same pitfalls that I did.
The Fall Detection API in watchOS allows you to detect when a wearer falls and take appropriate action. This can be used to send an emergency notification, call for help, or simply notify the wearer that they have fallen.
To use the Fall Detection API, you must first apply for the entitlement from Apple using this link. After filling in all the details and submitting the request it normally takes 2–3 days to get a response from Apple. Once you have been granted the entitlement you will receive an email from Apple.
Once your request gets approved then comes the fun part. Below are the four steps which will let see the API in action in no time:
Step 1:
Add the following keys to your app’s Info.plist file:
- NSFallDetectionUsageDescription
The NSFallDetectionUsageDescription key is a string that describes why your app needs access to the Fall Detection API.
Step 2:
Enable the Fall Detection Notifications capability in your developer account. To do that go to your developer account then go to identifiers and select your desired app identifier. Then go to additional capabilities and enable the Fall detection Notifications and click save.
Step 3:
Add the entitlements key to your entitlements file in Xcode. Add ‘com.apple.developer.health.fall-detection’ as Key, ‘Boolean’ as Type, and ‘Yes’ as Value.
Step 4:
Start using the Fall Detection API. The following code shows how to request authorization from the user and handle a fall event:
import CoreMotion
class FallDetectionManager: NSObject, CMFallDetectionDelegate {
let fallDetectionManager = CMFallDetectionManager()
override init() {
super.init()
fallDetectionManager.delegate = self
fallDetectionManager.requestAuthorization { status in
switch status {
case .notDetermined:
print("notDetermined")
case .restricted:
print("restricted")
case .denied:
print("denied")
case .authorized:
print("authorized")
@unknown default:
print("unknown")
}
}
}
func fallDetectionManager(_ fallDetectionManager: CMFallDetectionManager, didDetect event: CMFallDetectionEvent) async {
print("fall detected!", event.date, event.resolution.rawValue)
}
}
To use that all you need to do is this
struct DetectionView: View {
let fallDetectionManager = FallDetectionManager()
var body: some View {
Text("Fall detection in process...")
}
}
This code will request authorization from the user to use the Fall Detection API. If the user grants permission,
the delegate will then listen for fall events. When a fall event is detected, the code will print a message to the console. Now the print message contains two values the ‘event.date’ when the fall was detected and the ‘event.resolution.rawValue’ against that fall detection notification.
And that is all it takes to implement Apple’s Fall Detection API for watchOS.
Oh, wait! I am not done yet. 😎
How are going to test this API? 🤔
Well, luckily Xcode makes that really easy for us. Run the app using any watch simulator but it must be a Series 4 or later. Once the app is launched you will see the permission alerts as shown in the screenshots above, after allowing the permission. Select your simulator and from the menu bar go to Features > Simulate Fall and select any resolution you want. You will see the date and the response you have chosen printed in the console.🤯
Furthermore, the fall detection resolution is an enum and these are all the cases.
Alright, I am done. This was epic, The Fall Detection API is a powerful tool that can be used to help people who are at risk of falling. I hope you enjoyed it and found this article helpful. If you have any questions, please feel free to leave a comment below. And if you’re interested in learning more about the Fall Detection API, I encourage you to check out the Apple Developer documentation.