-
<Swift> iOS 건강 데이터 사용하기- HealthKitiOS/개념정리 2022. 3. 18. 16:50
iOS에서 건강 데이터를 사용하기 위해서는 HealthKit을 사용해야 합니다.
HealthKit은 Apple document에서는 다음과 같이 설명 되어 있습니다.
"Access and share health and fitness data while maintaining the user’s privacy and control."
-> 사용자의 개인 정보 및 제어를 유지하면서 건강 및 피트니스 데이터에 엑세스 하고 공유합니다.
HealthKit 데이터 유형은 크게 5개가 있습니다.
1. Characteristic data (특성 데이터)
- 생년월일, 혈액형, 성별, 피부유형과 같이 일반적으로 변경 되지 않는 항목을 나타냅니다.
2. Sample data (샘플 데이터)
- 대부분의 사용자 건강 데이터 특정 시점의 데이터를 나타내는 데이터
3. Workout data (운동 데이터)
- 피트니스 및 운동 활동에 대한 데이터
4. Source data (소스 데이터)
- 데이터를 저장한 앱 또는 기기의 대한 정보가 포함되어 있습니다.
5. Delete objects (삭제된 개체)
- 삭제된 항목의 데이터의 uuid를 임시로 저장하는데 사용한다.
healthkit 을 이용하여 아래와 같은 sample app을 만들어 보겠습니다.
샘플앱 사용할 건강 데이터는 걸음수(stepCount), 걷거나 뛴 거리(distanceWalkingRunning), 심장 박동수 (heartRate), 소모한 칼로리(activityEnergyBurned) 입니다.
우선 xCode에 HealthKit을 적용해야 합니다
1. project 파일에 가서 Signing & Capability에서 healthkit을 추가 합니다HealthKit 추가 2. info.plist에 property list에 추가해줍니다.
info.plist 위의 string 값이 비어있으면 에러를 일으킵니다.
해당 string 값은 아래 권한 부여 화면에서 앱설명 부분에 들어갑니다.
권한 이제 소스에 import HealthKit을 해서 사용하시면 됩니다.
import Protecting User Privacy (사용자 개인 정보 보호)
건강 데이터는 민감할 수 있어서 Healthkit은 앱이 공유할 수 있는 정보에 대한 세부적인 제어를 사용자에게 제공합니다.
권한이 주어지면 HKHealthStore()를 사용하여 스토어에 새 샘플을 저장하거나 앱이 저장한 샘플을 관리 할 수 있습니다.
방법은 아래와 같습니다.
let healthStore = HKHealthStore() let read = Set([HKObjectType.quantityType(forIdentifier: .heartRate)!, HKObjectType.quantityType(forIdentifier: .stepCount)!, HKSampleType.quantityType(forIdentifier: .distanceWalkingRunning)!, HKSampleType.quantityType(forIdentifier: .activeEnergyBurned)!]) let share = Set([HKObjectType.quantityType(forIdentifier: .heartRate)!, HKObjectType.quantityType(forIdentifier: .stepCount)!, HKSampleType.quantityType(forIdentifier: .distanceWalkingRunning)!, HKSampleType.quantityType(forIdentifier: .activeEnergyBurned)!])
먼저 HKHealthStore() 인스턴스를 생성하고 권한을 부여 받을 데이터 들을 Set에 넣어서 상수를 만들어 줍니다.
개인정보 보호를 위해서 데이터 각각의 권한을 모두 부여 받아야 합니다.
권한 로직 이제 위의 상수를 통해서 권한을 허락 받을 수 있는 로직을 만듭니다.
모든 데이터는 success가 되었을 경우에만 데이터를 받아 올 수 있습니다.
위의 로직을 실행하면 아래 캡쳐화면과 같이 권한을 부여 할 수 있는 화면이 나옵니다
모두 허용해야 요건에 맞는 데이터를 사용 할 수 있습니다.
권한 다음은 위에서 말한 4개의 데이터 걸음수(stepCount), 걷거나 뛴 거리(distanceWalkingRunning), 심장 박동수 (heartRate), 소모한 칼로리(activityEnergyBurned)를 가져오는 로직입니다.
심장박동수 가져오기 발걸음수 가져오기 거리 가져오기 칼로리 가져오기 HKObjectType은 HealthKitStore에 대한 특정 유형의 데이터를 식별하는 클래스입니다.
HKObjectType.quantityType은 identifier에 대한 수량 유형을 반환합니다.
startDate는 지금순간 부터 한시간 전까지의 날짜시간 정보를 가지고 있습니다.
옵션 값의 .strictStartDate 는 샘플이 무조건 시간 기간 안에 있어야 합니다.
HKQuery는 HealthKit안에서 모든 query class를 위한 추상 클래스 입니다.
HKQuery.predicateForSamples 는 특정 시간동안의 특정 데이터를 반환 합니다.
HKQuantityType 은 숫자값을 저장하는 샘플 유형입니다.
HKStaticsQuery는 일치하는 수량 샘플 집합에 대해 통계를 수행하고 결과를 반환하는 쿼리입니다.
HKUnit은 HealthKit 내에서 측정 단위를 관리하기 위한 클래스입니다.
그 중 count는 카운트 측정을 위한 Healthkit 단위입니다.
mile은 길이를 마일로 측정하기 위한 HealthKit 단위입니다.
kilocalorie는 에너지를 킬로칼로리 단위로 측정하기 위한 HealthKit 단위를 반환합니다.
각 버튼 실행 화면 오늘은 HealthKit에 대해 일부만 보았습니다.
더 많은 내용은 https://developer.apple.com/documentation/healthkit 에 가시면 보실 수 있습니다.
'iOS > 개념정리' 카테고리의 다른 글
<Swift>PHPicker - 사진앱 이용하기 (1) 2022.08.05 대칭 / 비대칭 양방향 암호화 (2) 2022.04.06 <Swift> 코드 컨벤션 (0) 2022.03.05 <Swift> Properties (0) 2022.02.22 <Swift> Delegate 활용 (0) 2022.02.21