Количество шагов всегда "0", используя healthKit в Swift - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь подсчитать количество шагов за последние 7 дней, но оно всегда равно нулю. Но когда я открываю приложение здоровья в iPhone, тогда это более 3000 шагов. Даже я также добавил свойство Конфиденциальность - Описание использования ресурса Health и Конфиденциальность - Описание использования обновления Health в файле .plist. Вот мой код

var healthScore = HKHealthStore()

override func viewDidLoad() {
    super.viewDidLoad()
    // Access Step Count
    let healthKitTypes: Set = [ HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)! ]
    // Check for Authorization
    healthScore.requestAuthorization(toShare: healthKitTypes, read: healthKitTypes) { (bool, error) in
        if (bool) {
            // Authorization Successful
            self.getSteps { (result) in
                DispatchQueue.main.async {
                    let stepCount = String(Int(result))
                    self.stepLbl.text = String(stepCount)
                }
            }
        }
    }
}

func getSteps(completion: @escaping (Double) -> Void){
    let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!

    let now = Date()
    let exactlySevenDaysAgo = Calendar.current.date(byAdding: DateComponents(day: -7), to: now)!
    let predicate = HKQuery.predicateForSamples(withStart: exactlySevenDaysAgo, end: now, options: .strictStartDate)

    let query = HKStatisticsQuery(quantityType: stepsQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { (_, result, error) in
        var resultCount = 0.0

        guard let result = result else {
            print("\(String(describing: error?.localizedDescription)) ")
            completion(resultCount)
            return
        }

        if let sum = result.sumQuantity() {
            resultCount = sum.doubleValue(for: HKUnit.count())
        }

        DispatchQueue.main.async {
            completion(resultCount)
        }
    }

    healthScore.execute(query)
}

В консоли я проверил, правильны ли даты, теперь вот скриншот enter image description here

...