HealthKit 프레임워크를 사용하여 앱 간에 건강 및 피트니스 데이터를 공유합니다. 개발자들이 사용자 정의 데이터 유형과 단위를 만드는 대신, HealthKit은 데이터 유형과 단위를 사전에 정의된 목록으로 제한합니다. 이렇게 함으로써 모든 앱이 데이터가 무엇을 의미하고 어떻게 사용할 수 있는지 이해합니다.
또한, 이 프레임워크는 많은 하위 클래스를 사용하여 유사한 클래스의 깊은 계층 구조를 생성합니다. 종종 이러한 클래스들은 서로의 중요한 차이점을 가지고 있지만 미묘합니다. 예를 들어, 숫자 값으로 데이터를 저장하는 데 HKQuantitySample 객체를 사용하고 열거형에서 선택한 값을 저장하는 데 HKCategorySample 객체를 사용합니다.
HealthKit은 또한 밀접하게 관련된 클래스 쌍을 사용하여 함께 사용해야 합니다. 예를 들어, HKObject 및 HKObjectType 추상 클래스는 주로 병렬로 상속된 하위 클래스의 계층 구조를 가지고 있습니다. 객체 및 객체 유형을 사용할 때 일치하는 하위 클래스를 사용해야 합니다.
HealthKit Data
HealthKit 은 HealthKit Store에 다양한 데이터 타입을 저장합니다.
Charateristic data
Characteristics은 유저의 생일, 혈액형, 성별, 피부색과 같이 잘 변하지 않습니다. 이러한 데이터는 dateOfBirth( ), bolldType( ), biologicalSex( ), fitzpatrickSkinType( ) 메서드들을 사용하여 HealthKit store로부터 데이터를 직접적으로 읽을 수 있습니다. 앱은 직접 이런 characteristic 데이터를 저장할 수 없으며 이러한 값의 수정, 입력은 건강 앱을 통해서 작업해야 합니다.
Sample data
Sample들은 특정 시간의 특정을 나타냅니다. 모든 샘플 클래스들은 HKObject 클래스의 하위 클래스인 HKSample 클래스의 하위 클래스들입니다.
Workout data
피트니스와 운동 활동에 관한 정보를 저장하는 샘플입니다. HKSample이 HKWorkout의 하위 클래스일동안 다른 서브클래스와 달리 동작합니다.
Source data
샘플의 출처에 대한 정보. HKSourceRevision 객체에는 샘플을 저장한 앱이나 장치에 대한 정보가 포함되어 있습니다. HKDevice 객체에는 데이터를 생성한 하드웨어 장치에 대한 정보가 포함되어 있습니다.
Deleted objects
HealthKit store에서 무언가가 샘플을 삭제한 후 샘플을 나타내는 객체입니다. HealthKit은 HKDeletedObject 인스턴스를 사용하여 삭제된 샘플의 UUID를 임시로 저장합니다. 삭제된 객체를 사용하여 사용자 또는 다른 앱이 객체를 삭제할 때 응답할 수 있습니다. 자세한 내용은 HKAnchoredObjectQuery 및 HKDeletedObject를 참조해야 합니다.
Properties of objects and samples
HKObject 클래스는 모든 Healthkit 샘플 타입의 슈퍼 클래스 입니다. 모든 HKObject 하위 클래스들은 수정 불가능합니다. 각 객체는 다음과 같은 프로퍼티들이 있습니다.
UUID (Universally Unique Identifier)
: 특정 항목을 식별하는 고유 식별자입니다.
메타데이터 (Metadata)
: 항목에 대한 추가 정보를 포함하는 사전입니다. 메타데이터는 미리 정의된 키와 사용자 정의 키를 모두 포함할 수 있습니다. 미리 정의된 키는 앱 간 데이터 공유를 용이하게 합니다. 사용자 정의 키는 특정 HealthKit 객체 유형을 확장하여 항목에 앱별 데이터를 추가하는 데 도움이 됩니다.
원본 리비전 (Source Revision)
: 샘플의 원본입니다. 원본은 데이터를 직접 HealthKit에 저장하는 장치 또는 앱이 될 수 있습니다. HealthKit은 데이터를 HealthKit 스토어에 저장할 때 각 객체의 원본과 버전을 자동으로 기록합니다. 이 속성은 스토어에서 검색된 객체에만 사용할 수 있습니다.
장치 (Device)
: 이 샘플에 저장된 데이터를 생성한 하드웨어 장치입니다.
HKSample 클래스는 HKObject의 하위 클래스입니다. 샘플 객체는 특정 시점의 데이터를 나타내며, 모든 샘플 객체는 HKSample 클래스의 하위 클래스입니다. 다음과 같은 속성을 가지고 있습니다:
유형 (Type)
: 샘플 유형, 예를 들어 수면 분석 샘플, 신장 샘플 또는 걸음 수 샘플 등입니다.
시작 날짜 (Start date)
: 샘플의 시작 시간입니다.
종료 날짜 (End date)
: 샘플의 종료 시간입니다. 샘플이 단일 시점을 나타내는 경우 종료 시간은 시작 시간과 동일해야 합니다. 샘플이 시간 간격 동안 수집된 데이터를 나타내는 경우 종료 시간은 시작 시간 이후여야 합니다.
샘플은 더 구체적으로 네 가지 하위 클래스로 나뉩니다:
카테고리 샘플 (Category samples)
: 유한한 집합의 범주로 분류할 수 있는 데이터입니다. HKCategorySample을 참조하세요.
수량 샘플 (Quantity samples)
: 숫자 값으로 저장할 수 있는 데이터입니다. 수량 샘플은 HealthKit에서 가장 일반적인 데이터 유형입니다. 사용자의 신장과 체중뿐만 아니라 취한 걸음 수, 사용자의 온도, 맥박 등의 다른 데이터를 포함합니다. HKQuantitySample을 참조하세요.
상관 관계 (Correlations)
: 하나 이상의 샘플을 포함하는 복합 데이터입니다. HealthKit은 음식과 혈압을 나타내기 위해 상관 관계를 사용합니다. 음식 또는 혈압 데이터를 만들 때 항상 상관 관계를 사용해야 합니다. HKCorrelation을 참조하세요.
운동 (Workouts)
: 러닝, 수영 또는 게임과 같은 신체 활동을 나타내는 데이터입니다. 운동에는 종류, 지속 시간, 거리 및 소모된 에너지 등의 속성이 있습니다. 추가로 세부적인 샘플과 연결할 수도 있습니다. 상관 관계와 달리 운동에는 이러한 샘플이 포함되어 있지 않지만, 운동을 사용하여 이러한 샘플을 쿼리할 수 있습니다. HKWorkout을 참조하세요.
Threading
HealthKit store는 thread-safe이며 HealthKit 객체들은 수정하지 못합니다. 일반적으로 HealthKit은 멀티스레드 환경에서 안전게 사용될 수 있습니다.
Syncing data between devices
아이폰과 애플 워치는 각각 자체의 HealthKit 저장소를 가지고 있습니다. iPadOS 17 이후에도 자체의 HealthKit 저장소를 가지고 있습니다. HealthKit은 이러한 장치 간에 데이터를 자동으로 동기화합니다. 공간을 절약하기 위해 Apple Watch에서는 주기적으로 오래된 데이터가 삭제됩니다. Apple Watch에서 사용 가능한 가장 이른 샘플을 결정하려면 earliestPermittedSampleDate()를 사용하십시오.
그러나 HealthKit 프레임워크는 iPadOS 16 이전 및 macOS 13 이후에도 사용 가능하지만, 이러한 장치에는 HealthKit 저장소의 사본이 없습니다. 이는 이러한 장치에서 HealthKit 코드를 포함하여 다중 플랫폼 앱의 작성을 단순화할 수 있음을 의미합니다. 그러나 이러한 장치에서는 HealthKit 데이터를 읽거나 쓸 수 없으며, isHealthDataAvailable() 호출은 false를 반환합니다.
'SwiftUI' 카테고리의 다른 글
Authorizing access to health data (0) | 2024.03.11 |
---|---|
HealthKit 을 사용하기 전에 세팅 (0) | 2024.03.11 |
Core Bluetooth (0) | 2024.03.07 |
AVPlayer 음악 또는 미디어가 끝났을 때 (0) | 2024.03.06 |
MPRemoteCommandCenter (잠금화면 미디어제어) (0) | 2024.03.03 |