Swift 3: запрос количества шагов из аптечки

Обновлено: я пытаюсь вызвать функцию, которая обращается к HealthKit и возвращает количество шагов, выполненных в этот день.

Я создал функцию и сейчас пытаюсь ее вызвать. Код для функции выглядит следующим образом:

//Reading data from Health app.
func todayTotalSteps (input: String, completion: @escaping (_ stepRetrieved: Double) -> Void){

    // Define the Step Quantity Type.
    let stepsCount = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)

    // Get the start of the day.
    let date = NSDate()
    let calendar = Calendar(identifier: Calendar.Identifier.gregorian)
    let newDate = calendar.startOfDay(for: date as Date)
    let yesterday = NSCalendar.current.date(byAdding: .day, value: -1, to: Date())
    let now = Date()

    // Set the predicates & interval
    let predicate = HKQuery.predicateForSamples(withStart: newDate as Date, end: NSDate() as Date, options: .strictStartDate)
    let interval: NSDateComponents = NSDateComponents()

    interval.day = 1

    //Perform the Query
    let query = HKStatisticsCollectionQuery(quantityType: stepsCount!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: newDate as Date, intervalComponents: interval as DateComponents)
    query.initialResultsHandler = {query, results, error in

        if error != nil {
            // Something went wrong.
            return
        }

        if let  myResults = results{
            myResults.enumerateStatistics(from: yesterday! as Date, to: now as Date){
                statistics, stop in

                if let quantity = statistics.sumQuantity(){
                    let steps = quantity.doubleValue(for: HKUnit.count())

                    print("Steps = \(steps)")
                    completion(steps)
                }
            }
        }
    }
    healthStore.execute(query)


}

Я создаю действие кнопки, и внутри него я пытаюсь вызвать функцию todayTotalSteps. Я включил разрешения HealthKit в другой функции. Запуск приложения на моем iPhone 5 работает нормально до тех пор, пока я не добавлю функцию todayTotalSteps и кнопку с ее действием, затем, когда я нажимаю на добавленную кнопку, я получаю следующую ошибку, и больше ничего не происходит. В области отладки написано:

"HealthkitAccess [267: 13336] [запрос] Ошибка активации запроса: Ошибка Domain=com.apple.healthkit Code=5 " Авторизация не определена " UserInfo={NSLocalizedDescription= Авторизация не определена}"

Функция кнопки написана ниже:

@IBAction func getSteps(_ sender: Any) {
    todayTotalSteps(input: "commands"){stepRetrieved in print(stepRetrieved)
}

Я использую Swift 3, Xcode 8. Я новичок в Swift, и я был бы очень признателен, если бы все это заработало! Спасибо!

2 ответа

Новый HK требует, чтобы вы запросили разрешение пользователя, прежде чем получать какие-либо данные. В своем новом обновлении они упомянули:

"Важно Приложение iOS, связанное с iOS 10.0 или после нее, должно включить в свой файл Info.plist ключи описания использования для типов данных, к которым необходимо получить доступ, иначе произойдет сбой. Для доступа и обновления данных HealthKit, в частности, оно должно включать NSHealthShareUsageDescription и NSHealthUpdateUsageDescription keys. " https://developer.apple.com/reference/healthkit

@IBAction func getSteps(_ sender: Any) {
    todayTotalSteps(input: "commands") { stepRetrieved in
        print(stepRetrieved) 
    }
}
Другие вопросы по тегам