10

使用 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 模拟器中崩溃的最简单代码。

异常消息是

“libc++abi.dylib:以 NSException 类型的未捕获异常终止”。

授权是否可能在 iOS 10 beta 1 中根本不起作用?这是 XCode 8 beta 1

什么有效:我使用 Xcode 7.3 和 iOS 9.3 目标构建的 HelthKit 应用程序在硬件 iPhone 5 上的 iOS 10 beta 1 下运行良好。

4

2 回答 2

14

异常消息应该给你一个关于问题所在的提示。从 iOS 10 开始,需要使用说明您的应用为什么要访问用户 HealthKit 数据的使用字符串。您可以在应用的 Info.plist 中指定它们。

于 2016-06-16T14:42:06.347 回答
7

从苹果文档:

在 iOS 10.0 或之后链接的 iOS 应用程序必须在其 Info.plist 文件中包含它需要访问的数据类型的使用描述键,否则它将崩溃。要专门访问和更新 HealthKit 数据,它必须分别包含NSHealthShareUsageDescriptionNSHealthUpdateUsageDescription键。

于 2016-06-18T15:13:59.663 回答