diff --git a/Package.swift b/Package.swift
index ae57bb6f3c..95f1adc342 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,4 +1,4 @@
-// swift-tools-version:5.10
+// swift-tools-version: 6.0
import class Foundation.ProcessInfo
import PackageDescription
@@ -13,6 +13,7 @@ let swiftConcurrency: SwiftSetting = .enableUpcomingFeature("StrictConcurrency")
let package = Package(
name: "ResearchKit",
+ defaultLocalization: "en",
platforms: [
.iOS(.v17),
.visionOS(.v1)
@@ -44,9 +45,6 @@ let package = Package(
.target(name: "ResearchKitUI"),
.target(name: "ResearchKitActiveTask", condition: .when(platforms: [.iOS]))
],
- swiftSettings: [
- swiftConcurrency
- ],
plugins: [] + swiftLintPlugin()
)
]
diff --git a/README.md b/README.md
index 230935f791..e07d0ee209 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+![ResearchKit](https://github.com/user-attachments/assets/0384c1a6-ec67-45d3-be68-136a2e4cacff)
+
ResearchKit Framework
===========
@@ -86,6 +88,78 @@ The height question is presented in the figure below.
|---|---|
| ![height-question](https://github.com/ResearchKit/ResearchKit/assets/29615893/4f425329-83b7-45c3-84f9-58cdbcaf2529) | ![height-question-2](https://github.com/ResearchKit/ResearchKit/assets/29615893/2cc0dc2c-5c2a-4b50-a4be-834363fb64b5) |
+### 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:
+* `MultipleChoiceQuestion`
+* `HeightQuestion`
+* `WeightQuestion`
+* `SliderQuestion`
+* `TextQuestion`
+* `DateTimeQuestion`
+* `NumericQuestion`
+* `ImageChoiceQuestion`
+
+The example below shows how to create a `ResearchForm` to present a text question for the participant to answer, and then save their results.
+
+```swift
+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
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 3243756ce4..94ac15af2e 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -1,5 +1,24 @@
# ResearchKit Release Notes
+## ResearchKit 3.1 Release Notes
+In addition to general stability and performance improvements, ResearchKit 3.1 includes the following updates:
+
+- **ORKFamilyHistoryStep**
+The `ORKFamilyHistoryStep` can be configured to present a Family Health History survey.
+
+- **ORKColorChoiceAnswerFormat**
+The `ORKColorChoiceAnswerFormat` presents the user with a list of color choices.
+
+- **ORKAgeAnswerFormat**
+The `ORKAgeAnswerFormat` presents a age picker that presents birth year or current age options depending on how you configure it.
+
+- **CLLocation Flag**
+A compiler flag that prevents your app from being flagged during app store submission if your app doesn't require location services.
+
+- **HealthKit Flag**
+A compiler flag that prevents your app from being flagged during app store submission if your app doesn't use HealthKit.
+
+
## ResearchKit 3.0.1 Release Notes
In addition to general stability and performance improvements, ResearchKit 3.0.1 includes the following updates:
diff --git a/RKWorkspace.xcworkspace/contents.xcworkspacedata b/RKWorkspace.xcworkspace/contents.xcworkspacedata
index 05c8ab4b21..7e57b4298d 100644
--- a/RKWorkspace.xcworkspace/contents.xcworkspacedata
+++ b/RKWorkspace.xcworkspace/contents.xcworkspacedata
@@ -7,4 +7,7 @@
+
+
diff --git a/ResearchKit.podspec b/ResearchKit.podspec
new file mode 100644
index 0000000000..4ac578f0d8
--- /dev/null
+++ b/ResearchKit.podspec
@@ -0,0 +1,34 @@
+Pod::Spec.new do |s|
+ s.name = 'ResearchKit'
+ s.version = '3.0.1'
+ s.summary = 'ResearchKit is an open source software framework that makes it easy to create apps for medical research or for other research projects.'
+ s.homepage = 'https://www.github.com/ResearchKit/ResearchKit'
+ s.documentation_url = 'http://researchkit.github.io/docs/'
+ s.license = { :type => 'BSD', :file => 'LICENSE' }
+ s.author = { 'researchkit.org' => 'http://researchkit.org' }
+ s.source = { :git => 'https://github.com/ResearchKit/ResearchKit.git', :tag => s.version.to_s }
+
+ s.default_subspec = "ResearchKitAllTargets"
+
+ s.subspec 'ResearchKitCore' do |ss|
+ ss.vendored_frameworks = 'xcframework/ResearchKit.xcframework'
+ end
+
+ s.subspec 'ResearchKitUI' do |ss|
+ ss.vendored_frameworks = 'xcframework/ResearchKitUI.xcframework'
+ ss.dependency 'ResearchKit/ResearchKitCore'
+ end
+
+ s.subspec 'ResearchKitActiveTask' do |ss|
+ ss.vendored_frameworks = 'xcframework/ResearchKitActiveTask.xcframework'
+ ss.dependency 'ResearchKit/ResearchKitUI'
+ ss.dependency 'ResearchKit/ResearchKitCore'
+ end
+
+ s.subspec 'ResearchKitAllTargets' do |ss|
+ ss.dependency 'ResearchKit/ResearchKitCore'
+ ss.dependency 'ResearchKit/ResearchKitUI'
+ ss.dependency 'ResearchKit/ResearchKitActiveTask'
+ end
+end
+
diff --git a/ResearchKit.xcodeproj/project.pbxproj b/ResearchKit.xcodeproj/project.pbxproj
index c52483ae19..0435609e43 100644
--- a/ResearchKit.xcodeproj/project.pbxproj
+++ b/ResearchKit.xcodeproj/project.pbxproj
@@ -3,23 +3,40 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 55;
+ objectVersion = 60;
objects = {
+/* Begin PBXAggregateTarget section */
+ 0BC672D82BD9C52D005798AC /* ResearchKitAllTargets */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 0BC672D92BD9C52D005798AC /* Build configuration list for PBXAggregateTarget "ResearchKitAllTargets" */;
+ buildPhases = (
+ 0BC672E82BD9C69C005798AC /* ShellScript */,
+ );
+ dependencies = (
+ 0BC672E02BD9C541005798AC /* PBXTargetDependency */,
+ 0BC672E22BD9C541005798AC /* PBXTargetDependency */,
+ 0BC672E62BD9C541005798AC /* PBXTargetDependency */,
+ );
+ name = ResearchKitAllTargets;
+ productName = ResearchKitAllTargets;
+ };
+/* End PBXAggregateTarget section */
+
/* Begin PBXBuildFile section */
- 00B1F7852241503900D022FE /* Speech.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00B1F7842241503900D022FE /* Speech.framework */; };
- 00C2668E23022CD400337E0B /* ORKCustomStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 00C2668C23022CD400337E0B /* ORKCustomStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 00C2668F23022CD400337E0B /* ORKCustomStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 00C2668D23022CD400337E0B /* ORKCustomStep.m */; };
+ 00B1F7852241503900D022FE /* Speech.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00B1F7842241503900D022FE /* Speech.framework */; platformFilter = ios; };
+ 00C2668E23022CD400337E0B /* ORKCustomStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 00C2668C23022CD400337E0B /* ORKCustomStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 00C2668F23022CD400337E0B /* ORKCustomStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 00C2668D23022CD400337E0B /* ORKCustomStep.m */; platformFilter = ios; };
03057F492518ECDC00C4EC5B /* ORKAudioStepViewControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 03057F482518ECDC00C4EC5B /* ORKAudioStepViewControllerTests.m */; };
- 031A0FC124CF4ECD000E4455 /* ORKSensorPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 031A0FBF24CF4ECD000E4455 /* ORKSensorPermissionType.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 031A0FC224CF4ECD000E4455 /* ORKSensorPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 031A0FC024CF4ECD000E4455 /* ORKSensorPermissionType.m */; };
+ 031A0FC124CF4ECD000E4455 /* ORKSensorPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 031A0FBF24CF4ECD000E4455 /* ORKSensorPermissionType.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 031A0FC224CF4ECD000E4455 /* ORKSensorPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 031A0FC024CF4ECD000E4455 /* ORKSensorPermissionType.m */; platformFilter = ios; };
0324C1D825439E1800BBE77B /* ORKVideoInstructionStepViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0324C1D725439E1800BBE77B /* ORKVideoInstructionStepViewControllerTests.swift */; };
- 036B1E8D25351BAD008483DF /* ORKMotionActivityPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 036B1E8B25351BAD008483DF /* ORKMotionActivityPermissionType.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 036B1E8E25351BAD008483DF /* ORKMotionActivityPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 036B1E8C25351BAD008483DF /* ORKMotionActivityPermissionType.m */; };
- 03BD9EA3253E62A0008ADBE1 /* ORKBundleAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 03BD9EA1253E62A0008ADBE1 /* ORKBundleAsset.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 03BD9EA4253E62A0008ADBE1 /* ORKBundleAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BD9EA2253E62A0008ADBE1 /* ORKBundleAsset.m */; };
- 03EDD58024CA6B1D006245E9 /* ORKNotificationPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 03EDD57E24CA6B1D006245E9 /* ORKNotificationPermissionType.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 03EDD58124CA6B1D006245E9 /* ORKNotificationPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 03EDD57F24CA6B1D006245E9 /* ORKNotificationPermissionType.m */; };
+ 036B1E8D25351BAD008483DF /* ORKMotionActivityPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 036B1E8B25351BAD008483DF /* ORKMotionActivityPermissionType.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 036B1E8E25351BAD008483DF /* ORKMotionActivityPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 036B1E8C25351BAD008483DF /* ORKMotionActivityPermissionType.m */; platformFilter = ios; };
+ 03BD9EA3253E62A0008ADBE1 /* ORKBundleAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 03BD9EA1253E62A0008ADBE1 /* ORKBundleAsset.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 03BD9EA4253E62A0008ADBE1 /* ORKBundleAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BD9EA2253E62A0008ADBE1 /* ORKBundleAsset.m */; platformFilter = ios; };
+ 03EDD58024CA6B1D006245E9 /* ORKNotificationPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 03EDD57E24CA6B1D006245E9 /* ORKNotificationPermissionType.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 03EDD58124CA6B1D006245E9 /* ORKNotificationPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 03EDD57F24CA6B1D006245E9 /* ORKNotificationPermissionType.m */; platformFilter = ios; };
0B0852742BD872C400149963 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0B0852732BD872C400149963 /* PrivacyInfo.xcprivacy */; };
0B0852762BD872D800149963 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0B0852752BD872D800149963 /* PrivacyInfo.xcprivacy */; };
0B0852782BD872EA00149963 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0B0852772BD872EA00149963 /* PrivacyInfo.xcprivacy */; };
@@ -33,11 +50,11 @@
0BD9B6112B75992800A64EF9 /* Sentence5.wav in Resources */ = {isa = PBXBuildFile; fileRef = 7118AC6320BF6A3A00D7A6BB /* Sentence5.wav */; };
0BD9B6122B75992C00A64EF9 /* Sentence6.wav in Resources */ = {isa = PBXBuildFile; fileRef = 7118AC6220BF6A3A00D7A6BB /* Sentence6.wav */; };
0BD9B6132B75992F00A64EF9 /* Sentence7.wav in Resources */ = {isa = PBXBuildFile; fileRef = 7118AC6020BF6A3900D7A6BB /* Sentence7.wav */; };
- 0BE9D5272947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BE9D5252947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.m */; };
+ 0BE9D5272947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BE9D5252947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.m */; platformFilter = ios; };
0BFD27562B8D1D3B00B540E8 /* ORKJSONSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 51AF19562B583BBA00D3B399 /* ORKJSONSerializationTests.m */; };
- 10FF9ADB1B7BA78400ECB5B4 /* ORKOrderedTask_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 10FF9AD91B7BA78400ECB5B4 /* ORKOrderedTask_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 12F339BF26A1F09A000665E4 /* ORKLocationPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F339BD26A1F09A000665E4 /* ORKLocationPermissionType.m */; };
- 12F339C026A1F09A000665E4 /* ORKLocationPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 12F339BE26A1F09A000665E4 /* ORKLocationPermissionType.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 10FF9ADB1B7BA78400ECB5B4 /* ORKOrderedTask_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 10FF9AD91B7BA78400ECB5B4 /* ORKOrderedTask_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ 12F339BF26A1F09A000665E4 /* ORKLocationPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F339BD26A1F09A000665E4 /* ORKLocationPermissionType.m */; platformFilter = ios; };
+ 12F339C026A1F09A000665E4 /* ORKLocationPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 12F339BE26A1F09A000665E4 /* ORKLocationPermissionType.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
1483DBB5220125BE004C26B6 /* ORKActiveStepTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1483DBB4220125BE004C26B6 /* ORKActiveStepTests.swift */; };
148E58BD227B36DB00EEF915 /* ORKCompletionStepViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148E58BC227B36DB00EEF915 /* ORKCompletionStepViewControllerTests.swift */; };
148E58C2227B753F00EEF915 /* ORKContinueButtonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148E58C1227B753F00EEF915 /* ORKContinueButtonTests.swift */; };
@@ -56,26 +73,26 @@
14F7AC8B2269035200D52F41 /* ORKStepViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F7AC8A2269035200D52F41 /* ORKStepViewControllerTests.swift */; };
22ED1847285290250052406B /* ORKAudiometryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 22ED1845285290250052406B /* ORKAudiometryTests.m */; };
22ED1848285290250052406B /* ORKAudiometryTestData.plist in Resources */ = {isa = PBXBuildFile; fileRef = 22ED1846285290250052406B /* ORKAudiometryTestData.plist */; };
- 2429D5721BBB5397003A512F /* ORKRegistrationStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2429D5701BBB5397003A512F /* ORKRegistrationStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2429D5731BBB5397003A512F /* ORKRegistrationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 2429D5711BBB5397003A512F /* ORKRegistrationStep.m */; };
- 242C9E051BBDFDAC0088B7F4 /* ORKVerificationStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 242C9E031BBDFDAC0088B7F4 /* ORKVerificationStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 242C9E061BBDFDAC0088B7F4 /* ORKVerificationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 242C9E041BBDFDAC0088B7F4 /* ORKVerificationStep.m */; };
- 2433C9E31B9A506F0052D375 /* ORKKeychainWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2433C9E11B9A506F0052D375 /* ORKKeychainWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2429D5721BBB5397003A512F /* ORKRegistrationStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2429D5701BBB5397003A512F /* ORKRegistrationStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 2429D5731BBB5397003A512F /* ORKRegistrationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 2429D5711BBB5397003A512F /* ORKRegistrationStep.m */; platformFilter = ios; };
+ 242C9E051BBDFDAC0088B7F4 /* ORKVerificationStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 242C9E031BBDFDAC0088B7F4 /* ORKVerificationStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 242C9E061BBDFDAC0088B7F4 /* ORKVerificationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 242C9E041BBDFDAC0088B7F4 /* ORKVerificationStep.m */; platformFilter = ios; };
+ 2433C9E31B9A506F0052D375 /* ORKKeychainWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2433C9E11B9A506F0052D375 /* ORKKeychainWrapper.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
2433C9E41B9A506F0052D375 /* ORKKeychainWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2433C9E21B9A506F0052D375 /* ORKKeychainWrapper.m */; };
244EFAD21BCEFD83001850D9 /* ORKAnswerFormat_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 244EFAD11BCEFD83001850D9 /* ORKAnswerFormat_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
248604061B4C98760010C8A0 /* ORKAnswerFormatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 248604051B4C98760010C8A0 /* ORKAnswerFormatTests.m */; };
- 2489F7B11D65214D008DEF20 /* ORKVideoCaptureStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2489F7A91D65214D008DEF20 /* ORKVideoCaptureStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2489F7B21D65214D008DEF20 /* ORKVideoCaptureStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 2489F7AA1D65214D008DEF20 /* ORKVideoCaptureStep.m */; };
- 24A4DA141B8D1115009C797A /* ORKPasscodeStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A4DA121B8D1115009C797A /* ORKPasscodeStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 24A4DA151B8D1115009C797A /* ORKPasscodeStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 24A4DA131B8D1115009C797A /* ORKPasscodeStep.m */; };
- 24BC5CEE1BC345D900846B43 /* ORKLoginStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 24BC5CEC1BC345D900846B43 /* ORKLoginStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 24BC5CEF1BC345D900846B43 /* ORKLoginStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 24BC5CED1BC345D900846B43 /* ORKLoginStep.m */; };
- 24C296751BD052F800B42EF1 /* ORKVerificationStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C296741BD052F800B42EF1 /* ORKVerificationStep_Internal.h */; };
- 24C296771BD055B800B42EF1 /* ORKLoginStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C296761BD055B800B42EF1 /* ORKLoginStep_Internal.h */; };
+ 2489F7B11D65214D008DEF20 /* ORKVideoCaptureStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2489F7A91D65214D008DEF20 /* ORKVideoCaptureStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 2489F7B21D65214D008DEF20 /* ORKVideoCaptureStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 2489F7AA1D65214D008DEF20 /* ORKVideoCaptureStep.m */; platformFilter = ios; };
+ 24A4DA141B8D1115009C797A /* ORKPasscodeStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A4DA121B8D1115009C797A /* ORKPasscodeStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 24A4DA151B8D1115009C797A /* ORKPasscodeStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 24A4DA131B8D1115009C797A /* ORKPasscodeStep.m */; platformFilter = ios; };
+ 24BC5CEE1BC345D900846B43 /* ORKLoginStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 24BC5CEC1BC345D900846B43 /* ORKLoginStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 24BC5CEF1BC345D900846B43 /* ORKLoginStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 24BC5CED1BC345D900846B43 /* ORKLoginStep.m */; platformFilter = ios; };
+ 24C296751BD052F800B42EF1 /* ORKVerificationStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C296741BD052F800B42EF1 /* ORKVerificationStep_Internal.h */; platformFilter = ios; };
+ 24C296771BD055B800B42EF1 /* ORKLoginStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C296761BD055B800B42EF1 /* ORKLoginStep_Internal.h */; platformFilter = ios; };
2EBFE11D1AE1B32D00CB8254 /* ORKUIViewAccessibilityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EBFE11C1AE1B32D00CB8254 /* ORKUIViewAccessibilityTests.m */; };
2EBFE1201AE1B74100CB8254 /* ORKVoiceEngineTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EBFE11F1AE1B74100CB8254 /* ORKVoiceEngineTests.m */; };
- 511987C3246330CA004FC2C7 /* ORKRequestPermissionsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 511987C1246330CA004FC2C7 /* ORKRequestPermissionsStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 511987C4246330CA004FC2C7 /* ORKRequestPermissionsStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 511987C2246330CA004FC2C7 /* ORKRequestPermissionsStep.m */; };
+ 511987C3246330CA004FC2C7 /* ORKRequestPermissionsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 511987C1246330CA004FC2C7 /* ORKRequestPermissionsStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 511987C4246330CA004FC2C7 /* ORKRequestPermissionsStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 511987C2246330CA004FC2C7 /* ORKRequestPermissionsStep.m */; platformFilter = ios; };
511BB024298DCCC200936EC0 /* ORKSpeechRecognitionStepViewController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 511BB022298DCCC200936EC0 /* ORKSpeechRecognitionStepViewController_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
511E8D622995C20E00A384A5 /* ORKEnvironmentSPLMeterStepViewController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 511E8D602995C20E00A384A5 /* ORKEnvironmentSPLMeterStepViewController_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
512741272B1557220045A449 /* ResearchKit.docc in Sources */ = {isa = PBXBuildFile; fileRef = 512741262B1557220045A449 /* ResearchKit.docc */; };
@@ -163,33 +180,59 @@
5192BEED2AE043D3006E43FB /* ORKTimedWalkStepViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BEE92AE043D3006E43FB /* ORKTimedWalkStepViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
5192BEEE2AE043D3006E43FB /* ORKTimedWalkContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BEEA2AE043D3006E43FB /* ORKTimedWalkContentView.h */; };
5192BEEF2AE043D3006E43FB /* ORKTimedWalkStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BEEB2AE043D3006E43FB /* ORKTimedWalkStepViewController.m */; };
- 5192BF502AE09673006E43FB /* ORKPredicateFormItemVisibilityRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF4D2AE09672006E43FB /* ORKPredicateFormItemVisibilityRule.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 5192BF512AE09673006E43FB /* ORKPredicateFormItemVisibilityRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF4E2AE09672006E43FB /* ORKPredicateFormItemVisibilityRule.m */; };
- 5192BF522AE09673006E43FB /* ORKPredicateFormItemVisibilityRule_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF4F2AE09672006E43FB /* ORKPredicateFormItemVisibilityRule_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 5192BF502AE09673006E43FB /* ORKPredicateFormItemVisibilityRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF4D2AE09672006E43FB /* ORKPredicateFormItemVisibilityRule.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 5192BF512AE09673006E43FB /* ORKPredicateFormItemVisibilityRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF4E2AE09672006E43FB /* ORKPredicateFormItemVisibilityRule.m */; platformFilter = ios; };
+ 5192BF522AE09673006E43FB /* ORKPredicateFormItemVisibilityRule_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF4F2AE09672006E43FB /* ORKPredicateFormItemVisibilityRule_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
5192BF592AE09794006E43FB /* ORKFormItemVisibilityRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF572AE09793006E43FB /* ORKFormItemVisibilityRule.h */; settings = {ATTRIBUTES = (Public, ); }; };
5192BF5A2AE09794006E43FB /* ORKFormItemVisibilityRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF582AE09794006E43FB /* ORKFormItemVisibilityRule.m */; };
5192BF5D2AE19036006E43FB /* frequency_dBSPL_AIRPODSPROV2.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5192BF5C2AE19036006E43FB /* frequency_dBSPL_AIRPODSPROV2.plist */; };
5192BF7D2AE1A87D006E43FB /* retspl_AIRPODSPROV2.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5192BF7C2AE1A87D006E43FB /* retspl_AIRPODSPROV2.plist */; };
5192BF7F2AE1A9BA006E43FB /* volume_curve_AIRPODSPROV2.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5192BF7E2AE1A9BA006E43FB /* volume_curve_AIRPODSPROV2.plist */; };
- 5192BF842AE1BA47006E43FB /* ORKFrontFacingCameraStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF802AE1BA47006E43FB /* ORKFrontFacingCameraStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 5192BF852AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF812AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.m */; };
- 5192BF862AE1BA47006E43FB /* ORKFrontFacingCameraStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF822AE1BA47006E43FB /* ORKFrontFacingCameraStep.m */; };
- 5192BF872AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF832AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 5192BF8A2AE1BBB0006E43FB /* ORKSecondaryTaskStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF882AE1BBB0006E43FB /* ORKSecondaryTaskStep.m */; };
- 5192BF8B2AE1BBB0006E43FB /* ORKSecondaryTaskStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF892AE1BBB0006E43FB /* ORKSecondaryTaskStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 5192BF8C2AE1BF16006E43FB /* (null) in Headers */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Private, ); }; };
+ 5192BF842AE1BA47006E43FB /* ORKFrontFacingCameraStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF802AE1BA47006E43FB /* ORKFrontFacingCameraStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 5192BF852AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF812AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.m */; platformFilter = ios; };
+ 5192BF862AE1BA47006E43FB /* ORKFrontFacingCameraStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF822AE1BA47006E43FB /* ORKFrontFacingCameraStep.m */; platformFilter = ios; };
+ 5192BF872AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF832AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 5192BF8A2AE1BBB0006E43FB /* ORKSecondaryTaskStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF882AE1BBB0006E43FB /* ORKSecondaryTaskStep.m */; platformFilter = ios; };
+ 5192BF8B2AE1BBB0006E43FB /* ORKSecondaryTaskStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF892AE1BBB0006E43FB /* ORKSecondaryTaskStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 5192BF8F2AE1C051006E43FB /* ORKAgePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF8D2AE1C051006E43FB /* ORKAgePicker.h */; };
+ 5192BF902AE1C051006E43FB /* ORKAgePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF8E2AE1C051006E43FB /* ORKAgePicker.m */; };
+ 5192BF932AE1C2F8006E43FB /* ORKChoiceViewCell+ORKColorChoice.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF912AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.h */; };
+ 5192BF942AE1C2F8006E43FB /* ORKChoiceViewCell+ORKColorChoice.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF922AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.m */; };
5192BF972AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF952AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.h */; };
5192BF982AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF962AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.m */; };
5192BF992AE1D876006E43FB /* ORKChoiceViewCell+ORKTextChoice.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B8444632A79C25000292DEA /* ORKChoiceViewCell+ORKTextChoice.h */; };
5192BF9A2AE1D8A4006E43FB /* ORKChoiceViewCell+ORKTextChoice.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B8444642A79C25000292DEA /* ORKChoiceViewCell+ORKTextChoice.m */; };
- 5192BFA12AEAD7B5006E43FB /* Artwork.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 861610BF1A8D8EDD00245F7A /* Artwork.xcassets */; };
- 51A11F172BD08D5E0060C07E /* HKSample+ORKJSONDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A11F132BD08D5D0060C07E /* HKSample+ORKJSONDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 51A11F182BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A11F142BD08D5D0060C07E /* CMMotionActivity+ORKJSONDictionary.m */; };
- 51A11F192BD08D5E0060C07E /* HKSample+ORKJSONDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A11F152BD08D5D0060C07E /* HKSample+ORKJSONDictionary.m */; };
- 51A11F1A2BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A11F162BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5192BF9D2AE1DE62006E43FB /* ORKColorChoiceCellGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 5192BF9B2AE1DE62006E43FB /* ORKColorChoiceCellGroup.m */; };
+ 5192BF9E2AE1DE62006E43FB /* ORKColorChoiceCellGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 5192BF9C2AE1DE62006E43FB /* ORKColorChoiceCellGroup.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5192BFA12AEAD7B5006E43FB /* Artwork.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 861610BF1A8D8EDD00245F7A /* Artwork.xcassets */; platformFilter = ios; };
+ 519CE8222C6582BE003BB584 /* ORKHealthCondition.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8162C6582BD003BB584 /* ORKHealthCondition.m */; platformFilter = ios; };
+ 519CE8232C6582BE003BB584 /* ORKFamilyHistoryStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8172C6582BD003BB584 /* ORKFamilyHistoryStep.m */; platformFilter = ios; };
+ 519CE8242C6582BE003BB584 /* ORKHealthCondition.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE8182C6582BD003BB584 /* ORKHealthCondition.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE8252C6582BE003BB584 /* ORKFamilyHistoryResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE8192C6582BD003BB584 /* ORKFamilyHistoryResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE8262C6582BE003BB584 /* ORKRelatedPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE81A2C6582BD003BB584 /* ORKRelatedPerson.m */; platformFilter = ios; };
+ 519CE8272C6582BE003BB584 /* ORKRelativeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE81B2C6582BD003BB584 /* ORKRelativeGroup.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE8282C6582BE003BB584 /* ORKRelativeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE81C2C6582BD003BB584 /* ORKRelativeGroup.m */; platformFilter = ios; };
+ 519CE8292C6582BE003BB584 /* ORKConditionStepConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE81D2C6582BE003BB584 /* ORKConditionStepConfiguration.m */; platformFilter = ios; };
+ 519CE82A2C6582BE003BB584 /* ORKConditionStepConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE81E2C6582BE003BB584 /* ORKConditionStepConfiguration.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE82B2C6582BE003BB584 /* ORKFamilyHistoryStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE81F2C6582BE003BB584 /* ORKFamilyHistoryStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE82C2C6582BE003BB584 /* ORKRelatedPerson.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE8202C6582BE003BB584 /* ORKRelatedPerson.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE82D2C6582BE003BB584 /* ORKFamilyHistoryResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8212C6582BE003BB584 /* ORKFamilyHistoryResult.m */; platformFilter = ios; };
+ 519CE8352C658617003BB584 /* ORKFamilyHistoryStepViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE8302C658617003BB584 /* ORKFamilyHistoryStepViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE8382C658617003BB584 /* ORKFamilyHistoryStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8332C658617003BB584 /* ORKFamilyHistoryStepViewController.m */; };
+ 519CE8412C658654003BB584 /* ORKFamilyHistoryRelatedPersonCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE83B2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE8422C658654003BB584 /* ORKFamilyHistoryRelatedPersonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE83C2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.m */; };
+ 519CE8432C658654003BB584 /* ORKFamilyHistoryTableFooterView.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE83D2C658653003BB584 /* ORKFamilyHistoryTableFooterView.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 519CE8442C658654003BB584 /* ORKFamilyHistoryTableFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE83E2C658654003BB584 /* ORKFamilyHistoryTableFooterView.m */; };
+ 519CE8452C658654003BB584 /* ORKFamilyHistoryTableHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE83F2C658654003BB584 /* ORKFamilyHistoryTableHeaderView.h */; };
+ 519CE8462C658654003BB584 /* ORKFamilyHistoryTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8402C658654003BB584 /* ORKFamilyHistoryTableHeaderView.m */; };
+ 519CE85C2C6AD858003BB584 /* ORKFamilyHistoryStepViewController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE85B2C6AD858003BB584 /* ORKFamilyHistoryStepViewController_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 519CE85F2C6BC1DB003BB584 /* ORKFamilyHistoryResultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519CE85E2C6BC1DB003BB584 /* ORKFamilyHistoryResultTests.swift */; };
+ 51A11F172BD08D5E0060C07E /* HKSample+ORKJSONDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A11F132BD08D5D0060C07E /* HKSample+ORKJSONDictionary.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 51A11F182BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A11F142BD08D5D0060C07E /* CMMotionActivity+ORKJSONDictionary.m */; platformFilter = ios; };
+ 51A11F192BD08D5E0060C07E /* HKSample+ORKJSONDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A11F152BD08D5D0060C07E /* HKSample+ORKJSONDictionary.m */; platformFilter = ios; };
+ 51A11F1A2BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A11F162BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
51A11F222BD152660060C07E /* ORKActiveStepCustomView.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A11F202BD152660060C07E /* ORKActiveStepCustomView.h */; settings = {ATTRIBUTES = (Public, ); }; };
51A11F232BD152660060C07E /* ORKActiveStepCustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A11F212BD152660060C07E /* ORKActiveStepCustomView.m */; };
- 51A11F242BD1548C0060C07E /* UIImageView+ResearchKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B9CC5662A68C02C00080E29 /* UIImageView+ResearchKit.m */; };
51AEAAB22B744AC200F4D107 /* ORKQuestionStepViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AEAAA82B743FA500F4D107 /* ORKQuestionStepViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
51AEAAB32B744ACC00F4D107 /* ORKQuestionStepViewController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AEAAA72B743FA500F4D107 /* ORKQuestionStepViewController_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
51AEAAB42B744B5700F4D107 /* ORKQuestionStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 51AEAAA62B743FA500F4D107 /* ORKQuestionStepViewController.m */; };
@@ -198,13 +241,15 @@
51AF19582B583BBA00D3B399 /* ORKDataCollectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 51AF19532B583BB900D3B399 /* ORKDataCollectionTests.m */; };
51AF19592B583BBA00D3B399 /* samples.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 51AF19542B583BB900D3B399 /* samples.bundle */; };
51AF19662B583D0F00D3B399 /* ORKESerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 51AF19552B583BB900D3B399 /* ORKESerialization.m */; };
- 51AF1B152B67F30500D3B399 /* ORKSignatureFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AF1B132B67F30500D3B399 /* ORKSignatureFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 51AF1B162B67F30500D3B399 /* ORKSignatureFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 51AF1B142B67F30500D3B399 /* ORKSignatureFormatter.m */; };
- 51AF1B202B683C3400D3B399 /* ORKWebViewStepResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AF1B1F2B683C3400D3B399 /* ORKWebViewStepResult_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 51AF1B152B67F30500D3B399 /* ORKSignatureFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AF1B132B67F30500D3B399 /* ORKSignatureFormatter.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 51AF1B162B67F30500D3B399 /* ORKSignatureFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 51AF1B142B67F30500D3B399 /* ORKSignatureFormatter.m */; platformFilter = ios; };
+ 51AF1B202B683C3400D3B399 /* ORKWebViewStepResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AF1B1F2B683C3400D3B399 /* ORKWebViewStepResult_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
51AF1B232B69803A00D3B399 /* Window.wav in Resources */ = {isa = PBXBuildFile; fileRef = 51AF1B212B69803A00D3B399 /* Window.wav */; };
51AF1B242B69803A00D3B399 /* Noise.wav in Resources */ = {isa = PBXBuildFile; fileRef = 51AF1B222B69803A00D3B399 /* Noise.wav */; };
- 51B94DBD2B311E810039B0E7 /* CLLocationManager+ResearchKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B94DBC2B311E810039B0E7 /* CLLocationManager+ResearchKit.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 51B94DC72B3254FE0039B0E7 /* CLLocationManager+ResearchKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 51B94DC62B3254FD0039B0E7 /* CLLocationManager+ResearchKit.m */; };
+ 51B76DFB2CB5B5A30061698A /* ResearchKitActiveTask.docc in Sources */ = {isa = PBXBuildFile; fileRef = 51B76DFA2CB5B5A30061698A /* ResearchKitActiveTask.docc */; };
+ 51B76DFD2CB5C73C0061698A /* ResearchKitUI.docc in Sources */ = {isa = PBXBuildFile; fileRef = 51B76DFC2CB5C73C0061698A /* ResearchKitUI.docc */; };
+ 51B94DBD2B311E810039B0E7 /* CLLocationManager+ResearchKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B94DBC2B311E810039B0E7 /* CLLocationManager+ResearchKit.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ 51B94DC72B3254FE0039B0E7 /* CLLocationManager+ResearchKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 51B94DC62B3254FD0039B0E7 /* CLLocationManager+ResearchKit.m */; platformFilter = ios; };
51BD8FC929D60FB60001D54E /* frequency_dBSPL_AIRPODSMAX.plist in Resources */ = {isa = PBXBuildFile; fileRef = E293655D25757CC700092A7C /* frequency_dBSPL_AIRPODSMAX.plist */; };
51BD8FCA29D60FB60001D54E /* frequency_dBSPL_EARPODS.plist in Resources */ = {isa = PBXBuildFile; fileRef = 713D4B1B20FE5464002BE28D /* frequency_dBSPL_EARPODS.plist */; };
51BD8FCB29D60FB60001D54E /* frequency_dBSPL_AIRPODS.plist in Resources */ = {isa = PBXBuildFile; fileRef = 71B7B4D820AA91D400C5768A /* frequency_dBSPL_AIRPODS.plist */; };
@@ -223,12 +268,12 @@
51CB80D62AFEBE7E00A1F410 /* ORKFormStepViewControllerConditionalFormItemsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51CB80D52AFEBE7E00A1F410 /* ORKFormStepViewControllerConditionalFormItemsTests.swift */; };
51CB80D82AFEBEC600A1F410 /* ORKPredicateFormItemVisibilityRuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51CB80D72AFEBEC600A1F410 /* ORKPredicateFormItemVisibilityRuleTests.swift */; };
51CB80DA2AFEBF3800A1F410 /* ORKFormItemVisibilityRuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51CB80D92AFEBF3800A1F410 /* ORKFormItemVisibilityRuleTests.swift */; };
- 51E03D6324919711008F8406 /* ORKPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E03D6124919711008F8406 /* ORKPermissionType.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 51E03D6424919711008F8406 /* ORKPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 51E03D6224919711008F8406 /* ORKPermissionType.m */; };
- 51E03D682491A601008F8406 /* ORKHealthKitPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E03D662491A601008F8406 /* ORKHealthKitPermissionType.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 51E03D692491A601008F8406 /* ORKHealthKitPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 51E03D672491A601008F8406 /* ORKHealthKitPermissionType.m */; };
- 51EB9A532B8408D50064A515 /* ORKInstructionStepHTMLFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EB9A512B8408D50064A515 /* ORKInstructionStepHTMLFormatter.h */; };
- 51EB9A542B8408D50064A515 /* ORKInstructionStepHTMLFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 51EB9A522B8408D50064A515 /* ORKInstructionStepHTMLFormatter.m */; };
+ 51E03D6324919711008F8406 /* ORKPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E03D6124919711008F8406 /* ORKPermissionType.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 51E03D6424919711008F8406 /* ORKPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 51E03D6224919711008F8406 /* ORKPermissionType.m */; platformFilter = ios; };
+ 51E03D682491A601008F8406 /* ORKHealthKitPermissionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E03D662491A601008F8406 /* ORKHealthKitPermissionType.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 51E03D692491A601008F8406 /* ORKHealthKitPermissionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 51E03D672491A601008F8406 /* ORKHealthKitPermissionType.m */; platformFilter = ios; };
+ 51EB9A532B8408D50064A515 /* ORKInstructionStepHTMLFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EB9A512B8408D50064A515 /* ORKInstructionStepHTMLFormatter.h */; platformFilter = ios; };
+ 51EB9A542B8408D50064A515 /* ORKInstructionStepHTMLFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 51EB9A522B8408D50064A515 /* ORKInstructionStepHTMLFormatter.m */; platformFilter = ios; };
51EB9A5E2B8D3BA70064A515 /* ORKInstructionStepHTMLFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 51EB9A5D2B8D3BA70064A515 /* ORKInstructionStepHTMLFormatterTests.m */; };
51F716C1297E288A00D8ACF7 /* ORKNormalizedReactionTimeStimulusView.m in Sources */ = {isa = PBXBuildFile; fileRef = 51F716B7297E288900D8ACF7 /* ORKNormalizedReactionTimeStimulusView.m */; };
51F716C2297E288A00D8ACF7 /* ORKNormalizedReactionTimeStimulusView.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F716B8297E288900D8ACF7 /* ORKNormalizedReactionTimeStimulusView.h */; };
@@ -240,7 +285,7 @@
51F716C8297E288A00D8ACF7 /* ORKNormalizedReactionTimeStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 51F716BE297E288900D8ACF7 /* ORKNormalizedReactionTimeStep.m */; };
51F716C9297E288A00D8ACF7 /* ORKNormalizedReactionTimeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F716BF297E288A00D8ACF7 /* ORKNormalizedReactionTimeViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
51F716CA297E288A00D8ACF7 /* ORKNormalizedReactionTimeContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F716C0297E288A00D8ACF7 /* ORKNormalizedReactionTimeContentView.h */; };
- 51F716CB297E2A1100D8ACF7 /* ORKConsentDocument+ORKInstructionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE9D5242947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 51F716CB297E2A1100D8ACF7 /* ORKConsentDocument+ORKInstructionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE9D5242947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
51F716D1297E2CC400D8ACF7 /* ORKConsentLearnMoreViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F716CD297E2CB600D8ACF7 /* ORKConsentLearnMoreViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
51F716D3297E2FB600D8ACF7 /* ORKConsentLearnMoreViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 51F716CE297E2CB600D8ACF7 /* ORKConsentLearnMoreViewController.m */; };
51F716EB2981B49000D8ACF7 /* ORKSpeechInNoiseStepViewController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F716E82981AF1200D8ACF7 /* ORKSpeechInNoiseStepViewController_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -249,7 +294,7 @@
5D04884C25EF4CC30006C68B /* ORKQuestionStep_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D04884B25EF4CC30006C68B /* ORKQuestionStep_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
5D04885725F19A7A0006C68B /* ORKDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D04885525F19A7A0006C68B /* ORKDevice.h */; settings = {ATTRIBUTES = (Private, ); }; };
5D04885825F19A7A0006C68B /* ORKDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D04885625F19A7A0006C68B /* ORKDevice.m */; };
- 5D04885C25F1B3AB0006C68B /* ORKDevice_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D04885B25F1B3AB0006C68B /* ORKDevice_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 5D04885C25F1B3AB0006C68B /* ORKDevice_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D04885B25F1B3AB0006C68B /* ORKDevice_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
5D43C5D424255675006F4084 /* ORKBodyItem_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D43C5D324255675006F4084 /* ORKBodyItem_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; };
5DABE5AE24DA173F00570C57 /* ResearchKit_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 5DABE5AD24DA16E600570C57 /* ResearchKit_Prefix.pch */; };
5E6AB7DF2BC86900009ED0D5 /* ORKTaskViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E6AB7DE2BC86900009ED0D5 /* ORKTaskViewControllerTests.swift */; };
@@ -257,26 +302,27 @@
5EB91CC72BCE2EE600BBF23E /* ORKActiveStepView.m in Sources */ = {isa = PBXBuildFile; fileRef = 86AD910F1AB7B8A600361FEB /* ORKActiveStepView.m */; };
5EB91CC82BCE2EFD00BBF23E /* splMeter_sensitivity_offset.plist in Resources */ = {isa = PBXBuildFile; fileRef = 71F3B27F21001DEC00FB1C41 /* splMeter_sensitivity_offset.plist */; };
5EB91CC92BCE2F1D00BBF23E /* SentencesList.txt in Resources */ = {isa = PBXBuildFile; fileRef = BA22F76C20C4F884006E6E11 /* SentencesList.txt */; };
- 714080DB235FD14700281E04 /* ResearchKit.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 714080D9235FD14700281E04 /* ResearchKit.stringsdict */; };
+ 622774402C5CF7DC00F2E741 /* retspl_dBFS_AIRPODSPROV2.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6227743F2C5CF7DC00F2E741 /* retspl_dBFS_AIRPODSPROV2.plist */; };
+ 714080DB235FD14700281E04 /* ResearchKit.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 714080D9235FD14700281E04 /* ResearchKit.stringsdict */; platformFilter = ios; };
714151D0225C4A23002CA33B /* ORKPasscodeViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A92C6922444F93007547F2 /* ORKPasscodeViewControllerTests.swift */; };
7141EA2222EFBC0C00650145 /* ORKLoggingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7141EA2122EFBC0C00650145 /* ORKLoggingTests.m */; };
- 7167D028231B1EAA00AAB4DD /* ORKFormStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7167D027231B1EAA00AAB4DD /* ORKFormStep_Internal.h */; };
- 8419D66E1FB73CC80088D7E5 /* ORKWebViewStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 8419D66C1FB73CC80088D7E5 /* ORKWebViewStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 8419D66F1FB73CC80088D7E5 /* ORKWebViewStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 8419D66D1FB73CC80088D7E5 /* ORKWebViewStep.m */; };
+ 7167D028231B1EAA00AAB4DD /* ORKFormStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7167D027231B1EAA00AAB4DD /* ORKFormStep_Internal.h */; platformFilter = ios; };
+ 8419D66E1FB73CC80088D7E5 /* ORKWebViewStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 8419D66C1FB73CC80088D7E5 /* ORKWebViewStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 8419D66F1FB73CC80088D7E5 /* ORKWebViewStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 8419D66D1FB73CC80088D7E5 /* ORKWebViewStep.m */; platformFilter = ios; };
861D11AD1AA7951F003C98A7 /* ORKChoiceAnswerFormatHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 861D11AB1AA7951F003C98A7 /* ORKChoiceAnswerFormatHelper.h */; settings = {ATTRIBUTES = (Private, ); }; };
861D11AE1AA7951F003C98A7 /* ORKChoiceAnswerFormatHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 861D11AC1AA7951F003C98A7 /* ORKChoiceAnswerFormatHelper.m */; };
- 866DA51F1D63D04700C9AF3F /* ORKCollector_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5131D63D04700C9AF3F /* ORKCollector_Internal.h */; };
- 866DA5201D63D04700C9AF3F /* ORKCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5141D63D04700C9AF3F /* ORKCollector.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 866DA5211D63D04700C9AF3F /* ORKCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA5151D63D04700C9AF3F /* ORKCollector.m */; };
- 866DA5221D63D04700C9AF3F /* ORKDataCollectionManager_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5161D63D04700C9AF3F /* ORKDataCollectionManager_Internal.h */; };
- 866DA5231D63D04700C9AF3F /* ORKDataCollectionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5171D63D04700C9AF3F /* ORKDataCollectionManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 866DA5241D63D04700C9AF3F /* ORKDataCollectionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA5181D63D04700C9AF3F /* ORKDataCollectionManager.m */; };
- 866DA5251D63D04700C9AF3F /* ORKHealthSampleQueryOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5191D63D04700C9AF3F /* ORKHealthSampleQueryOperation.h */; };
- 866DA5261D63D04700C9AF3F /* ORKHealthSampleQueryOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA51A1D63D04700C9AF3F /* ORKHealthSampleQueryOperation.m */; };
- 866DA5271D63D04700C9AF3F /* ORKMotionActivityQueryOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA51B1D63D04700C9AF3F /* ORKMotionActivityQueryOperation.h */; };
- 866DA5281D63D04700C9AF3F /* ORKMotionActivityQueryOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA51C1D63D04700C9AF3F /* ORKMotionActivityQueryOperation.m */; };
- 866DA5291D63D04700C9AF3F /* ORKOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA51D1D63D04700C9AF3F /* ORKOperation.h */; };
- 866DA52A1D63D04700C9AF3F /* ORKOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA51E1D63D04700C9AF3F /* ORKOperation.m */; };
+ 866DA51F1D63D04700C9AF3F /* ORKCollector_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5131D63D04700C9AF3F /* ORKCollector_Internal.h */; platformFilter = ios; };
+ 866DA5201D63D04700C9AF3F /* ORKCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5141D63D04700C9AF3F /* ORKCollector.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 866DA5211D63D04700C9AF3F /* ORKCollector.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA5151D63D04700C9AF3F /* ORKCollector.m */; platformFilter = ios; };
+ 866DA5221D63D04700C9AF3F /* ORKDataCollectionManager_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5161D63D04700C9AF3F /* ORKDataCollectionManager_Internal.h */; platformFilter = ios; };
+ 866DA5231D63D04700C9AF3F /* ORKDataCollectionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5171D63D04700C9AF3F /* ORKDataCollectionManager.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 866DA5241D63D04700C9AF3F /* ORKDataCollectionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA5181D63D04700C9AF3F /* ORKDataCollectionManager.m */; platformFilter = ios; };
+ 866DA5251D63D04700C9AF3F /* ORKHealthSampleQueryOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA5191D63D04700C9AF3F /* ORKHealthSampleQueryOperation.h */; platformFilter = ios; };
+ 866DA5261D63D04700C9AF3F /* ORKHealthSampleQueryOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA51A1D63D04700C9AF3F /* ORKHealthSampleQueryOperation.m */; platformFilter = ios; };
+ 866DA5271D63D04700C9AF3F /* ORKMotionActivityQueryOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA51B1D63D04700C9AF3F /* ORKMotionActivityQueryOperation.h */; platformFilter = ios; };
+ 866DA5281D63D04700C9AF3F /* ORKMotionActivityQueryOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA51C1D63D04700C9AF3F /* ORKMotionActivityQueryOperation.m */; platformFilter = ios; };
+ 866DA5291D63D04700C9AF3F /* ORKOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 866DA51D1D63D04700C9AF3F /* ORKOperation.h */; platformFilter = ios; };
+ 866DA52A1D63D04700C9AF3F /* ORKOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866DA51E1D63D04700C9AF3F /* ORKOperation.m */; platformFilter = ios; };
86C40CC01A8D7C5C00081FAC /* ORKCompletionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B521A8D7C5B00081FAC /* ORKCompletionStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
86C40CC21A8D7C5C00081FAC /* ORKCompletionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B531A8D7C5B00081FAC /* ORKCompletionStep.m */; };
86C40CE41A8D7C5C00081FAC /* ORKAnswerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B641A8D7C5B00081FAC /* ORKAnswerFormat.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -286,11 +332,11 @@
86C40D141A8D7C5C00081FAC /* ORKHelpers_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B7C1A8D7C5C00081FAC /* ORKHelpers_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
86C40D161A8D7C5C00081FAC /* ORKErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B7D1A8D7C5C00081FAC /* ORKErrors.h */; settings = {ATTRIBUTES = (Private, ); }; };
86C40D181A8D7C5C00081FAC /* ORKErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B7E1A8D7C5C00081FAC /* ORKErrors.m */; };
- 86C40D1A1A8D7C5C00081FAC /* ORKFormItem_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B7F1A8D7C5C00081FAC /* ORKFormItem_Internal.h */; };
+ 86C40D1A1A8D7C5C00081FAC /* ORKFormItem_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B7F1A8D7C5C00081FAC /* ORKFormItem_Internal.h */; platformFilter = ios; };
86C40D201A8D7C5C00081FAC /* ORKFormStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B821A8D7C5C00081FAC /* ORKFormStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
86C40D221A8D7C5C00081FAC /* ORKFormStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B831A8D7C5C00081FAC /* ORKFormStep.m */; };
- 86C40D301A8D7C5C00081FAC /* ORKHealthAnswerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B8A1A8D7C5C00081FAC /* ORKHealthAnswerFormat.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 86C40D321A8D7C5C00081FAC /* ORKHealthAnswerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B8B1A8D7C5C00081FAC /* ORKHealthAnswerFormat.m */; };
+ 86C40D301A8D7C5C00081FAC /* ORKHealthAnswerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B8A1A8D7C5C00081FAC /* ORKHealthAnswerFormat.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 86C40D321A8D7C5C00081FAC /* ORKHealthAnswerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B8B1A8D7C5C00081FAC /* ORKHealthAnswerFormat.m */; platformFilter = ios; };
86C40D361A8D7C5C00081FAC /* ORKHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B8D1A8D7C5C00081FAC /* ORKHelpers.m */; };
86C40D401A8D7C5C00081FAC /* ORKInstructionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B921A8D7C5C00081FAC /* ORKInstructionStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
86C40D421A8D7C5C00081FAC /* ORKInstructionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B931A8D7C5C00081FAC /* ORKInstructionStep.m */; };
@@ -298,7 +344,7 @@
86C40D581A8D7C5C00081FAC /* ORKOrderedTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B9E1A8D7C5C00081FAC /* ORKOrderedTask.m */; };
86C40D5E1A8D7C5C00081FAC /* ORKQuestionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BA11A8D7C5C00081FAC /* ORKQuestionStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
86C40D601A8D7C5C00081FAC /* ORKQuestionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BA21A8D7C5C00081FAC /* ORKQuestionStep.m */; };
- 86C40D621A8D7C5C00081FAC /* ORKQuestionStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BA31A8D7C5C00081FAC /* ORKQuestionStep_Internal.h */; };
+ 86C40D621A8D7C5C00081FAC /* ORKQuestionStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BA31A8D7C5C00081FAC /* ORKQuestionStep_Internal.h */; platformFilter = ios; };
86C40D6A1A8D7C5C00081FAC /* ORKResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BA71A8D7C5C00081FAC /* ORKResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
86C40D6C1A8D7C5C00081FAC /* ORKResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BA81A8D7C5C00081FAC /* ORKResult.m */; };
86C40D6E1A8D7C5C00081FAC /* ORKResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BA91A8D7C5C00081FAC /* ORKResult_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -306,16 +352,16 @@
86C40D901A8D7C5C00081FAC /* ORKStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BBA1A8D7C5C00081FAC /* ORKStep.m */; };
86C40D921A8D7C5C00081FAC /* ORKStep_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BBB1A8D7C5C00081FAC /* ORKStep_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
86C40DC61A8D7C5C00081FAC /* ORKTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BD51A8D7C5C00081FAC /* ORKTask.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 86C40DFE1A8D7C5C00081FAC /* ORKConsentDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BF21A8D7C5C00081FAC /* ORKConsentDocument.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 86C40E001A8D7C5C00081FAC /* ORKConsentDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BF31A8D7C5C00081FAC /* ORKConsentDocument.m */; };
- 86C40E021A8D7C5C00081FAC /* ORKConsentDocument_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BF41A8D7C5C00081FAC /* ORKConsentDocument_Internal.h */; };
- 86C40E081A8D7C5C00081FAC /* ORKConsentReviewStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BF71A8D7C5C00081FAC /* ORKConsentReviewStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 86C40E0A1A8D7C5C00081FAC /* ORKConsentReviewStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BF81A8D7C5C00081FAC /* ORKConsentReviewStep.m */; };
- 86C40E181A8D7C5C00081FAC /* ORKConsentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BFF1A8D7C5C00081FAC /* ORKConsentSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 86C40E1A1A8D7C5C00081FAC /* ORKConsentSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40C001A8D7C5C00081FAC /* ORKConsentSection.m */; };
- 86C40E1C1A8D7C5C00081FAC /* ORKConsentSection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40C011A8D7C5C00081FAC /* ORKConsentSection_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 86C40E1E1A8D7C5C00081FAC /* ORKConsentSignature.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40C021A8D7C5C00081FAC /* ORKConsentSignature.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 86C40E201A8D7C5C00081FAC /* ORKConsentSignature.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40C031A8D7C5C00081FAC /* ORKConsentSignature.m */; };
+ 86C40DFE1A8D7C5C00081FAC /* ORKConsentDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BF21A8D7C5C00081FAC /* ORKConsentDocument.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 86C40E001A8D7C5C00081FAC /* ORKConsentDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BF31A8D7C5C00081FAC /* ORKConsentDocument.m */; platformFilter = ios; };
+ 86C40E021A8D7C5C00081FAC /* ORKConsentDocument_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BF41A8D7C5C00081FAC /* ORKConsentDocument_Internal.h */; platformFilter = ios; };
+ 86C40E081A8D7C5C00081FAC /* ORKConsentReviewStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BF71A8D7C5C00081FAC /* ORKConsentReviewStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 86C40E0A1A8D7C5C00081FAC /* ORKConsentReviewStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BF81A8D7C5C00081FAC /* ORKConsentReviewStep.m */; platformFilter = ios; };
+ 86C40E181A8D7C5C00081FAC /* ORKConsentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BFF1A8D7C5C00081FAC /* ORKConsentSection.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 86C40E1A1A8D7C5C00081FAC /* ORKConsentSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40C001A8D7C5C00081FAC /* ORKConsentSection.m */; platformFilter = ios; };
+ 86C40E1C1A8D7C5C00081FAC /* ORKConsentSection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40C011A8D7C5C00081FAC /* ORKConsentSection_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ 86C40E1E1A8D7C5C00081FAC /* ORKConsentSignature.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40C021A8D7C5C00081FAC /* ORKConsentSignature.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ 86C40E201A8D7C5C00081FAC /* ORKConsentSignature.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40C031A8D7C5C00081FAC /* ORKConsentSignature.m */; platformFilter = ios; };
86CC8EB31AC09383001CCD89 /* ORKAccessibilityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 86CC8EA81AC09383001CCD89 /* ORKAccessibilityTests.m */; };
86CC8EB41AC09383001CCD89 /* ORKChoiceAnswerFormatHelperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 86CC8EA91AC09383001CCD89 /* ORKChoiceAnswerFormatHelperTests.m */; };
86CC8EB51AC09383001CCD89 /* ORKConsentTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 86CC8EAA1AC09383001CCD89 /* ORKConsentTests.m */; };
@@ -325,21 +371,21 @@
86D348021AC161B0006DB02B /* ORKRecorderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 86D348001AC16175006DB02B /* ORKRecorderTests.m */; };
AE75433A24E32CCC00E4C7CF /* ORKEarlyTerminationConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = AE75433824E32CCC00E4C7CF /* ORKEarlyTerminationConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
AE75433B24E32CCC00E4C7CF /* ORKEarlyTerminationConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = AE75433924E32CCC00E4C7CF /* ORKEarlyTerminationConfiguration.m */; };
- B11C54991A9EEF8800265E61 /* ORKConsentSharingStep.h in Headers */ = {isa = PBXBuildFile; fileRef = B11C54961A9EEF8800265E61 /* ORKConsentSharingStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B11C549B1A9EEF8800265E61 /* ORKConsentSharingStep.m in Sources */ = {isa = PBXBuildFile; fileRef = B11C54971A9EEF8800265E61 /* ORKConsentSharingStep.m */; };
+ B11C54991A9EEF8800265E61 /* ORKConsentSharingStep.h in Headers */ = {isa = PBXBuildFile; fileRef = B11C54961A9EEF8800265E61 /* ORKConsentSharingStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ B11C549B1A9EEF8800265E61 /* ORKConsentSharingStep.m in Sources */ = {isa = PBXBuildFile; fileRef = B11C54971A9EEF8800265E61 /* ORKConsentSharingStep.m */; platformFilter = ios; };
B183A4A21A8535D100C76870 /* ResearchKit_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B1B894391A00345200C5CF2D /* ResearchKit_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
B183A4DD1A8535D100C76870 /* ResearchKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B1C1DE4F196F541F00F75544 /* ResearchKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B1C0F4E41A9BA65F0022C153 /* ResearchKit.strings in Resources */ = {isa = PBXBuildFile; fileRef = B1C0F4E11A9BA65F0022C153 /* ResearchKit.strings */; };
- B1C7955E1A9FBF04007279BA /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1C7955D1A9FBF04007279BA /* HealthKit.framework */; settings = {ATTRIBUTES = (Required, ); }; };
+ B1C0F4E41A9BA65F0022C153 /* ResearchKit.strings in Resources */ = {isa = PBXBuildFile; fileRef = B1C0F4E11A9BA65F0022C153 /* ResearchKit.strings */; platformFilter = ios; };
+ B1C7955E1A9FBF04007279BA /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1C7955D1A9FBF04007279BA /* HealthKit.framework */; platformFilter = ios; settings = {ATTRIBUTES = (Required, ); }; };
BA473FE8224DB38900A362E3 /* ORKBodyItem.h in Headers */ = {isa = PBXBuildFile; fileRef = BA473FE6224DB38900A362E3 /* ORKBodyItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
BA473FE9224DB38900A362E3 /* ORKBodyItem.m in Sources */ = {isa = PBXBuildFile; fileRef = BA473FE7224DB38900A362E3 /* ORKBodyItem.m */; };
BA8C5021226FFB04001896D0 /* ORKLearnMoreItem.h in Headers */ = {isa = PBXBuildFile; fileRef = BA8C501F226FFB04001896D0 /* ORKLearnMoreItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
BAB96755226E5D67006AAC56 /* ORKStepContainerViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BAB96754226E5D67006AAC56 /* ORKStepContainerViewTests.m */; };
- BABBB1AE2097D97200CB29E5 /* ORKPDFViewerStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BABBB1AC2097D97200CB29E5 /* ORKPDFViewerStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BABBB1AF2097D97200CB29E5 /* ORKPDFViewerStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BABBB1AD2097D97200CB29E5 /* ORKPDFViewerStep.m */; };
+ BABBB1AE2097D97200CB29E5 /* ORKPDFViewerStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BABBB1AC2097D97200CB29E5 /* ORKPDFViewerStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ BABBB1AF2097D97200CB29E5 /* ORKPDFViewerStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BABBB1AD2097D97200CB29E5 /* ORKPDFViewerStep.m */; platformFilter = ios; };
BAD9E9122255E9750014FA29 /* ORKLearnMoreInstructionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD9E9102255E9750014FA29 /* ORKLearnMoreInstructionStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
BAD9E9132255E9750014FA29 /* ORKLearnMoreInstructionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BAD9E9112255E9750014FA29 /* ORKLearnMoreInstructionStep.m */; };
- BC081DE224CBC4DE00AD92AA /* ORKTypes_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BC081DE124CBC4DE00AD92AA /* ORKTypes_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BC081DE224CBC4DE00AD92AA /* ORKTypes_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BC081DE124CBC4DE00AD92AA /* ORKTypes_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
BC13CE391B0660220044153C /* ORKNavigableOrderedTask.h in Headers */ = {isa = PBXBuildFile; fileRef = BC13CE371B0660220044153C /* ORKNavigableOrderedTask.h */; settings = {ATTRIBUTES = (Public, ); }; };
BC13CE3A1B0660220044153C /* ORKNavigableOrderedTask.m in Sources */ = {isa = PBXBuildFile; fileRef = BC13CE381B0660220044153C /* ORKNavigableOrderedTask.m */; };
BC13CE3C1B0662990044153C /* ORKStepNavigationRule_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BC13CE3B1B0662990044153C /* ORKStepNavigationRule_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -348,23 +394,23 @@
BC2908BC1FBD628F0030AB89 /* ORKTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2908BB1FBD628F0030AB89 /* ORKTypes.m */; };
BC40696121104DDF00A4100C /* ResearchKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B183A5951A8535D100C76870 /* ResearchKit.framework */; };
BC4D521F27B326EA0099DC18 /* ORKSecureCodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC4D521E27B326EA0099DC18 /* ORKSecureCodingTests.swift */; };
- BC94EF311E962F7400143081 /* ORKDeprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = BC94EF2F1E962F7400143081 /* ORKDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BC94EF361E96394C00143081 /* ORKRegistrationStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BC94EF351E96394C00143081 /* ORKRegistrationStep_Internal.h */; };
+ BC94EF311E962F7400143081 /* ORKDeprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = BC94EF2F1E962F7400143081 /* ORKDeprecated.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ BC94EF361E96394C00143081 /* ORKRegistrationStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BC94EF351E96394C00143081 /* ORKRegistrationStep_Internal.h */; platformFilter = ios; };
BCA5C0351AEC05F20092AC8D /* ORKStepNavigationRule.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA5C0331AEC05F20092AC8D /* ORKStepNavigationRule.h */; settings = {ATTRIBUTES = (Public, ); }; };
BCA5C0361AEC05F20092AC8D /* ORKStepNavigationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA5C0341AEC05F20092AC8D /* ORKStepNavigationRule.m */; };
BCAD50E81B0201EE0034806A /* ORKTaskTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAD50E71B0201EE0034806A /* ORKTaskTests.m */; };
BCB080A11B83EFB900A3F400 /* ORKStepNavigationRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCB080A01B83EFB900A3F400 /* ORKStepNavigationRule.swift */; };
BCB8133C1C98367A00346561 /* ORKTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB8133B1C98367A00346561 /* ORKTypes.h */; settings = {ATTRIBUTES = (Public, ); }; };
BCB96C131B19C0EC002A0B96 /* ORKStepTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB96C121B19C0EC002A0B96 /* ORKStepTests.m */; };
- BCCE9EC121104B2200B809F8 /* ORKConsentDocument_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCE9EC021104B2200B809F8 /* ORKConsentDocument_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BCCE9EC121104B2200B809F8 /* ORKConsentDocument_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCE9EC021104B2200B809F8 /* ORKConsentDocument_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
BCFF24BD1B0798D10044EC35 /* ORKResultPredicate.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF24BC1B0798D10044EC35 /* ORKResultPredicate.m */; };
- BF1D43851D4904C6007EE90B /* ORKVideoInstructionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BF1D43831D4904C6007EE90B /* ORKVideoInstructionStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BF1D43861D4904C6007EE90B /* ORKVideoInstructionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1D43841D4904C6007EE90B /* ORKVideoInstructionStep.m */; };
- BF5161501BE9C53D00174DDD /* ORKWaitStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9155A11BDE8DA9007FA459 /* ORKWaitStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BF91559B1BDE8D7D007FA459 /* ORKReviewStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9155951BDE8D7D007FA459 /* ORKReviewStep_Internal.h */; };
- BF91559C1BDE8D7D007FA459 /* ORKReviewStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9155961BDE8D7D007FA459 /* ORKReviewStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BF91559D1BDE8D7D007FA459 /* ORKReviewStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9155971BDE8D7D007FA459 /* ORKReviewStep.m */; };
- BF9155A81BDE8DA9007FA459 /* ORKWaitStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9155A21BDE8DA9007FA459 /* ORKWaitStep.m */; };
+ BF1D43851D4904C6007EE90B /* ORKVideoInstructionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BF1D43831D4904C6007EE90B /* ORKVideoInstructionStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ BF1D43861D4904C6007EE90B /* ORKVideoInstructionStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1D43841D4904C6007EE90B /* ORKVideoInstructionStep.m */; platformFilter = ios; };
+ BF5161501BE9C53D00174DDD /* ORKWaitStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9155A11BDE8DA9007FA459 /* ORKWaitStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ BF91559B1BDE8D7D007FA459 /* ORKReviewStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9155951BDE8D7D007FA459 /* ORKReviewStep_Internal.h */; platformFilter = ios; };
+ BF91559C1BDE8D7D007FA459 /* ORKReviewStep.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9155961BDE8D7D007FA459 /* ORKReviewStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ BF91559D1BDE8D7D007FA459 /* ORKReviewStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9155971BDE8D7D007FA459 /* ORKReviewStep.m */; platformFilter = ios; };
+ BF9155A81BDE8DA9007FA459 /* ORKWaitStep.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9155A21BDE8DA9007FA459 /* ORKWaitStep.m */; platformFilter = ios; };
CA08054028AD7CC8001695EF /* ORKViewControllerProviding.h in Headers */ = {isa = PBXBuildFile; fileRef = CA08053F28AD7CC8001695EF /* ORKViewControllerProviding.h */; settings = {ATTRIBUTES = (Private, ); }; };
CA0AC56928BD4FAC00E80040 /* ORKStepViewControllerHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA0AC56828BD4FAB00E80040 /* ORKStepViewControllerHelpers.swift */; };
CA1C7A44288B0C68004DAB3A /* ResearchKitUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D06632F24FEF272005D9B40 /* ResearchKitUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -398,7 +444,7 @@
CA2B8F9528A16E860025B773 /* ORKdBHLToneAudiometryOnboardingStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71769E302088260B00A19914 /* ORKdBHLToneAudiometryOnboardingStepViewController.m */; };
CA2B8F9628A16E8F0025B773 /* ORKdBHLToneAudiometryOnboardingStepViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 71769E2F2088260B00A19914 /* ORKdBHLToneAudiometryOnboardingStepViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
CA2B8F9728A16E930025B773 /* ORKdBHLToneAudiometryAudioGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 716B126620A7A40400590264 /* ORKdBHLToneAudiometryAudioGenerator.h */; settings = {ATTRIBUTES = (Private, ); }; };
- CA2B8F9828A16E960025B773 /* ORKdBHLToneAudiometryContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 71769E332088291B00A19914 /* ORKdBHLToneAudiometryContentView.h */; };
+ CA2B8F9828A16E960025B773 /* ORKdBHLToneAudiometryContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 71769E332088291B00A19914 /* ORKdBHLToneAudiometryContentView.h */; settings = {ATTRIBUTES = (Private, ); }; };
CA2B8F9928A16E9C0025B773 /* ORKdBHLToneAudiometryStepViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 71769E3B20884DB800A19914 /* ORKdBHLToneAudiometryStepViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
CA2B8F9A28A16EF90025B773 /* ORKAmslerGridContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = BA95AA9D20ACD0E700E7FF8E /* ORKAmslerGridContentView.m */; };
CA2B8F9B28A16EF90025B773 /* ORKAmslerGridStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BA95AA9920ACD0BD00E7FF8E /* ORKAmslerGridStepViewController.m */; };
@@ -491,20 +537,20 @@
CA2B8FF928A177C30025B773 /* ORKTrailmakingStepViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 781D540E1DF886AB00223305 /* ORKTrailmakingStepViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
CA2B8FFA28A177DE0025B773 /* ORKWalkingTaskStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B211A8D7C5B00081FAC /* ORKWalkingTaskStepViewController.m */; };
CA2B8FFB28A177E40025B773 /* ORKWalkingTaskStepViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B201A8D7C5B00081FAC /* ORKWalkingTaskStepViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CA2B900928A17AD90025B773 /* ORKActiveStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B321A8D7C5B00081FAC /* ORKActiveStep_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; };
- CA2B900A28A17ADE0025B773 /* ORKActiveStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B311A8D7C5B00081FAC /* ORKActiveStep.m */; };
- CA2B900B28A17AE10025B773 /* ORKActiveStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B301A8D7C5B00081FAC /* ORKActiveStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ CA2B900928A17AD90025B773 /* ORKActiveStep_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B321A8D7C5B00081FAC /* ORKActiveStep_Internal.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ CA2B900A28A17ADE0025B773 /* ORKActiveStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B311A8D7C5B00081FAC /* ORKActiveStep.m */; platformFilter = ios; };
+ CA2B900B28A17AE10025B773 /* ORKActiveStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B301A8D7C5B00081FAC /* ORKActiveStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
CA2B901028A17BEE0025B773 /* ORKActiveTaskResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A261E81A87B005C2A1E /* ORKActiveTaskResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CA2B901128A17D120025B773 /* ORKFileResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A391E81AF1D005C2A1E /* ORKFileResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CA2B901228A17D170025B773 /* ORKFileResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A3A1E81AF1D005C2A1E /* ORKFileResult.m */; };
+ CA2B901128A17D120025B773 /* ORKFileResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A391E81AF1D005C2A1E /* ORKFileResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ CA2B901228A17D170025B773 /* ORKFileResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A3A1E81AF1D005C2A1E /* ORKFileResult.m */; platformFilter = ios; };
CA2B901628A1802C0025B773 /* ORKOrderedTask+ORKPredefinedActiveTask.m in Sources */ = {isa = PBXBuildFile; fileRef = FF154FB31E82EF5E004ED908 /* ORKOrderedTask+ORKPredefinedActiveTask.m */; };
CA2B901728A180480025B773 /* ORKOrderedTask+ORKPredefinedActiveTask.h in Headers */ = {isa = PBXBuildFile; fileRef = FF154FB21E82EF5E004ED908 /* ORKOrderedTask+ORKPredefinedActiveTask.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CA2B901F28A1864A0025B773 /* ORKRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B471A8D7C5B00081FAC /* ORKRecorder.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CA2B902028A186500025B773 /* ORKRecorder_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B491A8D7C5B00081FAC /* ORKRecorder_Internal.h */; };
- CA2B902128A186550025B773 /* ORKRecorder_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B4A1A8D7C5B00081FAC /* ORKRecorder_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
- CA2B902228A1867E0025B773 /* ORKRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B481A8D7C5B00081FAC /* ORKRecorder.m */; };
- CA2B902328A186A80025B773 /* ORKDataLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B3C1A8D7C5B00081FAC /* ORKDataLogger.h */; settings = {ATTRIBUTES = (Private, ); }; };
- CA2B902428A186AF0025B773 /* ORKDataLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B3D1A8D7C5B00081FAC /* ORKDataLogger.m */; };
+ CA2B901F28A1864A0025B773 /* ORKRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B471A8D7C5B00081FAC /* ORKRecorder.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ CA2B902028A186500025B773 /* ORKRecorder_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B491A8D7C5B00081FAC /* ORKRecorder_Internal.h */; platformFilter = ios; };
+ CA2B902128A186550025B773 /* ORKRecorder_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B4A1A8D7C5B00081FAC /* ORKRecorder_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ CA2B902228A1867E0025B773 /* ORKRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B481A8D7C5B00081FAC /* ORKRecorder.m */; platformFilter = ios; };
+ CA2B902328A186A80025B773 /* ORKDataLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B3C1A8D7C5B00081FAC /* ORKDataLogger.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ CA2B902428A186AF0025B773 /* ORKDataLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B3D1A8D7C5B00081FAC /* ORKDataLogger.m */; platformFilter = ios; };
CA2B902628A187390025B773 /* ORKTask_Util.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2B902528A187390025B773 /* ORKTask_Util.m */; };
CA2B902728A18EA60025B773 /* ORKActiveStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B381A8D7C5B00081FAC /* ORKActiveStepViewController.m */; };
CA2B902828A18EAD0025B773 /* ORKActiveStepViewController_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B391A8D7C5B00081FAC /* ORKActiveStepViewController_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -520,15 +566,15 @@
CA6A0D7F288B51D30048C1EF /* ORKSkin.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BB81A8D7C5C00081FAC /* ORKSkin.m */; };
CA6A0D81288B54650048C1EF /* ORKConsentReviewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40BEC1A8D7C5C00081FAC /* ORKConsentReviewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
CA6A0D82288B54650048C1EF /* ORKConsentReviewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40BED1A8D7C5C00081FAC /* ORKConsentReviewController.m */; };
- CA6A0D83288B5B370048C1EF /* ORKHTMLPDFWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B8E1A8D7C5C00081FAC /* ORKHTMLPDFWriter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CA6A0D84288B5B370048C1EF /* ORKHTMLPDFPageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE27B3E1D5BC072009A26E3 /* ORKHTMLPDFPageRenderer.h */; };
- CA6A0D85288B5B370048C1EF /* ORKHTMLPDFPageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DE27B3F1D5BC0B9009A26E3 /* ORKHTMLPDFPageRenderer.m */; };
- CA6A0D86288B5B370048C1EF /* ORKHTMLPDFWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B8F1A8D7C5C00081FAC /* ORKHTMLPDFWriter.m */; };
+ CA6A0D83288B5B370048C1EF /* ORKHTMLPDFWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40B8E1A8D7C5C00081FAC /* ORKHTMLPDFWriter.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ CA6A0D84288B5B370048C1EF /* ORKHTMLPDFPageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE27B3E1D5BC072009A26E3 /* ORKHTMLPDFPageRenderer.h */; platformFilter = ios; };
+ CA6A0D85288B5B370048C1EF /* ORKHTMLPDFPageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DE27B3F1D5BC0B9009A26E3 /* ORKHTMLPDFPageRenderer.m */; platformFilter = ios; };
+ CA6A0D86288B5B370048C1EF /* ORKHTMLPDFWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C40B8F1A8D7C5C00081FAC /* ORKHTMLPDFWriter.m */; platformFilter = ios; };
CA6A0D9E288F1CA20048C1EF /* ResearchKitUI_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CA6A0D9D288F1BDC0048C1EF /* ResearchKitUI_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
CA6A0DA0288F2C1C0048C1EF /* ResearchKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA1C7A5A288B0C68004DAB3A /* ResearchKitUI.framework */; };
CA954B6E28AD8A8C0020A35C /* ORKStep+ResearchKitActiveTask.m in Sources */ = {isa = PBXBuildFile; fileRef = CA954B6D28AD8A8C0020A35C /* ORKStep+ResearchKitActiveTask.m */; };
CA954B6F28AD8DA50020A35C /* ORKStep+ResearchKitUI.m in Sources */ = {isa = PBXBuildFile; fileRef = CA08054328AD7EBA001695EF /* ORKStep+ResearchKitUI.m */; };
- CA994D5628AB08410019DEA4 /* ORKDeprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = BC94EF301E962F7400143081 /* ORKDeprecated.m */; };
+ CA994D5628AB08410019DEA4 /* ORKDeprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = BC94EF301E962F7400143081 /* ORKDeprecated.m */; platformFilter = ios; };
CAA20D4E288B3D5700EDC764 /* ORKRecordButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D43C5CF24217393006F4084 /* ORKRecordButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
CAA20D4F288B3D5700EDC764 /* ORKRecordButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D43C5D024217393006F4084 /* ORKRecordButton.m */; };
CAA20D50288B3D6400EDC764 /* ORKCheckmarkView.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD6FAAF2332A2FD006647E7 /* ORKCheckmarkView.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -942,44 +988,66 @@
CAFAA6C228A198BD0010BBDE /* ResearchKitActiveTask_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CAFAA6C128A198BD0010BBDE /* ResearchKitActiveTask_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
CAFAA6C428A19E200010BBDE /* ResearchKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B183A5951A8535D100C76870 /* ResearchKit.framework */; };
CAFAA6C528A19E260010BBDE /* ResearchKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA1C7A5A288B0C68004DAB3A /* ResearchKitUI.framework */; };
- D44239791AF17F5100559D96 /* ORKImageCaptureStep.h in Headers */ = {isa = PBXBuildFile; fileRef = D44239771AF17F5100559D96 /* ORKImageCaptureStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D442397A1AF17F5100559D96 /* ORKImageCaptureStep.m in Sources */ = {isa = PBXBuildFile; fileRef = D44239781AF17F5100559D96 /* ORKImageCaptureStep.m */; };
+ D44239791AF17F5100559D96 /* ORKImageCaptureStep.h in Headers */ = {isa = PBXBuildFile; fileRef = D44239771AF17F5100559D96 /* ORKImageCaptureStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ D442397A1AF17F5100559D96 /* ORKImageCaptureStep.m in Sources */ = {isa = PBXBuildFile; fileRef = D44239781AF17F5100559D96 /* ORKImageCaptureStep.m */; platformFilter = ios; };
+ E454438D2CC1C78E0004E385 /* ResearchKit_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 5DABE5AD24DA16E600570C57 /* ResearchKit_Prefix.pch */; };
FA7A9D2B1B082688005A2BEA /* ORKConsentDocumentTests.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7A9D2A1B082688005A2BEA /* ORKConsentDocumentTests.m */; };
- FA7A9D2F1B083DD3005A2BEA /* ORKConsentSectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7A9D2D1B083DD3005A2BEA /* ORKConsentSectionFormatter.h */; };
- FA7A9D301B083DD3005A2BEA /* ORKConsentSectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7A9D2E1B083DD3005A2BEA /* ORKConsentSectionFormatter.m */; };
- FA7A9D331B0843A9005A2BEA /* ORKConsentSignatureFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7A9D311B0843A9005A2BEA /* ORKConsentSignatureFormatter.h */; };
- FA7A9D341B0843A9005A2BEA /* ORKConsentSignatureFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7A9D321B0843A9005A2BEA /* ORKConsentSignatureFormatter.m */; };
+ FA7A9D2F1B083DD3005A2BEA /* ORKConsentSectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7A9D2D1B083DD3005A2BEA /* ORKConsentSectionFormatter.h */; platformFilter = ios; };
+ FA7A9D301B083DD3005A2BEA /* ORKConsentSectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7A9D2E1B083DD3005A2BEA /* ORKConsentSectionFormatter.m */; platformFilter = ios; };
+ FA7A9D331B0843A9005A2BEA /* ORKConsentSignatureFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7A9D311B0843A9005A2BEA /* ORKConsentSignatureFormatter.h */; platformFilter = ios; };
+ FA7A9D341B0843A9005A2BEA /* ORKConsentSignatureFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7A9D321B0843A9005A2BEA /* ORKConsentSignatureFormatter.m */; platformFilter = ios; };
FA7A9D371B09365F005A2BEA /* ORKConsentSectionFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7A9D361B09365F005A2BEA /* ORKConsentSectionFormatterTests.m */; };
FA7A9D391B0969A7005A2BEA /* ORKConsentSignatureFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7A9D381B0969A7005A2BEA /* ORKConsentSignatureFormatterTests.m */; };
- FF0CB38A1FD5C4C3002D838C /* ORKWebViewStepResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0CB3881FD5C4C3002D838C /* ORKWebViewStepResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF0CB38B1FD5C4C3002D838C /* ORKWebViewStepResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF0CB3891FD5C4C3002D838C /* ORKWebViewStepResult.m */; };
- FF5051ED1D668FF80065E677 /* ORKPageStep_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5051EC1D668FF80065E677 /* ORKPageStep_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
- FF5051F01D66908C0065E677 /* ORKNavigablePageStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5051EE1D66908C0065E677 /* ORKNavigablePageStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF5051F11D66908C0065E677 /* ORKNavigablePageStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FF5051EF1D66908C0065E677 /* ORKNavigablePageStep.m */; };
- FF5CA6121D2C2670001660A3 /* ORKTableStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5CA6101D2C2670001660A3 /* ORKTableStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF5CA6131D2C2670001660A3 /* ORKTableStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FF5CA6111D2C2670001660A3 /* ORKTableStep.m */; };
- FF5CA61B1D2C6453001660A3 /* ORKSignatureStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5CA6191D2C6453001660A3 /* ORKSignatureStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF5CA61C1D2C6453001660A3 /* ORKSignatureStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FF5CA61A1D2C6453001660A3 /* ORKSignatureStep.m */; };
+ FF0CB38A1FD5C4C3002D838C /* ORKWebViewStepResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0CB3881FD5C4C3002D838C /* ORKWebViewStepResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF0CB38B1FD5C4C3002D838C /* ORKWebViewStepResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF0CB3891FD5C4C3002D838C /* ORKWebViewStepResult.m */; platformFilter = ios; };
+ FF5051ED1D668FF80065E677 /* ORKPageStep_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5051EC1D668FF80065E677 /* ORKPageStep_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ FF5051F01D66908C0065E677 /* ORKNavigablePageStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5051EE1D66908C0065E677 /* ORKNavigablePageStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF5051F11D66908C0065E677 /* ORKNavigablePageStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FF5051EF1D66908C0065E677 /* ORKNavigablePageStep.m */; platformFilter = ios; };
+ FF5CA6121D2C2670001660A3 /* ORKTableStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5CA6101D2C2670001660A3 /* ORKTableStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF5CA6131D2C2670001660A3 /* ORKTableStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FF5CA6111D2C2670001660A3 /* ORKTableStep.m */; platformFilter = ios; };
+ FF5CA61B1D2C6453001660A3 /* ORKSignatureStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5CA6191D2C6453001660A3 /* ORKSignatureStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF5CA61C1D2C6453001660A3 /* ORKSignatureStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FF5CA61A1D2C6453001660A3 /* ORKSignatureStep.m */; platformFilter = ios; };
FF919A531E81BEB5005C2A1E /* ORKCollectionResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A511E81BEB5005C2A1E /* ORKCollectionResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
FF919A541E81BEB5005C2A1E /* ORKCollectionResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A521E81BEB5005C2A1E /* ORKCollectionResult.m */; };
FF919A561E81BEE0005C2A1E /* ORKCollectionResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A551E81BEDD005C2A1E /* ORKCollectionResult_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
FF919A591E81C628005C2A1E /* ORKQuestionResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A571E81C628005C2A1E /* ORKQuestionResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
FF919A5A1E81C628005C2A1E /* ORKQuestionResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A581E81C628005C2A1E /* ORKQuestionResult.m */; };
FF919A5C1E81C641005C2A1E /* ORKQuestionResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A5B1E81C63B005C2A1E /* ORKQuestionResult_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
- FF919A5F1E81CF07005C2A1E /* ORKVideoInstructionStepResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A5D1E81CF07005C2A1E /* ORKVideoInstructionStepResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF919A601E81CF07005C2A1E /* ORKVideoInstructionStepResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A5E1E81CF07005C2A1E /* ORKVideoInstructionStepResult.m */; };
- FF919A631E81D04D005C2A1E /* ORKSignatureResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A611E81D04D005C2A1E /* ORKSignatureResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF919A641E81D04D005C2A1E /* ORKSignatureResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A621E81D04D005C2A1E /* ORKSignatureResult.m */; };
- FF919A661E81D168005C2A1E /* ORKSignatureResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A651E81D164005C2A1E /* ORKSignatureResult_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
- FF919A691E81D255005C2A1E /* ORKConsentSignatureResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A671E81D255005C2A1E /* ORKConsentSignatureResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF919A6A1E81D255005C2A1E /* ORKConsentSignatureResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A681E81D255005C2A1E /* ORKConsentSignatureResult.m */; };
- FF919A6D1E81D3B0005C2A1E /* ORKPasscodeResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A6B1E81D3B0005C2A1E /* ORKPasscodeResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FF919A6E1E81D3B0005C2A1E /* ORKPasscodeResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A6C1E81D3B0005C2A1E /* ORKPasscodeResult.m */; };
- FFDDD8491D3555EA00446806 /* ORKPageStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FFDDD8471D3555EA00446806 /* ORKPageStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FFDDD84A1D3555EA00446806 /* ORKPageStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FFDDD8481D3555EA00446806 /* ORKPageStep.m */; };
+ FF919A5F1E81CF07005C2A1E /* ORKVideoInstructionStepResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A5D1E81CF07005C2A1E /* ORKVideoInstructionStepResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF919A601E81CF07005C2A1E /* ORKVideoInstructionStepResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A5E1E81CF07005C2A1E /* ORKVideoInstructionStepResult.m */; platformFilter = ios; };
+ FF919A631E81D04D005C2A1E /* ORKSignatureResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A611E81D04D005C2A1E /* ORKSignatureResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF919A641E81D04D005C2A1E /* ORKSignatureResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A621E81D04D005C2A1E /* ORKSignatureResult.m */; platformFilter = ios; };
+ FF919A661E81D168005C2A1E /* ORKSignatureResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A651E81D164005C2A1E /* ORKSignatureResult_Private.h */; platformFilter = ios; settings = {ATTRIBUTES = (Private, ); }; };
+ FF919A691E81D255005C2A1E /* ORKConsentSignatureResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A671E81D255005C2A1E /* ORKConsentSignatureResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF919A6A1E81D255005C2A1E /* ORKConsentSignatureResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A681E81D255005C2A1E /* ORKConsentSignatureResult.m */; platformFilter = ios; };
+ FF919A6D1E81D3B0005C2A1E /* ORKPasscodeResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FF919A6B1E81D3B0005C2A1E /* ORKPasscodeResult.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FF919A6E1E81D3B0005C2A1E /* ORKPasscodeResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FF919A6C1E81D3B0005C2A1E /* ORKPasscodeResult.m */; platformFilter = ios; };
+ FFDDD8491D3555EA00446806 /* ORKPageStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FFDDD8471D3555EA00446806 /* ORKPageStep.h */; platformFilter = ios; settings = {ATTRIBUTES = (Public, ); }; };
+ FFDDD84A1D3555EA00446806 /* ORKPageStep.m in Sources */ = {isa = PBXBuildFile; fileRef = FFDDD8481D3555EA00446806 /* ORKPageStep.m */; platformFilter = ios; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
+ 0BC672DF2BD9C541005798AC /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 3FFF18351829DB1D00167070 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B183A4731A8535D100C76870;
+ remoteInfo = ResearchKit;
+ };
+ 0BC672E12BD9C541005798AC /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 3FFF18351829DB1D00167070 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = CAD08966289DD747007B2A98;
+ remoteInfo = ResearchKitActiveTask;
+ };
+ 0BC672E52BD9C541005798AC /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 3FFF18351829DB1D00167070 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = CA1C7A40288B0C68004DAB3A;
+ remoteInfo = "ResearchKitUI (iOS)";
+ };
86CC8EA11AC09332001CCD89 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 3FFF18351829DB1D00167070 /* Project object */;
@@ -1070,6 +1138,7 @@
0B9A990E2A8AC47500D64C40 /* NSObject+TestingSupport.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+TestingSupport.m"; sourceTree = ""; };
0B9CC5652A68C02C00080E29 /* UIImageView+ResearchKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+ResearchKit.h"; sourceTree = ""; };
0B9CC5662A68C02C00080E29 /* UIImageView+ResearchKit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+ResearchKit.m"; sourceTree = ""; };
+ 0BA1D93A2BD1DF5A00BB79DB /* ResearchKit.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = ResearchKit.podspec; sourceTree = ""; };
0BE9D5242947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ORKConsentDocument+ORKInstructionStep.h"; sourceTree = ""; };
0BE9D5252947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "ORKConsentDocument+ORKInstructionStep.m"; sourceTree = ""; };
106FF29C1B663FCE004EACF2 /* ORKHolePegTestPlaceStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKHolePegTestPlaceStep.h; sourceTree = ""; };
@@ -1341,10 +1410,38 @@
5192BF832AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ORKFrontFacingCameraStepResult.h; path = ResearchKit/Common/ORKFrontFacingCameraStepResult.h; sourceTree = SOURCE_ROOT; };
5192BF882AE1BBB0006E43FB /* ORKSecondaryTaskStep.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ORKSecondaryTaskStep.m; path = ResearchKit/Common/ORKSecondaryTaskStep.m; sourceTree = SOURCE_ROOT; };
5192BF892AE1BBB0006E43FB /* ORKSecondaryTaskStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ORKSecondaryTaskStep.h; path = ResearchKit/Common/ORKSecondaryTaskStep.h; sourceTree = SOURCE_ROOT; };
+ 5192BF8D2AE1C051006E43FB /* ORKAgePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKAgePicker.h; sourceTree = ""; };
+ 5192BF8E2AE1C051006E43FB /* ORKAgePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKAgePicker.m; sourceTree = ""; };
+ 5192BF912AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ORKChoiceViewCell+ORKColorChoice.h"; sourceTree = ""; };
+ 5192BF922AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ORKChoiceViewCell+ORKColorChoice.m"; sourceTree = ""; };
5192BF952AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ORKAnswerFormat+FormStepViewControllerAdditions.h"; sourceTree = ""; };
5192BF962AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ORKAnswerFormat+FormStepViewControllerAdditions.m"; sourceTree = ""; };
+ 5192BF9B2AE1DE62006E43FB /* ORKColorChoiceCellGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKColorChoiceCellGroup.m; sourceTree = ""; };
+ 5192BF9C2AE1DE62006E43FB /* ORKColorChoiceCellGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKColorChoiceCellGroup.h; sourceTree = ""; };
519C298026D027AB00FD5F44 /* SwiftUIViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIViewFactory.swift; sourceTree = ""; };
519C298D26D027E500FD5F44 /* TextChoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextChoiceView.swift; sourceTree = ""; };
+ 519CE8162C6582BD003BB584 /* ORKHealthCondition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKHealthCondition.m; sourceTree = ""; };
+ 519CE8172C6582BD003BB584 /* ORKFamilyHistoryStep.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryStep.m; sourceTree = ""; };
+ 519CE8182C6582BD003BB584 /* ORKHealthCondition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKHealthCondition.h; sourceTree = ""; };
+ 519CE8192C6582BD003BB584 /* ORKFamilyHistoryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryResult.h; sourceTree = ""; };
+ 519CE81A2C6582BD003BB584 /* ORKRelatedPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKRelatedPerson.m; sourceTree = ""; };
+ 519CE81B2C6582BD003BB584 /* ORKRelativeGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKRelativeGroup.h; sourceTree = ""; };
+ 519CE81C2C6582BD003BB584 /* ORKRelativeGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKRelativeGroup.m; sourceTree = ""; };
+ 519CE81D2C6582BE003BB584 /* ORKConditionStepConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKConditionStepConfiguration.m; sourceTree = ""; };
+ 519CE81E2C6582BE003BB584 /* ORKConditionStepConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKConditionStepConfiguration.h; sourceTree = ""; };
+ 519CE81F2C6582BE003BB584 /* ORKFamilyHistoryStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryStep.h; sourceTree = ""; };
+ 519CE8202C6582BE003BB584 /* ORKRelatedPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKRelatedPerson.h; sourceTree = ""; };
+ 519CE8212C6582BE003BB584 /* ORKFamilyHistoryResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryResult.m; sourceTree = ""; };
+ 519CE8302C658617003BB584 /* ORKFamilyHistoryStepViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryStepViewController.h; sourceTree = ""; };
+ 519CE8332C658617003BB584 /* ORKFamilyHistoryStepViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryStepViewController.m; sourceTree = ""; };
+ 519CE83B2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryRelatedPersonCell.h; sourceTree = ""; };
+ 519CE83C2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryRelatedPersonCell.m; sourceTree = ""; };
+ 519CE83D2C658653003BB584 /* ORKFamilyHistoryTableFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryTableFooterView.h; sourceTree = ""; };
+ 519CE83E2C658654003BB584 /* ORKFamilyHistoryTableFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryTableFooterView.m; sourceTree = ""; };
+ 519CE83F2C658654003BB584 /* ORKFamilyHistoryTableHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryTableHeaderView.h; sourceTree = ""; };
+ 519CE8402C658654003BB584 /* ORKFamilyHistoryTableHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryTableHeaderView.m; sourceTree = ""; };
+ 519CE85B2C6AD858003BB584 /* ORKFamilyHistoryStepViewController_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryStepViewController_Private.h; sourceTree = ""; };
+ 519CE85E2C6BC1DB003BB584 /* ORKFamilyHistoryResultTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ORKFamilyHistoryResultTests.swift; sourceTree = ""; };
51A11F132BD08D5D0060C07E /* HKSample+ORKJSONDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HKSample+ORKJSONDictionary.h"; sourceTree = ""; };
51A11F142BD08D5D0060C07E /* CMMotionActivity+ORKJSONDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CMMotionActivity+ORKJSONDictionary.m"; sourceTree = ""; };
51A11F152BD08D5D0060C07E /* HKSample+ORKJSONDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "HKSample+ORKJSONDictionary.m"; sourceTree = ""; };
@@ -1366,6 +1463,8 @@
51AF1B1F2B683C3400D3B399 /* ORKWebViewStepResult_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ORKWebViewStepResult_Private.h; sourceTree = ""; };
51AF1B212B69803A00D3B399 /* Window.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Window.wav; sourceTree = ""; };
51AF1B222B69803A00D3B399 /* Noise.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Noise.wav; sourceTree = ""; };
+ 51B76DFA2CB5B5A30061698A /* ResearchKitActiveTask.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = ResearchKitActiveTask.docc; sourceTree = ""; };
+ 51B76DFC2CB5C73C0061698A /* ResearchKitUI.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = ResearchKitUI.docc; sourceTree = ""; };
51B94DBC2B311E810039B0E7 /* CLLocationManager+ResearchKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CLLocationManager+ResearchKit.h"; sourceTree = ""; };
51B94DC62B3254FD0039B0E7 /* CLLocationManager+ResearchKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CLLocationManager+ResearchKit.m"; sourceTree = ""; };
51BF30BC247B330900E2E669 /* ORKIconButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ORKIconButton.h; sourceTree = ""; };
@@ -1441,6 +1540,7 @@
618DA04A1A93D0D600E63AA8 /* ORKAccessibilityFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKAccessibilityFunctions.m; sourceTree = ""; };
618DA04B1A93D0D600E63AA8 /* UIView+ORKAccessibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "UIView+ORKAccessibility.h"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
618DA04C1A93D0D600E63AA8 /* UIView+ORKAccessibility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = "UIView+ORKAccessibility.m"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
+ 6227743F2C5CF7DC00F2E741 /* retspl_dBFS_AIRPODSPROV2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = retspl_dBFS_AIRPODSPROV2.plist; sourceTree = ""; };
7118AC6020BF6A3900D7A6BB /* Sentence7.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Sentence7.wav; sourceTree = ""; };
7118AC6120BF6A3A00D7A6BB /* Sentence4.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Sentence4.wav; sourceTree = ""; };
7118AC6220BF6A3A00D7A6BB /* Sentence6.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Sentence6.wav; sourceTree = ""; };
@@ -2253,6 +2353,7 @@
3FFF18341829DB1D00167070 = {
isa = PBXGroup;
children = (
+ 0BA1D93A2BD1DF5A00BB79DB /* ResearchKit.podspec */,
05F3765923C797930068E166 /* ResearchKit.xctestplan */,
168EEAAE230B6F9E003FD2FA /* scripts */,
86B623AF19520B770074CD3C /* ResearchKit */,
@@ -2472,6 +2573,57 @@
path = Normalized;
sourceTree = "";
};
+ 519CE8152C6582A0003BB584 /* Family History */ = {
+ isa = PBXGroup;
+ children = (
+ 519CE81E2C6582BE003BB584 /* ORKConditionStepConfiguration.h */,
+ 519CE81D2C6582BE003BB584 /* ORKConditionStepConfiguration.m */,
+ 519CE8192C6582BD003BB584 /* ORKFamilyHistoryResult.h */,
+ 519CE8212C6582BE003BB584 /* ORKFamilyHistoryResult.m */,
+ 519CE81F2C6582BE003BB584 /* ORKFamilyHistoryStep.h */,
+ 519CE8172C6582BD003BB584 /* ORKFamilyHistoryStep.m */,
+ 519CE8182C6582BD003BB584 /* ORKHealthCondition.h */,
+ 519CE8162C6582BD003BB584 /* ORKHealthCondition.m */,
+ 519CE8202C6582BE003BB584 /* ORKRelatedPerson.h */,
+ 519CE81A2C6582BD003BB584 /* ORKRelatedPerson.m */,
+ 519CE81B2C6582BD003BB584 /* ORKRelativeGroup.h */,
+ 519CE81C2C6582BD003BB584 /* ORKRelativeGroup.m */,
+ );
+ name = "Family History";
+ sourceTree = "";
+ };
+ 519CE82F2C6585DF003BB584 /* Family History */ = {
+ isa = PBXGroup;
+ children = (
+ 519CE83A2C65862E003BB584 /* Family History TableView Views */,
+ 519CE8302C658617003BB584 /* ORKFamilyHistoryStepViewController.h */,
+ 519CE8332C658617003BB584 /* ORKFamilyHistoryStepViewController.m */,
+ 519CE85B2C6AD858003BB584 /* ORKFamilyHistoryStepViewController_Private.h */,
+ );
+ path = "Family History";
+ sourceTree = "";
+ };
+ 519CE83A2C65862E003BB584 /* Family History TableView Views */ = {
+ isa = PBXGroup;
+ children = (
+ 519CE83B2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.h */,
+ 519CE83C2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.m */,
+ 519CE83D2C658653003BB584 /* ORKFamilyHistoryTableFooterView.h */,
+ 519CE83E2C658654003BB584 /* ORKFamilyHistoryTableFooterView.m */,
+ 519CE83F2C658654003BB584 /* ORKFamilyHistoryTableHeaderView.h */,
+ 519CE8402C658654003BB584 /* ORKFamilyHistoryTableHeaderView.m */,
+ );
+ path = "Family History TableView Views";
+ sourceTree = "";
+ };
+ 519CE85D2C6BC1C5003BB584 /* Family History */ = {
+ isa = PBXGroup;
+ children = (
+ 519CE85E2C6BC1DB003BB584 /* ORKFamilyHistoryResultTests.swift */,
+ );
+ name = "Family History";
+ sourceTree = "";
+ };
51A11F1B2BD094A00060C07E /* Custom View */ = {
isa = PBXGroup;
children = (
@@ -2689,6 +2841,7 @@
0B0852752BD872D800149963 /* PrivacyInfo.xcprivacy */,
5D06633024FEF272005D9B40 /* Info.plist */,
51FBAC582BC86E6E009CA28F /* ResearchKitUI_Private.modulemap */,
+ 51B76DFC2CB5C73C0061698A /* ResearchKitUI.docc */,
);
path = ResearchKitUI;
sourceTree = "";
@@ -2773,6 +2926,7 @@
86CC8EA61AC09383001CCD89 /* ResearchKitTests */ = {
isa = PBXGroup;
children = (
+ 519CE85D2C6BC1C5003BB584 /* Family History */,
51EB9A592B8D1CB80064A515 /* FormatterTests */,
51AF19512B583B5B00D3B399 /* ORKESerializationTests */,
51CB80D42AFEBE4800A1F410 /* ConditionalFormItems */,
@@ -2858,6 +3012,7 @@
B12EFF341AB2111200A80147 /* Step */ = {
isa = PBXGroup;
children = (
+ 519CE8152C6582A0003BB584 /* Family History */,
86C40BB91A8D7C5C00081FAC /* ORKStep.h */,
86C40BBA1A8D7C5C00081FAC /* ORKStep.m */,
86C40BBB1A8D7C5C00081FAC /* ORKStep_Private.h */,
@@ -3187,6 +3342,8 @@
CA1C7A69288B1093004DAB3A /* Choice Format Helpers */ = {
isa = PBXGroup;
children = (
+ 5192BF9C2AE1DE62006E43FB /* ORKColorChoiceCellGroup.h */,
+ 5192BF9B2AE1DE62006E43FB /* ORKColorChoiceCellGroup.m */,
861D11B31AA7D073003C98A7 /* ORKTextChoiceCellGroup.h */,
861D11B41AA7D073003C98A7 /* ORKTextChoiceCellGroup.m */,
);
@@ -3196,6 +3353,8 @@
CA1C7A6A288B1243004DAB3A /* Control Views */ = {
isa = PBXGroup;
children = (
+ 5192BF8D2AE1C051006E43FB /* ORKAgePicker.h */,
+ 5192BF8E2AE1C051006E43FB /* ORKAgePicker.m */,
BC1C032A1CA301E300869355 /* ORKHeightPicker.h */,
BC1C032B1CA301E300869355 /* ORKHeightPicker.m */,
1B4B95B91F5F014E006B629F /* ORKWeightPicker.h */,
@@ -3332,6 +3491,8 @@
isa = PBXGroup;
children = (
51FBAC5C2BC9CE4A009CA28F /* ORKBorderedButton_Internal.h */,
+ 5192BF912AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.h */,
+ 5192BF922AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.m */,
0B8444632A79C25000292DEA /* ORKChoiceViewCell+ORKTextChoice.h */,
0B8444642A79C25000292DEA /* ORKChoiceViewCell+ORKTextChoice.m */,
86C40B6B1A8D7C5B00081FAC /* ORKBodyLabel.h */,
@@ -3407,6 +3568,7 @@
CA1C7A73288B1ADD004DAB3A /* Step */ = {
isa = PBXGroup;
children = (
+ 519CE82F2C6585DF003BB584 /* Family History */,
CA08053F28AD7CC8001695EF /* ORKViewControllerProviding.h */,
CA08054328AD7EBA001695EF /* ORKStep+ResearchKitUI.m */,
BAD65E4F2284F266008A5DCE /* ORKStepView_Private.h */,
@@ -3808,6 +3970,7 @@
CAD089A7289DDEA8007B2A98 /* Walking */,
51FBAC7D2BC9EBA7009CA28F /* Info.plist */,
0B0852772BD872EA00149963 /* PrivacyInfo.xcprivacy */,
+ 51B76DFA2CB5B5A30061698A /* ResearchKitActiveTask.docc */,
);
path = ResearchKitActiveTask;
sourceTree = "";
@@ -3894,6 +4057,7 @@
children = (
5192BF7E2AE1A9BA006E43FB /* volume_curve_AIRPODSPROV2.plist */,
5192BF7C2AE1A87D006E43FB /* retspl_AIRPODSPROV2.plist */,
+ 6227743F2C5CF7DC00F2E741 /* retspl_dBFS_AIRPODSPROV2.plist */,
5192BF5C2AE19036006E43FB /* frequency_dBSPL_AIRPODSPROV2.plist */,
71769E2F2088260B00A19914 /* ORKdBHLToneAudiometryOnboardingStepViewController.h */,
71769E302088260B00A19914 /* ORKdBHLToneAudiometryOnboardingStepViewController.m */,
@@ -4482,6 +4646,7 @@
CA2B900928A17AD90025B773 /* ORKActiveStep_Internal.h in Headers */,
BF5161501BE9C53D00174DDD /* ORKWaitStep.h in Headers */,
244EFAD21BCEFD83001850D9 /* ORKAnswerFormat_Private.h in Headers */,
+ 519CE8252C6582BE003BB584 /* ORKFamilyHistoryResult.h in Headers */,
BCA5C0351AEC05F20092AC8D /* ORKStepNavigationRule.h in Headers */,
5192BF592AE09794006E43FB /* ORKFormItemVisibilityRule.h in Headers */,
5192BF872AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.h in Headers */,
@@ -4504,20 +4669,20 @@
866DA5201D63D04700C9AF3F /* ORKCollector.h in Headers */,
51A11F1A2BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.h in Headers */,
BF91559B1BDE8D7D007FA459 /* ORKReviewStep_Internal.h in Headers */,
+ FF5CA61B1D2C6453001660A3 /* ORKSignatureStep.h in Headers */,
+ 00C2668E23022CD400337E0B /* ORKCustomStep.h in Headers */,
+ CA2B901F28A1864A0025B773 /* ORKRecorder.h in Headers */,
+ BA473FE8224DB38900A362E3 /* ORKBodyItem.h in Headers */,
+ 2429D5721BBB5397003A512F /* ORKRegistrationStep.h in Headers */,
+ 5192BF842AE1BA47006E43FB /* ORKFrontFacingCameraStep.h in Headers */,
FF919A561E81BEE0005C2A1E /* ORKCollectionResult_Private.h in Headers */,
FF919A661E81D168005C2A1E /* ORKSignatureResult_Private.h in Headers */,
- FF5CA61B1D2C6453001660A3 /* ORKSignatureStep.h in Headers */,
BC081DE224CBC4DE00AD92AA /* ORKTypes_Private.h in Headers */,
5D04885C25F1B3AB0006C68B /* ORKDevice_Private.h in Headers */,
- 00C2668E23022CD400337E0B /* ORKCustomStep.h in Headers */,
BCCE9EC121104B2200B809F8 /* ORKConsentDocument_Private.h in Headers */,
86C40D201A8D7C5C00081FAC /* ORKFormStep.h in Headers */,
- CA2B901F28A1864A0025B773 /* ORKRecorder.h in Headers */,
- BA473FE8224DB38900A362E3 /* ORKBodyItem.h in Headers */,
- 2429D5721BBB5397003A512F /* ORKRegistrationStep.h in Headers */,
51B94DBD2B311E810039B0E7 /* CLLocationManager+ResearchKit.h in Headers */,
B183A4A21A8535D100C76870 /* ResearchKit_Private.h in Headers */,
- 5192BF842AE1BA47006E43FB /* ORKFrontFacingCameraStep.h in Headers */,
CA2B900B28A17AE10025B773 /* ORKActiveStep.h in Headers */,
AE75433A24E32CCC00E4C7CF /* ORKEarlyTerminationConfiguration.h in Headers */,
86C40CE81A8D7C5C00081FAC /* ORKAnswerFormat_Internal.h in Headers */,
@@ -4539,8 +4704,19 @@
86C40E181A8D7C5C00081FAC /* ORKConsentSection.h in Headers */,
866DA5251D63D04700C9AF3F /* ORKHealthSampleQueryOperation.h in Headers */,
51AF1B152B67F30500D3B399 /* ORKSignatureFormatter.h in Headers */,
+ 519CE82A2C6582BE003BB584 /* ORKConditionStepConfiguration.h in Headers */,
51AF1B202B683C3400D3B399 /* ORKWebViewStepResult_Private.h in Headers */,
5D04884C25EF4CC30006C68B /* ORKQuestionStep_Private.h in Headers */,
+ 8419D66E1FB73CC80088D7E5 /* ORKWebViewStep.h in Headers */,
+ FFDDD8491D3555EA00446806 /* ORKPageStep.h in Headers */,
+ D44239791AF17F5100559D96 /* ORKImageCaptureStep.h in Headers */,
+ FF919A6D1E81D3B0005C2A1E /* ORKPasscodeResult.h in Headers */,
+ 5192BF502AE09673006E43FB /* ORKPredicateFormItemVisibilityRule.h in Headers */,
+ FF0CB38A1FD5C4C3002D838C /* ORKWebViewStepResult.h in Headers */,
+ 86C40D301A8D7C5C00081FAC /* ORKHealthAnswerFormat.h in Headers */,
+ FF5CA6121D2C2670001660A3 /* ORKTableStep.h in Headers */,
+ 51A11F172BD08D5E0060C07E /* HKSample+ORKJSONDictionary.h in Headers */,
+ BC13CE401B0666FD0044153C /* ORKResultPredicate.h in Headers */,
86C40D621A8D7C5C00081FAC /* ORKQuestionStep_Internal.h in Headers */,
B183A4DD1A8535D100C76870 /* ResearchKit.h in Headers */,
BAD9E9122255E9750014FA29 /* ORKLearnMoreInstructionStep.h in Headers */,
@@ -4561,27 +4737,21 @@
2433C9E31B9A506F0052D375 /* ORKKeychainWrapper.h in Headers */,
B11C54991A9EEF8800265E61 /* ORKConsentSharingStep.h in Headers */,
86C40D5E1A8D7C5C00081FAC /* ORKQuestionStep.h in Headers */,
+ 519CE82C2C6582BE003BB584 /* ORKRelatedPerson.h in Headers */,
FF919A591E81C628005C2A1E /* ORKQuestionResult.h in Headers */,
- 8419D66E1FB73CC80088D7E5 /* ORKWebViewStep.h in Headers */,
- FFDDD8491D3555EA00446806 /* ORKPageStep.h in Headers */,
- D44239791AF17F5100559D96 /* ORKImageCaptureStep.h in Headers */,
- FF919A6D1E81D3B0005C2A1E /* ORKPasscodeResult.h in Headers */,
24C296771BD055B800B42EF1 /* ORKLoginStep_Internal.h in Headers */,
86C40CC01A8D7C5C00081FAC /* ORKCompletionStep.h in Headers */,
5192BF502AE09673006E43FB /* ORKPredicateFormItemVisibilityRule.h in Headers */,
+ 519CE8272C6582BE003BB584 /* ORKRelativeGroup.h in Headers */,
14A92C4822440195007547F2 /* ORKHelpers_Internal.h in Headers */,
- FF0CB38A1FD5C4C3002D838C /* ORKWebViewStepResult.h in Headers */,
5D43C5D424255675006F4084 /* ORKBodyItem_Internal.h in Headers */,
- 86C40D301A8D7C5C00081FAC /* ORKHealthAnswerFormat.h in Headers */,
7167D028231B1EAA00AAB4DD /* ORKFormStep_Internal.h in Headers */,
- FF5CA6121D2C2670001660A3 /* ORKTableStep.h in Headers */,
FA7A9D2F1B083DD3005A2BEA /* ORKConsentSectionFormatter.h in Headers */,
- 51A11F172BD08D5E0060C07E /* HKSample+ORKJSONDictionary.h in Headers */,
86C40D561A8D7C5C00081FAC /* ORKOrderedTask.h in Headers */,
FF5051F01D66908C0065E677 /* ORKNavigablePageStep.h in Headers */,
- BC13CE401B0666FD0044153C /* ORKResultPredicate.h in Headers */,
51EB9A532B8408D50064A515 /* ORKInstructionStepHTMLFormatter.h in Headers */,
86C40E081A8D7C5C00081FAC /* ORKConsentReviewStep.h in Headers */,
+ 519CE82B2C6582BE003BB584 /* ORKFamilyHistoryStep.h in Headers */,
CA6A0D83288B5B370048C1EF /* ORKHTMLPDFWriter.h in Headers */,
86C40DC61A8D7C5C00081FAC /* ORKTask.h in Headers */,
86C40E1E1A8D7C5C00081FAC /* ORKConsentSignature.h in Headers */,
@@ -4596,6 +4766,7 @@
24BC5CEE1BC345D900846B43 /* ORKLoginStep.h in Headers */,
BABBB1AE2097D97200CB29E5 /* ORKPDFViewerStep.h in Headers */,
BA8C5021226FFB04001896D0 /* ORKLearnMoreItem.h in Headers */,
+ 519CE8242C6582BE003BB584 /* ORKHealthCondition.h in Headers */,
2489F7B11D65214D008DEF20 /* ORKVideoCaptureStep.h in Headers */,
CA2B902328A186A80025B773 /* ORKDataLogger.h in Headers */,
861D11AD1AA7951F003C98A7 /* ORKChoiceAnswerFormatHelper.h in Headers */,
@@ -4609,6 +4780,7 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
+ 519CE8412C658654003BB584 /* ORKFamilyHistoryRelatedPersonCell.h in Headers */,
CAA20E5B288B3E9900EDC764 /* UIImage+ResearchKit.h in Headers */,
51AEAAB52B744BC000F4D107 /* ORKQuestionStepView.h in Headers */,
CAA20DB2288B3DB300EDC764 /* ORKTextFieldView.h in Headers */,
@@ -4619,6 +4791,8 @@
CA6A0D81288B54650048C1EF /* ORKConsentReviewController.h in Headers */,
CAA20F34288B3F6700EDC764 /* ORKVerificationStepViewController.h in Headers */,
CAA20E1F288B3E8200EDC764 /* ORKPasscodeStepViewController.h in Headers */,
+ 519CE85C2C6AD858003BB584 /* ORKFamilyHistoryStepViewController_Private.h in Headers */,
+ 519CE8452C658654003BB584 /* ORKFamilyHistoryTableHeaderView.h in Headers */,
CAA20E39288B3E8200EDC764 /* ORKFormStepViewController.h in Headers */,
51FBAC5D2BC9CE4A009CA28F /* ORKBorderedButton_Internal.h in Headers */,
CAA20E37288B3E8200EDC764 /* ORKRequestPermissionsStepViewController.h in Headers */,
@@ -4627,6 +4801,7 @@
CAA20F3E288B3F6D00EDC764 /* ORKAccessibilityFunctions.h in Headers */,
CAA20D80288B3D9100EDC764 /* ORKFormSectionTitleLabel.h in Headers */,
CAA20D9A288B3D9C00EDC764 /* ORKTableContainerView.h in Headers */,
+ 519CE8432C658654003BB584 /* ORKFamilyHistoryTableFooterView.h in Headers */,
CAA20DFF288B3E8100EDC764 /* ORKCustomSignatureFooterView.h in Headers */,
CAA20DAF288B3DB300EDC764 /* ORKDefaultFont.h in Headers */,
CAA20F2A288B3F5B00EDC764 /* ORKConsentSharingStepViewController.h in Headers */,
@@ -4672,6 +4847,7 @@
CAA20E42288B3E8200EDC764 /* ORKVideoCaptureView.h in Headers */,
CAA20D50288B3D6400EDC764 /* ORKCheckmarkView.h in Headers */,
CAA20D94288B3D9C00EDC764 /* ORKNavigationContainerView.h in Headers */,
+ 5192BF932AE1C2F8006E43FB /* ORKChoiceViewCell+ORKColorChoice.h in Headers */,
CAA20DBD288B3DB300EDC764 /* ORKTableViewCell.h in Headers */,
51AEAAB32B744ACC00F4D107 /* ORKQuestionStepViewController_Private.h in Headers */,
CAA20E05288B3E8200EDC764 /* ORKVideoInstructionStepViewController.h in Headers */,
@@ -4703,6 +4879,7 @@
CAA20DD5288B3DB400EDC764 /* ORKTitleLabel.h in Headers */,
CAA20D9D288B3D9C00EDC764 /* ORKVerticalContainerView.h in Headers */,
CAA20DD8288B3DB400EDC764 /* ORKBodyLabel.h in Headers */,
+ 5192BF9E2AE1DE62006E43FB /* ORKColorChoiceCellGroup.h in Headers */,
CAA20D6B288B3D9100EDC764 /* ORKSurveyAnswerCellForScale.h in Headers */,
CAA20DC1288B3DB400EDC764 /* ORKCountdownLabel.h in Headers */,
CAA20E28288B3E8200EDC764 /* ORKImageCaptureStepViewController.h in Headers */,
@@ -4714,6 +4891,7 @@
CAA20D7C288B3D9100EDC764 /* ORKSurveyAnswerCellForSES.h in Headers */,
CAA20F3B288B3F6D00EDC764 /* UIView+ORKAccessibility.h in Headers */,
CAA20D61288B3D9100EDC764 /* ORKScaleSlider.h in Headers */,
+ E454438D2CC1C78E0004E385 /* ResearchKit_Prefix.pch in Headers */,
CAA20DEF288B3DB400EDC764 /* ORKCaption1Label.h in Headers */,
CAA20F31288B3F5B00EDC764 /* ORKConsentReviewStepViewController.h in Headers */,
CAA20DC8288B3DB400EDC764 /* ORKRoundTappingButton.h in Headers */,
@@ -4721,6 +4899,7 @@
CAA20D55288B3D6B00EDC764 /* ORKReviewIncompleteCell.h in Headers */,
CAA20D63288B3D9100EDC764 /* ORKMultipleValuePicker.h in Headers */,
CAA20E13288B3E8200EDC764 /* ORKWebViewStepViewController.h in Headers */,
+ 5192BF8F2AE1C051006E43FB /* ORKAgePicker.h in Headers */,
CAA20E24288B3E8200EDC764 /* ORKCompletionStepViewController.h in Headers */,
51F716D1297E2CC400D8ACF7 /* ORKConsentLearnMoreViewController.h in Headers */,
CAA20E5E288B3E9900EDC764 /* UIBarButtonItem+ORKBarButtonItem.h in Headers */,
@@ -4739,6 +4918,7 @@
CAA20E22288B3E8200EDC764 /* ORKSignatureStepViewController.h in Headers */,
CAA20DE7288B3DB400EDC764 /* ORKScaleRangeLabel.h in Headers */,
CAA20DEA288B3DB400EDC764 /* ORKTagLabel.h in Headers */,
+ 519CE8352C658617003BB584 /* ORKFamilyHistoryStepViewController.h in Headers */,
CAA20E29288B3E8200EDC764 /* ORKCustomStepView.h in Headers */,
CAA20E31288B3E8200EDC764 /* ORKStepViewController.h in Headers */,
CAA20DB1288B3DB300EDC764 /* ORKTapCountLabel.h in Headers */,
@@ -5081,7 +5261,7 @@
};
};
buildConfigurationList = 3FFF18381829DB1D00167070 /* Build configuration list for PBXProject "ResearchKit" */;
- compatibilityVersion = "Xcode 3.2";
+ compatibilityVersion = "Xcode 15.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -5136,6 +5316,7 @@
86CC8E991AC09332001CCD89 /* ResearchKitTests */,
CA1C7A40288B0C68004DAB3A /* ResearchKitUI */,
CAD08966289DD747007B2A98 /* ResearchKitActiveTask */,
+ 0BC672D82BD9C52D005798AC /* ResearchKitAllTargets */,
);
};
/* End PBXProject section */
@@ -5197,6 +5378,7 @@
51BD8FD429D60FB60001D54E /* volume_curve_WIRED.plist in Resources */,
0BD9B6132B75992F00A64EF9 /* Sentence7.wav in Resources */,
51BD8FD229D60FB60001D54E /* frequency_dBSPL_AIRPODSV3.plist in Resources */,
+ 622774402C5CF7DC00F2E741 /* retspl_dBFS_AIRPODSPROV2.plist in Resources */,
0BD9B6102B75992500A64EF9 /* Sentence4.wav in Resources */,
51BD8FC929D60FB60001D54E /* frequency_dBSPL_AIRPODSMAX.plist in Resources */,
0BD9B60E2B75991F00A64EF9 /* Sentence2.wav in Resources */,
@@ -5269,6 +5451,7 @@
0B9A990F2A8AC47500D64C40 /* NSObject+TestingSupport.m in Sources */,
BC4D521F27B326EA0099DC18 /* ORKSecureCodingTests.swift in Sources */,
86D348021AC161B0006DB02B /* ORKRecorderTests.m in Sources */,
+ 519CE85F2C6BC1DB003BB584 /* ORKFamilyHistoryResultTests.swift in Sources */,
1490DCFC224D4867003FEEDA /* ORKEnvironmentSPLMeterResultTests.swift in Sources */,
51CB80D62AFEBE7E00A1F410 /* ORKFormStepViewControllerConditionalFormItemsTests.swift in Sources */,
51AF19582B583BBA00D3B399 /* ORKDataCollectionTests.m in Sources */,
@@ -5311,6 +5494,7 @@
BF1D43861D4904C6007EE90B /* ORKVideoInstructionStep.m in Sources */,
FF919A6E1E81D3B0005C2A1E /* ORKPasscodeResult.m in Sources */,
BABBB1AF2097D97200CB29E5 /* ORKPDFViewerStep.m in Sources */,
+ 519CE82D2C6582BE003BB584 /* ORKFamilyHistoryResult.m in Sources */,
51AF1B162B67F30500D3B399 /* ORKSignatureFormatter.m in Sources */,
FF919A641E81D04D005C2A1E /* ORKSignatureResult.m in Sources */,
8419D66F1FB73CC80088D7E5 /* ORKWebViewStep.m in Sources */,
@@ -5320,6 +5504,7 @@
5192BF862AE1BA47006E43FB /* ORKFrontFacingCameraStep.m in Sources */,
86C40D321A8D7C5C00081FAC /* ORKHealthAnswerFormat.m in Sources */,
03EDD58124CA6B1D006245E9 /* ORKNotificationPermissionType.m in Sources */,
+ 519CE8262C6582BE003BB584 /* ORKRelatedPerson.m in Sources */,
51E03D6424919711008F8406 /* ORKPermissionType.m in Sources */,
FFDDD84A1D3555EA00446806 /* ORKPageStep.m in Sources */,
51EB9A542B8408D50064A515 /* ORKInstructionStepHTMLFormatter.m in Sources */,
@@ -5337,26 +5522,30 @@
86C40E001A8D7C5C00081FAC /* ORKConsentDocument.m in Sources */,
D442397A1AF17F5100559D96 /* ORKImageCaptureStep.m in Sources */,
866DA5261D63D04700C9AF3F /* ORKHealthSampleQueryOperation.m in Sources */,
+ 519CE8222C6582BE003BB584 /* ORKHealthCondition.m in Sources */,
CA6A0D86288B5B370048C1EF /* ORKHTMLPDFWriter.m in Sources */,
FF5CA6131D2C2670001660A3 /* ORKTableStep.m in Sources */,
036B1E8E25351BAD008483DF /* ORKMotionActivityPermissionType.m in Sources */,
CA2B902228A1867E0025B773 /* ORKRecorder.m in Sources */,
5D04885825F19A7A0006C68B /* ORKDevice.m in Sources */,
CA2B902428A186AF0025B773 /* ORKDataLogger.m in Sources */,
+ 519CE8292C6582BE003BB584 /* ORKConditionStepConfiguration.m in Sources */,
86C40D6C1A8D7C5C00081FAC /* ORKResult.m in Sources */,
86C40D181A8D7C5C00081FAC /* ORKErrors.m in Sources */,
+ CA2B902428A186AF0025B773 /* ORKDataLogger.m in Sources */,
5192BF852AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.m in Sources */,
031A0FC224CF4ECD000E4455 /* ORKSensorPermissionType.m in Sources */,
+ FF919A6A1E81D255005C2A1E /* ORKConsentSignatureResult.m in Sources */,
CA6A0D85288B5B370048C1EF /* ORKHTMLPDFPageRenderer.m in Sources */,
+ 519CE8232C6582BE003BB584 /* ORKFamilyHistoryStep.m in Sources */,
51A11F182BD08D5E0060C07E /* CMMotionActivity+ORKJSONDictionary.m in Sources */,
24A4DA151B8D1115009C797A /* ORKPasscodeStep.m in Sources */,
BCA5C0361AEC05F20092AC8D /* ORKStepNavigationRule.m in Sources */,
- FF919A6A1E81D255005C2A1E /* ORKConsentSignatureResult.m in Sources */,
5192BF5A2AE09794006E43FB /* ORKFormItemVisibilityRule.m in Sources */,
86C40CC21A8D7C5C00081FAC /* ORKCompletionStep.m in Sources */,
BF9155A81BDE8DA9007FA459 /* ORKWaitStep.m in Sources */,
- BCB080A11B83EFB900A3F400 /* ORKStepNavigationRule.swift in Sources */,
AE75433B24E32CCC00E4C7CF /* ORKEarlyTerminationConfiguration.m in Sources */,
+ 519CE8282C6582BE003BB584 /* ORKRelativeGroup.m in Sources */,
86C40D361A8D7C5C00081FAC /* ORKHelpers.m in Sources */,
86C40CE61A8D7C5C00081FAC /* ORKAnswerFormat.m in Sources */,
CA6A0D7F288B51D30048C1EF /* ORKSkin.m in Sources */,
@@ -5374,6 +5563,7 @@
51A11F192BD08D5E0060C07E /* HKSample+ORKJSONDictionary.m in Sources */,
86C40D581A8D7C5C00081FAC /* ORKOrderedTask.m in Sources */,
86C40D601A8D7C5C00081FAC /* ORKQuestionStep.m in Sources */,
+ BCB080A11B83EFB900A3F400 /* ORKStepNavigationRule.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5381,6 +5571,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 5192BF902AE1C051006E43FB /* ORKAgePicker.m in Sources */,
CAA20D9E288B3D9C00EDC764 /* ORKVerticalContainerView.m in Sources */,
CAA20E43288B3E8200EDC764 /* ORKVideoCaptureView.m in Sources */,
CAA20D7E288B3D9100EDC764 /* ORKPicker.m in Sources */,
@@ -5396,6 +5587,7 @@
CAA20E5C288B3E9900EDC764 /* UIImage+ResearchKit.m in Sources */,
CAA20DB0288B3DB300EDC764 /* ORKSelectionSubTitleLabel.m in Sources */,
CAA20E49288B3E8200EDC764 /* ORKLearnMoreStepViewController.m in Sources */,
+ 51B76DFD2CB5C73C0061698A /* ResearchKitUI.docc in Sources */,
CAA20E2F288B3E8200EDC764 /* ORKWaitStepViewController.m in Sources */,
CAA20DFC288B3E8100EDC764 /* ORKFreehandDrawingView.m in Sources */,
CAA20D69288B3D9100EDC764 /* ORKMultipleValuePicker.m in Sources */,
@@ -5415,7 +5607,9 @@
CAA20DA9288B3DA300EDC764 /* ORKObserver.m in Sources */,
CA6A0D82288B54650048C1EF /* ORKConsentReviewController.m in Sources */,
CAA20D8A288B3D9100EDC764 /* ORKScaleSliderView.m in Sources */,
+ 519CE8462C658654003BB584 /* ORKFamilyHistoryTableHeaderView.m in Sources */,
CAA20F36288B3F6700EDC764 /* ORKLoginStepViewController.m in Sources */,
+ 519CE8422C658654003BB584 /* ORKFamilyHistoryRelatedPersonCell.m in Sources */,
CAA20D4F288B3D5700EDC764 /* ORKRecordButton.m in Sources */,
CAA20DE0288B3DB400EDC764 /* ORKCountdownLabel.m in Sources */,
CAA20D7F288B3D9100EDC764 /* SwiftUIViewFactory.swift in Sources */,
@@ -5461,10 +5655,12 @@
CAA20DB9288B3DB300EDC764 /* ORKLabel.m in Sources */,
CAA20DD0288B3DB400EDC764 /* ORKSelectionTitleLabel.m in Sources */,
CAA20DDA288B3DB400EDC764 /* ORKTableViewCell.m in Sources */,
+ 519CE8442C658654003BB584 /* ORKFamilyHistoryTableFooterView.m in Sources */,
CAA20DBE288B3DB300EDC764 /* ORKFootnoteLabel.m in Sources */,
CAA20F2E288B3F5B00EDC764 /* ORKConsentReviewStepViewController.m in Sources */,
51F716D3297E2FB600D8ACF7 /* ORKConsentLearnMoreViewController.m in Sources */,
CAA20D90288B3D9100EDC764 /* ORKTextChoiceCellGroup.m in Sources */,
+ 5192BF9D2AE1DE62006E43FB /* ORKColorChoiceCellGroup.m in Sources */,
CAA20D51288B3D6400EDC764 /* ORKCheckmarkView.m in Sources */,
CAA20E20288B3E8200EDC764 /* ORKSignatureStepViewController.m in Sources */,
CAA20DE2288B3DB400EDC764 /* ORKRoundTappingButton.m in Sources */,
@@ -5479,6 +5675,7 @@
CAA20E12288B3E8200EDC764 /* ORKPasscodeStepView.m in Sources */,
CAA20DC2288B3DB400EDC764 /* ORKIconButton.m in Sources */,
CAA20D6D288B3D9100EDC764 /* ORKSurveyCardHeaderView.m in Sources */,
+ 5192BF942AE1C2F8006E43FB /* ORKChoiceViewCell+ORKColorChoice.m in Sources */,
CAA20F30288B3F5B00EDC764 /* ORKConsentSharingStepViewController.m in Sources */,
CAA20DC0288B3DB300EDC764 /* ORKImageChoiceLabel.m in Sources */,
CAA20DD7288B3DB400EDC764 /* ORKChoiceViewCell.m in Sources */,
@@ -5498,7 +5695,6 @@
CAA20F3A288B3F6D00EDC764 /* ORKAccessibilityFunctions.m in Sources */,
5192BF982AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.m in Sources */,
CAA20E01288B3E8100EDC764 /* ORKRequestPermissionsStepContainerView.m in Sources */,
- 51A11F242BD1548C0060C07E /* UIImageView+ResearchKit.m in Sources */,
CAA20F38288B3F6700EDC764 /* ORKVerificationStepView.m in Sources */,
CAA20D6C288B3D9100EDC764 /* ORKSurveyAnswerCellForScale.m in Sources */,
CAA20E2A288B3E8200EDC764 /* ORKStepView.m in Sources */,
@@ -5511,6 +5707,7 @@
CAA20E03288B3E8100EDC764 /* ORKImageCaptureStepViewController.m in Sources */,
CAA20D77288B3D9100EDC764 /* ORKDateTimePicker.m in Sources */,
CAA20D74288B3D9100EDC764 /* ORKImageSelectionView.m in Sources */,
+ 519CE8382C658617003BB584 /* ORKFamilyHistoryStepViewController.m in Sources */,
CAA20E4B288B3E8200EDC764 /* ORKSecondaryTaskStepViewController.m in Sources */,
CAA20D64288B3D9100EDC764 /* ORKTimeIntervalPicker.m in Sources */,
CAA20E14288B3E8200EDC764 /* ORKInstructionStepContainerView.m in Sources */,
@@ -5650,6 +5847,7 @@
CA2B8F9B28A16EF90025B773 /* ORKAmslerGridStepViewController.m in Sources */,
5156C9F32B7E437A00983535 /* ORKTouchAbilityTapTrial.m in Sources */,
CAD08A99289DE7A4007B2A98 /* ORKTrailmakingResult.m in Sources */,
+ 51B76DFB2CB5B5A30061698A /* ResearchKitActiveTask.docc in Sources */,
CA2B8F8D28A16E2E0025B773 /* ORKEnvironmentSPLMeterContentView.m in Sources */,
5156C9F62B7E437A00983535 /* ORKTouchAbilityTapStep.m in Sources */,
CA2B8FD628A176D70025B773 /* ORKReactionTimeStimulusView.m in Sources */,
@@ -5709,6 +5907,21 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 0BC672E02BD9C541005798AC /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B183A4731A8535D100C76870 /* ResearchKit */;
+ targetProxy = 0BC672DF2BD9C541005798AC /* PBXContainerItemProxy */;
+ };
+ 0BC672E22BD9C541005798AC /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = CAD08966289DD747007B2A98 /* ResearchKitActiveTask */;
+ targetProxy = 0BC672E12BD9C541005798AC /* PBXContainerItemProxy */;
+ };
+ 0BC672E62BD9C541005798AC /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = CA1C7A40288B0C68004DAB3A /* ResearchKitUI */;
+ targetProxy = 0BC672E52BD9C541005798AC /* PBXContainerItemProxy */;
+ };
86CC8EA21AC09332001CCD89 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = B183A4731A8535D100C76870 /* ResearchKit */;
@@ -5811,11 +6024,29 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
+ 0BC672DA2BD9C52D005798AC /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = "";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 0BC672DC2BD9C52D005798AC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = "";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
3FFF18691829DB1E00167070 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 5D000ED12620F27100E5442A /* Project-Debug.xcconfig */;
buildSettings = {
- ENABLE_MODULE_VERIFIER = YES;
+ ENABLE_MODULE_VERIFIER = NO;
ENABLE_TESTING_SEARCH_PATHS = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
@@ -5883,6 +6114,7 @@
"$(ORK_GCC_PREPROCESSOR_DEFINITIONS)",
);
MODULEMAP_PRIVATE_FILE = ResearchKit/ResearchKit_Private.modulemap;
+ "OTHER_SWIFT_FLAGS[arch=*]" = "$(inherited) -runtime-compatibility-version none";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -5911,6 +6143,7 @@
APPLICATION_EXTENSION_API_ONLY = NO;
ENABLE_MODULE_VERIFIER = YES;
ENABLE_TESTING_SEARCH_PATHS = YES;
+ GCC_PREFIX_HEADER = ResearchKit/ResearchKit_Prefix.pch;
MODULEMAP_PRIVATE_FILE = ResearchKitUI/ResearchKitUI_Private.modulemap;
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++14";
"OTHER_SWIFT_FLAGS[arch=*]" = "$(inherited) -runtime-compatibility-version none";
@@ -5926,6 +6159,7 @@
APPLICATION_EXTENSION_API_ONLY = NO;
ENABLE_MODULE_VERIFIER = YES;
ENABLE_TESTING_SEARCH_PATHS = YES;
+ GCC_PREFIX_HEADER = ResearchKit/ResearchKit_Prefix.pch;
MODULEMAP_PRIVATE_FILE = ResearchKitUI/ResearchKitUI_Private.modulemap;
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++14";
PRODUCT_NAME = ResearchKitUI;
@@ -6083,6 +6317,15 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 0BC672D92BD9C52D005798AC /* Build configuration list for PBXAggregateTarget "ResearchKitAllTargets" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 0BC672DA2BD9C52D005798AC /* Debug */,
+ 0BC672DC2BD9C52D005798AC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
3FFF18381829DB1D00167070 /* Build configuration list for PBXProject "ResearchKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -6090,7 +6333,7 @@
3FFF186A1829DB1E00167070 /* Release */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
+ defaultConfigurationName = Release;
};
86CC8EA31AC09332001CCD89 /* Build configuration list for PBXNativeTarget "ResearchKitTests" */ = {
isa = XCConfigurationList;
@@ -6099,7 +6342,7 @@
86CC8EA51AC09332001CCD89 /* Release */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
+ defaultConfigurationName = Release;
};
B183A5921A8535D100C76870 /* Build configuration list for PBXNativeTarget "ResearchKit" */ = {
isa = XCConfigurationList;
@@ -6108,7 +6351,7 @@
B183A5941A8535D100C76870 /* Release */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
+ defaultConfigurationName = Release;
};
CA1C7A54288B0C68004DAB3A /* Build configuration list for PBXNativeTarget "ResearchKitUI" */ = {
isa = XCConfigurationList;
@@ -6117,7 +6360,7 @@
CA1C7A57288B0C68004DAB3A /* Release */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
+ defaultConfigurationName = Release;
};
CAD08970289DD747007B2A98 /* Build configuration list for PBXNativeTarget "ResearchKitActiveTask" */ = {
isa = XCConfigurationList;
@@ -6126,7 +6369,7 @@
CAD0896D289DD747007B2A98 /* Release */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
+ defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
diff --git a/ResearchKit.xcodeproj/xcshareddata/xcschemes/ResearchKitActiveTask.xcscheme b/ResearchKit.xcodeproj/xcshareddata/xcschemes/ResearchKitActiveTask.xcscheme
index 9645cc75d5..84edff00a6 100644
--- a/ResearchKit.xcodeproj/xcshareddata/xcschemes/ResearchKitActiveTask.xcscheme
+++ b/ResearchKit.xcodeproj/xcshareddata/xcschemes/ResearchKitActiveTask.xcscheme
@@ -39,6 +39,41 @@
BlueprintName = "ResearchKitTests"
ReferencedContainer = "container:ResearchKit.xcodeproj">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -77,4 +112,7 @@
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
+
+
diff --git a/ResearchKit.xcodeproj/xcshareddata/xcschemes/ResearchKitAllTargets.xcscheme b/ResearchKit.xcodeproj/xcshareddata/xcschemes/ResearchKitAllTargets.xcscheme
new file mode 100644
index 0000000000..bfad3c4fd5
--- /dev/null
+++ b/ResearchKit.xcodeproj/xcshareddata/xcschemes/ResearchKitAllTargets.xcscheme
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ResearchKit.xctestplan b/ResearchKit.xctestplan
index e64d2a7f45..ca83daedf4 100644
--- a/ResearchKit.xctestplan
+++ b/ResearchKit.xctestplan
@@ -14,7 +14,11 @@
"testTargets" : [
{
"skippedTests" : [
- "ORKDataCollectionTests"
+ "ORKDataCollectionTests",
+ "ORKJSONSerializationTests\/testEquality",
+ "ORKJSONSerializationTests\/testORKSampleDeserialization",
+ "ORKJSONSerializationTests\/testORKSerialization",
+ "ORKJSONSerializationTests\/testSecureCoding"
],
"target" : {
"containerPath" : "container:ResearchKit.xcodeproj",
diff --git a/ResearchKit/Common/CLLocationManager+ResearchKit.h b/ResearchKit/Common/CLLocationManager+ResearchKit.h
index e0c2ef9088..6a52ede9e6 100644
--- a/ResearchKit/Common/CLLocationManager+ResearchKit.h
+++ b/ResearchKit/Common/CLLocationManager+ResearchKit.h
@@ -28,6 +28,7 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#import
NS_ASSUME_NONNULL_BEGIN
@@ -52,3 +53,4 @@ NS_ASSUME_NONNULL_BEGIN
@end
NS_ASSUME_NONNULL_END
+#endif
diff --git a/ResearchKit/Common/CLLocationManager+ResearchKit.m b/ResearchKit/Common/CLLocationManager+ResearchKit.m
index 5f1fff6911..8de3408820 100644
--- a/ResearchKit/Common/CLLocationManager+ResearchKit.m
+++ b/ResearchKit/Common/CLLocationManager+ResearchKit.m
@@ -28,6 +28,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#import "CLLocationManager+ResearchKit.h"
#import "ORKDefines.h"
@@ -35,37 +36,22 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
@implementation CLLocationManager (ResearchKit)
- (BOOL)ork_requestWhenInUseAuthorization {
-#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
[self requestWhenInUseAuthorization];
return YES;
-#else
- return NO;
-#endif
}
- (BOOL)ork_requestAlwaysAuthorization {
-#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
[self requestAlwaysAuthorization];
return YES;
-#else
- return NO;
-#endif
}
- (void)ork_startUpdatingLocation {
-#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
[self startUpdatingLocation];
-#else
- // noop
-#endif
}
- (void)ork_stopUpdatingLocation {
-#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
[self stopUpdatingLocation];
-#else
- // noop
-#endif
}
@end
+#endif
diff --git a/ResearchKit/Common/HKSample+ORKJSONDictionary.h b/ResearchKit/Common/HKSample+ORKJSONDictionary.h
index 3008a62f12..fce4a30fe4 100644
--- a/ResearchKit/Common/HKSample+ORKJSONDictionary.h
+++ b/ResearchKit/Common/HKSample+ORKJSONDictionary.h
@@ -29,8 +29,10 @@
*/
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import
+
NS_ASSUME_NONNULL_BEGIN
typedef NS_OPTIONS(NSInteger, ORKSampleJSONOptions) {
@@ -59,3 +61,5 @@ typedef NS_OPTIONS(NSInteger, ORKSampleJSONOptions) {
@end
NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/ResearchKit/Common/HKSample+ORKJSONDictionary.m b/ResearchKit/Common/HKSample+ORKJSONDictionary.m
index 0edddbac73..2a20e511b3 100644
--- a/ResearchKit/Common/HKSample+ORKJSONDictionary.m
+++ b/ResearchKit/Common/HKSample+ORKJSONDictionary.m
@@ -45,7 +45,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
static NSString *const HKCorrelatedObjectsKey = @"objects";
// static NSString *const HKSourceIdentifierKey = @"sourceBundleIdentifier";
-
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@implementation HKSample (ORKJSONDictionary)
- (NSMutableDictionary *)ork_JSONMutableDictionaryWithOptions:(ORKSampleJSONOptions)options unit:(HKUnit *)unit {
@@ -167,3 +167,4 @@ - (NSDictionary *)ork_JSONDictionaryWithOptions:(ORKSampleJSONOptions)options sa
}
@end
+#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
diff --git a/ResearchKit/Common/ORKActiveStep.h b/ResearchKit/Common/ORKActiveStep.h
index 5c82691e69..a51c0594e7 100644
--- a/ResearchKit/Common/ORKActiveStep.h
+++ b/ResearchKit/Common/ORKActiveStep.h
@@ -30,7 +30,6 @@
#import
-#import
#import
diff --git a/ResearchKit/Common/ORKActiveStep.m b/ResearchKit/Common/ORKActiveStep.m
index 05e1704d80..a58171b85e 100644
--- a/ResearchKit/Common/ORKActiveStep.m
+++ b/ResearchKit/Common/ORKActiveStep.m
@@ -164,6 +164,7 @@ - (BOOL)isEqual:(id)object {
(self.shouldUseNextAsSkipButton == castObject.shouldUseNextAsSkipButton));
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (NSSet *)requestedHealthKitTypesForReading {
NSMutableSet *set = [NSMutableSet set];
for (ORKRecorderConfiguration *config in self.recorderConfigurations) {
@@ -174,6 +175,7 @@ - (BOOL)isEqual:(id)object {
}
return set;
}
+#endif
- (ORKPermissionMask)requestedPermissions {
ORKPermissionMask mask = [super requestedPermissions];
diff --git a/ResearchKit/Common/ORKAnswerFormat.h b/ResearchKit/Common/ORKAnswerFormat.h
index d0eef709ec..9d9773c8f0 100644
--- a/ResearchKit/Common/ORKAnswerFormat.h
+++ b/ResearchKit/Common/ORKAnswerFormat.h
@@ -32,7 +32,6 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#import
@@ -56,11 +55,12 @@
@class ORKLocationAnswerFormat;
@class ORKSESAnswerFormat;
@class ORKImageChoice;
-#endif
NS_ASSUME_NONNULL_BEGIN
@class ORKBooleanAnswerFormat;
+@class ORKColorChoiceAnswerFormat;
+@class ORKColorChoice;
@class ORKTextChoiceAnswerFormat;
@class ORKTextChoice;
@@ -123,6 +123,8 @@ ORK_CLASS_AVAILABLE
+ (ORKTextChoiceAnswerFormat *)choiceAnswerFormatWithStyle:(ORKChoiceAnswerStyle)style
textChoices:(NSArray *)textChoices;
++ (ORKColorChoiceAnswerFormat *)choiceAnswerFormatWithStyle:(ORKChoiceAnswerStyle)style
+ colorChoices:(NSArray *)colorChoices;
/// @name Validation
@@ -189,9 +191,29 @@ ORK_CLASS_AVAILABLE
*/
@property (copy, readonly) NSArray *textChoices;
+/**
+ Returns YES if the answer is no longer valid, specifically used in the ORKFormStep Restoration
+ */
+- (BOOL)isAnswerInvalid:(id)answer;
+
@end
+ORK_CLASS_AVAILABLE
+@interface ORKColorChoiceAnswerFormat : ORKAnswerFormat
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+- (instancetype)initWithStyle:(ORKChoiceAnswerStyle)style
+ colorChoices:(NSArray *)colorChoices NS_DESIGNATED_INITIALIZER;
+
+@property (readonly) ORKChoiceAnswerStyle style;
+
+@property (copy, readonly) NSArray *colorChoices;
+
+@end
+
/**
The `ORKBooleanAnswerFormat` class behaves the same as the `ORKTextChoiceAnswerFormat` class,
@@ -386,9 +408,34 @@ ORK_CLASS_AVAILABLE
@end
+ORK_CLASS_AVAILABLE
+@interface ORKColorChoice: NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+- (instancetype)initWithColor:(nullable UIColor *)color
+ text:(nullable NSString *)text
+ detailText:(nullable NSString *)detailText
+ value:(NSObject *)value;
+
+- (instancetype)initWithColor:(nullable UIColor *)color
+ text:(nullable NSString *)text
+ detailText:(nullable NSString *)detailText
+ value:(NSObject *)value
+ exclusive:(BOOL)exclusive;
+
+@property (nonatomic, copy, readonly, nullable) UIColor *color;
+
+@property (nonatomic, copy, readonly, nullable) NSString *text;
+@property (nonatomic, copy, readonly, nullable) NSString *detailText;
-#pragma mark - iOS
+@property (nonatomic, copy, readonly) NSObject *value;
+
+@property (readonly) BOOL exclusive;
+
+@end
#if TARGET_OS_IOS || TARGET_OS_VISION
@interface ORKAnswerFormat()
@@ -480,8 +527,7 @@ ORK_CLASS_AVAILABLE
minimumValue:(double)minimumValue
maximumValue:(double)maximumValue
defaultValue:(double)defaultValue;
-
-#if !TARGET_OS_VISION
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS && !TARGET_OS_VISION
+ (ORKLocationAnswerFormat *)locationAnswerFormat;
#endif
@@ -1739,6 +1785,7 @@ This By default, the value of this property is `NO`.
*/
@property (copy, nullable) NSString *placeholder;
+#if !TARGET_OS_WATCH
/**
The autocapitalization type that applies to the user's input.
@@ -1781,6 +1828,7 @@ This By default, the value of this property is `NO`.
If specified, overrides the default password generation rules for fields with secureTextEntry.
*/
@property (nonatomic, copy, nullable) UITextInputPasswordRules *passwordRules API_AVAILABLE(ios(12));
+#endif
@end
@@ -2028,6 +2076,134 @@ ORK_CLASS_AVAILABLE
@end
+/**
+ The `ORKAgeAnswerFormat` class represents the answer format for questions that require users
+ to enter a weight.
+
+ A weight answer format produces an `ORKNumericQuestionResult` object. The result is always reported
+ in the metric system using the `kg` unit.
+ */
+ORK_CLASS_AVAILABLE
+@interface ORKAgeAnswerFormat : ORKAnswerFormat
+
+/**
+ Returns an initialized weight answer format using the measurement system specified in the current
+ locale.
+
+ @return An initialized weight answer format.
+ */
+- (instancetype)init;
+
+- (instancetype)initWithMinimumAge:(NSInteger)minimumAge
+ maximumAge:(NSInteger)maximumAge;
+
+- (instancetype)initWithMinimumAge:(NSInteger)minimumAge
+ maximumAge:(NSInteger)maximumAge
+ minimumAgeCustomText:(nullable NSString *)minimumAgeCustomText
+ maximumAgeCustomText:(nullable NSString *)maximumAgeCustomText
+ showYear:(BOOL)showYear
+ useYearForResult:(BOOL)useYearForResult
+ defaultValue:(NSInteger)defaultValue;
+
+- (instancetype)initWithMinimumAge:(NSInteger)minimumAge
+ maximumAge:(NSInteger)maximumAge
+ minimumAgeCustomText:(nullable NSString *)minimumAgeCustomText
+ maximumAgeCustomText:(nullable NSString *)maximumAgeCustomText
+ showYear:(BOOL)showYear
+ useYearForResult:(BOOL)useYearForResult
+ treatMinAgeAsRange:(BOOL)treatMinAgeAsRange
+ treatMaxAgeAsRange:(BOOL)treatMaxAgeAsRange
+ defaultValue:(NSInteger)defaultValue;
+
++ (int)minimumAgeSentinelValue;
++ (int)maximumAgeSentinelValue;
+
+/**
+ Minimum age value presented in the picker
+
+ By default, the value of this property is 0.
+ */
+@property (readonly) NSInteger minimumAge;
+
+
+/**
+ Maximum age value presented in the picker.
+
+ By default, the value of this property is 125.
+ */
+@property (readonly) NSInteger maximumAge;
+
+
+/**
+ Custom text that will replace the minimumAge value.
+
+ By default, the value of this property is nil.
+ */
+
+@property (readonly, nullable) NSString *minimumAgeCustomText;
+
+/**
+ Custom text that will replace the maximumAge value.
+
+ By default, the value of this property is nil.
+ */
+
+@property (readonly, nullable) NSString *maximumAgeCustomText;
+
+
+/**
+ Boolean that determines if the year should be shown alongside the age value.
+
+ By default, the value of this property is nil.
+ */
+
+@property (readonly) BOOL showYear;
+
+/**
+ The year at which the picker will base all of its ages from.
+
+ By default, the value of this property will be the current year.
+ */
+
+@property (nonatomic) NSInteger relativeYear;
+
+
+/**
+ Boolean that determines if the year for the selected age should be used in the result.
+
+ By default, the value of this property is NO.
+ */
+
+@property (readonly) BOOL useYearForResult;
+
+/**
+ Boolean that determines if the minimumAge property should be treated as range.
+
+ -1 will be returned if minimumAge is selected
+
+ By default, the value of this property is NO.
+ */
+
+@property (readonly) BOOL treatMinAgeAsRange;
+
+/**
+ Boolean that determines if the maximumAge property should be treated as range.
+
+ -2 will be returned if maximumAge is selected
+
+ By default, the value of this property is NO.
+ */
+
+@property (readonly) BOOL treatMaxAgeAsRange;
+
+/**
+ The default value for the picker.
+ */
+
+@property (readonly) NSInteger defaultValue;
+
+@end
+
/**
The `ORKLocationAnswerFormat` class represents the answer format for questions that collect a location response
@@ -2035,6 +2211,7 @@ ORK_CLASS_AVAILABLE
An `ORKLocationAnswerFormat` object produces an `ORKLocationQuestionResult` object.
*/
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS
ORK_CLASS_AVAILABLE
@interface ORKLocationAnswerFormat : ORKAnswerFormat
@@ -2053,6 +2230,7 @@ ORK_CLASS_AVAILABLE
@property (copy, nullable) NSString *placeholder;
@end
+#endif
/**
Socio-Economic Ladder Answer Format.
@@ -2069,6 +2247,4 @@ ORK_CLASS_AVAILABLE
@end
-#endif
-
NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKAnswerFormat.m b/ResearchKit/Common/ORKAnswerFormat.m
index f22ce34c9f..627df4f8bf 100644
--- a/ResearchKit/Common/ORKAnswerFormat.m
+++ b/ResearchKit/Common/ORKAnswerFormat.m
@@ -43,8 +43,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKHealthAnswerFormat.h"
#endif
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+#import
+#endif
-@import HealthKit;
@import MapKit;
@import Contacts;
@@ -80,6 +82,8 @@ BOOL ORKIsAnswerEmpty(id answer) {
SQT_CASE(Weight);
SQT_CASE(Location);
SQT_CASE(SES);
+ SQT_CASE(Age);
+ SQT_CASE(Year);
}
#undef SQT_CASE
}
@@ -90,10 +94,12 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
return style == ORKNumberFormattingStylePercent ? NSNumberFormatterPercentStyle : NSNumberFormatterDecimalStyle;
}
+#if TARGET_OS_IOS
@implementation ORKAnswerDefaultSource {
NSMutableDictionary *_unitsTable;
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@synthesize healthStore=_healthStore;
+ (instancetype)sourceWithHealthStore:(HKHealthStore *)healthStore {
@@ -202,8 +208,10 @@ - (void)fetchDefaultValueForQuantityType:(HKQuantityType *)quantityType unit:(HK
[healthStore executeQuery:sampleQuery];
});
}
+#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (void)fetchDefaultValueForAnswerFormat:(ORKAnswerFormat *)answerFormat handler:(void(^)(id defaultValue, NSError *error))handler {
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
HKObjectType *objectType = [answerFormat healthKitObjectType];
BOOL handled = NO;
if (objectType) {
@@ -224,8 +232,12 @@ - (void)fetchDefaultValueForAnswerFormat:(ORKAnswerFormat *)answerFormat handler
if (!handled) {
handler(nil, nil);
}
+#else
+ handler(nil, nil);
+#endif
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (HKUnit *)defaultHealthKitUnitForAnswerFormat:(ORKAnswerFormat *)answerFormat {
__block HKUnit *unit = [answerFormat healthKitUnit];
HKObjectType *objectType = [answerFormat healthKitObjectType];
@@ -267,10 +279,11 @@ - (void)updateHealthKitUnitForAnswerFormat:(ORKAnswerFormat *)answerFormat force
[answerFormat setHealthKitUserUnit:healthKitDefault];
}
}
+#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@end
-#endif
+#endif // TARGET_OS_IOS
#pragma mark - ORKAnswerFormat
@@ -411,7 +424,7 @@ + (ORKDateAnswerFormat *)dateAnswerFormatWithStyle:(ORKDateAnswerStyle)style
calendar:calendar];
[answerFormat setDaysBeforeCurrentDateToSetMinimumDate:daysBefore];
[answerFormat setDaysAfterCurrentDateToSetMinimumDate:daysAfter];
-
+
return answerFormat;
}
@@ -476,6 +489,12 @@ + (ORKWeightAnswerFormat *)weightAnswerFormatWithMeasurementSystem:(ORKMeasureme
defaultValue:defaultValue];
}
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS
++ (ORKLocationAnswerFormat *)locationAnswerFormat {
+ return [ORKLocationAnswerFormat new];
+}
+#endif
+
+ (ORKSESAnswerFormat *)socioEconomicAnswerFormatWithTopRungText:(NSString *)topRungText
bottomRungText:(NSString *)bottomRungText {
return [[ORKSESAnswerFormat alloc] initWithTopRungText:topRungText
@@ -505,6 +524,10 @@ + (ORKTextChoiceAnswerFormat *)choiceAnswerFormatWithStyle:(ORKChoiceAnswerStyle
return [[ORKTextChoiceAnswerFormat alloc] initWithStyle:style textChoices:textChoices];
}
++ (ORKColorChoiceAnswerFormat *)choiceAnswerFormatWithStyle:(ORKChoiceAnswerStyle)style
+ colorChoices:(NSArray *)colorChoices {
+ return [[ORKColorChoiceAnswerFormat alloc] initWithStyle:style colorChoices:colorChoices];
+}
- (void)validateParameters {
}
@@ -560,6 +583,7 @@ - (BOOL)isHealthKitAnswerFormat {
return NO;
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (HKObjectType *)healthKitObjectType {
return nil;
}
@@ -579,6 +603,7 @@ - (HKUnit *)healthKitUserUnit {
- (void)setHealthKitUserUnit:(HKUnit *)unit {
}
+#endif
- (ORKQuestionType)questionType {
return ORKQuestionTypeNone;
@@ -825,7 +850,7 @@ - (id)copyWithZone:(NSZone *)zone {
- (BOOL)isEqual:(id)object {
BOOL isParentSame = [super isEqual:object];
-
+
__typeof(self) castObject = object;
return (isParentSame &&
ORKEqualObjects(self.valuePickers, castObject.valuePickers));
@@ -874,7 +899,7 @@ - (NSString *)stringForAnswer:(id)answer {
if (![answer isKindOfClass:[NSArray class]] || ([(NSArray*)answer count] != self.valuePickers.count)) {
return nil;
}
-
+
NSArray *answers = (NSArray*)answer;
__block NSMutableArray *answerTexts = [NSMutableArray new];
[answers enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
@@ -885,11 +910,11 @@ - (NSString *)stringForAnswer:(id)answer {
*stop = YES;
}
}];
-
+
if (answerTexts.count != self.valuePickers.count) {
return nil;
}
-
+
return [answerTexts componentsJoinedByString:self.separator];
}
@@ -1011,8 +1036,6 @@ - (NSArray *)choices {
}
@end
-#endif
-
#pragma mark - ORKTextChoiceAnswerFormat
@@ -1110,9 +1133,117 @@ - (NSArray *)choices {
return self.textChoices;
}
+- (BOOL)isAnswerInvalid:(id)answer {
+ @try
+ {
+ [_helper selectedIndexesForAnswer: answer];
+ return NO;
+ } @catch(id anException) {
+ ORK_Log_Error("%@ exception thrown for isAnswerInvalid: for answer:%@", anException, answer);
+ return YES;
+ }
+}
+
+@end
+
+
+#pragma mark - ORKColorChoiceAnswerFormat
+
+@interface ORKColorChoiceAnswerFormat () {
+
+ ORKChoiceAnswerFormatHelper *_helper;
+}
+
@end
+@implementation ORKColorChoiceAnswerFormat
+
++ (instancetype)new {
+ ORKThrowMethodUnavailableException();
+}
+
+- (instancetype)init {
+ ORKThrowMethodUnavailableException();
+}
+
+- (instancetype)initWithStyle:(ORKChoiceAnswerStyle)style
+ colorChoices:(NSArray *)colorChoices {
+ self = [super init];
+ if (self) {
+ _style = style;
+ _colorChoices = [colorChoices copy];
+ _helper = [[ORKChoiceAnswerFormatHelper alloc] initWithAnswerFormat:self];
+ }
+ return self;
+}
+
+- (void)validateParameters {
+ [super validateParameters];
+}
+
+- (instancetype)copyWithZone:(NSZone *)zone {
+ ORKColorChoiceAnswerFormat *answerFormat = [[[self class] allocWithZone:zone] initWithStyle:_style
+ colorChoices:[_colorChoices copy]];
+ return answerFormat;
+}
+
+- (BOOL)isEqual:(id)object {
+ BOOL isParentSame = [super isEqual:object];
+
+ __typeof(self) castObject = object;
+ return (isParentSame &&
+ ORKEqualObjects(_colorChoices, castObject.colorChoices) &&
+ (_style == castObject.style));
+}
+
+- (NSUInteger)hash {
+ return super.hash ^ _colorChoices.hash ^ _style;
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super initWithCoder:aDecoder];
+ if (self) {
+ ORK_DECODE_OBJ_ARRAY(aDecoder, colorChoices, ORKColorChoice);
+ ORK_DECODE_ENUM(aDecoder, style);
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [super encodeWithCoder:aCoder];
+ ORK_ENCODE_OBJ(aCoder, colorChoices);
+ ORK_ENCODE_ENUM(aCoder, style);
+
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (ORKQuestionType)questionType {
+ return (_style == ORKChoiceAnswerStyleSingleChoice) ? ORKQuestionTypeSingleChoice : ORKQuestionTypeMultipleChoice;
+}
+
+- (Class)questionResultClass {
+ return [ORKChoiceQuestionResult class];
+}
+
+- (NSString *)stringForAnswer:(id)answer {
+ return [_helper stringForChoiceAnswer:answer];
+}
+
+- (BOOL)shouldShowDontKnowButton {
+ return NO;
+}
+
+- (NSArray *)choices {
+ return self.colorChoices;
+}
+
+@end
#pragma mark - ORKTextChoice
@@ -1274,6 +1405,93 @@ - (BOOL)shouldShowDontKnowButton {
@end
+#pragma mark - ORKColorChoice
+
+@implementation ORKColorChoice
+
++ (instancetype)new {
+ ORKThrowMethodUnavailableException();
+}
+
+- (instancetype)init {
+ ORKThrowMethodUnavailableException();
+}
+
+- (instancetype)initWithColor:(UIColor *)color
+ text:(NSString *)text
+ detailText:(NSString *)detailText
+ value:(NSObject *)value
+ exclusive:(BOOL)exclusive {
+ self = [super init];
+
+ if (self) {
+ _color = [color copy];
+ _text = [text copy];
+ _detailText = [detailText copy];
+ _value = [value copy];
+ _exclusive = exclusive;
+ }
+
+ return self;
+}
+
+- (instancetype)initWithColor:(UIColor *)color
+ text:(NSString *)text
+ detailText:(NSString *)detailText
+ value:(NSObject *)value {
+ return [self initWithColor:color text:text detailText:detailText value:value exclusive:NO];
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (instancetype)copyWithZone:(NSZone *)zone {
+ return self;
+}
+
+- (BOOL)isEqual:(id)object {
+ if ([self class] != [object class]) {
+ return NO;
+ }
+
+ __typeof(self) castObject = object;
+ return (ORKEqualObjects(self.text, castObject.text)
+ && ORKEqualObjects(self.detailText, castObject.detailText)
+ && ORKEqualObjects(self.value, castObject.value)
+ && ORKEqualObjects(self.color, castObject.color)
+ && self.exclusive == castObject.exclusive);
+}
+
+- (NSUInteger)hash {
+ return _text.hash ^ _detailText.hash ^ _value.hash ^ _color.hash;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super init];
+ if (self) {
+ ORK_DECODE_OBJ_CLASS(aDecoder, text, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, color, UIColor);
+ ORK_DECODE_OBJ_CLASS(aDecoder, detailText, NSString);
+ ORK_DECODE_OBJ_CLASSES(aDecoder, value, ORKAllowableValueClasses());
+ ORK_DECODE_BOOL(aDecoder, exclusive);
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ ORK_ENCODE_OBJ(aCoder, text);
+ ORK_ENCODE_OBJ(aCoder, color);
+ ORK_ENCODE_OBJ(aCoder, detailText);
+ ORK_ENCODE_OBJ(aCoder, value);
+ ORK_ENCODE_BOOL(aCoder, exclusive);
+}
+
+- (BOOL)shouldShowDontKnowButton {
+ return NO;
+}
+
+@end
#pragma mark - ORKTextChoiceOther
@@ -1501,7 +1719,6 @@ - (BOOL)shouldShowDontKnowButton {
}
@end
-#endif
#pragma mark - ORKBooleanAnswerFormat
@@ -2827,19 +3044,15 @@ - (NSArray *)choices {
@end
-#endif
-
#pragma mark - ORKTextAnswerFormat
@interface ORKTextAnswerFormat()
-
@end
@implementation ORKTextAnswerFormat
-
- (Class)questionResultClass {
return [ORKTextQuestionResult class];
}
@@ -2858,7 +3071,6 @@ - (void)commonInit {
}
-
- (instancetype)initWithMaximumLength:(NSInteger)maximumLength {
self = [super init];
if (self) {
@@ -2920,6 +3132,7 @@ - (instancetype)copyWithZone:(NSZone *)zone {
answerFormat->_spellCheckingType = _spellCheckingType;
answerFormat->_keyboardType = _keyboardType;
answerFormat->_textContentType = _textContentType;
+
if (@available(iOS 12.0, *)) {
answerFormat->_passwordRules = _passwordRules;
}
@@ -2996,6 +3209,7 @@ - (ORKAnswerFormat *)confirmationAnswerFormatWithOriginalItemIdentifier:(NSStrin
answerFormat->_keyboardType = _keyboardType;
answerFormat->_autocapitalizationType = _autocapitalizationType;
answerFormat->_textContentType = _textContentType;
+
if (@available(iOS 12.0, *)) {
answerFormat->_passwordRules = _passwordRules;
}
@@ -3108,7 +3322,6 @@ - (NSString *)stringForAnswer:(id)answer {
return answerString;
}
-
- (ORKQuestionResult *)resultWithIdentifier:(NSString *)identifier answer:(id)answer {
ORKQuestionResult *questionResult = nil;
questionResult = (ORKQuestionResult *)[super resultWithIdentifier:identifier answer:answer];
@@ -3575,7 +3788,237 @@ - (NSString *)stringForAnswer:(id)answer {
@end
-#if !TARGET_OS_VISION
+#pragma mark - ORKAgeAnswerFormat
+
+static const NSInteger ORKAgeAnswerDefaultMinAge = 1;
+static const NSInteger ORKAgeAnswerDefaultMaxAge = 125;
+
+@implementation ORKAgeAnswerFormat
+
+- (Class)questionResultClass {
+ return [ORKNumericQuestionResult class];
+}
+
+- (instancetype)init {
+
+ return [self initWithMinimumAge:ORKAgeAnswerDefaultMinAge
+ maximumAge:ORKAgeAnswerDefaultMaxAge
+ minimumAgeCustomText:nil
+ maximumAgeCustomText:nil
+ showYear:NO
+ useYearForResult:NO
+ defaultValue:ORKAgeAnswerDefaultMinAge];
+}
+
+- (instancetype)initWithMinimumAge:(NSInteger)minimumAge maximumAge:(NSInteger)maximumAge {
+ return [self initWithMinimumAge:minimumAge
+ maximumAge:maximumAge
+ minimumAgeCustomText:nil
+ maximumAgeCustomText:nil
+ showYear:NO
+ useYearForResult:NO
+ defaultValue:minimumAge];
+
+}
+
+- (instancetype)initWithMinimumAge:(NSInteger)minimumAge
+ maximumAge:(NSInteger)maximumAge
+ minimumAgeCustomText:(nullable NSString *)minimumAgeCustomText
+ maximumAgeCustomText:(nullable NSString *)maximumAgeCustomText
+ showYear:(BOOL)showYear
+ useYearForResult:(BOOL)useYearForResult
+ defaultValue:(NSInteger)defaultValue {
+ return [self initWithMinimumAge:minimumAge
+ maximumAge:maximumAge
+ minimumAgeCustomText:minimumAgeCustomText
+ maximumAgeCustomText:maximumAgeCustomText
+ showYear:showYear
+ useYearForResult:useYearForResult
+ treatMinAgeAsRange:NO
+ treatMaxAgeAsRange:NO
+ defaultValue:defaultValue];
+}
+
+- (instancetype)initWithMinimumAge:(NSInteger)minimumAge
+ maximumAge:(NSInteger)maximumAge
+ minimumAgeCustomText:(nullable NSString *)minimumAgeCustomText
+ maximumAgeCustomText:(nullable NSString *)maximumAgeCustomText
+ showYear:(BOOL)showYear
+ useYearForResult:(BOOL)useYearForResult
+ treatMinAgeAsRange:(BOOL)treatMinAgeAsRange
+ treatMaxAgeAsRange:(BOOL)treatMaxAgeAsRange
+ defaultValue:(NSInteger)defaultValue {
+ if (minimumAge < 0) {
+ @throw [NSException exceptionWithName:NSInvalidArgumentException
+ reason: [NSString stringWithFormat:@"minimumAge must be greater than 0. (%li) - (%li)", minimumAge, maximumAge]
+ userInfo:nil];
+
+ }
+
+ if (maximumAge > 150) {
+ @throw [NSException exceptionWithName:NSInvalidArgumentException
+ reason:@"maximumAge must be lower than 150."
+ userInfo:nil];
+ }
+
+ if (minimumAge >= maximumAge) {
+ @throw [NSException exceptionWithName:NSInvalidArgumentException
+ reason:[NSString stringWithFormat:@"minimumAge must be less than maximumAge. (%li) - (%li)", minimumAge, maximumAge]
+ userInfo:nil];
+ }
+
+
+ self = [super init];
+
+ if (self) {
+ _minimumAge = minimumAge;
+ _maximumAge = maximumAge;
+ _minimumAgeCustomText = [minimumAgeCustomText copy];
+ _maximumAgeCustomText = [maximumAgeCustomText copy];
+ _showYear = showYear;
+ _useYearForResult = useYearForResult;
+ _treatMinAgeAsRange = treatMinAgeAsRange;
+ _treatMaxAgeAsRange = treatMaxAgeAsRange;
+ _relativeYear = [self currentYear];
+ _defaultValue = defaultValue;
+ }
+
+ return self;
+}
+
++ (int)minimumAgeSentinelValue {
+ return -1;
+}
+
++ (int)maximumAgeSentinelValue {
+ return -2;
+}
+
+- (NSInteger)currentYear {
+ NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
+ NSDateComponents *components = [calendar components:NSCalendarUnitYear fromDate:[NSDate date]];
+ return [components year];
+}
+
+- (NSString *)stringForAnswer:(id)answer {
+ NSString *answerString = nil;
+
+ if (!ORKIsAnswerEmpty(answer)) {
+ NSNumberFormatter *formatter = ORKDecimalNumberFormatter();
+ answerString = [formatter stringFromNumber:(NSNumber *)answer];
+ }
+
+ if (answerString) {
+ NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
+ NSDateComponents *components = [calendar components:NSCalendarUnitYear fromDate:[NSDate date]];
+ NSInteger currentYear = [components year];
+
+ int maxYear = currentYear - _minimumAge;
+ int minYear = currentYear - _maximumAge;
+
+ NSString *minAgeText = _minimumAgeCustomText ? : [NSString stringWithFormat:ORKLocalizedString(@"AGEPICKER_OR_YOUNGER", ""), (long)_minimumAge];
+ NSString *maxAgeText = _maximumAgeCustomText ? : [NSString stringWithFormat:ORKLocalizedString(@"AGEPICKER_OR_OLDER", ""), (long)_maximumAge];
+
+ int value = [answerString intValue];
+
+ if (value < 0) {
+ // pass back necessary text if sentinel value is selected
+ answerString = value == [ORKAgeAnswerFormat minimumAgeSentinelValue] ? minAgeText : maxAgeText;
+ } else if (_useYearForResult) {
+ // pass back necessary text if min or max year is selected
+ if ((value >= maxYear || value <= minYear)) {
+ answerString = value <= minYear ? maxAgeText : minAgeText;
+ }
+ } else if ((value == _minimumAge && _minimumAgeCustomText ) || (value == _maximumAge && _maximumAgeCustomText)) {
+ answerString = value == _minimumAge ? _minimumAgeCustomText : _maximumAgeCustomText;
+ } else if ((value == minYear && _minimumAgeCustomText) || (value == maxYear && _maximumAgeCustomText)) {
+ answerString = value == minYear ? _minimumAgeCustomText : _maximumAgeCustomText;
+ }
+ }
+
+ return answerString;
+}
+
+- (ORKQuestionType)questionType {
+ return _useYearForResult ? ORKQuestionTypeYear : ORKQuestionTypeAge;
+}
+
+
+- (instancetype)copyWithZone:(NSZone *)zone {
+ ORKAgeAnswerFormat *ageAnswerFormat = [super copyWithZone:zone];
+ ageAnswerFormat->_minimumAge = _minimumAge;
+ ageAnswerFormat->_maximumAge = _maximumAge;
+ ageAnswerFormat->_minimumAgeCustomText = [_minimumAgeCustomText copy];
+ ageAnswerFormat->_maximumAgeCustomText = [_maximumAgeCustomText copy];
+ ageAnswerFormat->_showYear = _showYear;
+ ageAnswerFormat->_useYearForResult = _useYearForResult;
+ ageAnswerFormat->_treatMinAgeAsRange = _treatMinAgeAsRange;
+ ageAnswerFormat->_treatMaxAgeAsRange = _treatMaxAgeAsRange;
+ ageAnswerFormat->_relativeYear = _relativeYear;
+ ageAnswerFormat->_defaultValue = _defaultValue;
+ return ageAnswerFormat;
+}
+
+- (BOOL)isEqual:(id)object {
+ BOOL isParentSame = [super isEqual:object];
+
+ __typeof(self) castObject = object;
+ return (isParentSame &&
+ (_minimumAge == castObject->_minimumAge) &&
+ (_maximumAge == castObject->_maximumAge) &&
+ (_relativeYear == castObject->_relativeYear) &&
+ ORKEqualObjects(_minimumAgeCustomText, castObject->_minimumAgeCustomText) &&
+ ORKEqualObjects(_maximumAgeCustomText, castObject->_maximumAgeCustomText) &&
+ (_showYear == castObject->_showYear) &&
+ (_useYearForResult == castObject->_useYearForResult) &&
+ (_treatMinAgeAsRange == castObject->_treatMinAgeAsRange) &&
+ (_treatMaxAgeAsRange == castObject->_treatMaxAgeAsRange) &&
+ (_defaultValue == castObject->_defaultValue));
+}
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super initWithCoder:aDecoder];
+ if (self) {
+ ORK_DECODE_INTEGER(aDecoder, minimumAge);
+ ORK_DECODE_INTEGER(aDecoder, maximumAge);
+ ORK_DECODE_OBJ_CLASS(aDecoder, minimumAgeCustomText, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, maximumAgeCustomText, NSString);
+ ORK_DECODE_BOOL(aDecoder, showYear);
+ ORK_DECODE_BOOL(aDecoder, useYearForResult);
+ ORK_DECODE_BOOL(aDecoder, treatMinAgeAsRange);
+ ORK_DECODE_BOOL(aDecoder, treatMaxAgeAsRange);
+ ORK_DECODE_BOOL(aDecoder, useYearForResult);
+ ORK_DECODE_INTEGER(aDecoder, defaultValue);
+ ORK_DECODE_INTEGER(aDecoder, relativeYear);
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [super encodeWithCoder:aCoder];
+ ORK_ENCODE_INTEGER(aCoder, minimumAge);
+ ORK_ENCODE_INTEGER(aCoder, maximumAge);
+ ORK_ENCODE_OBJ(aCoder, minimumAgeCustomText);
+ ORK_ENCODE_OBJ(aCoder, maximumAgeCustomText);
+ ORK_ENCODE_BOOL(aCoder, showYear);
+ ORK_ENCODE_BOOL(aCoder, useYearForResult);
+ ORK_ENCODE_BOOL(aCoder, treatMinAgeAsRange);
+ ORK_ENCODE_BOOL(aCoder, treatMaxAgeAsRange);
+ ORK_ENCODE_INTEGER(aCoder, defaultValue);
+ ORK_ENCODE_INTEGER(aCoder, relativeYear);
+}
+
+- (NSUInteger)hash {
+ return super.hash ^ _minimumAgeCustomText.hash ^ _maximumAgeCustomText.hash ^ _minimumAge ^ _maximumAge ^ _showYear ^ _useYearForResult ^ _treatMinAgeAsRange ^ _treatMaxAgeAsRange ^ _relativeYear ^ _defaultValue;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+@end
+
+
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS && !TARGET_OS_VISION
#pragma mark - ORKLocationAnswerFormat
@implementation ORKLocationAnswerFormat
@@ -3709,4 +4152,3 @@ - (NSString *)stringForAnswer:(id)answer {
}
@end
-#endif
diff --git a/ResearchKit/Common/ORKAnswerFormat_Internal.h b/ResearchKit/Common/ORKAnswerFormat_Internal.h
index ffd4a71b9f..dfdca08194 100644
--- a/ResearchKit/Common/ORKAnswerFormat_Internal.h
+++ b/ResearchKit/Common/ORKAnswerFormat_Internal.h
@@ -29,11 +29,15 @@
*/
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import
+#endif
+
#if TARGET_OS_IOS || TARGET_OS_VISION
+
#import
#import
-#endif
+
@class ORKChoiceAnswerFormatHelper;
NS_ASSUME_NONNULL_BEGIN
@@ -41,9 +45,11 @@ NS_ASSUME_NONNULL_BEGIN
BOOL ORKIsAnswerEmpty(_Nullable id answer);
#if TARGET_OS_IOS || TARGET_OS_VISION
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
NSString *ORKHKBiologicalSexString(HKBiologicalSex biologicalSex);
NSString *ORKHKBloodTypeString(HKBloodType bloodType);
-#endif
+#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+#endif // TARGET_OS_IOS
NSString *ORKQuestionTypeString(ORKQuestionType questionType);
// Need to mark these as designated initializers to avoid warnings once we designate the others.
@@ -69,6 +75,7 @@ ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKTextAnswerFormat)
ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKTimeIntervalAnswerFormat)
ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKHeightAnswerFormat)
ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKWeightAnswerFormat)
+ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKAgeAnswerFormat)
#endif
ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKTextChoiceAnswerFormat)
ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKTextChoice)
@@ -83,13 +90,15 @@ ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKTextChoice)
#if TARGET_OS_IOS || TARGET_OS_VISION
- (BOOL)isHealthKitAnswerFormat;
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (nullable HKObjectType *)healthKitObjectType;
- (nullable HKObjectType *)healthKitObjectTypeForAuthorization;
@property (nonatomic, strong, readonly, nullable) HKUnit *healthKitUnit;
@property (nonatomic, strong, nullable) HKUnit *healthKitUserUnit;
-#endif
+#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+#endif // TARGET_OS_IOS
- (nullable NSString *)localizedInvalidValueStringWithAnswerString:(nullable NSString *)text;
@@ -127,6 +136,11 @@ ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKTextChoice)
@end
+@interface ORKDateAnswerFormat () {
+ NSDate *_currentDateOverride;
+}
+@end
+
#if TARGET_OS_IOS || TARGET_OS_VISION
@protocol ORKScaleAnswerFormatProvider
@@ -190,6 +204,7 @@ NSArray *ORKAllowableValueClasses(void);
@end
#if TARGET_OS_IOS || TARGET_OS_VISION
+
@interface ORKValuePickerAnswerFormat ()
- (instancetype)initWithTextChoices:(NSArray *)textChoices nullChoice:(ORKTextChoice *)nullChoice NS_DESIGNATED_INITIALIZER;
@@ -198,7 +213,6 @@ NSArray *ORKAllowableValueClasses(void);
@end
-
@interface ORKImageChoice ()
@end
@@ -210,11 +224,7 @@ NSArray *ORKAllowableValueClasses(void);
@end
-
-@interface ORKDateAnswerFormat () {
- NSDate *_currentDateOverride;
-}
-
+@interface ORKDateAnswerFormat ()
- (NSDate *)pickerDefaultDate;
- (nullable NSDate *)pickerMinimumDate;
- (nullable NSDate *)pickerMaximumDate;
@@ -254,16 +264,16 @@ NSArray *ORKAllowableValueClasses(void);
@interface ORKAnswerDefaultSource : NSObject
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+ (instancetype)sourceWithHealthStore:(HKHealthStore *)healthStore;
- (instancetype)initWithHealthStore:(HKHealthStore *)healthStore NS_DESIGNATED_INITIALIZER;
@property (nonatomic, strong, readonly, nullable) HKHealthStore *healthStore;
-
-- (void)fetchDefaultValueForAnswerFormat:(nullable ORKAnswerFormat *)answerFormat handler:(void(^)(id defaultValue, NSError *error))handler;
-
- (nullable HKUnit *)defaultHealthKitUnitForAnswerFormat:(ORKAnswerFormat *)answerFormat;
- (void)updateHealthKitUnitForAnswerFormat:(ORKAnswerFormat *)answerFormat force:(BOOL)force;
+#endif
+- (void)fetchDefaultValueForAnswerFormat:(nullable ORKAnswerFormat *)answerFormat handler:(void(^)(id defaultValue, NSError *error))handler;
@end
@interface ORKTextChoiceOther()
diff --git a/ResearchKit/Common/ORKAnswerFormat_Private.h b/ResearchKit/Common/ORKAnswerFormat_Private.h
index 69b8d57d8e..a6bd847408 100644
--- a/ResearchKit/Common/ORKAnswerFormat_Private.h
+++ b/ResearchKit/Common/ORKAnswerFormat_Private.h
@@ -32,8 +32,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
@@ -95,7 +93,6 @@ ORK_CLASS_AVAILABLE
@property (nonatomic, copy, readonly) NSString *errorMessage;
@end
-#endif
@protocol ORKAnswerFormatPlatterPresentable
diff --git a/ResearchKit/Common/ORKBodyItem.m b/ResearchKit/Common/ORKBodyItem.m
index 14244d010b..4ae57909bf 100644
--- a/ResearchKit/Common/ORKBodyItem.m
+++ b/ResearchKit/Common/ORKBodyItem.m
@@ -30,16 +30,20 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKBodyItem.h"
-#import "ORKBodyItem_Internal.h"
#import "ORKLearnMoreInstructionStep.h"
#import "ORKHelpers_Internal.h"
+#if !TARGET_OS_WATCH
+#import "ORKBodyItem_Internal.h"
+#endif
+
@implementation ORKBodyItem
{
// For our internal custom button type
BOOL _isCustomButtonType;
}
+#if !TARGET_OS_WATCH
- (instancetype)initWithCustomButtonConfigurationHandler:(void(^)(UIButton *button))configurationHandler
{
self = [super init];
@@ -50,6 +54,7 @@ - (instancetype)initWithCustomButtonConfigurationHandler:(void(^)(UIButton *butt
}
return self;
}
+#endif
- (BOOL)isCustomButtonItemType
{
diff --git a/ResearchKit/Common/ORKBodyItem_Internal.h b/ResearchKit/Common/ORKBodyItem_Internal.h
index a1dd41cc3c..6102d6ee31 100644
--- a/ResearchKit/Common/ORKBodyItem_Internal.h
+++ b/ResearchKit/Common/ORKBodyItem_Internal.h
@@ -34,9 +34,11 @@ NS_ASSUME_NONNULL_BEGIN
@interface ORKBodyItem ()
+#if !TARGET_OS_WATCH
@property (nonatomic, copy, nullable) void (^customButtonConfigurationHandler)(UIButton *button);
- (instancetype)initWithCustomButtonConfigurationHandler:(void(^)(UIButton *button))configurationHandler;
+#endif
- (BOOL)isCustomButtonItemType;
diff --git a/ResearchKit/Common/ORKChoiceAnswerFormatHelper.h b/ResearchKit/Common/ORKChoiceAnswerFormatHelper.h
index 0bd4fa4fff..1acb7f2688 100644
--- a/ResearchKit/Common/ORKChoiceAnswerFormatHelper.h
+++ b/ResearchKit/Common/ORKChoiceAnswerFormatHelper.h
@@ -35,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
@class ORKAnswerFormat;
@class ORKImageChoice;
@class ORKTextChoice;
-
+@class ORKColorChoice;
@protocol ORKAnswerOption;
@@ -74,6 +74,7 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable ORKImageChoice *)imageChoiceAtIndex:(NSUInteger)index;
+- (nullable ORKColorChoice *)colorChoiceAtIndex:(NSUInteger)index;
@end
#endif
diff --git a/ResearchKit/Common/ORKChoiceAnswerFormatHelper.m b/ResearchKit/Common/ORKChoiceAnswerFormatHelper.m
index e3d2da16d1..7d5be677f3 100644
--- a/ResearchKit/Common/ORKChoiceAnswerFormatHelper.m
+++ b/ResearchKit/Common/ORKChoiceAnswerFormatHelper.m
@@ -69,7 +69,10 @@ - (ORKImageChoice *)imageChoiceAtIndex:(NSUInteger)index {
return option && [option isKindOfClass:[ORKImageChoice class]] ? (ORKImageChoice *) option : nil;
}
-
+- (ORKColorChoice *)colorChoiceAtIndex:(NSUInteger)index {
+ id option = [self answerOptionAtIndex:index];
+ return option && [option isKindOfClass:[ORKColorChoice class]] ? (ORKColorChoice *) option : nil;
+}
#endif
- (ORKTextChoice *)textChoiceAtIndex:(NSUInteger)index {
@@ -139,6 +142,8 @@ - (NSArray *)selectedIndexesForAnswer:(nullable id)answer {
for (id answerValue in (NSArray *)answer) {
id matchedChoice = nil;
+ BOOL isTextChoiceOtherResult = [self _isTextChoiceOtherResult:answerValue choices:_choices];
+
for ( id choice in _choices) {
#if TARGET_OS_IOS || TARGET_OS_VISION
if ([choice isKindOfClass:[ORKTextChoiceOther class]]) {
@@ -149,7 +154,12 @@ - (NSArray *)selectedIndexesForAnswer:(nullable id)answer {
} else if (textChoiceOther.textViewInputOptional && textChoiceOther.textViewText.length <= 0 && [textChoiceOther.value isEqual:answerValue]) {
matchedChoice = choice;
break;
+ } else if (isTextChoiceOtherResult) {
+ textChoiceOther.textViewText = answerValue;
+ matchedChoice = choice;
+ break;
}
+
} else if ([choice.value isEqual:answerValue]) {
matchedChoice = choice;
break;
@@ -192,6 +202,20 @@ - (NSArray *)selectedIndexesForAnswer:(nullable id)answer {
}
+- (BOOL)_isTextChoiceOtherResult:(id)answerValue choices:(NSArray *)choices {
+ if (answerValue == nil) {
+ return NO;
+ }
+
+ for (id choice in _choices) {
+ if ([choice.value isEqual:answerValue]){
+ return NO;
+ }
+ }
+
+ return YES;
+}
+
- (NSString *)stringForChoiceAnswer:(id)answer {
NSMutableArray *answerStrings = [[NSMutableArray alloc] init];
NSArray *indexes = [self selectedIndexesForAnswer:answer];
diff --git a/ResearchKit/Common/ORKCollectionResult.h b/ResearchKit/Common/ORKCollectionResult.h
index 580ea7c94d..1d9a03ddff 100644
--- a/ResearchKit/Common/ORKCollectionResult.h
+++ b/ResearchKit/Common/ORKCollectionResult.h
@@ -30,8 +30,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKCollectionResult_Private.h b/ResearchKit/Common/ORKCollectionResult_Private.h
index 840f8b396a..2a7e788e7a 100644
--- a/ResearchKit/Common/ORKCollectionResult_Private.h
+++ b/ResearchKit/Common/ORKCollectionResult_Private.h
@@ -33,7 +33,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKCollector.h b/ResearchKit/Common/ORKCollector.h
index daa58c85ed..22659a5701 100644
--- a/ResearchKit/Common/ORKCollector.h
+++ b/ResearchKit/Common/ORKCollector.h
@@ -32,9 +32,11 @@
#import
-#import
#import
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+#import
+#endif
NS_ASSUME_NONNULL_BEGIN
@@ -87,6 +89,8 @@ ORK_CLASS_AVAILABLE
It cannot be initiated directly.
Use `addHealthCollectorWithSampleType:`to add one to a `ORKDataCollectionManager`.
*/
+
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
ORK_CLASS_AVAILABLE
@interface ORKHealthCollector : ORKCollector
@@ -148,7 +152,7 @@ ORK_CLASS_AVAILABLE
@property (copy, readonly) HKQueryAnchor *lastAnchor;
@end
-
+#endif
/**
An object that collects CMMotionActivity.
diff --git a/ResearchKit/Common/ORKCollector.m b/ResearchKit/Common/ORKCollector.m
index a9a05b0308..b496f891c4 100644
--- a/ResearchKit/Common/ORKCollector.m
+++ b/ResearchKit/Common/ORKCollector.m
@@ -114,7 +114,7 @@ - (BOOL)isEqual:(id)object {
@end
-
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@implementation ORKHealthCollector : ORKCollector
- (instancetype)initWithSampleType:(HKSampleType*)sampleType unit:(HKUnit*)unit startDate:(NSDate*)startDate {
@@ -290,7 +290,7 @@ - (BOOL)isEqual:(id)object {
}
@end
-
+#endif
@implementation ORKMotionActivityCollector : ORKCollector
diff --git a/ResearchKit/Common/ORKCollector_Internal.h b/ResearchKit/Common/ORKCollector_Internal.h
index 7ade798130..d6ad5dce4f 100644
--- a/ResearchKit/Common/ORKCollector_Internal.h
+++ b/ResearchKit/Common/ORKCollector_Internal.h
@@ -45,7 +45,7 @@
@end
-
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@protocol ORKHealthCollectable
- (HKSampleType *)sampleType;
@@ -73,7 +73,7 @@
@property (copy) HKQueryAnchor *lastAnchor;
@end
-
+#endif
@interface ORKMotionActivityCollector()
diff --git a/ResearchKit/Common/ORKCompletionStep.h b/ResearchKit/Common/ORKCompletionStep.h
index e81cdbf5ac..b382eac100 100644
--- a/ResearchKit/Common/ORKCompletionStep.h
+++ b/ResearchKit/Common/ORKCompletionStep.h
@@ -30,7 +30,7 @@
#import
-
+#import
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
diff --git a/ResearchKit/Common/ORKConditionStepConfiguration.h b/ResearchKit/Common/ORKConditionStepConfiguration.h
new file mode 100644
index 0000000000..070244a901
--- /dev/null
+++ b/ResearchKit/Common/ORKConditionStepConfiguration.h
@@ -0,0 +1,74 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import
+
+#import
+
+@class ORKTaskResult;
+@class ORKHealthCondition;
+@class ORKFormItem;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The base object for configuring the displayed health conditions
+ for the family history step.
+ */
+
+ORK_CLASS_AVAILABLE
+@interface ORKConditionStepConfiguration : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Creates a new conditions step configuration.
+
+ This method is the primary designated initializer.
+
+ @param stepIdentifier The identifier attached to the form step that displays the health conditions.
+ @param conditionsFormItemIdentifier The identifier attached to the form item used from the health conditions list.
+ @param conditions List of health conditions displayed to participants.
+ @param formItems List of form items that are presented below the health conditions text choice. This is optional.
+ */
+- (instancetype)initWithStepIdentifier:(NSString *)stepIdentifier
+ conditionsFormItemIdentifier:(NSString *)conditionsFormItemIdentifier
+ conditions:(NSArray *)conditions
+ formItems:(NSArray *)formItems NS_DESIGNATED_INITIALIZER;
+
+@property (nonatomic, readonly, copy) NSString *stepIdentifier;
+@property (nonatomic, readonly, copy) NSString *conditionsFormItemIdentifier;
+@property (nonatomic, readonly, copy) NSArray *conditions;
+@property (nonatomic, copy) NSArray *formItems;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKConditionStepConfiguration.m b/ResearchKit/Common/ORKConditionStepConfiguration.m
new file mode 100644
index 0000000000..a79ff2a43f
--- /dev/null
+++ b/ResearchKit/Common/ORKConditionStepConfiguration.m
@@ -0,0 +1,107 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "ORKConditionStepConfiguration.h"
+
+#import "ORKCollectionResult.h"
+#import "ORKFormStep.h"
+#import "ORKHealthCondition.h"
+#import "ORKHelpers_Internal.h"
+
+
+@implementation ORKConditionStepConfiguration
+
+- (instancetype)initWithStepIdentifier:(NSString *)stepIdentifier
+ conditionsFormItemIdentifier:(NSString *)conditionsFormItemIdentifier
+ conditions:(NSArray *)conditions
+ formItems:(nonnull NSArray *)formItems {
+ self = [super init];
+
+ if (self) {
+ _stepIdentifier = [stepIdentifier copy];
+ _conditionsFormItemIdentifier = [conditionsFormItemIdentifier copy];
+ _conditions = [conditions copy];
+ _formItems = [formItems copy];
+ }
+
+ return self;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ ORK_ENCODE_OBJ(aCoder, stepIdentifier);
+ ORK_ENCODE_OBJ(aCoder, conditionsFormItemIdentifier);
+ ORK_ENCODE_OBJ(aCoder, conditions);
+ ORK_ENCODE_OBJ(aCoder, formItems);
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super init];
+ if (self) {
+ ORK_DECODE_OBJ_CLASS(aDecoder, stepIdentifier, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, conditionsFormItemIdentifier, NSString);
+ ORK_DECODE_OBJ_ARRAY(aDecoder, conditions, ORKHealthCondition);
+ ORK_DECODE_OBJ_ARRAY(aDecoder, formItems, ORKFormItem);
+ }
+ return self;
+}
+
+- (instancetype)copyWithZone:(nullable NSZone *)zone {
+ ORKConditionStepConfiguration *conditionStepConfiguration = [[[self class] alloc] init];
+ conditionStepConfiguration->_stepIdentifier = [_stepIdentifier copy];
+ conditionStepConfiguration->_conditionsFormItemIdentifier = [_conditionsFormItemIdentifier copy];
+ conditionStepConfiguration->_conditions = [_conditions copy];
+ conditionStepConfiguration->_formItems = [_formItems copy];
+
+ return conditionStepConfiguration;
+}
+
+- (BOOL)isEqual:(id)object {
+ if ([self class] != [object class]) {
+ return NO;
+ }
+
+ __typeof(self) castObject = object;
+ return (ORKEqualObjects(_stepIdentifier, castObject->_stepIdentifier)
+ && ORKEqualObjects(_conditionsFormItemIdentifier, castObject->_conditionsFormItemIdentifier)
+ && ORKEqualObjects(_conditions, castObject->_conditions)
+ && ORKEqualObjects(_formItems, castObject->_formItems));
+}
+
+- (NSUInteger)hash {
+ return super.hash ^ _stepIdentifier.hash ^ _conditionsFormItemIdentifier.hash ^ _conditions.hash ^ _formItems.hash;
+}
+
+@end
diff --git a/ResearchKit/Common/ORKDataCollectionManager.h b/ResearchKit/Common/ORKDataCollectionManager.h
index 8a424816cd..212c579df0 100644
--- a/ResearchKit/Common/ORKDataCollectionManager.h
+++ b/ResearchKit/Common/ORKDataCollectionManager.h
@@ -28,8 +28,7 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if TARGET_OS_IOS
-
+#if TARGET_OS_IOS && !TARGET_OS_VISION
#import
#import
@@ -62,6 +61,7 @@ NS_ASSUME_NONNULL_BEGIN
If NO is returned or this method is not implemented, the manager will stop the collection for the collector and repeat this same collection next time,
until the data is accepted.
*/
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (BOOL)healthCollector:(ORKHealthCollector *)collector didCollectSamples:(NSArray *)samples;
/**
@@ -75,7 +75,7 @@ NS_ASSUME_NONNULL_BEGIN
until the data is accepted.
*/
- (BOOL)healthCorrelationCollector:(ORKHealthCorrelationCollector *)collector didCollectCorrelations:(NSArray *)correlations;
-
+#endif
/**
Method for delivering the collected motion activities.
@@ -147,6 +147,7 @@ ORK_CLASS_AVAILABLE
@return Initiated health collector.
*/
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (ORKHealthCollector *)addHealthCollectorWithSampleType:(HKSampleType *)sampleType
unit:(HKUnit *)unit
startDate:(NSDate *)startDate
@@ -168,7 +169,7 @@ ORK_CLASS_AVAILABLE
units:(NSArray *)units
startDate:(NSDate *)startDate
error:(NSError * _Nullable *)error;
-
+#endif
/**
Add a collector for motion activity.
diff --git a/ResearchKit/Common/ORKDataCollectionManager.m b/ResearchKit/Common/ORKDataCollectionManager.m
index b0fb8b7940..4c7fb9ec81 100644
--- a/ResearchKit/Common/ORKDataCollectionManager.m
+++ b/ResearchKit/Common/ORKDataCollectionManager.m
@@ -37,6 +37,9 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKHelpers_Internal.h"
#import
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+#import
+#endif
static NSString *const ORKDataCollectionPersistenceFileName = @".dataCollection.ork.data";
@@ -45,8 +48,10 @@ @implementation ORKDataCollectionManager {
NSOperationQueue *_operationQueue;
NSString * _Nonnull _managedDirectory;
NSArray *_collectors;
- HKHealthStore *_healthStore;
CMMotionActivityManager *_activityManager;
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+ HKHealthStore *_healthStore;
+#endif
NSMutableArray *_completionHandlers;
}
@@ -119,12 +124,14 @@ - (void)onWorkQueueAsync:(BOOL (^)(ORKDataCollectionManager *manager))block {
});
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (HKHealthStore *)healthStore {
if (!_healthStore && [HKHealthStore isHealthDataAvailable]){
_healthStore = [[HKHealthStore alloc] init];
}
return _healthStore;
}
+#endif
- (CMMotionActivityManager *)activityManager {
if (!_activityManager && [CMMotionActivityManager isActivityAvailable]) {
@@ -169,6 +176,7 @@ - (void)addCollector:(ORKCollector *)collector {
_collectors = [collectors copy];
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (ORKHealthCollector *)addHealthCollectorWithSampleType:(HKSampleType*)sampleType unit:(HKUnit *)unit startDate:(NSDate *)startDate error:(NSError**)error {
if (!sampleType) {
@@ -221,6 +229,7 @@ - (ORKHealthCorrelationCollector *)addHealthCorrelationCollectorWithCorrelationT
return healthCorrelationCollector;
}
+#endif
- (ORKMotionActivityCollector *)addMotionActivityCollectorWithStartDate:(NSDate *)startDate
error:(NSError* __autoreleasing *)error {
@@ -321,13 +330,16 @@ - (void)startCollection {
if (_delegate && [_delegate respondsToSelector:@selector(dataCollectionManagerDidCompleteCollection:)]) {
[_delegate dataCollectionManagerDidCompleteCollection:self];
}
-
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
for (HKObserverQueryCompletionHandler handler in _completionHandlers) {
handler();
}
[_completionHandlers removeAllObjects];
return NO;
+#else
+ return NO;
+#endif
}];
}];
@@ -342,7 +354,6 @@ - (void)startCollection {
// No need to persist collectors
return NO;
}];
-
}
@end
diff --git a/ResearchKit/Common/ORKDataCollectionManager_Internal.h b/ResearchKit/Common/ORKDataCollectionManager_Internal.h
index a29a0eff65..9ace00d05d 100644
--- a/ResearchKit/Common/ORKDataCollectionManager_Internal.h
+++ b/ResearchKit/Common/ORKDataCollectionManager_Internal.h
@@ -37,7 +37,9 @@
@interface ORKDataCollectionManager ()
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@property (nonatomic, strong, readonly) HKHealthStore *healthStore;
+#endif
@property (nonatomic, strong, readonly) CMMotionActivityManager *activityManager;
diff --git a/ResearchKit/Common/ORKDefines.h b/ResearchKit/Common/ORKDefines.h
index f821a4759c..ee242f71e9 100644
--- a/ResearchKit/Common/ORKDefines.h
+++ b/ResearchKit/Common/ORKDefines.h
@@ -40,14 +40,5 @@
#define ORK_IOS_10_WATCHOS_3_AVAILABLE (NSClassFromString(@"HKWorkoutConfiguration") != nil)
-// Some CLLocationManager API calls would trigger authorization to use location. The presence of those
-// API calls in ResearchKit **at compile time** mean apps that link ResearchKit also need Info.plist entries
-// for NSLocationAlwaysAndWhenInUseUsageDescription and NSLocationWhenInUseUsageDescription.
-// If your app doesn't use ORKLocationRecorder and doesn't specify these Info.plist strings, disable
-// ResearchKit's CLLocationManager authorization
-#ifndef ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
-#define ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION 1
-#endif
-
#define ORK_TO_BE_DEPRECATED(message) \
__deprecated_msg(message)
diff --git a/ResearchKit/Common/ORKDevice.h b/ResearchKit/Common/ORKDevice.h
index 19542807be..13f3e45bc4 100644
--- a/ResearchKit/Common/ORKDevice.h
+++ b/ResearchKit/Common/ORKDevice.h
@@ -31,8 +31,6 @@
#import
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKDevice_Private.h b/ResearchKit/Common/ORKDevice_Private.h
index 3a23917de0..8456c38251 100644
--- a/ResearchKit/Common/ORKDevice_Private.h
+++ b/ResearchKit/Common/ORKDevice_Private.h
@@ -30,8 +30,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKEarlyTerminationConfiguration.h b/ResearchKit/Common/ORKEarlyTerminationConfiguration.h
index f97b9d22fc..623a439637 100644
--- a/ResearchKit/Common/ORKEarlyTerminationConfiguration.h
+++ b/ResearchKit/Common/ORKEarlyTerminationConfiguration.h
@@ -32,8 +32,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKErrors.h b/ResearchKit/Common/ORKErrors.h
index 3ba68845e0..cbf73f1d88 100644
--- a/ResearchKit/Common/ORKErrors.h
+++ b/ResearchKit/Common/ORKErrors.h
@@ -33,9 +33,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKFamilyHistoryResult.h b/ResearchKit/Common/ORKFamilyHistoryResult.h
new file mode 100644
index 0000000000..d5bcdc1760
--- /dev/null
+++ b/ResearchKit/Common/ORKFamilyHistoryResult.h
@@ -0,0 +1,49 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import
+
+@class ORKRelatedPerson;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A result object produced by the family history step.
+ */
+
+ORK_CLASS_AVAILABLE
+@interface ORKFamilyHistoryResult : ORKResult
+
+@property (nonatomic, nullable, copy) NSArray *relatedPersons;
+@property (nonatomic, nullable, copy) NSArray *displayedConditions;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKFamilyHistoryResult.m b/ResearchKit/Common/ORKFamilyHistoryResult.m
new file mode 100644
index 0000000000..a08e8e4566
--- /dev/null
+++ b/ResearchKit/Common/ORKFamilyHistoryResult.m
@@ -0,0 +1,81 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "ORKFamilyHistoryResult.h"
+
+#import "ORKHelpers_Internal.h"
+#import "ORKRelatedPerson.h"
+#import "ORKResult_Private.h"
+
+
+@implementation ORKFamilyHistoryResult
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [super encodeWithCoder:aCoder];
+ ORK_ENCODE_OBJ(aCoder, relatedPersons);
+ ORK_ENCODE_OBJ(aCoder, displayedConditions);
+}
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super initWithCoder:aDecoder];
+ if (self) {
+ ORK_DECODE_OBJ_ARRAY(aDecoder, relatedPersons, ORKRelatedPerson);
+ ORK_DECODE_OBJ_ARRAY(aDecoder, displayedConditions, NSString);
+ }
+ return self;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (BOOL)isEqual:(id)object {
+ BOOL isParentSame = [super isEqual:object];
+
+ __typeof(self) castObject = object;
+ return (isParentSame &&
+ ORKEqualObjects(self.relatedPersons, castObject.relatedPersons) &&
+ ORKEqualObjects(self.displayedConditions, castObject.displayedConditions));
+}
+
+- (instancetype)copyWithZone:(NSZone *)zone {
+ ORKFamilyHistoryResult *result = [super copyWithZone:zone];
+
+ result->_relatedPersons = ORKArrayCopyObjects(_relatedPersons);
+ result->_displayedConditions = [_displayedConditions copy];
+
+ return result;
+}
+
+- (NSUInteger)hash {
+ return super.hash ^ self.relatedPersons.hash ^ self.displayedConditions.hash;
+}
+
+@end
diff --git a/ResearchKit/Common/ORKFamilyHistoryStep.h b/ResearchKit/Common/ORKFamilyHistoryStep.h
new file mode 100644
index 0000000000..c57a5b2e53
--- /dev/null
+++ b/ResearchKit/Common/ORKFamilyHistoryStep.h
@@ -0,0 +1,53 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import
+
+#import
+
+@class ORKConditionStepConfiguration;
+@class ORKRelativeGroup;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A concrete subclass that will provide a participant with a
+ family history survey.
+ */
+
+ORK_CLASS_AVAILABLE
+@interface ORKFamilyHistoryStep : ORKStep
+
+@property (nonatomic, copy) ORKConditionStepConfiguration *conditionStepConfiguration;
+@property (nonatomic, copy) NSArray *relativeGroups;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKFamilyHistoryStep.m b/ResearchKit/Common/ORKFamilyHistoryStep.m
new file mode 100644
index 0000000000..685a87758c
--- /dev/null
+++ b/ResearchKit/Common/ORKFamilyHistoryStep.m
@@ -0,0 +1,115 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "ORKFamilyHistoryStep.h"
+
+#import "ORKAnswerFormat_Internal.h"
+#import "ORKCollectionResult.h"
+#import "ORKConditionStepConfiguration.h"
+#import "ORKFormStep.h"
+#import "ORKHelpers_Internal.h"
+#import "ORKRelativeGroup.h"
+
+
+@implementation ORKFamilyHistoryStep
+
+- (instancetype)initWithIdentifier:(NSString *)identifier {
+ self = [super initWithIdentifier:identifier];
+
+ return self;
+}
+
+- (void)validateParameters {
+ [super validateParameters];
+
+ // validate that atleast one condition has been provided
+ if (self.conditionStepConfiguration.conditions.count == 0) {
+ @throw [NSException exceptionWithName:NSInvalidArgumentException
+ reason:@"At least one ORKHealthCondition must be added to the ORKConditionStepConfiguration object"
+ userInfo:nil];
+ }
+
+ // validate that atleast one relative group has been provided
+ if (self.relativeGroups.count == 0) {
+ @throw [NSException exceptionWithName:NSInvalidArgumentException
+ reason:@"At least one ORKRelativeGroup must be provided"
+ userInfo:nil];
+ }
+
+ // validate that the identifiers for each relative group is unique
+ NSMutableSet *identifiers = [NSMutableSet new];
+ for (ORKRelativeGroup *relativeGroup in self.relativeGroups) {
+ if ([identifiers containsObject:relativeGroup.identifier]) {
+ @throw [NSException exceptionWithName:NSInvalidArgumentException
+ reason:@"Each ORKRelativeGroup must have a unique identifier"
+ userInfo:nil];
+ } else {
+ [identifiers addObject:relativeGroup.identifier];
+ }
+ }
+
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [super encodeWithCoder:aCoder];
+ ORK_ENCODE_OBJ(aCoder, conditionStepConfiguration);
+ ORK_ENCODE_OBJ(aCoder, relativeGroups);
+}
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super initWithCoder:aDecoder];
+ if (self) {
+ ORK_DECODE_OBJ_CLASS(aDecoder, conditionStepConfiguration, ORKConditionStepConfiguration);
+ ORK_DECODE_OBJ_ARRAY(aDecoder, relativeGroups, ORKRelativeGroup);
+ }
+ return self;
+}
+
+- (nonnull id)copyWithZone:(nullable NSZone *)zone {
+ ORKFamilyHistoryStep *step = [super copyWithZone:zone];
+ step->_conditionStepConfiguration = [_conditionStepConfiguration copy];
+ step->_relativeGroups = [_relativeGroups copy];
+
+ return step;
+}
+
+- (BOOL)isEqual:(id)object {
+ BOOL isParentSame = [super isEqual:object];
+
+ __typeof(self) castObject = object;
+ return (isParentSame && ORKEqualObjects(_conditionStepConfiguration, castObject->_conditionStepConfiguration)
+ && ORKEqualObjects(_relativeGroups, castObject->_relativeGroups));
+}
+
+@end
diff --git a/ResearchKit/Common/ORKFormStep.h b/ResearchKit/Common/ORKFormStep.h
index 35175af950..3962ec6af0 100644
--- a/ResearchKit/Common/ORKFormStep.h
+++ b/ResearchKit/Common/ORKFormStep.h
@@ -35,7 +35,7 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
#import
-#endif
+#import
/**
Values that determine the style
@@ -176,6 +176,7 @@ ORK_CLASS_AVAILABLE
@param learnMoreItem The `ORKLearnMoreItem` to be presented when button is pressed.
@param showsProgress A Boolean that determines if the formItem will display a progress indicator
@param answerFormat The answer format for the form item.
+ @param tagText The tag text to be presented in the card header view.
@param optional A Boolean that determines whether the item is optional
@return An initialized form item.
diff --git a/ResearchKit/Common/ORKFormStep.m b/ResearchKit/Common/ORKFormStep.m
index 0a9be8541b..943503c166 100644
--- a/ResearchKit/Common/ORKFormStep.m
+++ b/ResearchKit/Common/ORKFormStep.m
@@ -39,7 +39,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKStep_Private.h"
#import "ORKHelpers_Internal.h"
+
+#if !TARGET_OS_WATCH
#import "ORKFormItemVisibilityRule.h"
+#endif
@implementation ORKFormStep
@@ -182,6 +185,7 @@ - (void)setFormItems:(NSArray *)formItems {
}
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION && TARGET_OS_IOS
- (NSSet *)requestedHealthKitTypesForReading {
NSMutableSet *healthTypes = [NSMutableSet set];
@@ -195,6 +199,7 @@ - (void)setFormItems:(NSArray *)formItems {
return healthTypes.count ? healthTypes : nil;
}
+#endif
@end
@@ -260,6 +265,7 @@ - (instancetype)initWithSectionTitle:(nullable NSString *)sectionTitle detailTex
return self;
}
+#if TARGET_OS_IOS
- (ORKFormItem *)confirmationAnswerFormItemWithIdentifier:(NSString *)identifier
text:(nullable NSString *)text
errorMessage:(NSString *)errorMessage {
@@ -279,6 +285,7 @@ - (ORKFormItem *)confirmationAnswerFormItemWithIdentifier:(NSString *)identifier
optional:self.optional];
return item;
}
+#endif
+ (BOOL)supportsSecureCoding {
return YES;
@@ -292,7 +299,9 @@ - (instancetype)copyWithZone:(NSZone *)zone {
item->_learnMoreItem = [_learnMoreItem copy];
item->_showsProgress = _showsProgress;
item->_tagText = [_tagText copy];
+#if !TARGET_OS_WATCH
item->_visibilityRule = [_visibilityRule copy];
+#endif
return item;
}
@@ -309,7 +318,9 @@ - (instancetype)initWithCoder:(NSCoder *)aDecoder {
ORK_DECODE_OBJ_CLASS(aDecoder, answerFormat, ORKAnswerFormat);
ORK_DECODE_OBJ_CLASS(aDecoder, step, ORKFormStep);
ORK_DECODE_OBJ_CLASS(aDecoder, tagText, NSString);
+#if !TARGET_OS_WATCH
ORK_DECODE_OBJ_CLASS(aDecoder, visibilityRule, ORKFormItemVisibilityRule);
+#endif
}
return self;
}
@@ -348,8 +359,12 @@ - (BOOL)isEqual:(id)object {
}
- (NSUInteger)hash {
+#if !TARGET_OS_WATCH
// Ignore the step reference - it's not part of the content of this item
return _identifier.hash ^ _text.hash ^ _placeholder.hash ^ _answerFormat.hash ^ (_optional ? 0xf : 0x0) ^ _detailText.hash ^ _learnMoreItem.hash ^ (_showsProgress ? 0xf : 0x0) ^ _tagText.hash ^ _visibilityRule.hash;
+#else
+ return _identifier.hash ^ _text.hash ^ _placeholder.hash ^ _answerFormat.hash ^ (_optional ? 0xf : 0x0) ^ _detailText.hash ^ _learnMoreItem.hash ^ (_showsProgress ? 0xf : 0x0) ^ _tagText.hash;
+#endif
}
- (ORKAnswerFormat *)impliedAnswerFormat {
diff --git a/ResearchKit/Common/ORKHealthAnswerFormat.h b/ResearchKit/Common/ORKHealthAnswerFormat.h
index f44229be80..78368865a3 100644
--- a/ResearchKit/Common/ORKHealthAnswerFormat.h
+++ b/ResearchKit/Common/ORKHealthAnswerFormat.h
@@ -29,9 +29,12 @@
*/
-#import
#import
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION && TARGET_OS_IOS
+#import
+#endif
+
NS_ASSUME_NONNULL_BEGIN
/**
@@ -70,6 +73,8 @@ ORK_EXTERN ORKBloodTypeIdentifier const ORKBloodTypeIdentifierONegative;
You can use the HealthKit characteristic answer format to let users autofill information, such as their blood type or date of birth.
*/
+
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION && TARGET_OS_IOS
ORK_CLASS_AVAILABLE
@interface ORKHealthKitCharacteristicTypeAnswerFormat : ORKAnswerFormat
@@ -222,5 +227,6 @@ included in the question result generated by form items or question steps
@end
-NS_ASSUME_NONNULL_END
+#endif
+NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKHealthAnswerFormat.m b/ResearchKit/Common/ORKHealthAnswerFormat.m
index 3e9a84a877..e75df79e7d 100644
--- a/ResearchKit/Common/ORKHealthAnswerFormat.m
+++ b/ResearchKit/Common/ORKHealthAnswerFormat.m
@@ -38,7 +38,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKQuestionResult_Private.h"
#import "ORKResult.h"
-
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#pragma mark - ORKHealthAnswerFormat
ORKBiologicalSexIdentifier const ORKBiologicalSexIdentifierFemale = @"HKBiologicalSexFemale";
@@ -420,3 +420,4 @@ - (NSString *)localizedUnitString {
}
@end
+#endif
diff --git a/ResearchKit/Common/ORKHealthCondition.h b/ResearchKit/Common/ORKHealthCondition.h
new file mode 100644
index 0000000000..be33dd111e
--- /dev/null
+++ b/ResearchKit/Common/ORKHealthCondition.h
@@ -0,0 +1,70 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import
+
+#import
+
+@class ORKTaskResult;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A base class that represents a single health condition displayed
+ by the family history step.
+ */
+
+ORK_CLASS_AVAILABLE
+@interface ORKHealthCondition : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Creates a new health condition with the specified identifier.
+
+ This method is the primary designated initializer.
+
+ @param identifier The unique identifier of the health condition.
+ @param name The name displayed to the participant for selection.
+ @param value The value stored to the result if the health condition is selected.
+ */
+
+- (instancetype)initWithIdentifier:(NSString *)identifier
+ displayName:(NSString *)name
+ value:(NSObject *)value NS_DESIGNATED_INITIALIZER;
+
+@property (nonatomic, readonly, copy) NSString *identifier;
+@property (nonatomic, readonly, copy) NSString *displayName;
+@property (nonatomic, readonly, copy) NSObject *value;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKHealthCondition.m b/ResearchKit/Common/ORKHealthCondition.m
new file mode 100644
index 0000000000..ce9196d0c1
--- /dev/null
+++ b/ResearchKit/Common/ORKHealthCondition.m
@@ -0,0 +1,98 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "ORKHealthCondition.h"
+
+#import "ORKAnswerFormat_Internal.h"
+#import "ORKCollectionResult.h"
+#import "ORKHelpers_Internal.h"
+
+
+@implementation ORKHealthCondition
+
+- (instancetype)initWithIdentifier:(NSString *)identifier
+ displayName:(NSString *)name
+ value:(NSObject *)value {
+ self = [super init];
+
+ if (self) {
+ _identifier = [identifier copy];
+ _displayName = [name copy];
+ _value = [value copy];
+ }
+
+ return self;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ ORK_ENCODE_OBJ(aCoder, identifier);
+ ORK_ENCODE_OBJ(aCoder, displayName);
+ ORK_ENCODE_OBJ(aCoder, value);
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super init];
+ if (self) {
+ ORK_DECODE_OBJ_CLASS(aDecoder, identifier, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, displayName, NSString);
+ ORK_DECODE_OBJ_CLASSES(aDecoder, value, ORKAllowableValueClasses());
+ }
+ return self;
+}
+
+- (nonnull id)copyWithZone:(nullable NSZone *)zone {
+ ORKHealthCondition *healthCondition = [[[self class] allocWithZone:zone] initWithIdentifier:[_identifier copy]
+ displayName:[_displayName copy]
+ value:[_value copy]];
+ return healthCondition;
+}
+
+- (BOOL)isEqual:(id)object {
+ if ([self class] != [object class]) {
+ return NO;
+ }
+
+ __typeof(self) castObject = object;
+ return (ORKEqualObjects(self.identifier, castObject.identifier)
+ && ORKEqualObjects(self.displayName, castObject.displayName)
+ && ORKEqualObjects(self.value, castObject.value));
+}
+
+- (NSUInteger)hash {
+ return super.hash ^ self.identifier.hash ^ self.displayName.hash ^ self.value.hash;
+}
+
+@end
diff --git a/ResearchKit/Common/ORKHealthKitPermissionType.m b/ResearchKit/Common/ORKHealthKitPermissionType.m
index 29ee6d6bdc..9a013ab37e 100644
--- a/ResearchKit/Common/ORKHealthKitPermissionType.m
+++ b/ResearchKit/Common/ORKHealthKitPermissionType.m
@@ -33,7 +33,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKHealthKitPermissionType.h"
#import "ORKHelpers_Internal.h"
+
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import
+#endif
static NSString *const Symbol = @"heart.fill";
static uint32_t const IconTintColor = 0xFF5E5E;
@@ -83,6 +86,7 @@ - (ORKRequestPermissionsState) permissionState {
}
- (void)checkHealthKitAuthorizationStatus {
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
if (![HKHealthStore isHealthDataAvailable]) {
_permissionState = ORKRequestPermissionsStateNotSupported;
if (self.permissionsStatusUpdateCallback != nil) {
@@ -111,6 +115,8 @@ - (void)checkHealthKitAuthorizationStatus {
});
}];
+#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+
}
- (BOOL)canContinue {
@@ -121,6 +127,7 @@ - (BOOL)canContinue {
}
- (void)requestPermission {
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
[[HKHealthStore new] requestAuthorizationToShareTypes:_sampleTypesToWrite readTypes:_objectTypesToRead completion:^(BOOL success, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
@@ -133,6 +140,7 @@ - (void)requestPermission {
}
});
}];
+#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
}
- (BOOL)isEqual:(id)object {
diff --git a/ResearchKit/Common/ORKHealthSampleQueryOperation.h b/ResearchKit/Common/ORKHealthSampleQueryOperation.h
index b70c31c4c6..a086afd385 100644
--- a/ResearchKit/Common/ORKHealthSampleQueryOperation.h
+++ b/ResearchKit/Common/ORKHealthSampleQueryOperation.h
@@ -31,8 +31,9 @@
#import
#import "ORKOperation.h"
+#import "ORKDefines.h"
-
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@class ORKDataCollectionManager;
@class ORKCollector;
@protocol ORKHealthCollectable;
@@ -47,3 +48,4 @@
- (instancetype)initWithCollector:(ORKCollector *)collector mananger:(ORKDataCollectionManager *)manager;
@end
+#endif
diff --git a/ResearchKit/Common/ORKHealthSampleQueryOperation.m b/ResearchKit/Common/ORKHealthSampleQueryOperation.m
index 5427b761bf..b53dd41148 100644
--- a/ResearchKit/Common/ORKHealthSampleQueryOperation.m
+++ b/ResearchKit/Common/ORKHealthSampleQueryOperation.m
@@ -37,7 +37,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKCollector_Internal.h"
#import "ORKDataCollectionManager_Internal.h"
-
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
static NSUInteger const QueryLimitSize = 1000;
@implementation ORKHealthSampleQueryOperation {
@@ -247,5 +247,4 @@ - (void)handleResults:(NSArray *)results
}
@end
-
#endif
diff --git a/ResearchKit/Common/ORKHelpers_Internal.h b/ResearchKit/Common/ORKHelpers_Internal.h
index a4df35056f..5af352a3f3 100644
--- a/ResearchKit/Common/ORKHelpers_Internal.h
+++ b/ResearchKit/Common/ORKHelpers_Internal.h
@@ -41,7 +41,11 @@
#import
#import
+#import
+#import
+#import
+#import
NS_ASSUME_NONNULL_BEGIN
@@ -374,6 +378,13 @@ ORK_INLINE double ORKPoundsToKilograms(double pounds) {
return ORKPoundsAndOuncesToKilograms(pounds, 0);
}
+ORK_INLINE double ORKForceDoubleToLimits(double value) {
+ if (value == NAN || value == INFINITY) {
+ return DBL_MAX;
+ }
+ return fmin(fmax(value, -DBL_MAX), DBL_MAX);
+}
+
ORK_INLINE UIColor *ORKOpaqueColorWithReducedAlphaFromBaseColor(UIColor *baseColor, NSUInteger colorIndex, NSUInteger totalColors) {
UIColor *color = baseColor;
if (totalColors > 1) {
diff --git a/ResearchKit/Common/ORKHelpers_Private.h b/ResearchKit/Common/ORKHelpers_Private.h
index ccbb8ca6e8..5516799b4b 100644
--- a/ResearchKit/Common/ORKHelpers_Private.h
+++ b/ResearchKit/Common/ORKHelpers_Private.h
@@ -32,9 +32,6 @@
#import
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKInstructionStep.h b/ResearchKit/Common/ORKInstructionStep.h
index 28447f5202..443ca57e42 100644
--- a/ResearchKit/Common/ORKInstructionStep.h
+++ b/ResearchKit/Common/ORKInstructionStep.h
@@ -28,14 +28,12 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#import
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKLocationPermissionType.h b/ResearchKit/Common/ORKLocationPermissionType.h
index 6c261eff20..8864b926e7 100644
--- a/ResearchKit/Common/ORKLocationPermissionType.h
+++ b/ResearchKit/Common/ORKLocationPermissionType.h
@@ -40,10 +40,12 @@ NS_ASSUME_NONNULL_BEGIN
A permission type object that requests access for location data.
*/
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
ORK_CLASS_AVAILABLE
@interface ORKLocationPermissionType : ORKPermissionType
@end
+#endif
NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKLocationPermissionType.m b/ResearchKit/Common/ORKLocationPermissionType.m
index a8dfb363ed..d9f67f5316 100644
--- a/ResearchKit/Common/ORKLocationPermissionType.m
+++ b/ResearchKit/Common/ORKLocationPermissionType.m
@@ -34,6 +34,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKLocationPermissionType.h"
#import "ORKHelpers_Internal.h"
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#import
#import
@@ -119,5 +120,4 @@ - (BOOL)isEqual:(id)object {
}
@end
-
#endif
diff --git a/ResearchKit/Common/ORKOrderedTask.h b/ResearchKit/Common/ORKOrderedTask.h
index f07f223019..2857ab8e8c 100644
--- a/ResearchKit/Common/ORKOrderedTask.h
+++ b/ResearchKit/Common/ORKOrderedTask.h
@@ -34,8 +34,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKOrderedTask.m b/ResearchKit/Common/ORKOrderedTask.m
index e1a91636c5..5e30c707f7 100644
--- a/ResearchKit/Common/ORKOrderedTask.m
+++ b/ResearchKit/Common/ORKOrderedTask.m
@@ -30,8 +30,8 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
*/
#import "ORKOrderedTask.h"
+
#import "ORKAnswerFormat.h"
-#import "ORKInstructionStep.h"
#import "ORKCompletionStep.h"
#import "ORKStep_Private.h"
#import "ORKHelpers_Internal.h"
@@ -40,6 +40,14 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKQuestionStep.h"
#import "ORKFormStep.h"
#import "ORKFormItem_Internal.h"
+#import "ORKHelpers_Internal.h"
+#import "ORKInstructionStep.h"
+#import "ORKQuestionStep.h"
+#import "ORKSkin.h"
+#import "ORKStep_Private.h"
+
+
+#if TARGET_OS_IOS
#import "ORKActiveStep_Internal.h"
#import "ORKEarlyTerminationConfiguration.h"
#endif
@@ -277,14 +285,6 @@ - (ORKTaskTotalProgress)totalProgressOfCurrentStep:(ORKStep *)currentStep {
}
totalQuestions += 1;
}
-#else
- if ([step isKindOfClass:[ORKQuestionStep class]]) {
- if (step.identifier == currentStep.identifier) {
- currentStepStartingProgressNumber = (totalQuestions + 1);
- }
- totalQuestions += 1;
- }
-#endif
}
totalProgress.currentStepStartingProgressPosition = currentStepStartingProgressNumber;
@@ -376,6 +376,7 @@ - (BOOL)doesItemRequireSingleSection:(ORKFormItem *)item {
#endif
+#if TARGET_OS_IOS
- (BOOL)providesBackgroundAudioPrompts {
BOOL providesAudioPrompts = NO;
diff --git a/ResearchKit/Common/ORKPageStep.h b/ResearchKit/Common/ORKPageStep.h
index 9d06a95430..b11a847885 100644
--- a/ResearchKit/Common/ORKPageStep.h
+++ b/ResearchKit/Common/ORKPageStep.h
@@ -32,8 +32,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKPageStep.m b/ResearchKit/Common/ORKPageStep.m
index e22027289e..5701945beb 100644
--- a/ResearchKit/Common/ORKPageStep.m
+++ b/ResearchKit/Common/ORKPageStep.m
@@ -73,12 +73,14 @@ - (ORKPermissionMask)requestedPermissions {
return ORKPermissionNone;
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (NSSet *)requestedHealthKitTypesForReading {
if ([self.pageTask respondsToSelector:@selector(requestedHealthKitTypesForReading)]) {
return [self.pageTask requestedHealthKitTypesForReading];
}
return nil;
}
+#endif
#pragma mark - NSCopying
diff --git a/ResearchKit/Common/ORKPermissionType.h b/ResearchKit/Common/ORKPermissionType.h
index e30595da1c..2c1ecad724 100644
--- a/ResearchKit/Common/ORKPermissionType.h
+++ b/ResearchKit/Common/ORKPermissionType.h
@@ -35,6 +35,7 @@
#import
#import
+#import
NS_ASSUME_NONNULL_BEGIN
@@ -81,7 +82,9 @@ ORK_CLASS_AVAILABLE
+ (ORKMotionActivityPermissionType *) deviceMotionPermissionType;
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
+ (ORKLocationPermissionType *) locationPermissionType;
+#endif
@end
diff --git a/ResearchKit/Common/ORKPermissionType.m b/ResearchKit/Common/ORKPermissionType.m
index c2ee3981cf..cf4bc16aac 100644
--- a/ResearchKit/Common/ORKPermissionType.m
+++ b/ResearchKit/Common/ORKPermissionType.m
@@ -85,9 +85,11 @@ + (ORKMotionActivityPermissionType *)deviceMotionPermissionType {
return [[ORKMotionActivityPermissionType alloc] init];
}
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
+ (ORKLocationPermissionType *) locationPermissionType {
return [[ORKLocationPermissionType alloc] init];
}
+#endif
@end
diff --git a/ResearchKit/Common/ORKQuestionResult.h b/ResearchKit/Common/ORKQuestionResult.h
index 643f7404ef..4abfde2de6 100644
--- a/ResearchKit/Common/ORKQuestionResult.h
+++ b/ResearchKit/Common/ORKQuestionResult.h
@@ -35,6 +35,11 @@
#import
#import
+#import
+
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS
+#import
+#endif
NS_ASSUME_NONNULL_BEGIN
@@ -150,8 +155,9 @@ ORK_CLASS_AVAILABLE
@end
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS
/**
- The `ORKLocation` class represents the location addess obtained from a locaton question.
+ The `ORKLocation` class represents the location addess obtained from a location question.
*/
ORK_CLASS_AVAILABLE
@interface ORKLocation : NSObject
@@ -182,7 +188,7 @@ ORK_CLASS_AVAILABLE
@property (nonatomic, copy, readonly, nullable) CNPostalAddress *postalAddress;
@end
-
+#endif
/**
A result object from a location answer format.
@@ -194,6 +200,8 @@ ORK_CLASS_AVAILABLE
completes, it may be appropriate to serialize it for transmission to a server,
or to immediately perform analysis on it.
*/
+
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS
ORK_CLASS_AVAILABLE
@interface ORKLocationQuestionResult : ORKQuestionResult
@@ -203,7 +211,7 @@ ORK_CLASS_AVAILABLE
@property (nonatomic, copy, nullable) ORKLocation *locationAnswer;
@end
-
+#endif
/**
A result object from a multiple-component picker-style choice-based answer format.
diff --git a/ResearchKit/Common/ORKQuestionResult.m b/ResearchKit/Common/ORKQuestionResult.m
index ca019c5a00..81fdf85495 100644
--- a/ResearchKit/Common/ORKQuestionResult.m
+++ b/ResearchKit/Common/ORKQuestionResult.m
@@ -28,6 +28,14 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
#import "ORKQuestionResult_Private.h"
#import "ORKResult_Private.h"
@@ -38,6 +46,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#import "ORKHelpers_Internal.h"
#import "ORKAnswerFormat_Internal.h"
#endif
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS
+#import
+#import
+#endif
@implementation ORKQuestionResult {
@protected
@@ -327,7 +339,7 @@ - (NSDate *)dateAnswer {
@end
-#if !TARGET_OS_VISION
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS && !TARGET_OS_VISION
#pragma mark - ORKLocationQuestionResult
@implementation ORKLocation
diff --git a/ResearchKit/Common/ORKQuestionResult_Private.h b/ResearchKit/Common/ORKQuestionResult_Private.h
index e2a6bb8f88..5efa1d7a67 100644
--- a/ResearchKit/Common/ORKQuestionResult_Private.h
+++ b/ResearchKit/Common/ORKQuestionResult_Private.h
@@ -32,11 +32,9 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
#import
-
NS_ASSUME_NONNULL_BEGIN
@interface ORKQuestionResult ()
@@ -49,7 +47,7 @@ NS_ASSUME_NONNULL_BEGIN
@end
-
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION && TARGET_OS_IOS
@interface ORKLocation ()
#if TARGET_OS_IOS
@@ -62,5 +60,6 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithPlacemark:(CLPlacemark *)placemark userInput:(NSString *)userInput;
@end
+#endif
NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKRecorder.h b/ResearchKit/Common/ORKRecorder.h
index 3b0b962ef7..c57b2b2101 100644
--- a/ResearchKit/Common/ORKRecorder.h
+++ b/ResearchKit/Common/ORKRecorder.h
@@ -31,10 +31,12 @@
#import
-#import
#import
#import
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+#import
+#endif
NS_ASSUME_NONNULL_BEGIN
@@ -105,8 +107,9 @@ ORK_CLASS_AVAILABLE
If your recorder requires or would benefit from read access to HealthKit at
runtime during the task, return the appropriate set of `HKSampleType` objects.
*/
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (nullable NSSet *)requestedHealthKitTypesForReading;
-
+#endif
@end
@@ -309,6 +312,8 @@ ORK_CLASS_AVAILABLE
No additional parameters besides the identifier are required.
*/
+
+#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
ORK_CLASS_AVAILABLE
@interface ORKLocationRecorderConfiguration : ORKRecorderConfiguration
@@ -333,7 +338,7 @@ ORK_CLASS_AVAILABLE
- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
@end
-
+#endif
/**
A configuration object that records streaming audio data during an active step.
diff --git a/ResearchKit/Common/ORKRecorder.m b/ResearchKit/Common/ORKRecorder.m
index bfc0d2a78d..def1d0eddc 100644
--- a/ResearchKit/Common/ORKRecorder.m
+++ b/ResearchKit/Common/ORKRecorder.m
@@ -89,9 +89,12 @@ - (ORKRecorder *)recorderForStep:(ORKStep *)step outputDirectory:(NSURL *)output
return nil;
}
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (NSSet *)requestedHealthKitTypesForReading {
return nil;
}
+#endif
+
- (ORKPermissionMask)requestedPermissionMask {
return ORKPermissionNone;
}
diff --git a/ResearchKit/Common/ORKRelatedPerson.h b/ResearchKit/Common/ORKRelatedPerson.h
new file mode 100644
index 0000000000..0fa20dfd7d
--- /dev/null
+++ b/ResearchKit/Common/ORKRelatedPerson.h
@@ -0,0 +1,87 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import
+
+#import
+#import
+#import
+
+
+@class ORKTaskResult;
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ An object that represents a relative added during
+ a family health history survey.
+ */
+
+ORK_CLASS_AVAILABLE
+@interface ORKRelatedPerson : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Creates a new related person with the specified identifier.
+
+ This method is the primary designated initializer.
+
+ @param identifier The unique identifier of the related person.
+ @param groupIdentifier The identifier of the relative group to which the person belongs.
+ @param identifierForCellTitle The identifier of the result value to be used for the relative's cell title.
+ @param result The task result generated for the relative's health history survey.
+ */
+
+- (instancetype)initWithIdentifier:(NSString *)identifier
+ groupIdentifier:(NSString *)groupIdentifier
+ identifierForCellTitle:(NSString *)identifierForCellTitle
+ taskResult:(ORKTaskResult *)result NS_DESIGNATED_INITIALIZER;
+
+@property (nonatomic, readonly, copy) NSString *identifier;
+@property (nonatomic, readonly, copy) NSString *groupIdentifier;
+@property (nonatomic, readonly, copy) NSString *identifierForCellTitle;
+@property (nonatomic, copy) ORKTaskResult *taskResult;
+
+- (nullable NSString *)getTitleValueWithIdentifier:(NSString *)identifier;
+
+- (NSArray *)getDetailListValuesWithIdentifiers:(NSArray *)identifiers
+ displayInfoKeyAndValues:(NSDictionary *> *)displayInfoKeyAndValues;
+
+- (NSArray *)getConditionsListWithStepIdentifier:(NSString *)stepIdentifier
+ formItemIdentifier:(NSString *)formItemIdentifier
+ conditionsKeyValues:(NSDictionary *)conditionsKeyValues;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKRelatedPerson.m b/ResearchKit/Common/ORKRelatedPerson.m
new file mode 100644
index 0000000000..31d92fd3b6
--- /dev/null
+++ b/ResearchKit/Common/ORKRelatedPerson.m
@@ -0,0 +1,190 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "ORKRelatedPerson.h"
+
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+
+
+
+@implementation ORKRelatedPerson {
+}
+
+- (instancetype)initWithIdentifier:(NSString *)identifier
+ groupIdentifier:(NSString *)groupIdentifier
+ identifierForCellTitle:(NSString *)identifierForCellTitle
+ taskResult:(ORKTaskResult *)result {
+ self = [super init];
+
+ if (self) {
+ _identifier = [identifier copy];
+ _groupIdentifier = [groupIdentifier copy];
+ _identifierForCellTitle = [identifierForCellTitle copy];
+ _taskResult = [result copy];
+ }
+ return self;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ ORK_ENCODE_OBJ(aCoder, identifier);
+ ORK_ENCODE_OBJ(aCoder, groupIdentifier);
+ ORK_ENCODE_OBJ(aCoder, identifierForCellTitle);
+ ORK_ENCODE_OBJ(aCoder, taskResult);
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super init];
+ if (self) {
+ ORK_DECODE_OBJ_CLASS(aDecoder, identifier, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, groupIdentifier, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, identifierForCellTitle, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, taskResult, ORKTaskResult);
+ }
+ return self;
+}
+
+- (instancetype)copyWithZone:(nullable NSZone *)zone {
+ ORKRelatedPerson *relatedPerson = [[[self class] allocWithZone:zone] initWithIdentifier:[_identifier copy]
+ groupIdentifier:[_groupIdentifier copy]
+ identifierForCellTitle: [_identifierForCellTitle copy]
+ taskResult:[_taskResult copy]];
+ return relatedPerson;
+}
+
+- (BOOL)isEqual:(id)object {
+ if ([self class] != [object class]) {
+ return NO;
+ }
+
+ __typeof(self) castObject = object;
+ return (ORKEqualObjects(self.identifier, castObject.identifier)
+ && ORKEqualObjects(self.groupIdentifier, castObject.groupIdentifier)
+ && ORKEqualObjects(self.identifierForCellTitle, castObject.identifierForCellTitle)
+ && ORKEqualObjects(self.taskResult, castObject.taskResult));
+}
+
+- (nullable NSString *)getTitleValueWithIdentifier:(NSString *)identifier {
+ return [self getResultValueWithIdentifier:identifier];
+}
+
+- (NSArray *)getDetailListValuesWithIdentifiers:(NSArray *)identifiers
+ displayInfoKeyAndValues:(nonnull NSDictionary *> *)displayInfoKeyAndValues {
+ NSMutableArray *detailListValues = [NSMutableArray new];
+
+ for (NSString *identifier in identifiers) {
+ NSString *result = [self getResultValueWithIdentifier:identifier];
+
+ if ([result isKindOfClass:[ORKDontKnowAnswer class]]) {
+ continue;
+ }
+
+ NSString *value = ![result isKindOfClass:[NSString class]] ? [NSString stringWithFormat:@"%i", result.intValue] : result;
+ if (value && ![value isEqual:@"0"]) {
+ NSString *displayText = displayInfoKeyAndValues[identifier][value];
+ if (![self shouldSkipListValue:displayText] && ![self shouldSkipListValue:value]) {
+ [detailListValues addObject: displayText != nil ? displayText : value];
+ }
+ }
+ }
+
+ return [detailListValues copy];
+}
+
+- (NSArray *)getConditionsListWithStepIdentifier:(NSString *)stepIdentifier
+ formItemIdentifier:(NSString *)formItemIdentifier
+ conditionsKeyValues:(nonnull NSDictionary *)conditionsKeyValues {
+ ORKStepResult *stepResult = (ORKStepResult *)[self.taskResult resultForIdentifier:stepIdentifier];
+
+ ORKChoiceQuestionResult *choiceQuestionResult = (ORKChoiceQuestionResult *)[stepResult resultForIdentifier:formItemIdentifier];
+ NSArray *conditionsList = (NSArray *)choiceQuestionResult.choiceAnswers;
+
+ NSMutableArray *conditionListDisplayValues = [NSMutableArray new];
+
+ BOOL didSkipValue = NO;
+ for (NSString *condition in conditionsList) {
+ NSString *value = [conditionsKeyValues valueForKey:condition];
+
+ if ([self shouldSkipListValue:value]) {
+ didSkipValue = YES;
+ } else {
+ NSString *displayString = [[value lowercaseString] isEqual:@"none of the above"] ? ORKLocalizedString(@"FAMILY_HISTORY_NONE_SELECTED", @"") : value;
+ [conditionListDisplayValues addObject:displayString];
+ }
+ }
+
+ if (didSkipValue && conditionListDisplayValues.count == 0) {
+ [conditionListDisplayValues addObject:@""];
+ }
+
+ return [conditionListDisplayValues copy];
+}
+
+- (nullable NSString *)getResultValueWithIdentifier:(NSString *)identifier {
+
+ for (ORKStepResult *result in _taskResult.results) {
+ ORKQuestionResult *questionResult = (ORKQuestionResult *)[result resultForIdentifier:identifier];
+
+ if (questionResult) {
+ if ([questionResult isKindOfClass:[ORKChoiceQuestionResult class]]) {
+ ORKChoiceQuestionResult *choiceQuestionResult = (ORKChoiceQuestionResult *)questionResult;
+ return (NSString *)choiceQuestionResult.choiceAnswers.firstObject;
+ } else {
+ NSString *answer = (NSString *)questionResult.answer;
+
+
+ return answer;
+ }
+ } else {
+ break;
+ }
+ }
+
+ return nil;
+}
+
+- (BOOL)shouldSkipListValue:(NSString *)value {
+ return ([[value lowercaseString] isEqual:@"i don't know"] || [[value lowercaseString] isEqual:@"i don’t know"] || [[value lowercaseString] isEqual:@"i prefer not to answer"]);
+}
+
+
+@end
diff --git a/ResearchKit/Common/ORKRelativeGroup.h b/ResearchKit/Common/ORKRelativeGroup.h
new file mode 100644
index 0000000000..3aa9889cc4
--- /dev/null
+++ b/ResearchKit/Common/ORKRelativeGroup.h
@@ -0,0 +1,89 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import
+
+#import
+
+
+@class ORKTaskResult;
+@class ORKFormStep;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ An object to represent a relative type displayed
+ during a family health history survey.
+
+ Example relative groups could be parents, children, or siblings.
+ */
+
+ORK_CLASS_AVAILABLE
+@interface ORKRelativeGroup : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Creates a new relative group with the specified identifier.
+
+ This method is the primary designated initializer.
+
+ @param identifier The unique identifier of the relative group.
+ @param name The name of the relative group. This should be the singular representation.
+ @param title The table section title for the relative group.
+ @param detailText The detail text displayed in the table section header for the relative group.
+ @param identifierForCellTitle The identifier of the result value to be used for the relative's cell title.
+ @param maxAllowed The maximum amount of relatives that are allowed to be added by the participant.
+ @param formSteps The form steps that will precede the health conditions step during the survey.
+ @param detailTextIdentifiers The identifiers of each result value that will be displayed in the relative's card view.
+ */
+
+- (instancetype)initWithIdentifier:(NSString *)identifier
+ name:(NSString *)name
+ sectionTitle:(NSString *)title
+ sectionDetailText:(NSString *)detailText
+ identifierForCellTitle:(NSString *)identifierForCellTitle
+ maxAllowed:(NSUInteger)maxAllowed
+ formSteps:(NSArray *)formSteps
+ detailTextIdentifiers:(NSArray *)detailTextIdentifiers NS_DESIGNATED_INITIALIZER;
+
+@property (nonatomic, readonly, copy) NSString *identifier;
+@property (nonatomic, readonly, copy) NSString *name;
+@property (nonatomic, readonly, copy) NSString *sectionTitle;
+@property (nonatomic, readonly, copy) NSString *sectionDetailText;
+@property (nonatomic, readonly, copy) NSString *identifierForCellTitle;
+@property (nonatomic, readonly) NSUInteger maxAllowed;
+@property (nonatomic, readonly, copy) NSArray *formSteps;
+@property (nonatomic, readonly, copy) NSArray *detailTextIdentifiers;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKRelativeGroup.m b/ResearchKit/Common/ORKRelativeGroup.m
new file mode 100644
index 0000000000..6cb43cb644
--- /dev/null
+++ b/ResearchKit/Common/ORKRelativeGroup.m
@@ -0,0 +1,129 @@
+/*
+ Copyright (c) 2023, Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder(s) nor the names of any contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission. No license is granted to the trademarks of
+ the copyright holders even if such marks are included in this software.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "ORKRelativeGroup.h"
+
+#import "ORKAnswerFormat_Private.h"
+#import "ORKCollectionResult.h"
+#import "ORKFormStep.h"
+#import "ORKHelpers_Internal.h"
+
+
+@implementation ORKRelativeGroup
+
+- (instancetype)initWithIdentifier:(NSString *)identifier
+ name:(NSString *)name
+ sectionTitle:(NSString *)title
+ sectionDetailText:(NSString *)detailText
+ identifierForCellTitle:(NSString *)identifierForCellTitle
+ maxAllowed:(NSUInteger)maxAllowed
+ formSteps:(NSArray *)formSteps
+ detailTextIdentifiers:(NSArray *)detailTextIdentifiers {
+ self = [super init];
+
+ if (self) {
+ _identifier = identifier;
+ _name = name;
+ _sectionTitle = title;
+ _sectionDetailText = detailText;
+ _identifierForCellTitle = identifierForCellTitle;
+ _maxAllowed = maxAllowed;
+ _formSteps = formSteps;
+ _detailTextIdentifiers = detailTextIdentifiers;
+ }
+
+ return self;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ ORK_ENCODE_OBJ(aCoder, identifier);
+ ORK_ENCODE_OBJ(aCoder, name);
+ ORK_ENCODE_OBJ(aCoder, sectionTitle);
+ ORK_ENCODE_OBJ(aCoder, sectionDetailText);
+ ORK_ENCODE_OBJ(aCoder, identifierForCellTitle);
+ ORK_ENCODE_INTEGER(aCoder, maxAllowed);
+ ORK_ENCODE_OBJ(aCoder, formSteps);
+ ORK_ENCODE_OBJ(aCoder, detailTextIdentifiers);
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [super init];
+ if (self) {
+ ORK_DECODE_OBJ_CLASS(aDecoder, identifier, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, name, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, sectionTitle, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, sectionDetailText, NSString);
+ ORK_DECODE_OBJ_CLASS(aDecoder, identifierForCellTitle, NSString);
+ ORK_DECODE_INTEGER(aDecoder, maxAllowed);
+ ORK_DECODE_OBJ_ARRAY(aDecoder, formSteps, ORKFormStep);
+ ORK_DECODE_OBJ_ARRAY(aDecoder, detailTextIdentifiers, NSString);
+ }
+ return self;
+}
+
+- (nonnull id)copyWithZone:(nullable NSZone *)zone {
+ ORKRelativeGroup *relativeGroup = [[[self class] allocWithZone:zone] initWithIdentifier:[_identifier copy]
+ name:[_name copy]
+ sectionTitle:[_sectionTitle copy]
+ sectionDetailText:[_sectionDetailText copy]
+ identifierForCellTitle:[_identifierForCellTitle copy]
+ maxAllowed:_maxAllowed
+ formSteps:[_formSteps copy]
+ detailTextIdentifiers:[_detailTextIdentifiers copy]];
+ return relativeGroup;
+}
+
+- (BOOL)isEqual:(id)object {
+ if ([self class] != [object class]) {
+ return NO;
+ }
+
+ __typeof(self) castObject = object;
+ return (ORKEqualObjects(self.identifier, castObject.identifier)
+ && ORKEqualObjects(self.name, castObject.name)
+ && ORKEqualObjects(self.sectionTitle, castObject.sectionTitle)
+ && ORKEqualObjects(self.sectionDetailText, castObject.sectionDetailText)
+ && ORKEqualObjects(self.identifierForCellTitle, castObject.identifierForCellTitle)
+ && ORKEqualObjects(self.formSteps, castObject.formSteps)
+ && ORKEqualObjects(self.detailTextIdentifiers, castObject.detailTextIdentifiers)
+ && self.maxAllowed == castObject.maxAllowed);
+}
+
+- (NSUInteger)hash {
+ return super.hash ^ _identifier.hash ^ _name.hash ^ _sectionTitle.hash ^ _sectionDetailText.hash ^ _identifierForCellTitle.hash ^ _formSteps.hash ^ _detailTextIdentifiers.hash;
+}
+
+@end
diff --git a/ResearchKit/Common/ORKResult.h b/ResearchKit/Common/ORKResult.h
index fe5990f706..7063946d93 100644
--- a/ResearchKit/Common/ORKResult.h
+++ b/ResearchKit/Common/ORKResult.h
@@ -32,8 +32,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKResultPredicate.h b/ResearchKit/Common/ORKResultPredicate.h
index a9a4f54c99..04f868861a 100644
--- a/ResearchKit/Common/ORKResultPredicate.h
+++ b/ResearchKit/Common/ORKResultPredicate.h
@@ -540,6 +540,7 @@ within the specified `NSTimeInterval` values.
refer to the contained `ORKConsentSignatureResult`
corresponding to the signature collected by the consent
review step.
+ @param didConsent Boolean to indicate if the user consented.
@return A result predicate.
*/
+ (NSPredicate *)predicateForConsentWithResultSelector:(ORKResultSelector *)resultSelector
diff --git a/ResearchKit/Common/ORKResult_Private.h b/ResearchKit/Common/ORKResult_Private.h
index f7626d3ba5..62b4e36b6f 100644
--- a/ResearchKit/Common/ORKResult_Private.h
+++ b/ResearchKit/Common/ORKResult_Private.h
@@ -30,8 +30,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKSkin.h b/ResearchKit/Common/ORKSkin.h
index 1f196026ab..26a9241dbe 100644
--- a/ResearchKit/Common/ORKSkin.h
+++ b/ResearchKit/Common/ORKSkin.h
@@ -28,12 +28,9 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#import
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKSkin_Private.h b/ResearchKit/Common/ORKSkin_Private.h
index c57c0c04b7..28e8e4c62c 100644
--- a/ResearchKit/Common/ORKSkin_Private.h
+++ b/ResearchKit/Common/ORKSkin_Private.h
@@ -33,8 +33,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
-
#if TARGET_OS_IOS || TARGET_OS_VISION
diff --git a/ResearchKit/Common/ORKStep.h b/ResearchKit/Common/ORKStep.h
index 7e040423a1..e3f9855b08 100644
--- a/ResearchKit/Common/ORKStep.h
+++ b/ResearchKit/Common/ORKStep.h
@@ -35,6 +35,7 @@
#import
#import
+#import
@class HKObjectType;
@class ORKResult;
@@ -51,19 +52,19 @@ ORK_EXTERN NSString *const ORKNullStepIdentifier ORK_AVAILABLE_DECL;
The base object for composing a task.
``ORKStep`` is the base class for the steps that can compose a task for presentation
- in an ``ORKTaskViewController`` object. Each ``ORKStep`` object represents one logical piece of data
+ in an ORKTaskViewController object. Each ``ORKStep`` object represents one logical piece of data
entry or activity in a larger task.
A step can be a question, an active test, or a simple instruction. Pair an ``ORKStep``
- subclass with an ``ORKStepViewController`` subclass to display the step.
+ subclass with an ORKStepViewController subclass to display the step.
To use a step, instantiate an ``ORKStep`` object and populate its properties. Add the step to a task,
- such as an ``ORKOrderedTask`` object, then present the task using ``ORKTaskViewController``.
+ such as an ``ORKOrderedTask`` object, then present the task using ORKTaskViewController.
To implement a new type of step, subclass ``ORKStep`` and add your additional
- properties.Then subclass ``ORKStepViewController`` and implement
+ properties.Then subclass ORKStepViewController and implement
your user interface. If your step is timed, or requires sensor data collection,
- subclass ``ORKActiveStep`` and ``ORKActiveStepViewController``.
+ subclass ``ORKActiveStep`` and ORKActiveStepViewController.
*/
ORK_CLASS_AVAILABLE API_AVAILABLE(ios(11.0), watchos(6.0))
@@ -180,14 +181,14 @@ ORK_CLASS_AVAILABLE API_AVAILABLE(ios(11.0), watchos(6.0))
/**
A property that gates automatic tint color image changes based on appearance changes.
- The default value for this property is ``NO``.
+ The default value for this property is NO.
*/
@property (nonatomic) BOOL shouldAutomaticallyAdjustImageTintColor;
/**
A property that determines whether to show progress for this step when presented.
- The default is ``YES``.
+ The default is YES.
*/
@property (nonatomic, assign) BOOL showsProgress;
@@ -240,7 +241,7 @@ ORK_CLASS_AVAILABLE API_AVAILABLE(ios(11.0), watchos(6.0))
Checks the parameters of the step and throws exceptions on invalid parameters.
This method is called when there is a need to validate the step's parameters, which is typically
- the case when adding a step to an ``ORKStepViewController`` object, and when presenting the
+ the case when adding a step to an ORKStepViewController object, and when presenting the
step view controller.
Subclasses should override this method to provide validation of their additional
@@ -272,7 +273,7 @@ API_AVAILABLE(ios(11))
/**
A Boolean value indicating if the body items of the step should build in.
- Default value is ``NO`` resulting in all body items being displayed. Set to ``YES`` to
+ Default value is NO resulting in all body items being displayed. Set to YES to
only show the first item and subsequent items will build in on continue.
*/
@property (nonatomic, assign) BOOL buildInBodyItems API_AVAILABLE(ios(11)) API_UNAVAILABLE(watchos);
@@ -303,7 +304,7 @@ API_AVAILABLE(ios(11))
/**
A view controller that positions an image inside an image view that the step uses.
- Depending on the subclass of the step, ``ORKStepView`` uses a specific ``UIImageView``, and
+ Depending on the subclass of the step, ORKStepView uses a specific UIImageView, and
``imageContentMode`` sets the content mode of used image view.
*/
@@ -313,4 +314,7 @@ API_AVAILABLE(ios(11))
#endif
+#pragma mark - watchOS / VisionOS
+
+
NS_ASSUME_NONNULL_END
diff --git a/ResearchKit/Common/ORKStep_Private.h b/ResearchKit/Common/ORKStep_Private.h
index a2bb23850c..0d85ca8ad8 100644
--- a/ResearchKit/Common/ORKStep_Private.h
+++ b/ResearchKit/Common/ORKStep_Private.h
@@ -31,7 +31,6 @@
#if TARGET_OS_IOS || TARGET_OS_VISION
#import
-#endif
NS_ASSUME_NONNULL_BEGIN
diff --git a/ResearchKit/Common/ORKTableStep.h b/ResearchKit/Common/ORKTableStep.h
index 7753204cbc..247a1cb6de 100644
--- a/ResearchKit/Common/ORKTableStep.h
+++ b/ResearchKit/Common/ORKTableStep.h
@@ -182,6 +182,11 @@ ORK_CLASS_AVAILABLE
*/
@property (nonatomic) BOOL pinNavigationContainer;
+/**
+ A property that manually overrides the bottomPadding of the content view
+ */
+@property (nonatomic, copy, nullable) NSNumber *bottomPadding;
+
/**
Returns the number of sections in the tableview used to display this step. Default = `1`.
diff --git a/ResearchKit/Common/ORKTableStep.m b/ResearchKit/Common/ORKTableStep.m
index 01c7c719ba..7fa8771133 100644
--- a/ResearchKit/Common/ORKTableStep.m
+++ b/ResearchKit/Common/ORKTableStep.m
@@ -169,6 +169,8 @@ - (instancetype)copyWithZone:(NSZone *)zone {
step->_bulletType = _bulletType;
step->_bulletIconNames = ORKArrayCopyObjects(_bulletIconNames);
step->_allowsSelection = _allowsSelection;
+ step->_bottomPadding = _bottomPadding;
+
return step;
}
@@ -186,6 +188,7 @@ - (instancetype)initWithCoder:(NSCoder *)aDecoder {
ORK_DECODE_OBJ_ARRAY(aDecoder, bulletIconNames, NSString);
ORK_DECODE_BOOL(aDecoder, allowsSelection);
ORK_DECODE_BOOL(aDecoder, pinNavigationContainer);
+ ORK_DECODE_OBJ_CLASS(aDecoder, bottomPadding, NSNumber);
}
return self;
}
@@ -197,6 +200,7 @@ - (void)encodeWithCoder:(NSCoder *)aCoder {
ORK_ENCODE_OBJ(aCoder, bulletIconNames);
ORK_ENCODE_BOOL(aCoder, allowsSelection);
ORK_ENCODE_BOOL(aCoder, pinNavigationContainer);
+ ORK_ENCODE_OBJ(aCoder, bottomPadding);
}
#pragma mark - Equality
@@ -210,11 +214,12 @@ - (BOOL)isEqual:(id)object {
&& (self.bulletType == castObject.bulletType)
&& (self.allowsSelection == castObject.allowsSelection)
&& ORKEqualObjects(self.bulletIconNames, castObject.bulletIconNames)
- && self.pinNavigationContainer == castObject.pinNavigationContainer);
+ && self.pinNavigationContainer == castObject.pinNavigationContainer)
+ && ORKEqualObjects(self.bottomPadding, castObject.bottomPadding);
}
- (NSUInteger)hash {
- return super.hash ^ self.items.hash ^ self.bulletIconNames.hash ^ (_bulletType ? 0xf : 0x0) ^ (_allowsSelection ? 0xf : 0x0) ^ (_pinNavigationContainer ? 0xf : 0x0);
+ return super.hash ^ self.items.hash ^ self.bulletIconNames.hash ^ self.bottomPadding.hash ^ (_bulletType ? 0xf : 0x0) ^ (_allowsSelection ? 0xf : 0x0) ^ (_pinNavigationContainer ? 0xf : 0x0);
}
@end
diff --git a/ResearchKit/Common/ORKTask.h b/ResearchKit/Common/ORKTask.h
index 144d976acf..e13dcbbf47 100644
--- a/ResearchKit/Common/ORKTask.h
+++ b/ResearchKit/Common/ORKTask.h
@@ -30,6 +30,8 @@
#import
+
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import
@@ -37,6 +39,7 @@
#import
#endif
+#import
NS_ASSUME_NONNULL_BEGIN
@@ -271,6 +274,7 @@ requests access to these HealthKit types.
See also: `requestedHealthKitTypesForWriting`.
*/
+#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@property (nonatomic, copy, readonly, nullable) NSSet