I'm trying to collect health data in my Apple Watch application but when I call healthStore.requestAuthorization my app always crashes. I have set NSHealthShareUsageDescription and NSHealthUpdateUsageDescription in Info.plist as required but it still crashes. I started a new project and am just trying to request authorisation, there is no other functionality that could affect it. Any ideas why this is? Thanks for any help.
healthStore.requestauthorization() crashes when called
I was having the same issue using SwiftUI. But building a new project, using storyboards, revealed that the error was with my Info.plist strings. Apparently just a word or two is insuffcient.
Hopefully we'll get error messages passed through in SwiftUI soon.
Using longer strings solved my issue. I really hope this helps.
Cheers.
Thanks for the response. This still hasn't fixed the issue for me though. I'm using storyboards and my Info.plist strings are a length that should be suitable. No error is printed to the console so I have no reference as to what the problem could be.
I'm also experiencong the same issue - until Xcode 11.3, crash was happening without error message. With Xcode 11.4, the error displayed is:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSHealthUpdateUsageDescription must be set in the app's Info.plist in order to request write authorization for the following types: HKQuantityTypeIdentifierDietaryWater'
The string `NSHealthUpdateUsageDescription` is correctly set, along with `NSHealthShareUsageDescription`.
Stack trace:
*** First throw call stack:
(
0 CoreFoundation 0x04d86f52 __exceptionPreprocess + 370
1 libobjc.A.dylib 0x000d5dfd objc_exception_throw + 49
2 CoreFoundation 0x04d86d5f +[NSException raise:format:] + 95
3 HealthKit 0x004e217e -[HKHealthStore _validateHealthDataPurposeStringsForSharingTypes:readingTypes:isResearchStudy:] + 583
4 HealthKit 0x004e1be9 -[HKHealthStore _validatePurposeStringsForSharingTypes:readingTypes:] + 422
5 HealthKit 0x004e137e -[HKHealthStore requestAuthorizationToShareTypes:readTypes:shouldPrompt:completion:] + 384
6 HealthKit 0x004e10cd -[HKHealthStore requestAuthorizationToShareTypes:readTypes:completion:] + 72
Turns out the permissions strings need to be set on the Info.plist that lives in the `WatchKit Extension` directory, not the `Watchkit App` one. When set there, the app correctly prompts for the Health permissions.