An example application of CareKit's OCKSample synchronizing CareKit data to the Cloud via ParseCareKit. This app allows user to maintain habits and to track them the goal is to provide a centralized locations for users to stick to habits, this app also provides a trackScore that measures how devoted you are to making your life better.
To learn more about this application, watch the video below:
Anyone who is seeking self-improvement or just want a centralized tracking application. Track is designed for a wide variety of users and can accomodate most use cases.
Developed by:
- Seun Adekunle -
University of Kentucky
,Computer Science
ParseCareKit synchronizes the following entities to Parse tables/classes using Parse-Swift:
-
OCKTask <-> Task
-
OCKHealthKitTask <-> HealthKitTask
-
OCKOutcome <-> Outcome
-
OCKRevisionRecord.KnowledgeVector <-> Clock
-
OCKPatient <-> Patient
-
OCKCarePlan <-> CarePlan
-
OCKContact <-> Contact
Use at your own risk. There is no promise that this is HIPAA compliant and we are not responsible for any mishandling of your data
-
Custom FeaturedContentView so users can learn more about motivation
-
Custom Survey that involves a motivational video that can be played
-
Ability to add Care Plans
-
See added Care Plans
-
Custom form so users can add their own task with the ability to select different schedules, plot type, assets, Card views, and Care Plans
-
Insights tab was added were plots could be shown with random colorful gradients
-
Trackscore is updated as user performs actions in the app and syncs with parse
-
Clean and minimalist UI that reflects the chosen color theme
-
Two custom cards, (LoggerCard and CounterCard) can be employed to track Quantitative and Qualitative data
-
Customized data shown for the different surveys employed in the app
-
Direct Link to the App Store
-
National Hotlines added as default contacts for Users to get encouragement/help
-
Signup/Login screen tailored to app
-
Signup/Login with email address
-
Custom app logo
-
Custom styling
-
Add at least 5 new OCKTask/OCKHealthKitTasks to your app
-
Have a minimum of 7 OCKTask/OCKHealthKitTasks in your app
-
3/7 of OCKTasks should have different OCKSchedules than what's in the original app
-
Use at least 5/7 card below in your app
-
InstructionsTaskView - typically used with a OCKTask
-
SimpleTaskView - typically used with a OCKTask
-
Checklist - typically used with a OCKTask
-
Button Log - typically used with a OCKTask
-
GridTaskView - typically used with a OCKTask
-
NumericProgressTaskView (SwiftUI) - typically used with a OCKHealthKitTask
-
LabeledValueTaskView (SwiftUI) - typically used with a OCKHealthKitTask
-
LoggerCardView (Custom)
-
CounterCardView (Custom)
-
Add the LinkView (SwiftUI) card to your app
-
Replace the current TipView with a class with CustomFeaturedContentView that subclasses OCKFeaturedContentView. This card should have an initializer which takes any link
-
Tailor the ResearchKit Onboarding to reflect your application
-
Add tailored check-in ResearchKit survey to your app
-
Add a new tab called "Insights" to MainTabView
-
Replace current ContactView with Searchable contact view
-
Change the ProfileView to use a Form view
-
Add at least two OCKCarePlan's and tie them to their respective OCKTask's and OCContact's
-
Add a rudimentary social network feature where users can follow each other - Users can follow other users, users can get badges and customizable content.
-
Add UI changes for a dark theme and Implement a more flexible CareView - Developing a Care feed that would allow for grouping by care plans within a certain and integrate calculated data such as a TrackScore and user info (followers).
-
Calculate trackScore using a more complex algorithm which will take into account streaks, time of completion, and other factors.
One challenge was in implementing the trackScore feature was to find a way to trigger it, upload the changed value to the Parse Server. The main agent for doing this was the CareViewModel which was created and then passed through. To solve a warning involving background threads and the @Publisher variable changing the trackScore variable had to be done on the main thread since it was published this was done using DispatchQueue.main.async instead of other options that failed such receive(on:) and onReceive only. One unexpected obstacle was dealing with Swiftlint having to refactor code and change how some parts of the code was structured in order to resolve swiftlint build errors. Simply adding the file names to .swiftlint.yml or adding the disable all command wasn't the optimal solution. Another issue was dealing with closures within forms there were multiple errors that occurred when attempting to use Pickers within forms, this error involved trailing closures and was solved by using the right Function to instantiate a Picker within variable scope and using the right type.
The easiest way to setup your server is using the one-button-click deplyment method for parse-hipaa.
The easiest way to setup your dashboard is using the one-button-click deplyment method for parse-hipaa-dashboard.