Skip to content

Releases: CirrusMD/CirrusMD-iOS-SDK-Example

13.1.0

Choose a tag to compare

@tklucher tklucher released this 08 Sep 16:23
186eb7d

Xcode 26.6.0

Changes:

  • Updated Pods:

  • Updated PatientHomeView patient greeting from "Hey" to "Hi"

  • Created SwiftUI version of Assessments

  • Created scheduling tool to allow provider, date, and time selection

  • Added Appointment APIs for home feed Appointment cards and scheduling tool

  • Added SwiftUI cards to the home feed when a patient has a scheduled appointment

  • Added appointment WebSocket event and updates the data

  • Updated Home Screen Bottom card to better reflect the Stream Status for single stream patients

  • Added new Pre Encounter Flow to replace Pre Encounter Assesment

  • Changed Chat with A Doctor buttons to open the new Pre Encounter Flow

  • Bug Fix:

  • Fixed a bug where the home screen could crash when recursive rebuilding happens on older devices

  • Fixed a bug where the home screen patient picker could be out of sync with app state.

  • Fixed a bug where pincode taps could be slow on some devices.

  • Fixed a bug where the home menu would not respect SDK cconfig regarding sign out.

  • Fixed a crash that was happening on iOS 16 devices.

13.0.1

Choose a tag to compare

@tklucher tklucher released this 09 Apr 16:24
71d4b67

Xcode 26.2.0

Changes:

  • Bug Fix:
    • Right bar buttons items added to SDK config now work properly.

13.0.0

Xcode 26.2.0

Changes:

  • Updated Pods:

  • Updated Dark Mode, Light Mode and Primary colors for Design V1

  • Fixed bug where an empty profile update request could be sent

  • Updated dependencies to make them Sendable.

  • Updated dependency injector to work with new Coordinator system.

  • New Home Screen for the App.

  • New Main Menu in the Nav bar home screen.

  • Add Figtree Font to the SDK and use on New Homescreen.

  • Added is_legacy_channels_of_care_enabled to Customer for home screen design.

  • Bug Fix:

    • Avatar Images No longer show empty on API error.

12.3.1

Choose a tag to compare

@danrodo danrodo released this 27 Jan 23:39
bd2240e

12.3.1

Xcode 26.1.1

Changes:

  • Bug Fix:
    • Fixed bug where upload document button was showing in stream when feature is disabled
    • Fixed bug where delete document uploads were not disabled in encounter

12.3.0

Xcode 26.1.1

Changes:

  • Updated Pods:

  • Deployment Target was changed to 16.6 (Dropped iOS 15 support)

  • Commented out and removed upload to Box for Fastlane

  • Updated UINavigationController for iOS 26, Nav Bar is now translucent for iOS 26 and above.

  • We still respect the design of the Nav bar passed by an App that uses our SDK.

  • Updated design of the ProfileViewController to use insetGrouped tableView.

  • Adds Chat History feature to settings.

  • Chat History includes Encounter History List and Chat Messages.

  • Added Other documents tab to medical documents.

  • Added FileUploaderVC to upload files of type pdf, png or jpeg.

  • Added button to upload files in the Other documents tab in medical documents.

  • Bug Fix:

    • API calls in Action Message Forms(HIE Consent) now use the HUD to block taps during the call
    • Med Card share button now places the card images above and below rather than side by side
    • Data Sharing Controller no longer cuts off long text strings in the top header cell
    • Fixed a crash in collection Diff for large data sets switching to Apple's solution
    • Fixed an issue where Assessments could send duplicate answers for multi select questions

12.2.0

Choose a tag to compare

@danrodo danrodo released this 23 Jan 23:06
ff23861

12.2.0

Xcode 16.4.0

Changes:

  • Added enableSecuritySettings to CirrusMDConfig to show or hide the security cell in the Settings list
  • Added Delete Photo option for image picker for use on the patient profile
  • Refactor Provider Profile into a SwiftUI view
  • Refactor Support into a SwiftUI view
  • Rebuild of the Red Dot back button to work better in iOS 26 and be easier to see on older versions of iOS
  • Bug Fix for the text color of Cancel buttons in iOS 26
  • Added Medical Card Details and Medical Card selector screens
  • Added API calls and image handling for Medical Cards
  • Added share warning to all shares to warn patients they are sharing PHI
  • Added Don't remind me to share warning
  • Renamed Labs to Medical Documents and updated design to allow for Labs and Imaging tabs
  • Added navigation button to Medical Documents cells to navigate to stream

12.1.0

Choose a tag to compare

@danrodo danrodo released this 15 Jul 20:25
1b485ed

12.1.0

Xcode 16.4.0

⚠️ Important: This release of the SDK adds a new section to the security menu in settings for Biometrics. If your SDK implementation has settings turned on we will have a release soon that provides a way to hide this in the SDK configuration. Please contact CirrusMD if you have any questions.

Changes:

With this release we have added a new delegate method to the CirrusMD SDK CirrusMDDelegate. This new function called userViewedScreen can be used to gain greater insight in which screens users are viewing when passing them off to the SDK. The delegate method will be called with a string value that is the unique name for the screen within the CirrusMD SDK. The following screens will be available in this version with the potential for more in the future.

Screen Names:

-streamSelector This is the Home Screen of the SDK where a user selects their chat stream.
-streamChat This is the chat screen. The user will go here after selecting from the previous screen
-settings This is the settings screen, this should only be sent if setting is enabled which is generally not the case for an SDK implementation.

12.0.0

Choose a tag to compare

@tklucher tklucher released this 21 Apr 20:31
dd4ec13

12.0.0 Migration Guide

Built on Xcode 16.2.0
Min deployment target iOS 15.6
In order to better position the codebase for the transition to Swift 6 and other future iPhone advancements, we have made a few changes to the startup of the SDK. These changes now stage the startup of the CirrusMD SDK, preventing excess memory from being allocated early on in the process, speeding up app startup for all SDK customers as well as lowering the memory footprint of the SDK until the UI is shown to a user .

We have split the startup of the SDK into 3 steps.

Step 1 Memory creation:

A new function called startSDK(withLaunchOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) will replace configuration as the function to call at launch of your App. This allows you to delay configuration of the SDK until your app is fully loaded. Also, you can now configure the SDK any time between when this startup is called in the App delegate and the tokens are set to log in the user. This starts the base memory structure of the SDK and allows the delegate functions to work properly for notifications.

Old Code:

let config = CirrusMDConfig()
config.logLevel = .verbose
config.primaryColor = UIColor.black
config.primaryColorDarkMode = UIColor.purple
config.title = "Your Custom Title"
config.launchOptions = launchOptions
config.enableSettings = true
CirrusMD.singleton.config = config

New Code

CirrusMD.singleton.startSDK(withLaunchOptions: launchOptions)

Step 2 Configure the SDK:

Very little has changed with the configuration object itself. First, as you read above, we removed launchOptions from the configuration. This means that you can now configure the SDK any time after starting your app. This allows you to better control SDK memory management and allocation. Setting Configure will set up the style code that all CirrusMD UI uses for its design. The UI itself is not spun up, so this is still a really low memory impact and if you would like to make the smallest change possible while testing this new release, you can make this call right after the startSDK with no issues.
The main change made to the CirrusMDConfig is how it is set. The order of operations to start the SDK has not changed and is simplified in the number of steps. However, we now enforce the startup order in code. As a result, the new CirrusMD.singleton.setSDKConfiguration(config) function now has a discardable result that you can check to see if the configuration is set properly. It can return .success or .sdkAlreadyConfiguredMustCallLogout which is returned if the SDK has already been configured with a user. Calling logout will log out the current patient and allow for the setting of a new configuration. Once you log in with a user, the configuration cannot be changed. The reason for this is simple: once a user is logged in we start getting the user’s data and UI ready and since this configuration changes UI it would cause UI issues. That is also why we made the result discardable as this will always succeed as long as it is called before CirrusMD.singleton.configureWithToken(token, andSecret: secret)

Old Code:

let config = CirrusMDConfig()
config.logLevel = .verbose
config.primaryColor = UIColor.black
config.primaryColorDarkMode = UIColor.purple
config.title = "Your Custom Title"
config.launchOptions = launchOptions
config.enableSettings = true
CirrusMD.singleton.config = config

New Code

let config = CirrusMDConfig()
config.logLevel = .verbose
config.primaryColor = UIColor.black
config.primaryColorDarkMode = UIColor.purple
config.title = "Your Custom Title"
config.launchOptions = launchOptions
config.enableSettings = true
CirrusMD.singleton.setSDKConfiguration(config)

Optional:

let result = CirrusMD.singleton.setSDKConfiguration(config)
switch result {
  case .success:
    print("Successfully set SDK Configuration.")
  case .sdkAlreadyConfiguredMustCallLogout:
    print("SDK ERROR: Patient has already been configured, must call logout first.")
  @unknown default:
    print("SDK ERROR: Unknown. \(result.rawValue)")
}

Step 3 Configure the SDK with a Patient:

This is where we reduced some complexity. In the old configuration, you needed to set the secret and then set the token in different steps. We also required that they be called in that order or the set token call would fail. We have removed this complexity and now have a single function call that takes in both the authentication token and the secret, then verifies them, and attempts to log in the user with those credentials. This is the point where the SDK is fully working and the UI can be shown to the user, when the configuration is successful. If you run into any problem with the configureWithToken function and do not receive a success result, you can simply call the logout function on the SDK to reset it back to when you set the configuration in step 2 and then try again by calling CirrusMD.singleton.configureWithToken(token, andSecret: secret) after the logout.

Old Code:

CirrusMD.singleton.setSecret(secret)
/*
 Loads an SSO user from the provided token.`CirrusMDSDK.singleton.setSecret`
 must be called prior to calling `CirrusMDSDK.singleton.setToken`
*/
CirrusMD.singleton.setToken(token) { [weak self] (result) in
  switch result {
    case .success:
      NSLog("Set Token Success")
    case .invalidToken:
      NSLog("Set Token Invalid Token Error")
    case .noSecretProvided:
      NSLog("Set Token No Secret Provided")
    case .serviceUnavailable:
      NSLog("Set Token Service Unavailable")
    @unknown default:
      NSLog("Set Token Invalid Token Error")
  }
}

New Code

CirrusMD.singleton.configureWithToken(token, andSecret: secret) { (result) in
  switch result {
  case .success:
    print("Successfully set SDK Configuration.")
  case .invalidToken:
    print("SDK ERROR: Invalid SDK token.")
  case .noSecretProvided:
    print("Set Token No Secret Provided")
  case .sdkAlreadyConfiguredMustCallLogout:
    print("SDK ERROR: Patient has already been configured, must call logout first.")
  case .serviceUnavailable:
    print("Set Token Service Unavailable")
  @unknown default:
    print("SDK ERROR: Unknown. \(result.rawValue)")
  }
}

The last step is to implement any of the delegate methods for the CirrusMDDelegate that you have not already implemented. The Swift protocol now requires that all delegate methods be implemented if they are used or not. You can find an example of this in the Example code as part of this repository.

Should you run into any issues, please do not hesitate to reach out and we will provide you with any further information that will help you migrate the SDK code to the new format. All these changes are pretty minor and result in a faster startup and lower memory overhead for all SDK users while also giving you more control over the SDK startup process.

Known Issue: We are currently tracking a single known issue dealing with Core Graphics in iOS 18. This issue shows in the console logs and manifests as a small delay on the first tap in the SDK only while running on the simulator. We are currently not seeing the delay on any device we have tested however the Core Graphics warnings will still show in the console. The delay is minor, under 2 seconds and does not affect further use of the SDK and as stated above is not happening on device. We are committed to the best testing and customer experience so we have a developer working on this simulator issue and hope to have a resolution by the next release. We apologize for any inconveniences while testing.

11.10.0

Choose a tag to compare

@danrodo danrodo released this 04 Mar 16:47
5c3b9fb

Built with: Xcode 15.4.0

Changes:

  • Updated Pods:
  • Added in app notification system
    • Added notification badge button to stream picker user header
    • Added in app notification center view controller to list pending notification

11.9.0

Choose a tag to compare

@tklucher tklucher released this 05 Feb 22:33
ce72374

Built with: Xcode 15.4.0

Changes:

Bug Fixes:

11.8.0

Choose a tag to compare

@tklucher tklucher released this 16 Jan 00:23
79117bf

Built with: Xcode 15.4.0

Changes:

Bug Fixes:

  • Better goals handling
  • Some updated Spanish translation

11.6.0

Choose a tag to compare

@danrodo danrodo released this 25 Jun 21:44
3aecbb3

Built with: Xcode 15.2.0

Changes:

Bug Fixes:

  • Updated landscape rotational support for SDK
  • Improved settings profile, medical and family design to get closer to parity with Android
  • Fixed iPad navigation for family dependent profile settings