Я пытаюсь выполнить некоторые действия, вызванные изменениями в Apple Health Kit, вызванными в фоновом режиме моего приложения Swift для iOS.
Вот мой AppDelegate:
var healthManager : HealthManager?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
healthManager = HealthManager.sharedInstance
return true
}
И при инициализации класса HealthManager я разрешаю использование Health Kit и вызываю:
var sampleType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
var predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: HKQueryOptions.StrictStartDate)
var query = HKObserverQuery(sampleType: sampleType, predicate: predicate, updateHandler: stepsChangedHandler)
healthKitStore.executeQuery(query)
healthKitStore.enableBackgroundDeliveryForType(sampleType, frequency: .Immediate, withCompletion: {(succeeded, error) in
if succeeded {
println("Enabled background delivery of step changes")
} else {
if let theError = error {
print("Failed to enable background delivery of step changed. ")
println("Error = \(theError)")
}
}
})
Это прекрасно работает, когда приложение открыто — stepsChangedHandler вызывается, когда есть обновление комплекта здоровья, но когда приложение не в фокусе, оно никогда не вызывается. Я искал вокруг и нашел несколько идей, но ни одно из исправлений, похоже, не сработало для меня.
Спасибо!