# Get Started # Requirements > 🚧 Minimum requirements on Asleep SDK for iOS > > * Xcode 14.1 or later > * iOS 15.0 or later > * Swift 5.0 or later ## API Key An API key is required to use SleepTrack SDK. Regarding how to issue an API key, please refer to [Generate API key](dashboard-generate-api-key). *** # Getting Ready SleepTrack SDK for iOS is distributed via the native Swift Package Manager built into Xcode. ## Install SleepTrack SDK 1. In Xcode, click File > Add Packages.\ ![](https://files.readme.io/284e762-Asleep_Docs_-_ios_1.jpg) 2. In the dialog that appears, enter the repository URL [https://github.com/asleep-ai/asleep-sdk-ios](https://github.com/asleep-ai/asleep-sdk-ios).\ ![](https://files.readme.io/a741464-Asleep_Docs_-_ios_2.jpg) 3. In Version, select Up to Next Major Version and the default option.\ ![](https://files.readme.io/b17523c-Asleep_Docs_-_ios_3.jpg) 4. Click `Add Package` button.\ ![](https://files.readme.io/3d9053b-Asleep_Docs_-_ios_4.jpg) 5. Click `Add Package` button one more time.\ ![](https://files.readme.io/4e24e14-Asleep_Docs_-_ios_5.jpg) 6. In Xcode, click `Signing & Capabilities` on your application target.\ ![](https://files.readme.io/fe76b93-Asleep_Docs_-_ios_6.jpg) 7. Click `+ Capability` button and double click `Background Modes`.\ ![](https://files.readme.io/cd5cdc1-Asleep_Docs_-_ios_7.jpg) 8. Select `Audio, AirPlay, and Picture in Picture`.\ ![](https://files.readme.io/49dabdb-Asleep_Docs_-_ios_8.jpg) 9. In Xcode, click `Info` on your app target.\ ![](https://files.readme.io/59e100b-Asleep_Docs_-_ios_9.jpg) 10. Click `+` and add `Privacy - Microphone Usage Description`.\ ![](https://files.readme.io/b219d49-Asleep_Docs_-_ios_10.jpg) 11. Write a microphone permission request message.\ ![](https://files.readme.io/baa529d-Asleep_Docs_-_ios_11.jpg) ## Import the Asleep SDK ```swift import AsleepSDK ``` *** # Sleep Tracking with SleepTrack SDK ## Initialize the SleepTrack SDK 1. **Initialize config** * If userId is nil, a new userId will be generated. * Enter the proxy server in baseUrl. If nil, the default base URL will be used. * Enter the server to receive the analysis results directly in callbackUrl. If nil, there is no callback. * If there is a nickname for the app you are developing, enter it in the service. ```swift Swift let apiKey: String = "YOUR_API_KEY" let userId: String? let baseUrl: URL? let callbackUrl: URL? let service: String? let delegate: AsleepConfigDelegate = self Asleep.initAsleepConfig(apiKey: apiKey, userId: userId, baseUrl: baseUrl, callbackUrl: callbackUrl, service: service, delegate: self) ``` 2. **Get config and user ID** ```swift extension YourClass: AsleepConfigDelegate { func userDidJoin(userId: String, config: Asleep.Config) { self.userId = userId self.config = config } func didFailUserJoin(error: Asleep.AsleepError) { print(error) } func userDidDelete(userId: String) { print("\(userId) is deleted") } } ``` > ❗️ Should save `userId` in your permanent storage for join ## Create SleepTrackingManager ```swift var config: Asleep.Config? let delegate: AsleepSleepTrackingManagerDelegate = self var manager: Asleep.SleepTrackingManager? if let config { manager = Asleep.createSleepTrackingManager(config: config, delegate: self) } ``` > 🚧 You must use the Asleep.Config issued in userDidJoin. ## Start Tracking ```swift var manager: Asleep.SleepTrackingManager? manager?.startTracking() ``` > ❗️ SDK needs microphone permission for startTracking() ## Stop Tracking ```swift var manager: Asleep.SleepTrackingManager? manager?.stopTracking() ``` 1. **Get session ID for the sleep report** ```swift extension YourClass: AsleepSleepTrackingManagerDelegate { func didClose(sessionId: String) { self.sessionId = sessionId } } ``` ## Create Reports ```swift var config: Asleep.Config? var reports: Asleep.Reports? if let config { reports = Asleep.createReports(config: config) } ```
> 🚧 You must use the Asleep.Config issued in userDidJoin. ## Get Report ```swift var reports: Asleep.Reports? var sessionId: String? if let reports, let sessionId { // Closure reports.report(sessionId: sessionId) { if let error = $1 { print(error) return } if let report = $0 { } } // Async Task { do { let report: Asleep.Model.Report = try await reports.report(sessionId: sessionId) } catch { print(error) } } } ```
> 📘 Run the Sample App to quickly familiarize yourself with the SDK and apply it to your actual project. > > [https://github.com/asleep-ai/asleep-sdk-ios-sampleapp-public](https://github.com/asleep-ai/asleep-sdk-ios-sampleapp-public)