在iOS 10 beta 1中,HealthKit授权与未处理的NSException崩溃

时间:2016-06-15 17:17:22

标签: swift health-kit ios10

使用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下运行良好。

2 个答案:

答案 0 :(得分:13)

异常消息应该为您提供有关问题的提示。从iOS 10开始,描述您的应用访问用户HealthKit数据的原因的使用字符串必需。您可以在应用的Info.plist中指定它们。

答案 1 :(得分:7)

来自Apple文档:

  

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