the indivo x ios framework
DESCRIPTION
A walkthrough of building new apps on top of the Indivo iOS framework, as well as integrating it with existing apps to cloud-enable them.By Pascal Pfiffner, MD Ph.D., Children's Hospital Informatics ProgramTRANSCRIPT
Indivo iOS
framework
Goals
• Drop-in to existing Cocoa projects
• Provide a low entry barrier into PHR
• Make Indivo a viable choice for App developers who want to move their users’ data into the cloud
The framework
• Handles authentication (OAuth)
• Provides Indivo objects (automatic XML handling)
• Knows where an object comes from (REST paths)
• Provides messaging functionality
Handling OAuth
• Class INServerCall to encapsulate requests
• Uses MPOAuth, an OSS OAuth framework for iOS, transparently
‣ OAuth is handled for you
From Schema to Cocoa
• The developer should not have to deal with XML serialization/deserialization
‣ Provide classes for all Indivo document types
• We have to write Objective-C classes for all types
‣ A generator creates Cocoa classes from Indivo’s XSD and SDMJ schemas
Self-aware objects
• Document objects know their record
• Records know their server
• Framework knows the server actions
‣ REST methods can be inferred for all tasks
Abstract logic into Cocoa objects
iOS framework
Server Record
addDocumentOfClass:
fetchReportsOfClass:
selectRecord:
Docspush:
replace:
archive:
...
Setup
App Flow
#define kIndivoFrameworkServerURL @“http://10.17.20.127:8000” #define kIndivoFrameworkUIServerURL @“http://10.17.20.127:8001” #define kIndivoFrameworkAppId @“[email protected]” #define kIndivoFrameworkConsumerKey @“nkd8cg02mgo34sntkao9” #define kIndivoFrameworkConsumerSecret @“1acgk9804wkmraoceu02”
server = [IndivoServer serverWithDelegate:self];
Logging in
App Flow
[server selectRecord:^{ }];
server.activeRecord
Adding a medication
App Flow
Medication *med = [record addDocument:Medication];
[med push:^{ }];
med.drugName = [INCodedValue new];
med.drugName.title = @“Tylenol”;
med.drugName.system ...
Sending a message
App Flow
[med.activeRecord sendMessage:@“New medication added” withBody:@“See medlist app” ofType:INMessageTypePlaintext severity:INMessageSeverityMedium attachments:nil callback:^{ }];
Integrating Indivo Into Existing Apps
Growth Charts App
Data Models
Growth Charts App
CHPatientSource selectPatient:^{ }
CHPatient ageAtDate: measurementSetsContainingDataTypes:
CHMeasurementSet date CHMeasurement value CHMeasurement value CHMeasurement value
Local Data Source
Growth Charts App
• Override selectPatient:
• Instantiate a CHPatient
• Read CSV data as measurement sets
Indivo Data Source
Growth Charts App
• Call Indivo’s selectRecord: method
• Within the callback block:
• Fetch patient demographics
• Create CHPatient with record demographics
• Fetch patient’s vitals
• Convert Indivo vitals into measurement sets
Indivo-Enabled (read-only)
Growth Charts App
• 2 lines + app setup file to setup Indivo server instance
• 9 lines to convert IndivoRecord to CHPatient
• 21 lines to convert Indivo vitals into CHMeasurementSet
Documentation
• Take a look at README.md
• Checkout the sample medication app
• Technical documentation available online:
http://docs.indivohealth.org/projects/indivo-x-ios-framework/en/latest/
Playing with Medications
Version 2.0 α
Available with the other Indivo sources from:
https://github.com/chb/IndivoFramework-ios
Checkout branch dev_two (tag hackathon_2012)