2016-06-15 4 views
9

iOS 10を使用すると、最初のベータ版HealthKitの認証がクラッシュします。 iOSの9.xので実行されていたコードで (私はスウィフト3に変更することを除いて)iOS 10 beta 1で未処理のNSExceptionでHealthKitの認証がクラッシュする

も、最も簡単なの承認がクラッシュ:

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 
    } 
} 

これはとiPhone SEシミュレーターでクラッシュする最も簡単なコードですiOSの10ベータ1

例外メッセージが

「のlibC++ abi.dylibです:タイプ NSExceptioのキャッチされない例外で終了n "である。

iOS 10ベータ1では承認がまったく機能しない可能性がありますか? これはXCodeの8ベータ作品は何1

です:私はiOSの9.3ターゲットとのXcode 7.3を使用して構築されたというのが私のHelthKitアプリケーションが正常に動作iOSの下に10のベータ1のハードウェアのiPhone上で5

+1

申し訳ありませんが、ここでの解決策は何もわかりませんが、私はObjective Cで同じ問題が発生しているとエコーしたいと思っています。Watch Simulatorでは問題なく動作しますが、まずはiPhoneアプリの承認。私はiPhoneアプリのシミュレータを使用して私は同じクラッシュを取得します。これはベータ1のバグでしょうか?リリースノートには記載されていませんが。 –

+0

問題を解決できましたか?最新版(Beta 6)では、 'healthStore.requestAuthorization'の完了ハンドラの括弧内に入ればすぐに内部エラーが発生します – Patrick

+0

はい、回答は解決策 –

答えて

12

例外のメッセージを与える必要がありますあなたはその問題が何であるかについてヒントを得ています。 iOS 10から、あなたのアプリがHealthKitデータへのアクセスを希望する理由を説明する使用文字列は、が必要ですです。あなたのアプリのInfo.plistでそれらを指定することができます。アップルのドキュメントから

+0

そのヒントをありがとう。コンパイル時にはメッセージは表示されません。例外メッセージは「libC++ abi.dylib:NSException型のキャッチされていない例外で終了します」という例外メッセージが表示されます。そのcatchコードには決して到達できません。メソッドのNSErrorリターンパラメータは決して使用されません。 –

+0

このテキストはエンドユーザに表示されますか?plistを翻訳する必要があることを意味しますか、またはアプリレビューアのテキストですか? –

+0

SDKが例外のローカライズされた説明を印刷していないようです。はい、文字列はユーザ​​ーに表示され、ローカライズすることができます。 – Allan

7

:iOSの10.0以降にリンクされ

アンiOSアプリは、そのInfo.plistファイルにそれがアクセスするのか、それがクラッシュする必要のあるデータの種類の使用方法の説明キーを含める必要があります。 HealthKitデータに具体的にアクセスして更新するには、それぞれNSHealthShareUsageDescriptionNSHealthUpdateUsageDescriptionキーを含める必要があります。

関連する問題