diff --git a/SleepDebt.xcodeproj/project.pbxproj b/SleepDebt.xcodeproj/project.pbxproj index 6feddfa..d952570 100644 --- a/SleepDebt.xcodeproj/project.pbxproj +++ b/SleepDebt.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 6C560B872B495DED00FDB70C /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C560B862B495DED00FDB70C /* ContentView.swift */; }; 6C560B892B495DEE00FDB70C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6C560B882B495DEE00FDB70C /* Assets.xcassets */; }; 6C560B8C2B495DEE00FDB70C /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6C560B8B2B495DEE00FDB70C /* Preview Assets.xcassets */; }; + 6C560B932B495E3A00FDB70C /* HealthKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C560B922B495E3A00FDB70C /* HealthKitManager.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -19,6 +20,8 @@ 6C560B862B495DED00FDB70C /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 6C560B882B495DEE00FDB70C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 6C560B8B2B495DEE00FDB70C /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 6C560B922B495E3A00FDB70C /* HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthKitManager.swift; sourceTree = ""; }; + 6C560B942B49605000FDB70C /* SleepDebt.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SleepDebt.entitlements; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -51,8 +54,10 @@ 6C560B832B495DED00FDB70C /* SleepDebt */ = { isa = PBXGroup; children = ( + 6C560B942B49605000FDB70C /* SleepDebt.entitlements */, 6C560B842B495DED00FDB70C /* SleepDebtApp.swift */, 6C560B862B495DED00FDB70C /* ContentView.swift */, + 6C560B922B495E3A00FDB70C /* HealthKitManager.swift */, 6C560B882B495DEE00FDB70C /* Assets.xcassets */, 6C560B8A2B495DEE00FDB70C /* Preview Content */, ); @@ -139,6 +144,7 @@ files = ( 6C560B872B495DED00FDB70C /* ContentView.swift in Sources */, 6C560B852B495DED00FDB70C /* SleepDebtApp.swift in Sources */, + 6C560B932B495E3A00FDB70C /* HealthKitManager.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -269,12 +275,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = SleepDebt/SleepDebt.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"SleepDebt/Preview Content\""; DEVELOPMENT_TEAM = SSJBLTMP95; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHealthShareUsageDescription = "Please allow access to your sleep data to enjoy the features of SleepDebt"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -298,12 +306,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = SleepDebt/SleepDebt.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"SleepDebt/Preview Content\""; DEVELOPMENT_TEAM = SSJBLTMP95; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHealthShareUsageDescription = "Please allow access to your sleep data to enjoy the features of SleepDebt"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; diff --git a/SleepDebt/ContentView.swift b/SleepDebt/ContentView.swift index 82e055b..dbc98ba 100644 --- a/SleepDebt/ContentView.swift +++ b/SleepDebt/ContentView.swift @@ -8,6 +8,7 @@ import SwiftUI struct ContentView: View { + @EnvironmentObject var manager: HealthKitManager var body: some View { VStack { Image(systemName: "globe") @@ -21,4 +22,5 @@ struct ContentView: View { #Preview { ContentView() + .environmentObject(HealthKitManager()) } diff --git a/SleepDebt/HealthKitManager.swift b/SleepDebt/HealthKitManager.swift new file mode 100644 index 0000000..2d14dfa --- /dev/null +++ b/SleepDebt/HealthKitManager.swift @@ -0,0 +1,30 @@ +// +// HealthKitManager.swift +// SleepDebt +// +// Created by Oliver Hnát on 06.01.2024. +// + +import Foundation +import HealthKit + +class HealthKitManager: ObservableObject { + + let healthStore = HKHealthStore() + + init() { + let sleep = HKCategoryType(.sleepAnalysis) + + let healthTypes: Set = [sleep] + + Task { + do { + try await healthStore.requestAuthorization(toShare: [], read: healthTypes) + } catch { + print(error) + } + } + } + + +} diff --git a/SleepDebt/SleepDebt.entitlements b/SleepDebt/SleepDebt.entitlements new file mode 100644 index 0000000..2ab14a2 --- /dev/null +++ b/SleepDebt/SleepDebt.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.developer.healthkit + + com.apple.developer.healthkit.access + + + diff --git a/SleepDebt/SleepDebtApp.swift b/SleepDebt/SleepDebtApp.swift index 5362a65..6554880 100644 --- a/SleepDebt/SleepDebtApp.swift +++ b/SleepDebt/SleepDebtApp.swift @@ -9,9 +9,11 @@ import SwiftUI @main struct SleepDebtApp: App { + @StateObject var healthKitManager = HealthKitManager() var body: some Scene { WindowGroup { ContentView() + .environmentObject(healthKitManager) } } }