https://github.com/d4l-data4life/d4l-sdk-ios.git OR git@github.com:d4l-data4life/d4l-sdk-ios.git
Using the iOS SDK
Using the iOS SDK
As part of our integration efforts with our partners, data4life provides SDKs for the following platforms:
-
iOS (Swift)
-
Android (Java)
-
Web (JavaScript)
The data4life SDKs encapsulate different aspects of communication with the backend servers of the data4life Personal Health Data Platform. The SDKs let integration partners store sensitive health data on our secure platform. The SDKs also enable sharing the data with authorized parties and other applications in an easy and secure way.
Updating and validating versions
Data4Life can deprecate or unsupport old SDK versions that aren’t anymore secure or stay occassioning bugs. In that case the user will get notifications from the SDK:
-
If the current version is deprecated, the user will get a notification in the console asking to update to a more recent version from the SDK. The SDK will still be able to be runned and used.
-
If the current version is unsupported, the user will get an error by using the SDK and will need to update to a new version in order to continue using the SDK.
-
If for some reason the version validation can’t happen, the user will get a notification in the console warning that the current version validation is unknown. The SDK will still work, but it might crash.
Software requirements
The iOS SDK has the following software requirements:
-
Xcode 12.5 or later
-
iOS 13.0 or later
-
Swift 5.3 or later
Installing dependency managers
This section describes how you get the SDK up and running. Use the following for dependency management for the iOS SDK:
-
Swift Package Manager is a dependency manager from Apple included in XCode. It builds your dependencies and provides you with binary frameworks while you retain control over your project structure and setup.
Swift Package Manager
To install with Swift package manager, select your project’s Swift Packages tab, and add our repository url, either as ssh or https url:
In the next step, select the latest version, and then import the Data4LifeSDK
libraries in your target.
Dependencies of the SDK
The iOS SDK has the following dependencies:
-
Alamofire – HTTP networking library written in Swift
-
AppAuth – iOS and macOS SDK for communicating with OAuth 2.0 and OpenID Connect providers
-
Data4LifeFHIR – data4life minimal FHIR standard models and data types for iOS
-
Data4LifeSDKUtils – data4life Set of private utils used in data4Life Frameworks
-
Data4LifeCrypto – data4life Set of private utils used in data4Life Frameworks
Setting up the SDK
To set up the iOS SDK, follow these steps:
-
Configure the client information
-
Handle the OAuth 2.0 redirect URL
-
Display the login screen
This section describes the steps in more detail.
-
Prepare the SDK for use by configuring the client information. This must be the first SDK call or the client crashes.
import UIKit import Data4LifeSDK @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { let clientId = "client-id#ios" let secret = "secret" let redirectURLString = "app://oauth" let environment = .staging Data4LifeClient.configureWith(clientId: clientId, clientSecret: secret, redirectURLString: redirectURLString, environment: environment) return true } }
-
Handle the OAuth 2.0 redirect URL in the
AppDelegate
class.import UIKit import Data4LifeSDK @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { Data4LifeClient.default.handle(url: url) return true } }
-
Display the login screen. Afterwards, you can use it throughout the app with the default client by providing a view controller to present.
let viewController = UIApplication.shared.keyWindow?.rootViewController Data4LifeClient.default.presentLogin(on: viewController, animated: true) { result in switch result { case .success: // Handle success case .failure(let error): // Handle error } }
-
Optional: To use the SDK inside extensions, provide the
keychainGroupId
identifier when you configure the SDK and enable theKeychainSharing
capability in the Xcode project. The SDK also requires theAppGroups
capability with the same setup.func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { let clientId = "client-id#ios" let secret = "secret" let redirectURLString = "app://oauth" let environment = .staging let teamId = "TEAMDID" let groupId = "Group1" let keychainGroupId = "\(teamId).\(groupId)" let appGroupId= "group.unique.id" Data4LifeClient.configureWith(clientId: clientId, clientSecret: secret, redirectURLString: redirectURLString, environment: .staging, keychainGroupId: keychainGroupId, appGroupId: appGroupId, environment: environment) return true }