11 KiB
ResearchKit Framework
The ResearchKit™ framework is an open source software framework that makes it easy to create apps for medical research or for other research projects.
Table of Contents
Requirements
The ResearchKit framework codebase supports iOS and requires Xcode 12.0 or newer. The ResearchKit framework has a Base SDK version of 13.0.
Documentation
View the ResearchKit framework documentation by setting ResearchKit as your target in Xcode and selecting 'Build Documentation' in the Product menu dropdown.
Getting Started
Install as an embedded framework
Download the project source code and drag in ResearchKit.xcodeproj. Then, embed ResearchKit framework in your app by adding it to the "Frameworks, Libraries, and Embedded Content" section for your target as shown in the figure below.
ORKCatalog App
The included catalog app demonstrates the different modules that are available in ResearchKit. Find the
project in ResearchKit's samples directory.
Surveys
The ResearchKit framework provides a pre-built user interface for surveys, which can be presented modally on an iPhone or iPad. The example below shows the process to present a height question for a participant to answer.
import ResearchKit
import ResearchKitUI
let sectionHeaderFormItem = ORKFormItem(sectionTitle: "Your question here.")
let heightQuestionFormItem = ORKFormItem(identifier: "heightQuestionFormItem1", text: nil, answerFormat: ORKAnswerFormat.heightAnswerFormat())
heightQuestionFormItem.placeholder = "Tap here"
let formStep = ORKFormStep(identifier: "HeightQuestionIdentifier", title: "Height", text: "Local system")
formStep.formItems = [sectionHeaderFormItem, heightQuestionFormItem]
return formStep
The height question is presented in the figure below.
ResearchKit SwiftUI
We are excited to announce the release of a new beta API for surveys in ResearchKit. This API is designed to enhance the flexibility, customization, and cross-platform compatibility of surveys in your ResearchKit apps. Below are the key features and usage details.
New Form APIs offer an easily configurable and flexible UI, with the same look and feel of ORKFormStep:
ResearchForm- Manages the navigation between steps in a survey.
ResearchFormStep- Represents a step in a survey and lays out the header and questions on one page. Question numbers (e.g. 1 of 3) are automatically added at the top of each question to denote progress in a step.
ResearchFormCompletion- Represents the context for a survey's completion
ResearchFormResult- Represents responses for the different kinds of questions.
StepHeader- A step header containing an image, title, and subtitle.
QuestionHeader- A question header containing a title and detail.
InstructionBodyItem- Displays an image and text side by side.
questionRequired(ViewModifier)- Designates a question as required or optional.
Survey Question Types:
MultipleChoiceQuestionHeightQuestionWeightQuestionSliderQuestionTextQuestionDateTimeQuestionNumericQuestionImageChoiceQuestion
The example below shows how to create a ResearchForm to present a text question for the participant to answer, and then save their results.
import ResearchKitSwiftUI
ResearchForm(
id: "SurveyTask",
steps: {
ResearchFormStep(
title: "Demographics",
subtitle: "Tell us about yourself",
content: {
TextQuestion(
id: "textQuestion",
title: "What is your name?",
prompt: "Enter your name here",
lineLimit: .singleLine,
characterLimit: 0
)
.questionRequired(true)
}
)
},
onResearchFormCompletion: { completion in
switch completion {
case .completed(let results):
save(results)
case .discarded:
cancel()
default:
cancel()
}
}
)
Install as an embedded framework
Download the project source code and drag in the ResearchKitSwiftUI folder. In the dialog that pops up, choose to copy files to destination and create folders. Then hit the finish button. Finally, embed the ResearchKitSwiftUI framework in your app by adding it to the "Frameworks, Libraries, and Embedded Content" section for your target.
Consent
The ResearchKit framework provides classes that you can customize to explain the details of your research study and obtain a signature if needed. Use ResearchKit's provided classes to quickly welcome, and inform your participants of what the study entails.
import ResearchKit
import ResearchKitUI
// Welcome page.
let welcomeStep = ORKInstructionStep(identifier: String(describing: Identifier.consentWelcomeInstructionStep))
welcomeStep.iconImage = UIImage(systemName: "hand.wave")
welcomeStep.title = "Welcome!"
welcomeStep.detailText = "Thank you for joining our study. Tap Next to learn more before signing up."
// Before You Join page.
let beforeYouJoinStep = ORKInstructionStep(identifier: String(describing: Identifier.informedConsentInstructionStep))
beforeYouJoinStep.iconImage = UIImage(systemName: "doc.text.magnifyingglass")
beforeYouJoinStep.title = "Before You Join"
let sharingHealthDataBodyItem = ORKBodyItem(text: "The study will ask you to share some of your Health data.",
detailText: nil,
image: UIImage(systemName: "heart.fill"),
learnMoreItem: nil,
bodyItemStyle: .image)
let completingTasksBodyItem = ORKBodyItem(text: "You will be asked to complete various tasks over the duration of the study.",
detailText: nil,
image: UIImage(systemName: "checkmark.circle.fill"),
learnMoreItem: nil,
bodyItemStyle: .image)
let signatureBodyItem = ORKBodyItem(text: "Before joining, we will ask you to sign an informed consent document.",
detailText: nil,
image: UIImage(systemName: "signature"),
learnMoreItem: nil,
bodyItemStyle: .image)
let secureDataBodyItem = ORKBodyItem(text: "Your data is kept private and secure.",
detailText: nil,
image: UIImage(systemName: "lock.fill"),
learnMoreItem: nil,
bodyItemStyle: .image)
beforeYouJoinStep.bodyItems = [
sharingHealthDataBodyItem,
completingTasksBodyItem,
signatureBodyItem,
secureDataBodyItem
]
The consent steps are presented in the figure below.
Vist the Obtaining Consentarticle in ResearchKit's Documentation for
more examples that include signature collection and PDF file storage.
Active Tasks
Some studies may need data beyond survey questions or the passive data collection capabilities available through use of the HealthKit and CoreMotion APIs if you are programming for iOS. ResearchKit's active tasks invite users to perform activities under semi-controlled conditions, while iPhone sensors actively collect data. ResearchKit active tasks are not diagnostic tools nor medical devices of any kind and output from those active tasks may not be used for diagnosis. Developers and researchers are responsible for complying with all applicable laws and regulations with respect to further development and use of the active tasks.
Use predefined tasks provided by ResearchKit to guide your participants through specific actions.
import ResearchKit
import ResearchKitUI
import ResearchKitActiveTask
let orderedTask = ORKOrderedTask.dBHLToneAudiometryTask(withIdentifier: "dBHLToneAudiometryTaskIdentifier",
intendedUseDescription: nil, options: [])
let taskViewController = ORKTaskViewController(task: orderedTask, taskRun: nil)
taskViewController.delegate = self
present(taskViewController, animated: true)
The dBHL Tone Audiometry task is presented in the figure below.
Getting Help
GitHub is our primary forum for ResearchKit. Feel free to open up issues about questions, problems, or ideas.
License
This project is made available under the terms of a BSD license. See the LICENSE file.