Лист разрешения HealthKit не отображается

В моем расширении часов я вызываю эту функцию:

func requestAuthorization() {
        let healthStore = HKHealthStore()
        let workoutType = HKObjectType.workoutType()
        let heartRateType = HKObjectType.quantityType(forIdentifier: .heartRate)

        //reading
        let readingTypes = Set([heartRateType!, workoutType])

        //writing
        let writingTypes = Set([heartRateType!, workoutType])

        //auth request
        healthStore.requestAuthorization(toShare: writingTypes, read: readingTypes) { (success, error) -> Void in

            if error != nil {
                print("error \(error?.localizedDescription)")
            } else if success {
                self.startButton.setEnabled(true)
            } else if !success {
                self.startButton.setEnabled(false)
            }
        }
    }

И в AppDelegate.swift у меня есть:

func applicationShouldRequestHealthAuthorization(_ application: UIApplication) {
        let healthStore = HKHealthStore()
        healthStore.handleAuthorizationForExtension { (success, error) -> Void in
            //...
        }
    }

Я получаю диалог на своих часах и телефоне, и он открывает приложение на телефоне, когда я говорю это из диалога. У меня проблема в том, что телефонное приложение не отображает лист разрешений, который должен отображаться для разрешения разрешений. Список разрешений упоминается здесь: https://developer.apple.com/reference/healthkit

Что мне нужно сделать, чтобы он появился, чтобы разрешения могли быть предоставлены? В настоящее время я могу предоставить разрешения, зайдя в приложение Health, а затем в источники, выбрав мое приложение и предоставив разрешения таким образом.

Лист разрешения, о котором я говорю, это. введите описание изображения здесь

РЕДАКТИРОВАТЬ: я получаю эту ошибку напечатан из вызова метода requestAuthorization().

error Optional("Required usage description strings not present in app\'s Info.plist")

1 ответ

С помощью этого TestHealthKit мне удалось открыть лист разрешений аптечки.

        // 4.  Request HealthKit authorization
    (HealthStore as! HKHealthStore).requestAuthorizationToShareTypes(nil, readTypes: dataTypesToRead()) { (success, error) -> Void in

        //            self.CheckAuthorizationStatusFor(self.dataTypesToRead())
        if (success)
        {

            SuccessCompletion(success: success)
            return;
        }
        else
        {

            FailureCompletion(err: error)
            return;
        }

    }

Кроме того, проверьте, активировали ли вы права, как показано. Entitlements,

Как указано в документации, вы должны добавить необходимые ключи в.plist, если ваше приложение использует API, которые считывают или обновляют данные о состоянии здоровья пользователей.

NSHealthShareUsageDescription - Сообщение для пользователя, объясняющее, почему приложение запросило разрешение на чтение образцов из хранилища HealthKit.

NSHealthUpdateUsageDescription - Сообщение для пользователя, объясняющее, почему приложение запросило разрешение на сохранение образцов в хранилище HealthKit.

Другие вопросы по тегам