summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--iCUrHealth/ContentView.swift72
-rw-r--r--iCUrHealth/iCUrHealth.entitlements12
2 files changed, 79 insertions, 5 deletions
diff --git a/iCUrHealth/ContentView.swift b/iCUrHealth/ContentView.swift
index b68f101..cc8ea87 100644
--- a/iCUrHealth/ContentView.swift
+++ b/iCUrHealth/ContentView.swift
@@ -6,14 +6,84 @@
//
import SwiftUI
+import HealthKit
+import HealthKitUI
+
+let allTypes: Set = [
+ HKQuantityType.workoutType(),
+ HKQuantityType(.activeEnergyBurned),
+ HKQuantityType(.distanceCycling),
+ HKQuantityType(.distanceWalkingRunning),
+ HKQuantityType(.stepCount),
+ HKQuantityType(.heartRate),
+ HKCategoryType(.sleepChanges),
+ HKCategoryType(.sleepAnalysis)
+]
+
+func stepCount(healthStore: HKHealthStore) async throws {
+ let stepType = HKQuantityType(.stepCount)
+ let descriptor = HKSampleQueryDescriptor(predicates:[.quantitySample(type: stepType)], sortDescriptors: [SortDescriptor(\.endDate, order: .reverse)], limit: 10)
+ let descriptor = HKSampleQuery(
+
+ let results = try await descriptor.result(for: healthStore)
+
+ for result in results {
+ print(result)
+ }
+}
struct ContentView: View {
+ @State var authenticated = false
+ @State var trigger = false
+
+ let healthStore = HKHealthStore()
+
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
- Text("Hello, world!")
+ Button(action: {
+ trigger.toggle()
+ }) {
+ Text("Force Permissions")
+ }
+ Button(action: {
+ if HKHealthStore.isHealthDataAvailable() {
+ print("YES!")
+ Task {
+ try await stepCount(healthStore: healthStore)
+ }
+
+
+ } else {
+ print("NOOOO!")
+ }
+ }) {
+ Text("Test Healthkit stuff")
+ }.disabled(!authenticated)
+
+ .onAppear() {
+
+ // Check that Health data is available on the device.
+ if HKHealthStore.isHealthDataAvailable() {
+ // Modifying the trigger initiates the health data
+ // access request.
+ trigger.toggle()
+ }
+ }
+ .healthDataAccessRequest(store: healthStore,
+ readTypes: allTypes,
+ trigger: trigger) { result in
+ switch result {
+
+ case .success(_):
+ authenticated = true
+ case .failure(let error):
+ // Handle the error here.
+ fatalError("*** An error occurred while requesting authentication: \(error) ***")
+ }
+ }
}
.padding()
}
diff --git a/iCUrHealth/iCUrHealth.entitlements b/iCUrHealth/iCUrHealth.entitlements
index f2ef3ae..ccc6b5e 100644
--- a/iCUrHealth/iCUrHealth.entitlements
+++ b/iCUrHealth/iCUrHealth.entitlements
@@ -2,9 +2,13 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
- <key>com.apple.security.app-sandbox</key>
- <true/>
- <key>com.apple.security.files.user-selected.read-only</key>
- <true/>
+ <key>com.apple.developer.healthkit</key>
+ <true/>
+ <key>com.apple.developer.healthkit.access</key>
+ <array/>
+ <key>com.apple.security.app-sandbox</key>
+ <true/>
+ <key>com.apple.security.files.user-selected.read-only</key>
+ <true/>
</dict>
</plist>