16

Hi I'm writing a Fitness App which gets its Data from Apples Health app.

So far so good.

Problem: in Health app it is possible to make manually data entries which makes it possible to cheat.

Question: how can i exclude or ignore this specific Data Entries.

Just the Data with "Source: Health" so i've still the possibility to read data from a random Fitness tracker.

Jack
  • 13,571
  • 6
  • 76
  • 98
Jopi
  • 163
  • 1
  • 4
  • You could basically use HKQuery to limit the search to certain app, look at this method on HKQuery + (NSPredicate *)predicateForObjectsFromSource:(HKSource *)source; – Sandeep Jul 02 '15 at 12:29

2 Answers2

23

Samples in HealthKit that were manually entered by the user will have have a YES value for the HKMetadataKeyWasUserEntered metadata key. To create a predicate that matches only samples that were not user-entered, you could do use the following:

[NSPredicate predicateWithFormat:@"metadata.%K != YES", HKMetadataKeyWasUserEntered];

Note that this must be formulated as value != YES because the value for the key could be YES, NO, or nil and nil implies NO.

Allan
  • 7,039
  • 1
  • 16
  • 26
19

Swift 4:

let predicate = NSPredicate(format: "metadata.%K != YES", HKMetadataKeyWasUserEntered)

And if you have two predicates, useCompoundPredicate:

let compoundPredicate = NSCompoundPredicate(type: .and, subpredicates: [predicate1, predicate2])
Antony Wong
  • 562
  • 5
  • 17