SMART

Swift SMART on FHIR framework for iOS and OS X

Showing:

Popularity

Downloads/wk

0

GitHub Stars

109

Maintenance

Last Commit

2yrs ago

Contributors

3

Package

Dependencies

0

License

Apache 2

Categories

Readme

Swift-SMART is a full client implementation of the 🔥FHIR specification for building apps that interact with healthcare data through SMART on FHIR. Written in Swift 5.0 it is compatible with iOS 11 and macOS 10.13 and newer and requires Xcode 10.2 or newer.

Versioning

Due to the complications of combining two volatile technologies, here's an overview of which version numbers use which Swift and FHIR versions.

  • The master branch should always compile and is on (point releases of) these main versions.
  • The develop branch should be on versions corresponding to the latest freezes and may be updated from time to time with the latest and greatest CI build.

See tags/releases.

VersionSwiftFHIR 
4.25.0 Package4.0.0-a53ec6ee1bR4
4.15.04.0.0-a53ec6ee1bR4
4.04.24.0.0-a53ec6ee1bR4
3.23.23.0.0.11832STU 3
3.03.03.0.0.11832STU 3
2.93.01.6.0.9663STU 3 Ballot, Sep 2016
2.83.01.0.2.7202DSTU 2 (+ technical errata)
2.42.21.6.0.9663STU 3 Ballot, Sep 2016
2.32.31.0.2.7202DSTU 2 (+ technical errata)
2.2.32.21.0.2.7202DSTU 2 (+ technical errata)
2.22.0-2.21.0.2.7202DSTU 2 (+ technical errata)
2.12.0-2.21.0.1.7108DSTU 2
2.02.0-2.20.5.0.5149DSTU 2 Ballot, May 2015
1.01.20.5.0.5149DSTU 2 Ballot, May 2015
0.21.10.5.0.5149DSTU 2 Ballot, May 2015
0.11.00.0.81.2382DSTU 1

Resources

QuickStart

See the programming guide for more code examples and details.

The following is the minimal setup working against our reference implementation. It is assuming that you don't have a client_id and on first authentication will register the client with our server, then proceed to retrieve a token. If you know your client-id you can specify it in the settings dict. The app must also register the redirect URL scheme so it can be notified when authentication completes.

import SMART

// create the client
let smart = Client(
    baseURL: URL(string: "https://fhir-api-dstu2.smarthealthit.org")!,
    settings: [
        //"client_id": "my_mobile_app",       // if you have one
        "redirect": "smartapp://callback",    // must be registered
    ]
)

// authorize, then search for prescriptions
smart.authorize() { patient, error in
    if nil != error || nil == patient {
        // report error
    }
    else {
        MedicationOrder.search(["patient": patient!.id])
        .perform(smart.server) { bundle, error in
            if nil != error {
                // report error
            }
            else {
                var meds = bundle?.entry?
                    .filter() { return $0.resource is MedicationOrder }
                    .map() { return $0.resource as! MedicationOrder }
                
                // now `meds` holds all the patient's orders (or is nil)
            }
        }
    }
}

For authorization to work with Safari/SFViewController, you also need to:

  1. register the scheme (such as smartapp in the example here) in your app's Info.plist and
  2. intercept the callback in your app delegate, like so:
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    func application(_ app: UIApplication, open url: URL,
        options: [UIApplicationOpenURLOptionsKey: Any] = [:]) -> Bool {
        
        // "smart" is your SMART `Client` instance
        if smart.awaitingAuthCallback {
            return smart.didRedirect(to: url)
        }
        return false
    }
}

Installation

The suggested approach is to add Swift-SMART as a git submodule to your project. Find detailed instructions on how this is done on the Installation page.

The framework can also be installed via Carthage and is also available via CocoaPods under the name “SMART”.

License

This work is Apache 2 licensed: NOTICE.txt. FHIR® is the registered trademark of HL7 and is used with the permission of HL7.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100