使用iOS 10,第一个测试版,HealthKit授权崩溃。 使用iOS 9.x运行的代码(除了我改为Swift 3)
即使是最简单的授权崩溃:
func authorizeHealthKit(_ completion: ((success:Bool, error:NSError?) -> Void)!)
{
// 1. Set the types you want to read from HK Store
var healthKitTypesToRead: Set<HKObjectType> = Set<HKObjectType>()
healthKitTypesToRead.insert(HKObjectType.characteristicType(forIdentifier: HKCharacteristicTypeIdentifier.dateOfBirth)!)
// 2. Set the types you want to write to HK Store
var healthKitTypesToWrite: Set<HKSampleType> = Set<HKSampleType>()
// 3. If the store is not available (for instance, iPad) return an error and don't go on.
if !HKHealthStore.isHealthDataAvailable()
{
// do some error handling
return;
}
// 4. Request HealthKit authorization
// iOS 10 beta 1 throws NSException without declaring it:
healthStore.requestAuthorization(toShare: healthKitTypesToWrite, read: healthKitTypesToRead) { (success: Bool, error: NSError?) -> Void in
// do stuff
}
}
这是使用iOS 10 beta 1在iPhone SE模拟器中崩溃的最简单的代码。
异常消息是
&#34; libc ++ abi.dylib:以未捕获的类型异常终止 NSException&#34;
iOS 10 beta 1的授权是否可行? 这是XCode 8 beta 1
什么有效:我使用Xcode 7.3和iOS 9.3目标构建的HelthKit应用程序在硬件iPhone 5上的iOS 10 beta 1下运行良好。
答案 0 :(得分:13)
异常消息应该为您提供有关问题的提示。从iOS 10开始,描述您的应用访问用户HealthKit数据的原因的使用字符串必需。您可以在应用的Info.plist中指定它们。
答案 1 :(得分:7)
来自Apple文档:
iOS 10.0上或之后链接的iOS应用必须在其Info.plist文件中包含其需要访问的数据类型的使用说明密钥,否则将崩溃。要专门访问和更新HealthKit数据,它必须分别包含
NSHealthShareUsageDescription
和NSHealthUpdateUsageDescription
个键。