Compare commits

..

19 Commits

Author SHA1 Message Date
Pariece McKinney c71d1a56dd Public release 3.0.1 2024-05-08 14:56:11 -04:00
Corey 6c24a7e922 ci: Add code integration testing to repo (#1569) 2024-04-10 14:33:32 -04:00
Pariece McKinney b14e5cfcb0 Public Release 3.0 2024-03-28 19:39:04 -04:00
Louie fee76c2d93 Merge branch 'stable' into main 2023-12-05 14:00:17 -08:00
Louie a07041901b Public Release 2.2.15
Various ORKTextChoiceOther and ORKChoiceOtherViewCell improvements
Bumped version to 2.2.15
Bumped Cocoapod version to 2.2.15
2023-12-05 11:19:31 -08:00
Louie Chatta c370011616 Public Release 2.2.15
- Various ORKTextChoiceOther and ORKChoiceOtherViewCell improvements 
- Bumped version to 2.2.15
- Bumped Cocoapod version to 2.2.15
2023-12-05 11:02:55 -08:00
Pariece McKinney b8f155974c Public release/2.2.12 (#1555)
- Fixed `ORKHealthKitQuantityTypeAnswerFormat`issues
- Improved `ORKReviewStep` initialization
- Introduced a new property called `shouldAutomaticallyAdjustImageTintColor` on `ORKStep` to automatically adopt dark mode version of an image
- Added `ORKSESQuestionResult` to Table View Providers
- ORKCatalog Improvements
- ORKImageSelectionView improvements
- Bumped version to 2.2.12
2023-11-01 18:18:20 -04:00
Pariece McKinney 2fb22a6256 Public release/2.2.10 (#1548)
Fix ORKNavigationContainerView so that it does not call didMoveToWindow from tintColorDidChange
Bumped version to 2.2.10
2023-05-10 17:40:25 -04:00
ronzilla-apple bd60d945bb Public release/2.2.9 (#1541)
* Address issue where there was no option to "Save Results" if task is cancelled (Issue #1536/1540)
* Address an issue where ORKTaskViewController setting tintColor on stepViewController views broke ORKStepViewController's addResult:

* Fixed order issue of tone audiometry steps
* Include missing ORKSpeechRecognition header export (Issue #1534)
* Switch to contentEdgeInsets API in ORKContinueButton to fix an issue where button title wouldn't always fit onscreen (on iOS 16 during long press) (Issue #1533)
* Remove min/max values for ORKCatalog "Numeric with Display Unit"

* xcconfig file updates for version and driving ORKCatalog bundleID
* Addressing compiler warnings
* Added unit tests for init'ing taskViewController with restoration data
* Adding task restoration feature to ORKCatalog's taskViewController presentation
2023-02-13 11:03:48 -08:00
Pariece McKinney 8f58410af9 Release 2.2.8
-Bug fixes and enhancements
-New helper method (ORKViewTintColor) for setting tintColor
-New “displayUnit” property added to ORKAnswerFormat
-Updates in ORKNormalizedReactionTimeResult’s secure coding (breaks compatibility with previous archives).
2022-12-20 11:14:59 -08:00
Louie fc67cc944c Merge pull request #1519 from cbaker6/fixTintColor
Propagate tintColor if window not available
2022-11-29 20:22:37 -08:00
Louie c8473017ec Merge pull request #1531 from ResearchKit/cocoapod_fix
remove deprecated ORKConsent files
2022-11-29 13:21:51 -08:00
Louis Chatta 2bc0033aa8 remove deprecated ORKConsent files 2022-11-29 11:51:42 -08:00
Corey Baker 64a068596b make suggested changes 2022-11-28 15:25:59 -05:00
Corey Baker c10693930d Fix tintColor for ORKWebViewStepViewController buttons 2022-11-15 20:48:25 -05:00
Corey Baker c0f309edf3 only check for tintColor once in viewControllerForStep 2022-11-15 09:16:44 -05:00
Corey Baker b1cc631748 propagate tintColor if window not available 2022-11-14 14:46:02 -05:00
Pariece McKinney a89059f5dc 2.1.1 Release
-Bug fixes
-New ORKAccuracyStroopStep
-AudioStep now allows for audio recording 
-New Styles for ORKDontKnowButton
-General layout and UI improvements
2022-10-26 16:07:45 -07:00
Will 2cc8f9e7d5 Prevent isPasscodeStoredInKeychain crash, correct warnings (#1505)
* fix: prevent isPasscodeStoredInKeychain from causing a crash

* fix: prevent nskeyedunarchiver warnings, add missing classes
2022-06-16 10:55:09 -07:00
325 changed files with 1636 additions and 7841 deletions
+26
View File
@@ -0,0 +1,26 @@
name: Build
on:
push:
branches: [ 'main', 'stable' ]
pull_request:
branches: [ 'main', 'stable' ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: macos-14
strategy:
matrix:
destination: ['platform=iOS\ Simulator,OS=17.4,name=iPhone\ 15\ Pro']
scheme: ['ResearchKit']
name: ${{ matrix.scheme }} Unit Tests
steps:
- uses: actions/checkout@v4
- name: Set Xcode Version
run: sudo xcode-select -s /Applications/Xcode_15.3.app
- name: Test
run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -verbose -workspace RKWorkspace.xcworkspace -scheme ${{ matrix.scheme }} -destination ${{ matrix.destination }} build test | xcpretty
-3
View File
@@ -1,6 +1,3 @@
![ResearchKit](https://github.com/user-attachments/assets/0384c1a6-ec67-45d3-be68-136a2e4cacff)
ResearchKit Framework
===========
-32
View File
@@ -1,37 +1,5 @@
# ResearchKit Release Notes
## ResearchKit 3.1.1 Release Notes
General bug fixes for the following:
- **ORKMotionActivityPermissionType**
Fixed issue that caused the next button to remain disabled after gaining permission from user.
- **ORKRegistrationStep**
Removed yellow overlay that prevented password entry.
- **ORKdBHLToneAudiometryStep**
Fixed issue that caused the tap button to appear twice.
## 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:
-34
View File
@@ -1,34 +0,0 @@
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
+23 -252
View File
@@ -6,22 +6,6 @@
objectVersion = 54;
objects = {
/* Begin PBXAggregateTarget section */
0BC672D82BD9C52D005798AC /* ResearchKitAllTargets */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 0BC672D92BD9C52D005798AC /* Build configuration list for PBXAggregateTarget "ResearchKitAllTargets" */;
buildPhases = (
);
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, ); }; };
@@ -193,39 +177,12 @@
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, ); }; };
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 */; };
5192BF8C2AE1BF16006E43FB /* (null) in Headers */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Private, ); }; };
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 */; };
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 */; };
519CE8222C6582BE003BB584 /* ORKHealthCondition.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8162C6582BD003BB584 /* ORKHealthCondition.m */; };
519CE8232C6582BE003BB584 /* ORKFamilyHistoryStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8172C6582BD003BB584 /* ORKFamilyHistoryStep.m */; };
519CE8242C6582BE003BB584 /* ORKHealthCondition.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE8182C6582BD003BB584 /* ORKHealthCondition.h */; settings = {ATTRIBUTES = (Public, ); }; };
519CE8252C6582BE003BB584 /* ORKFamilyHistoryResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE8192C6582BD003BB584 /* ORKFamilyHistoryResult.h */; settings = {ATTRIBUTES = (Public, ); }; };
519CE8262C6582BE003BB584 /* ORKRelatedPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE81A2C6582BD003BB584 /* ORKRelatedPerson.m */; };
519CE8272C6582BE003BB584 /* ORKRelativeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE81B2C6582BD003BB584 /* ORKRelativeGroup.h */; settings = {ATTRIBUTES = (Public, ); }; };
519CE8282C6582BE003BB584 /* ORKRelativeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE81C2C6582BD003BB584 /* ORKRelativeGroup.m */; };
519CE8292C6582BE003BB584 /* ORKConditionStepConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE81D2C6582BE003BB584 /* ORKConditionStepConfiguration.m */; };
519CE82A2C6582BE003BB584 /* ORKConditionStepConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE81E2C6582BE003BB584 /* ORKConditionStepConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
519CE82B2C6582BE003BB584 /* ORKFamilyHistoryStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE81F2C6582BE003BB584 /* ORKFamilyHistoryStep.h */; settings = {ATTRIBUTES = (Public, ); }; };
519CE82C2C6582BE003BB584 /* ORKRelatedPerson.h in Headers */ = {isa = PBXBuildFile; fileRef = 519CE8202C6582BE003BB584 /* ORKRelatedPerson.h */; settings = {ATTRIBUTES = (Public, ); }; };
519CE82D2C6582BE003BB584 /* ORKFamilyHistoryResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 519CE8212C6582BE003BB584 /* ORKFamilyHistoryResult.m */; };
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 */; 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 */; };
@@ -246,8 +203,6 @@
51AF1B202B683C3400D3B399 /* ORKWebViewStepResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AF1B1F2B683C3400D3B399 /* ORKWebViewStepResult_Private.h */; 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 */; };
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 */; settings = {ATTRIBUTES = (Private, ); }; };
51B94DC72B3254FE0039B0E7 /* CLLocationManager+ResearchKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 51B94DC62B3254FD0039B0E7 /* CLLocationManager+ResearchKit.m */; };
51BD8FC929D60FB60001D54E /* frequency_dBSPL_AIRPODSMAX.plist in Resources */ = {isa = PBXBuildFile; fileRef = E293655D25757CC700092A7C /* frequency_dBSPL_AIRPODSMAX.plist */; };
@@ -302,7 +257,6 @@
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 */; };
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 */; };
714151D0225C4A23002CA33B /* ORKPasscodeViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A92C6922444F93007547F2 /* ORKPasscodeViewControllerTests.swift */; };
7141EA2222EFBC0C00650145 /* ORKLoggingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7141EA2122EFBC0C00650145 /* ORKLoggingTests.m */; };
@@ -444,7 +398,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 */; settings = {ATTRIBUTES = (Private, ); }; };
CA2B8F9828A16E960025B773 /* ORKdBHLToneAudiometryContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 71769E332088291B00A19914 /* ORKdBHLToneAudiometryContentView.h */; };
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 */; };
@@ -1026,27 +980,6 @@
/* 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 */;
@@ -1137,7 +1070,6 @@
0B9A990E2A8AC47500D64C40 /* NSObject+TestingSupport.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+TestingSupport.m"; sourceTree = "<group>"; };
0B9CC5652A68C02C00080E29 /* UIImageView+ResearchKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+ResearchKit.h"; sourceTree = "<group>"; };
0B9CC5662A68C02C00080E29 /* UIImageView+ResearchKit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+ResearchKit.m"; sourceTree = "<group>"; };
0BA1D93A2BD1DF5A00BB79DB /* ResearchKit.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = ResearchKit.podspec; sourceTree = "<group>"; };
0BE9D5242947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ORKConsentDocument+ORKInstructionStep.h"; sourceTree = "<group>"; };
0BE9D5252947EA4900DA0625 /* ORKConsentDocument+ORKInstructionStep.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "ORKConsentDocument+ORKInstructionStep.m"; sourceTree = "<group>"; };
106FF29C1B663FCE004EACF2 /* ORKHolePegTestPlaceStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKHolePegTestPlaceStep.h; sourceTree = "<group>"; };
@@ -1408,38 +1340,10 @@
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 = "<group>"; };
5192BF8E2AE1C051006E43FB /* ORKAgePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKAgePicker.m; sourceTree = "<group>"; };
5192BF912AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ORKChoiceViewCell+ORKColorChoice.h"; sourceTree = "<group>"; };
5192BF922AE1C2F7006E43FB /* ORKChoiceViewCell+ORKColorChoice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ORKChoiceViewCell+ORKColorChoice.m"; sourceTree = "<group>"; };
5192BF952AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ORKAnswerFormat+FormStepViewControllerAdditions.h"; sourceTree = "<group>"; };
5192BF962AE1C5A1006E43FB /* ORKAnswerFormat+FormStepViewControllerAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ORKAnswerFormat+FormStepViewControllerAdditions.m"; sourceTree = "<group>"; };
5192BF9B2AE1DE62006E43FB /* ORKColorChoiceCellGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKColorChoiceCellGroup.m; sourceTree = "<group>"; };
5192BF9C2AE1DE62006E43FB /* ORKColorChoiceCellGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKColorChoiceCellGroup.h; sourceTree = "<group>"; };
519C298026D027AB00FD5F44 /* SwiftUIViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIViewFactory.swift; sourceTree = "<group>"; };
519C298D26D027E500FD5F44 /* TextChoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextChoiceView.swift; sourceTree = "<group>"; };
519CE8162C6582BD003BB584 /* ORKHealthCondition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKHealthCondition.m; sourceTree = "<group>"; };
519CE8172C6582BD003BB584 /* ORKFamilyHistoryStep.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryStep.m; sourceTree = "<group>"; };
519CE8182C6582BD003BB584 /* ORKHealthCondition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKHealthCondition.h; sourceTree = "<group>"; };
519CE8192C6582BD003BB584 /* ORKFamilyHistoryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryResult.h; sourceTree = "<group>"; };
519CE81A2C6582BD003BB584 /* ORKRelatedPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKRelatedPerson.m; sourceTree = "<group>"; };
519CE81B2C6582BD003BB584 /* ORKRelativeGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKRelativeGroup.h; sourceTree = "<group>"; };
519CE81C2C6582BD003BB584 /* ORKRelativeGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKRelativeGroup.m; sourceTree = "<group>"; };
519CE81D2C6582BE003BB584 /* ORKConditionStepConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKConditionStepConfiguration.m; sourceTree = "<group>"; };
519CE81E2C6582BE003BB584 /* ORKConditionStepConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKConditionStepConfiguration.h; sourceTree = "<group>"; };
519CE81F2C6582BE003BB584 /* ORKFamilyHistoryStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryStep.h; sourceTree = "<group>"; };
519CE8202C6582BE003BB584 /* ORKRelatedPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKRelatedPerson.h; sourceTree = "<group>"; };
519CE8212C6582BE003BB584 /* ORKFamilyHistoryResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryResult.m; sourceTree = "<group>"; };
519CE8302C658617003BB584 /* ORKFamilyHistoryStepViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryStepViewController.h; sourceTree = "<group>"; };
519CE8332C658617003BB584 /* ORKFamilyHistoryStepViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryStepViewController.m; sourceTree = "<group>"; };
519CE83B2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryRelatedPersonCell.h; sourceTree = "<group>"; };
519CE83C2C658653003BB584 /* ORKFamilyHistoryRelatedPersonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryRelatedPersonCell.m; sourceTree = "<group>"; };
519CE83D2C658653003BB584 /* ORKFamilyHistoryTableFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryTableFooterView.h; sourceTree = "<group>"; };
519CE83E2C658654003BB584 /* ORKFamilyHistoryTableFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryTableFooterView.m; sourceTree = "<group>"; };
519CE83F2C658654003BB584 /* ORKFamilyHistoryTableHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryTableHeaderView.h; sourceTree = "<group>"; };
519CE8402C658654003BB584 /* ORKFamilyHistoryTableHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKFamilyHistoryTableHeaderView.m; sourceTree = "<group>"; };
519CE85B2C6AD858003BB584 /* ORKFamilyHistoryStepViewController_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ORKFamilyHistoryStepViewController_Private.h; sourceTree = "<group>"; };
519CE85E2C6BC1DB003BB584 /* ORKFamilyHistoryResultTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ORKFamilyHistoryResultTests.swift; sourceTree = "<group>"; };
51A11F132BD08D5D0060C07E /* HKSample+ORKJSONDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HKSample+ORKJSONDictionary.h"; sourceTree = "<group>"; };
51A11F142BD08D5D0060C07E /* CMMotionActivity+ORKJSONDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CMMotionActivity+ORKJSONDictionary.m"; sourceTree = "<group>"; };
51A11F152BD08D5D0060C07E /* HKSample+ORKJSONDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "HKSample+ORKJSONDictionary.m"; sourceTree = "<group>"; };
@@ -1461,8 +1365,6 @@
51AF1B1F2B683C3400D3B399 /* ORKWebViewStepResult_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ORKWebViewStepResult_Private.h; sourceTree = "<group>"; };
51AF1B212B69803A00D3B399 /* Window.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Window.wav; sourceTree = "<group>"; };
51AF1B222B69803A00D3B399 /* Noise.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Noise.wav; sourceTree = "<group>"; };
51B76DFA2CB5B5A30061698A /* ResearchKitActiveTask.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = ResearchKitActiveTask.docc; sourceTree = "<group>"; };
51B76DFC2CB5C73C0061698A /* ResearchKitUI.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = ResearchKitUI.docc; sourceTree = "<group>"; };
51B94DBC2B311E810039B0E7 /* CLLocationManager+ResearchKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CLLocationManager+ResearchKit.h"; sourceTree = "<group>"; };
51B94DC62B3254FD0039B0E7 /* CLLocationManager+ResearchKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CLLocationManager+ResearchKit.m"; sourceTree = "<group>"; };
51BF30BC247B330900E2E669 /* ORKIconButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ORKIconButton.h; sourceTree = "<group>"; };
@@ -1538,7 +1440,6 @@
618DA04A1A93D0D600E63AA8 /* ORKAccessibilityFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ORKAccessibilityFunctions.m; sourceTree = "<group>"; };
618DA04B1A93D0D600E63AA8 /* UIView+ORKAccessibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "UIView+ORKAccessibility.h"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
618DA04C1A93D0D600E63AA8 /* UIView+ORKAccessibility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = "UIView+ORKAccessibility.m"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
6227743F2C5CF7DC00F2E741 /* retspl_dBFS_AIRPODSPROV2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = retspl_dBFS_AIRPODSPROV2.plist; sourceTree = "<group>"; };
7118AC6020BF6A3900D7A6BB /* Sentence7.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Sentence7.wav; sourceTree = "<group>"; };
7118AC6120BF6A3A00D7A6BB /* Sentence4.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Sentence4.wav; sourceTree = "<group>"; };
7118AC6220BF6A3A00D7A6BB /* Sentence6.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Sentence6.wav; sourceTree = "<group>"; };
@@ -2238,6 +2139,13 @@
path = Accessibility/Localized;
sourceTree = "<group>";
};
0BCC4BA4286A654C001E316F /* Resources */ = {
isa = PBXGroup;
children = (
);
path = Resources;
sourceTree = "<group>";
};
1490DCF2224D3B71003FEEDA /* ORKResultTests */ = {
isa = PBXGroup;
children = (
@@ -2352,7 +2260,6 @@
3FFF18341829DB1D00167070 = {
isa = PBXGroup;
children = (
0BA1D93A2BD1DF5A00BB79DB /* ResearchKit.podspec */,
05F3765923C797930068E166 /* ResearchKit.xctestplan */,
168EEAAE230B6F9E003FD2FA /* scripts */,
86B623AF19520B770074CD3C /* ResearchKit */,
@@ -2572,57 +2479,6 @@
path = Normalized;
sourceTree = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
519CE85D2C6BC1C5003BB584 /* Family History */ = {
isa = PBXGroup;
children = (
519CE85E2C6BC1DB003BB584 /* ORKFamilyHistoryResultTests.swift */,
);
name = "Family History";
sourceTree = "<group>";
};
51A11F1B2BD094A00060C07E /* Custom View */ = {
isa = PBXGroup;
children = (
@@ -2840,7 +2696,6 @@
5D06633024FEF272005D9B40 /* Info.plist */,
CA1C7A5B288B0C69004DAB3A /* Info-iOS.plist */,
51FBAC582BC86E6E009CA28F /* ResearchKitUI_Private.modulemap */,
51B76DFC2CB5C73C0061698A /* ResearchKitUI.docc */,
);
path = ResearchKitUI;
sourceTree = "<group>";
@@ -2885,6 +2740,7 @@
children = (
51AEAAA02B74296800F4D107 /* Stale */,
512741262B1557220045A449 /* ResearchKit.docc */,
0BCC4BA4286A654C001E316F /* Resources */,
5D000EC02620F27100E5442A /* Configuration */,
5DABE5AD24DA16E600570C57 /* ResearchKit_Prefix.pch */,
B1C1DE4F196F541F00F75544 /* ResearchKit.h */,
@@ -2925,7 +2781,6 @@
86CC8EA61AC09383001CCD89 /* ResearchKitTests */ = {
isa = PBXGroup;
children = (
519CE85D2C6BC1C5003BB584 /* Family History */,
51EB9A592B8D1CB80064A515 /* FormatterTests */,
51AF19512B583B5B00D3B399 /* ORKESerializationTests */,
51CB80D42AFEBE4800A1F410 /* ConditionalFormItems */,
@@ -3011,7 +2866,6 @@
B12EFF341AB2111200A80147 /* Step */ = {
isa = PBXGroup;
children = (
519CE8152C6582A0003BB584 /* Family History */,
86C40BB91A8D7C5C00081FAC /* ORKStep.h */,
86C40BBA1A8D7C5C00081FAC /* ORKStep.m */,
86C40BBB1A8D7C5C00081FAC /* ORKStep_Private.h */,
@@ -3341,8 +3195,6 @@
CA1C7A69288B1093004DAB3A /* Choice Format Helpers */ = {
isa = PBXGroup;
children = (
5192BF9C2AE1DE62006E43FB /* ORKColorChoiceCellGroup.h */,
5192BF9B2AE1DE62006E43FB /* ORKColorChoiceCellGroup.m */,
861D11B31AA7D073003C98A7 /* ORKTextChoiceCellGroup.h */,
861D11B41AA7D073003C98A7 /* ORKTextChoiceCellGroup.m */,
);
@@ -3352,8 +3204,6 @@
CA1C7A6A288B1243004DAB3A /* Control Views */ = {
isa = PBXGroup;
children = (
5192BF8D2AE1C051006E43FB /* ORKAgePicker.h */,
5192BF8E2AE1C051006E43FB /* ORKAgePicker.m */,
BC1C032A1CA301E300869355 /* ORKHeightPicker.h */,
BC1C032B1CA301E300869355 /* ORKHeightPicker.m */,
1B4B95B91F5F014E006B629F /* ORKWeightPicker.h */,
@@ -3490,8 +3340,6 @@
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 */,
@@ -3567,7 +3415,6 @@
CA1C7A73288B1ADD004DAB3A /* Step */ = {
isa = PBXGroup;
children = (
519CE82F2C6585DF003BB584 /* Family History */,
CA08053F28AD7CC8001695EF /* ORKViewControllerProviding.h */,
CA08054328AD7EBA001695EF /* ORKStep+ResearchKitUI.m */,
BAD65E4F2284F266008A5DCE /* ORKStepView_Private.h */,
@@ -3969,7 +3816,6 @@
CAD089A7289DDEA8007B2A98 /* Walking */,
51FBAC7D2BC9EBA7009CA28F /* Info.plist */,
0B0852772BD872EA00149963 /* PrivacyInfo.xcprivacy */,
51B76DFA2CB5B5A30061698A /* ResearchKitActiveTask.docc */,
);
path = ResearchKitActiveTask;
sourceTree = "<group>";
@@ -4056,7 +3902,6 @@
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 */,
@@ -4645,7 +4490,6 @@
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 */,
@@ -4703,7 +4547,6 @@
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 */,
86C40D621A8D7C5C00081FAC /* ORKQuestionStep_Internal.h in Headers */,
@@ -4726,7 +4569,6 @@
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 */,
@@ -4735,7 +4577,6 @@
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 */,
@@ -4749,7 +4590,6 @@
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 */,
@@ -4764,7 +4604,6 @@
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 */,
@@ -4778,7 +4617,6 @@
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 */,
@@ -4789,8 +4627,6 @@
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 */,
@@ -4799,7 +4635,6 @@
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 */,
@@ -4845,7 +4680,6 @@
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 */,
@@ -4877,7 +4711,6 @@
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 */,
@@ -4896,7 +4729,6 @@
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 */,
@@ -4915,7 +4747,6 @@
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 */,
@@ -5188,9 +5019,9 @@
productReference = B183A5951A8535D100C76870 /* ResearchKit.framework */;
productType = "com.apple.product-type.framework";
};
CA1C7A40288B0C68004DAB3A /* ResearchKitUI */ = {
CA1C7A40288B0C68004DAB3A /* ResearchKitUI (iOS) */ = {
isa = PBXNativeTarget;
buildConfigurationList = CA1C7A54288B0C68004DAB3A /* Build configuration list for PBXNativeTarget "ResearchKitUI" */;
buildConfigurationList = CA1C7A54288B0C68004DAB3A /* Build configuration list for PBXNativeTarget "ResearchKitUI (iOS)" */;
buildPhases = (
CA1C7A43288B0C68004DAB3A /* Headers */,
CA1C7A45288B0C68004DAB3A /* Sources */,
@@ -5203,7 +5034,7 @@
dependencies = (
CA1C7A5F288B0CA2004DAB3A /* PBXTargetDependency */,
);
name = ResearchKitUI;
name = "ResearchKitUI (iOS)";
productName = ResearchKitUI;
productReference = CA1C7A5A288B0C68004DAB3A /* ResearchKitUI.framework */;
productType = "com.apple.product-type.framework";
@@ -5236,7 +5067,7 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
CLASSPREFIX = ORK;
LastSwiftUpdateCheck = 1530;
LastSwiftUpdateCheck = 1020;
LastUpgradeCheck = 1500;
ORGANIZATIONNAME = researchkit.org;
TargetAttributes = {
@@ -5311,9 +5142,8 @@
targets = (
B183A4731A8535D100C76870 /* ResearchKit */,
86CC8E991AC09332001CCD89 /* ResearchKitTests */,
CA1C7A40288B0C68004DAB3A /* ResearchKitUI */,
CA1C7A40288B0C68004DAB3A /* ResearchKitUI (iOS) */,
CAD08966289DD747007B2A98 /* ResearchKitActiveTask */,
0BC672D82BD9C52D005798AC /* ResearchKitAllTargets */,
);
};
/* End PBXProject section */
@@ -5375,7 +5205,6 @@
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 */,
@@ -5448,7 +5277,6 @@
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 */,
@@ -5491,7 +5319,6 @@
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 */,
@@ -5501,7 +5328,6 @@
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 */,
@@ -5519,20 +5345,17 @@
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 */,
5192BF852AE1BA47006E43FB /* ORKFrontFacingCameraStepResult.m in Sources */,
031A0FC224CF4ECD000E4455 /* ORKSensorPermissionType.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 */,
@@ -5542,7 +5365,6 @@
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 */,
@@ -5567,7 +5389,6 @@
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 */,
@@ -5583,7 +5404,6 @@
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 */,
@@ -5603,9 +5423,7 @@
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 */,
@@ -5651,12 +5469,10 @@
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 */,
@@ -5671,7 +5487,6 @@
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 */,
@@ -5704,7 +5519,6 @@
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 */,
@@ -5844,7 +5658,6 @@
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 */,
@@ -5904,21 +5717,6 @@
/* 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 */;
@@ -5936,7 +5734,7 @@
};
CAF8D2BA288F2DCB001E6992 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = CA1C7A40288B0C68004DAB3A /* ResearchKitUI */;
target = CA1C7A40288B0C68004DAB3A /* ResearchKitUI (iOS) */;
targetProxy = CAF8D2B9288F2DCB001E6992 /* PBXContainerItemProxy */;
};
CAFAA6C728A19E2F0010BBDE /* PBXTargetDependency */ = {
@@ -5946,7 +5744,7 @@
};
CAFAA6C928A19E330010BBDE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = CA1C7A40288B0C68004DAB3A /* ResearchKitUI */;
target = CA1C7A40288B0C68004DAB3A /* ResearchKitUI (iOS) */;
targetProxy = CAFAA6C828A19E330010BBDE /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@@ -6017,24 +5815,6 @@
/* 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 */;
@@ -6289,15 +6069,6 @@
/* 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 = (
@@ -6305,7 +6076,7 @@
3FFF186A1829DB1E00167070 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = Debug;
};
86CC8EA31AC09332001CCD89 /* Build configuration list for PBXNativeTarget "ResearchKitTests" */ = {
isa = XCConfigurationList;
@@ -6314,7 +6085,7 @@
86CC8EA51AC09332001CCD89 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = Debug;
};
B183A5921A8535D100C76870 /* Build configuration list for PBXNativeTarget "ResearchKit" */ = {
isa = XCConfigurationList;
@@ -6323,16 +6094,16 @@
B183A5941A8535D100C76870 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = Debug;
};
CA1C7A54288B0C68004DAB3A /* Build configuration list for PBXNativeTarget "ResearchKitUI" */ = {
CA1C7A54288B0C68004DAB3A /* Build configuration list for PBXNativeTarget "ResearchKitUI (iOS)" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CA1C7A55288B0C68004DAB3A /* Debug */,
CA1C7A57288B0C68004DAB3A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = Debug;
};
CAD08970289DD747007B2A98 /* Build configuration list for PBXNativeTarget "ResearchKitActiveTask" */ = {
isa = XCConfigurationList;
@@ -6341,7 +6112,7 @@
CAD0896D289DD747007B2A98 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
@@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1530"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "CAD08966289DD747007B2A98"
BuildableName = "ResearchKitActiveTask.framework"
BlueprintName = "ResearchKitActiveTask"
ReferencedContainer = "container:ResearchKit.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "CAD08966289DD747007B2A98"
BuildableName = "ResearchKitActiveTask.framework"
BlueprintName = "ResearchKitActiveTask"
ReferencedContainer = "container:ResearchKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
<InstallAction
buildConfiguration = "Release">
</InstallAction>
</Scheme>
@@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1530"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0BC672D82BD9C52D005798AC"
BuildableName = "ResearchKitAllTargets"
BlueprintName = "ResearchKitAllTargets"
ReferencedContainer = "container:ResearchKit.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0BC672D82BD9C52D005798AC"
BuildableName = "ResearchKitAllTargets"
BlueprintName = "ResearchKitAllTargets"
ReferencedContainer = "container:ResearchKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
<InstallAction
buildConfiguration = "Release">
</InstallAction>
</Scheme>
@@ -16,7 +16,7 @@
BuildableIdentifier = "primary"
BlueprintIdentifier = "CA1C7A40288B0C68004DAB3A"
BuildableName = "ResearchKitUI.framework"
BlueprintName = "ResearchKitUI"
BlueprintName = "ResearchKitUI (iOS)"
ReferencedContainer = "container:ResearchKit.xcodeproj">
</BuildableReference>
</BuildActionEntry>
@@ -52,7 +52,7 @@
BuildableIdentifier = "primary"
BlueprintIdentifier = "CA1C7A40288B0C68004DAB3A"
BuildableName = "ResearchKitUI.framework"
BlueprintName = "ResearchKitUI"
BlueprintName = "ResearchKitUI (iOS)"
ReferencedContainer = "container:ResearchKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
@@ -28,7 +28,6 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#import <CoreLocation/CLLocationManager.h>
NS_ASSUME_NONNULL_BEGIN
@@ -53,4 +52,3 @@ NS_ASSUME_NONNULL_BEGIN
@end
NS_ASSUME_NONNULL_END
#endif
@@ -28,7 +28,6 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#import "CLLocationManager+ResearchKit.h"
#import "ORKDefines.h"
@@ -36,22 +35,37 @@
@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
@@ -29,10 +29,8 @@
*/
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_OPTIONS(NSInteger, ORKSampleJSONOptions) {
@@ -61,5 +59,3 @@ typedef NS_OPTIONS(NSInteger, ORKSampleJSONOptions) {
@end
NS_ASSUME_NONNULL_END
#endif
@@ -45,7 +45,7 @@ static NSString *const HKUnitKey = @"unit";
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,4 +167,3 @@ static NSString *const HKCorrelatedObjectsKey = @"objects";
}
@end
#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
+1
View File
@@ -30,6 +30,7 @@
#import <UIKit/UIKit.h>
#import <HealthKit/HealthKit.h>
#import <ResearchKit/ORKStep.h>
-2
View File
@@ -164,7 +164,6 @@
(self.shouldUseNextAsSkipButton == castObject.shouldUseNextAsSkipButton));
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (NSSet<HKObjectType *> *)requestedHealthKitTypesForReading {
NSMutableSet<HKObjectType *> *set = [NSMutableSet set];
for (ORKRecorderConfiguration *config in self.recorderConfigurations) {
@@ -175,7 +174,6 @@
}
return set;
}
#endif
- (ORKPermissionMask)requestedPermissions {
ORKPermissionMask mask = [super requestedPermissions];
+1 -184
View File
@@ -61,8 +61,6 @@
NS_ASSUME_NONNULL_BEGIN
@class ORKBooleanAnswerFormat;
@class ORKColorChoiceAnswerFormat;
@class ORKColorChoice;
@class ORKTextChoiceAnswerFormat;
@class ORKTextChoice;
@@ -125,8 +123,6 @@ ORK_CLASS_AVAILABLE
+ (ORKTextChoiceAnswerFormat *)choiceAnswerFormatWithStyle:(ORKChoiceAnswerStyle)style
textChoices:(NSArray<ORKTextChoice *> *)textChoices;
+ (ORKColorChoiceAnswerFormat *)choiceAnswerFormatWithStyle:(ORKChoiceAnswerStyle)style
colorChoices:(NSArray<ORKColorChoice *> *)colorChoices;
/// @name Validation
@@ -193,29 +189,9 @@ ORK_CLASS_AVAILABLE
*/
@property (copy, readonly) NSArray<ORKTextChoice *> *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<ORKColorChoice *> *)colorChoices NS_DESIGNATED_INITIALIZER;
@property (readonly) ORKChoiceAnswerStyle style;
@property (copy, readonly) NSArray<ORKColorChoice *> *colorChoices;
@end
/**
The `ORKBooleanAnswerFormat` class behaves the same as the `ORKTextChoiceAnswerFormat` class,
@@ -410,34 +386,6 @@ ORK_CLASS_AVAILABLE
@end
ORK_CLASS_AVAILABLE
@interface ORKColorChoice: NSObject <NSSecureCoding, NSCopying, NSObject>
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithColor:(nullable UIColor *)color
text:(nullable NSString *)text
detailText:(nullable NSString *)detailText
value:(NSObject<NSCopying, NSSecureCoding> *)value;
- (instancetype)initWithColor:(nullable UIColor *)color
text:(nullable NSString *)text
detailText:(nullable NSString *)detailText
value:(NSObject<NSCopying, NSSecureCoding> *)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;
@property (nonatomic, copy, readonly) NSObject<NSCopying, NSSecureCoding> *value;
@property (readonly) BOOL exclusive;
@end
#pragma mark - iOS
@@ -532,9 +480,8 @@ ORK_CLASS_AVAILABLE
minimumValue:(double)minimumValue
maximumValue:(double)maximumValue
defaultValue:(double)defaultValue;
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
+ (ORKLocationAnswerFormat *)locationAnswerFormat;
#endif
+ (ORKSESAnswerFormat *)socioEconomicAnswerFormatWithTopRungText:(NSString *)topRungText bottomRungText:(NSString *)bottomRungText;
@@ -2079,134 +2026,6 @@ 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
@@ -2214,7 +2033,6 @@ ORK_CLASS_AVAILABLE
An `ORKLocationAnswerFormat` object produces an `ORKLocationQuestionResult` object.
*/
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
ORK_CLASS_AVAILABLE
@interface ORKLocationAnswerFormat : ORKAnswerFormat
@@ -2233,7 +2051,6 @@ ORK_CLASS_AVAILABLE
@property (copy, nullable) NSString *placeholder;
@end
#endif
/**
Socio-Economic Ladder Answer Format.
+2 -451
View File
@@ -44,10 +44,8 @@
#import "ResearchKit/ResearchKit-Swift.h"
#endif
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
@import HealthKit;
@import MapKit;
@import Contacts;
@@ -83,8 +81,6 @@ NSString *ORKQuestionTypeString(ORKQuestionType questionType) {
SQT_CASE(Weight);
SQT_CASE(Location);
SQT_CASE(SES);
SQT_CASE(Age);
SQT_CASE(Year);
}
#undef SQT_CASE
}
@@ -99,7 +95,6 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
NSMutableDictionary *_unitsTable;
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@synthesize healthStore=_healthStore;
+ (instancetype)sourceWithHealthStore:(HKHealthStore *)healthStore {
@@ -208,10 +203,8 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
[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) {
@@ -232,12 +225,8 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
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];
@@ -279,11 +268,10 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
[answerFormat setHealthKitUserUnit:healthKitDefault];
}
}
#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@end
#endif // TARGET_OS_IOS
#endif
#pragma mark - ORKAnswerFormat
@@ -489,11 +477,9 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
defaultValue:defaultValue];
}
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
+ (ORKLocationAnswerFormat *)locationAnswerFormat {
return [ORKLocationAnswerFormat new];
}
#endif
+ (ORKSESAnswerFormat *)socioEconomicAnswerFormatWithTopRungText:(NSString *)topRungText
bottomRungText:(NSString *)bottomRungText {
@@ -516,10 +502,6 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
return [[ORKTextChoiceAnswerFormat alloc] initWithStyle:style textChoices:textChoices];
}
+ (ORKColorChoiceAnswerFormat *)choiceAnswerFormatWithStyle:(ORKChoiceAnswerStyle)style
colorChoices:(NSArray<ORKColorChoice *> *)colorChoices {
return [[ORKColorChoiceAnswerFormat alloc] initWithStyle:style colorChoices:colorChoices];
}
- (void)validateParameters {
}
@@ -575,7 +557,6 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
return NO;
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (HKObjectType *)healthKitObjectType {
return nil;
}
@@ -595,7 +576,6 @@ static NSNumberFormatterStyle ORKNumberFormattingStyleConvert(ORKNumberFormattin
- (void)setHealthKitUserUnit:(HKUnit *)unit {
}
#endif
- (ORKQuestionType)questionType {
return ORKQuestionTypeNone;
@@ -1126,117 +1106,9 @@ static NSArray *ork_processTextChoices(NSArray<ORKTextChoice *> *textChoices) {
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<ORKColorChoice *> *)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
@@ -1398,93 +1270,6 @@ NSArray<Class> *ORKAllowableValueClasses(void) {
@end
#pragma mark - ORKColorChoice
@implementation ORKColorChoice
+ (instancetype)new {
ORKThrowMethodUnavailableException();
}
- (instancetype)init {
ORKThrowMethodUnavailableException();
}
- (instancetype)initWithColor:(UIColor *)color
text:(NSString *)text
detailText:(NSString *)detailText
value:(NSObject<NSCopying,NSSecureCoding> *)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<NSCopying,NSSecureCoding> *)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
@@ -3131,7 +2916,6 @@ NSArray<Class> *ORKAllowableValueClasses(void) {
answerFormat->_spellCheckingType = _spellCheckingType;
answerFormat->_keyboardType = _keyboardType;
answerFormat->_textContentType = _textContentType;
if (@available(iOS 12.0, *)) {
answerFormat->_passwordRules = _passwordRules;
}
@@ -3208,7 +2992,6 @@ NSArray<Class> *ORKAllowableValueClasses(void) {
answerFormat->_keyboardType = _keyboardType;
answerFormat->_autocapitalizationType = _autocapitalizationType;
answerFormat->_textContentType = _textContentType;
if (@available(iOS 12.0, *)) {
answerFormat->_passwordRules = _passwordRules;
}
@@ -3789,237 +3572,6 @@ static NSString *const kSecureTextEntryEscapeString = @"*";
@end
#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
#pragma mark - ORKLocationAnswerFormat
@implementation ORKLocationAnswerFormat
@@ -4090,7 +3642,6 @@ static const NSInteger ORKAgeAnswerDefaultMaxAge = 125;
}
@end
#endif
#pragma mark ORKSESAnswerFormat
+6 -14
View File
@@ -29,10 +29,7 @@
*/
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
#if TARGET_OS_IOS
#import <ResearchKit/ORKAnswerFormat_Private.h>
#import <ResearchKit/ORKChoiceAnswerFormatHelper.h>
@@ -44,11 +41,9 @@ NS_ASSUME_NONNULL_BEGIN
BOOL ORKIsAnswerEmpty(_Nullable id answer);
#if TARGET_OS_IOS
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
NSString *ORKHKBiologicalSexString(HKBiologicalSex biologicalSex);
NSString *ORKHKBloodTypeString(HKBloodType bloodType);
#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#endif // TARGET_OS_IOS
#endif
NSString *ORKQuestionTypeString(ORKQuestionType questionType);
// Need to mark these as designated initializers to avoid warnings once we designate the others.
@@ -74,7 +69,6 @@ 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)
@@ -89,15 +83,13 @@ ORK_DESIGNATE_CODING_AND_SERIALIZATION_INITIALIZERS(ORKTextChoice)
#if TARGET_OS_IOS
- (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 // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#endif // TARGET_OS_IOS
#endif
- (nullable NSString *)localizedInvalidValueStringWithAnswerString:(nullable NSString *)text;
@@ -262,16 +254,16 @@ NSArray<Class> *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;
- (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;
- (nullable HKUnit *)defaultHealthKitUnitForAnswerFormat:(ORKAnswerFormat *)answerFormat;
- (void)updateHealthKitUnitForAnswerFormat:(ORKAnswerFormat *)answerFormat force:(BOOL)force;
@end
@interface ORKTextChoiceOther()
@@ -35,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
@class ORKAnswerFormat;
@class ORKImageChoice;
@class ORKTextChoice;
@class ORKColorChoice;
@protocol ORKAnswerOption;
@@ -74,7 +74,6 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable ORKImageChoice *)imageChoiceAtIndex:(NSUInteger)index;
- (nullable ORKColorChoice *)colorChoiceAtIndex:(NSUInteger)index;
@end
#endif
@@ -69,10 +69,7 @@
return option && [option isKindOfClass:[ORKImageChoice class]] ? (ORKImageChoice *) option : nil;
}
- (ORKColorChoice *)colorChoiceAtIndex:(NSUInteger)index {
id<ORKAnswerOption> option = [self answerOptionAtIndex:index];
return option && [option isKindOfClass:[ORKColorChoice class]] ? (ORKColorChoice *) option : nil;
}
#endif
- (ORKTextChoice *)textChoiceAtIndex:(NSUInteger)index {
@@ -141,8 +138,6 @@
for (id answerValue in (NSArray *)answer) {
id<ORKAnswerOption> matchedChoice = nil;
BOOL isTextChoiceOtherResult = [self _isTextChoiceOtherResult:answerValue choices:_choices];
for ( id<ORKAnswerOption> choice in _choices) {
#if TARGET_OS_IOS
if ([choice isKindOfClass:[ORKTextChoiceOther class]]) {
@@ -153,12 +148,7 @@
} 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;
@@ -201,20 +191,6 @@
}
- (BOOL)_isTextChoiceOtherResult:(id)answerValue choices:(NSArray *)choices {
if (answerValue == nil) {
return NO;
}
for (id<ORKAnswerOption> choice in _choices) {
if ([choice.value isEqual:answerValue]){
return NO;
}
}
return YES;
}
- (NSString *)stringForChoiceAnswer:(id)answer {
NSMutableArray<NSString *> *answerStrings = [[NSMutableArray alloc] init];
NSArray *indexes = [self selectedIndexesForAnswer:answer];
+2 -6
View File
@@ -30,11 +30,9 @@
#import <Foundation/Foundation.h>
#import <HealthKit/HealthKit.h>
#import <ResearchKit/ORKDefines.h>
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
NS_ASSUME_NONNULL_BEGIN
@@ -87,8 +85,6 @@ 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
@@ -150,7 +146,7 @@ ORK_CLASS_AVAILABLE
@property (copy, readonly) HKQueryAnchor *lastAnchor;
@end
#endif
/**
An object that collects CMMotionActivity.
+2 -2
View File
@@ -112,7 +112,7 @@ static NSString *const ItemIdentifierFormatWithTwoPlaceholders = @"org.researchk
@end
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@implementation ORKHealthCollector : ORKCollector
- (instancetype)initWithSampleType:(HKSampleType*)sampleType unit:(HKUnit*)unit startDate:(NSDate*)startDate {
@@ -288,7 +288,7 @@ static NSString *const ItemIdentifierFormatWithTwoPlaceholders = @"org.researchk
}
@end
#endif
@implementation ORKMotionActivityCollector : ORKCollector
+2 -2
View File
@@ -43,7 +43,7 @@
@end
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@protocol ORKHealthCollectable <NSObject>
- (HKSampleType *)sampleType;
@@ -71,7 +71,7 @@
@property (copy) HKQueryAnchor *lastAnchor;
@end
#endif
@interface ORKMotionActivityCollector()
@@ -1,74 +0,0 @@
/*
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 <Foundation/Foundation.h>
#import <ResearchKit/ORKTypes.h>
@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 <NSSecureCoding, NSCopying>
+ (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<ORKHealthCondition *> *)conditions
formItems:(NSArray<ORKFormItem *> *)formItems NS_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString *stepIdentifier;
@property (nonatomic, readonly, copy) NSString *conditionsFormItemIdentifier;
@property (nonatomic, readonly, copy) NSArray<ORKHealthCondition *> *conditions;
@property (nonatomic, copy) NSArray<ORKFormItem *> *formItems;
@end
NS_ASSUME_NONNULL_END
@@ -1,107 +0,0 @@
/*
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<ORKHealthCondition *> *)conditions
formItems:(nonnull NSArray<ORKFormItem *> *)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
@@ -60,7 +60,6 @@ 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<HKSample *> *)samples;
/**
@@ -74,7 +73,7 @@ NS_ASSUME_NONNULL_BEGIN
until the data is accepted.
*/
- (BOOL)healthCorrelationCollector:(ORKHealthCorrelationCollector *)collector didCollectCorrelations:(NSArray<HKCorrelation *> *)correlations;
#endif
/**
Method for delivering the collected motion activities.
@@ -146,7 +145,6 @@ ORK_CLASS_AVAILABLE
@return Initiated health collector.
*/
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (ORKHealthCollector *)addHealthCollectorWithSampleType:(HKSampleType *)sampleType
unit:(HKUnit *)unit
startDate:(NSDate *)startDate
@@ -168,7 +166,7 @@ ORK_CLASS_AVAILABLE
units:(NSArray<HKUnit *> *)units
startDate:(NSDate *)startDate
error:(NSError * _Nullable *)error;
#endif
/**
Add a collector for motion activity.
+3 -14
View File
@@ -35,9 +35,6 @@
#import "ORKHelpers_Internal.h"
#import <HealthKit/HealthKit.h>
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
static NSString *const ORKDataCollectionPersistenceFileName = @".dataCollection.ork.data";
@@ -46,10 +43,8 @@ static NSString *const ORKDataCollectionPersistenceFileName = @".dataCollection
NSOperationQueue *_operationQueue;
NSString * _Nonnull _managedDirectory;
NSArray<ORKCollector *> *_collectors;
CMMotionActivityManager *_activityManager;
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
HKHealthStore *_healthStore;
#endif
CMMotionActivityManager *_activityManager;
NSMutableArray<HKObserverQueryCompletionHandler> *_completionHandlers;
}
@@ -122,14 +117,12 @@ static inline void dispatch_sync_if_not_on_queue(dispatch_queue_t queue, dispatc
});
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (HKHealthStore *)healthStore {
if (!_healthStore && [HKHealthStore isHealthDataAvailable]){
_healthStore = [[HKHealthStore alloc] init];
}
return _healthStore;
}
#endif
- (CMMotionActivityManager *)activityManager {
if (!_activityManager && [CMMotionActivityManager isActivityAvailable]) {
@@ -174,7 +167,6 @@ static inline void dispatch_sync_if_not_on_queue(dispatch_queue_t queue, dispatc
_collectors = [collectors copy];
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (ORKHealthCollector *)addHealthCollectorWithSampleType:(HKSampleType*)sampleType unit:(HKUnit *)unit startDate:(NSDate *)startDate error:(NSError**)error {
if (!sampleType) {
@@ -227,7 +219,6 @@ static inline void dispatch_sync_if_not_on_queue(dispatch_queue_t queue, dispatc
return healthCorrelationCollector;
}
#endif
- (ORKMotionActivityCollector *)addMotionActivityCollectorWithStartDate:(NSDate *)startDate
error:(NSError* __autoreleasing *)error {
@@ -328,16 +319,13 @@ static inline void dispatch_sync_if_not_on_queue(dispatch_queue_t queue, dispatc
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
}];
}];
@@ -352,6 +340,7 @@ static inline void dispatch_sync_if_not_on_queue(dispatch_queue_t queue, dispatc
// No need to persist collectors
return NO;
}];
}
@end
@@ -35,9 +35,7 @@
@interface ORKDataCollectionManager ()
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@property (nonatomic, strong, readonly) HKHealthStore *healthStore;
#endif
@property (nonatomic, strong, readonly) CMMotionActivityManager *activityManager;
+9
View File
@@ -40,5 +40,14 @@
#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)
@@ -1,49 +0,0 @@
/*
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 <ResearchKit/ORKResult.h>
@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<ORKRelatedPerson *> *relatedPersons;
@property (nonatomic, nullable, copy) NSArray<NSString *> *displayedConditions;
@end
NS_ASSUME_NONNULL_END
@@ -1,81 +0,0 @@
/*
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
-53
View File
@@ -1,53 +0,0 @@
/*
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 <ResearchKit/ORKStep.h>
#import <ResearchKit/ORKTypes.h>
@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<ORKRelativeGroup *> *relativeGroups;
@end
NS_ASSUME_NONNULL_END
-115
View File
@@ -1,115 +0,0 @@
/*
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
-1
View File
@@ -176,7 +176,6 @@ 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.
-2
View File
@@ -182,7 +182,6 @@
}
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (NSSet<HKObjectType *> *)requestedHealthKitTypesForReading {
NSMutableSet<HKObjectType *> *healthTypes = [NSMutableSet set];
@@ -196,7 +195,6 @@
return healthTypes.count ? healthTypes : nil;
}
#endif
@end
+2 -7
View File
@@ -29,11 +29,8 @@
*/
#import <ResearchKit/ORKAnswerFormat.h>
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
#import <ResearchKit/ORKAnswerFormat.h>
NS_ASSUME_NONNULL_BEGIN
@@ -73,8 +70,6 @@ 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
ORK_CLASS_AVAILABLE
@interface ORKHealthKitCharacteristicTypeAnswerFormat : ORKAnswerFormat
@@ -226,6 +221,6 @@ included in the question result generated by form items or question steps
- (NSString *)localizedUnitString;
@end
#endif
NS_ASSUME_NONNULL_END
+1 -2
View File
@@ -38,7 +38,7 @@
#import "ORKQuestionResult_Private.h"
#import "ORKResult.h"
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#pragma mark - ORKHealthAnswerFormat
ORKBiologicalSexIdentifier const ORKBiologicalSexIdentifierFemale = @"HKBiologicalSexFemale";
@@ -420,4 +420,3 @@ NSString *ORKHKBloodTypeString(HKBloodType bloodType) {
}
@end
#endif
-70
View File
@@ -1,70 +0,0 @@
/*
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 <Foundation/Foundation.h>
#import <ResearchKit/ORKTypes.h>
@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 <NSSecureCoding, NSCopying>
+ (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<NSCopying, NSSecureCoding> *)value NS_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString *identifier;
@property (nonatomic, readonly, copy) NSString *displayName;
@property (nonatomic, readonly, copy) NSObject<NSCopying, NSSecureCoding> *value;
@end
NS_ASSUME_NONNULL_END
-98
View File
@@ -1,98 +0,0 @@
/*
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<NSCopying,NSSecureCoding> *)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
@@ -30,10 +30,7 @@
#import "ORKHealthKitPermissionType.h"
#import "ORKHelpers_Internal.h"
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
static NSString *const Symbol = @"heart.fill";
static uint32_t const IconTintColor = 0xFF5E5E;
@@ -83,7 +80,6 @@ static uint32_t const IconTintColor = 0xFF5E5E;
}
- (void)checkHealthKitAuthorizationStatus {
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
if (![HKHealthStore isHealthDataAvailable]) {
_permissionState = ORKRequestPermissionsStateNotSupported;
if (self.permissionsStatusUpdateCallback != nil) {
@@ -112,8 +108,6 @@ static uint32_t const IconTintColor = 0xFF5E5E;
});
}];
#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
}
- (BOOL)canContinue {
@@ -124,7 +118,6 @@ static uint32_t const IconTintColor = 0xFF5E5E;
}
- (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) {
@@ -137,7 +130,6 @@ static uint32_t const IconTintColor = 0xFF5E5E;
}
});
}];
#endif // ORK_FEATURE_HEALTHKIT_AUTHORIZATION
}
- (BOOL)isEqual:(id)object {
@@ -31,9 +31,8 @@
#import <Foundation/Foundation.h>
#import "ORKOperation.h"
#import "ORKDefines.h"
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@class ORKDataCollectionManager;
@class ORKCollector;
@protocol ORKHealthCollectable;
@@ -48,4 +47,3 @@
- (instancetype)initWithCollector:(ORKCollector<ORKHealthCollectable> *)collector mananger:(ORKDataCollectionManager *)manager;
@end
#endif
@@ -35,7 +35,7 @@
#import "ORKCollector_Internal.h"
#import "ORKDataCollectionManager_Internal.h"
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
static NSUInteger const QueryLimitSize = 1000;
@implementation ORKHealthSampleQueryOperation {
@@ -245,4 +245,3 @@ static NSUInteger const QueryLimitSize = 1000;
}
@end
#endif
-7
View File
@@ -372,13 +372,6 @@ 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) {
@@ -37,11 +37,9 @@ 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
@@ -31,7 +31,6 @@
#import "ORKLocationPermissionType.h"
#import "ORKHelpers_Internal.h"
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#import <CoreLocation/CLLocationManagerDelegate.h>
#import <ResearchKit/CLLocationManager+ResearchKit.h>
@@ -117,4 +116,3 @@ static const uint32_t IconDarkTintColor = 0x00A36C;
}
@end
#endif
@@ -43,25 +43,20 @@ static const uint32_t IconDarkTintColor = 0xEF6FD8;
@property (nonatomic, readonly, assign) BOOL canContinue;
@end
@implementation ORKMotionActivityPermissionType {
__weak NSTimer *_checkStatusTimer;
}
@implementation ORKMotionActivityPermissionType
+ (instancetype)new {
return [[ORKMotionActivityPermissionType alloc] init];
}
- (instancetype)init {
- (instancetype)init
{
self = [super init];
if (self) {
}
return self;
}
- (void)cleanUp {
[self _invalidateCheckStatusTimer];
}
- (CMMotionActivityManager *)activityManager {
if (!_activityManager) {
_activityManager = [[CMMotionActivityManager alloc] init];
@@ -110,33 +105,9 @@ static const uint32_t IconDarkTintColor = 0xEF6FD8;
[self.activityManager startActivityUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMMotionActivity * _Nullable activity) {}];
[self.activityManager stopActivityUpdates];
if (self.permissionsStatusUpdateCallback != nil) {
self.permissionsStatusUpdateCallback();
}
if (!_checkStatusTimer) {
__weak typeof(self) weakSelf = self;
_checkStatusTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:weakSelf
selector:@selector(_checkPermissionStatus)
userInfo:nil
repeats:YES];
}
}
- (void)_checkPermissionStatus {
if ([self permissionState] == ORKRequestPermissionsStateConnected && self.permissionsStatusUpdateCallback != nil) {
self.permissionsStatusUpdateCallback();
[self _invalidateCheckStatusTimer];
}
}
- (void)_invalidateCheckStatusTimer {
if (_checkStatusTimer) {
[_checkStatusTimer invalidate];
_checkStatusTimer = nil;
}
}
- (BOOL)isEqual:(id)object {
-2
View File
@@ -73,14 +73,12 @@
return ORKPermissionNone;
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (NSSet<HKObjectType *> *)requestedHealthKitTypesForReading {
if ([self.pageTask respondsToSelector:@selector(requestedHealthKitTypesForReading)]) {
return [self.pageTask requestedHealthKitTypesForReading];
}
return nil;
}
#endif
#pragma mark - NSCopying
-3
View File
@@ -69,7 +69,6 @@ ORK_CLASS_AVAILABLE
@property (nonatomic, assign, readonly) BOOL canContinue;
- (void)requestPermission;
- (void)cleanUp;
+ (ORKHealthKitPermissionType *)healthKitPermissionTypeWithSampleTypesToWrite:(nullable NSSet<HKSampleType *> *)sampleTypesToWrite
objectTypesToRead:(nullable NSSet<HKObjectType *> *)objectTypesToRead;
@@ -80,9 +79,7 @@ ORK_CLASS_AVAILABLE
+ (ORKMotionActivityPermissionType *) deviceMotionPermissionType;
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
+ (ORKLocationPermissionType *) locationPermissionType;
#endif
@end
-6
View File
@@ -66,10 +66,6 @@
ORKThrowMethodUnavailableException();
}
- (void)cleanUp {
// left empty for optional subclass override
}
+ (ORKHealthKitPermissionType *)healthKitPermissionTypeWithSampleTypesToWrite:(NSSet<HKSampleType *> *)sampleTypesToWrite objectTypesToRead:(NSSet<HKObjectType *> *)objectTypesToRead {
return [[ORKHealthKitPermissionType alloc] initWithSampleTypesToWrite:sampleTypesToWrite
objectTypesToRead:objectTypesToRead];
@@ -87,11 +83,9 @@
return [[ORKMotionActivityPermissionType alloc] init];
}
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
+ (ORKLocationPermissionType *) locationPermissionType {
return [[ORKLocationPermissionType alloc] init];
}
#endif
@end
+3 -8
View File
@@ -33,10 +33,7 @@
#endif
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#import <CoreLocation/CLLocation.h>
#endif
#import <Contacts/Contacts.h>
NS_ASSUME_NONNULL_BEGIN
@@ -153,9 +150,8 @@ ORK_CLASS_AVAILABLE
@end
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
/**
The `ORKLocation` class represents the location addess obtained from a location question.
The `ORKLocation` class represents the location addess obtained from a locaton question.
*/
ORK_CLASS_AVAILABLE
@interface ORKLocation : NSObject <NSCopying, NSSecureCoding>
@@ -184,7 +180,7 @@ ORK_CLASS_AVAILABLE
@property (nonatomic, copy, readonly, nullable) CNPostalAddress *postalAddress;
@end
#endif
/**
A result object from a location answer format.
@@ -196,7 +192,6 @@ 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
ORK_CLASS_AVAILABLE
@interface ORKLocationQuestionResult : ORKQuestionResult
@@ -206,7 +201,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.
+1 -2
View File
@@ -326,7 +326,7 @@
@end
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#pragma mark - ORKLocationQuestionResult
@implementation ORKLocation
@@ -469,7 +469,6 @@ static NSString *const RegionIdentifierKey = @"region.identifier";
@end
#endif
#pragma mark - ORKSESQuestionResult
@@ -49,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN
@end
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
@interface ORKLocation ()
- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate
@@ -60,5 +60,5 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithPlacemark:(CLPlacemark *)placemark userInput:(NSString *)userInput;
@end
#endif
NS_ASSUME_NONNULL_END
+3 -8
View File
@@ -31,12 +31,10 @@
#import <UIKit/UIKit.h>
#import <HealthKit/HealthKit.h>
#import <ResearchKit/ORKDefines.h>
#import <Availability.h>
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
NS_ASSUME_NONNULL_BEGIN
@@ -107,9 +105,8 @@ 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<HKObjectType *> *)requestedHealthKitTypesForReading;
#endif
@end
@@ -312,8 +309,6 @@ ORK_CLASS_AVAILABLE
No additional parameters besides the identifier are required.
*/
#if ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
ORK_CLASS_AVAILABLE
@interface ORKLocationRecorderConfiguration : ORKRecorderConfiguration
@@ -338,7 +333,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.
-3
View File
@@ -89,12 +89,9 @@
return nil;
}
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
- (NSSet<HKObjectType *> *)requestedHealthKitTypesForReading {
return nil;
}
#endif
- (ORKPermissionMask)requestedPermissionMask {
return ORKPermissionNone;
}
-87
View File
@@ -1,87 +0,0 @@
/*
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 <Foundation/Foundation.h>
#import <ResearchKit/ORKAnswerFormat.h>
#import <ResearchKit/ORKFormStep.h>
#import <ResearchKit/ORKTypes.h>
@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 <NSSecureCoding, NSCopying>
+ (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<NSString *> *)getDetailListValuesWithIdentifiers:(NSArray<NSString *> *)identifiers
displayInfoKeyAndValues:(NSDictionary<NSString *, NSDictionary<NSString *, NSString *> *> *)displayInfoKeyAndValues;
- (NSArray<NSString *> *)getConditionsListWithStepIdentifier:(NSString *)stepIdentifier
formItemIdentifier:(NSString *)formItemIdentifier
conditionsKeyValues:(NSDictionary<NSString *, NSString *> *)conditionsKeyValues;
@end
NS_ASSUME_NONNULL_END
-190
View File
@@ -1,190 +0,0 @@
/*
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 <ResearchKit/ORKAnswerFormat_Internal.h>
#import <ResearchKit/ORKCollectionResult.h>
#import <ResearchKit/ORKCollectionResult_Private.h>
#import <ResearchKit/ORKResult_Private.h>
#import <ResearchKit/ORKStep_Private.h>
#import <ResearchKit/ORKQuestionResult.h>
#import <ResearchKit/ORKQuestionResult_Private.h>
#import <ResearchKit/ORKHelpers_Internal.h>
@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<NSString *> *)getDetailListValuesWithIdentifiers:(NSArray<NSString *> *)identifiers
displayInfoKeyAndValues:(nonnull NSDictionary<NSString *,NSDictionary<NSString *,NSString *> *> *)displayInfoKeyAndValues {
NSMutableArray<NSString *> *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<NSString *> *)getConditionsListWithStepIdentifier:(NSString *)stepIdentifier
formItemIdentifier:(NSString *)formItemIdentifier
conditionsKeyValues:(nonnull NSDictionary<NSString *,NSString *> *)conditionsKeyValues {
ORKStepResult *stepResult = (ORKStepResult *)[self.taskResult resultForIdentifier:stepIdentifier];
ORKChoiceQuestionResult *choiceQuestionResult = (ORKChoiceQuestionResult *)[stepResult resultForIdentifier:formItemIdentifier];
NSArray<NSString *> *conditionsList = (NSArray<NSString *> *)choiceQuestionResult.choiceAnswers;
NSMutableArray<NSString *> *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 dont know"] || [[value lowercaseString] isEqual:@"i prefer not to answer"]);
}
@end
-89
View File
@@ -1,89 +0,0 @@
/*
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 <Foundation/Foundation.h>
#import <ResearchKit/ORKTypes.h>
@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<ORKFormStep *> *)formSteps
detailTextIdentifiers:(NSArray<NSString *> *)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<ORKFormStep *> *formSteps;
@property (nonatomic, readonly, copy) NSArray<NSString *> *detailTextIdentifiers;
@end
NS_ASSUME_NONNULL_END
-129
View File
@@ -1,129 +0,0 @@
/*
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<ORKFormStep *> *)formSteps
detailTextIdentifiers:(NSArray<NSString *> *)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
-1
View File
@@ -540,7 +540,6 @@ 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
+10 -10
View File
@@ -51,19 +51,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 +180,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 +240,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 +272,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 +303,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.
*/
-5
View File
@@ -182,11 +182,6 @@ 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`.
+2 -7
View File
@@ -169,8 +169,6 @@ ORKDefineStringKey(ORKBasicCellReuseIdentifier);
step->_bulletType = _bulletType;
step->_bulletIconNames = ORKArrayCopyObjects(_bulletIconNames);
step->_allowsSelection = _allowsSelection;
step->_bottomPadding = _bottomPadding;
return step;
}
@@ -188,7 +186,6 @@ ORKDefineStringKey(ORKBasicCellReuseIdentifier);
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;
}
@@ -200,7 +197,6 @@ ORKDefineStringKey(ORKBasicCellReuseIdentifier);
ORK_ENCODE_OBJ(aCoder, bulletIconNames);
ORK_ENCODE_BOOL(aCoder, allowsSelection);
ORK_ENCODE_BOOL(aCoder, pinNavigationContainer);
ORK_ENCODE_OBJ(aCoder, bottomPadding);
}
#pragma mark - Equality
@@ -214,12 +210,11 @@ ORKDefineStringKey(ORKBasicCellReuseIdentifier);
&& (self.bulletType == castObject.bulletType)
&& (self.allowsSelection == castObject.allowsSelection)
&& ORKEqualObjects(self.bulletIconNames, castObject.bulletIconNames)
&& self.pinNavigationContainer == castObject.pinNavigationContainer)
&& ORKEqualObjects(self.bottomPadding, castObject.bottomPadding);
&& self.pinNavigationContainer == castObject.pinNavigationContainer);
}
- (NSUInteger)hash {
return super.hash ^ self.items.hash ^ self.bulletIconNames.hash ^ self.bottomPadding.hash ^ (_bulletType ? 0xf : 0x0) ^ (_allowsSelection ? 0xf : 0x0) ^ (_pinNavigationContainer ? 0xf : 0x0);
return super.hash ^ self.items.hash ^ self.bulletIconNames.hash ^ (_bulletType ? 0xf : 0x0) ^ (_allowsSelection ? 0xf : 0x0) ^ (_pinNavigationContainer ? 0xf : 0x0);
}
@end
+1 -5
View File
@@ -30,10 +30,7 @@
#import <Foundation/Foundation.h>
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#import <HealthKit/HealthKit.h>
#endif
#if TARGET_OS_IOS
@@ -274,7 +271,6 @@ requests access to these HealthKit types.
See also: `requestedHealthKitTypesForWriting`.
*/
#if ORK_FEATURE_HEALTHKIT_AUTHORIZATION
@property (nonatomic, copy, readonly, nullable) NSSet<HKObjectType *> *requestedHealthKitTypesForReading;
/**
@@ -287,7 +283,7 @@ requests access to these HealthKit types.
See also: `requestedHealthKitTypesForReading`.
*/
@property (nonatomic, copy, readonly, nullable) NSSet<HKObjectType *> *requestedHealthKitTypesForWriting;
#endif
/**
The set of permissions requested by the task.
+1 -9
View File
@@ -131,15 +131,6 @@ typedef NS_ENUM(NSInteger, ORKQuestionType) {
*/
ORKQuestionTypeSES,
/**
In an age question, the participant can enter an age by using an age picker.
*/
ORKQuestionTypeAge,
/**
In an age question, the participant can enter an age by using an age picker. ORKQuestionTypeYear will be used if the useYearForResult property of the question's ORKAgeAnswerFormat is set to true.
*/
ORKQuestionTypeYear
} ORK_ENUM_AVAILABLE;
@@ -400,6 +391,7 @@ ORK_EXTERN ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierAirPodsPro
/// AirPods Max
ORK_EXTERN ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierAirPodsMax;
/// Lightning and Audio Jack Earpods
ORK_EXTERN ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierEarPods;
+1
View File
@@ -46,6 +46,7 @@ ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierAirPodsPro = @"AIRPOD
ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierAirPodsProGen2 = @"AIRPODSPROV2";
ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierAirPodsMax = @"AIRPODSMAX";
ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierEarPods = @"EARPODS";
ORKHeadphoneTypeIdentifier const ORKHeadphoneTypeIdentifierUnknown = @"UNKNOWN";
@@ -8,4 +8,3 @@ RUN_CLANG_STATIC_ANALYZER = YES
SUPPORTS_MACCATALYST = NO
TARGETED_DEVICE_FAMILY = 1
DEBUG_INFORMATION_FORMAT = dwarf
@@ -23,20 +23,13 @@ PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*] =
SWIFT_VERSION = 5.0
CLANG_STATIC_ANALYZER_MODE = deep
ORK_FRAMEWORK_VERSION_NUMBER = 3.1.1
ORK_FRAMEWORK_VERSION_NUMBER = 3.0
ORK_FRAMEWORK_BUILD_NUMBER = $(ORK_FRAMEWORK_BUILD_NUMBER_CI_$(CI)) // ORK_FRAMEWORK_BUILD_NUMBER_CI_TRUE or ORK_FRAMEWORK_BUILD_NUMBER_CI_
ORK_FRAMEWORK_BUILD_NUMBER_CI_TRUE = $(CI_BUILD_NUMBER)
ORK_FRAMEWORK_BUILD_NUMBER_CI_FALSE = $(ORK_FRAMEWORK_VERSION_NUMBER) // When not building in CI, assume build and version number are the same
ORK_FRAMEWORK_BUILD_NUMBER_CI_ = $(ORK_FRAMEWORK_BUILD_NUMBER_CI_FALSE)
// 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
ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION = 1
// Control whether ResearchKit compiles out CLLocationManager calls that would request authorization for location
// ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=0 compiles out the feature
// ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=1 compiles RK with the feature intact
@@ -44,27 +37,6 @@ ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS = $(ORK_FEATURE_CLLOCATIONMANAGER_DEFI
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_0 = ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=0
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_1 = ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=1
// Some HealthKit API calls used within the framework require your app to disclose using HealthKit and provide a reason during app store review.
// If your app does not use HealthKit or any of the ResearchKit HealthKit APIs, disable ResearchKit's HealthKit authorization.
ORK_FEATURE_HEALTHKIT_AUTHORIZATION = 1
// GCC Preprocessor definitions
ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC = $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC_$(ORK_FEATURE_HEALTHKIT_AUTHORIZATION))
ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC_0 = ORK_FEATURE_HEALTHKIT_AUTHORIZATION=0
ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC_1 = ORK_FEATURE_HEALTHKIT_AUTHORIZATION=1
// Swift active compilation conditions
ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT = $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT_$(ORK_FEATURE_HEALTHKIT_AUTHORIZATION))
ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT_0 =
ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT_1 = ORK_FEATURE_HEALTHKIT_AUTHORIZATION
#include? "../../../../xcconfig/ResearchKit-Shared.xcconfig"
#include? "samples/ORKCatalog/ResearchKit-Shared.xcconfig"
#include? "../xcconfig/ResearchKit-Shared.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) GLES_SILENCE_DEPRECATION=1 $(ORK_GCC_PREPROCESSOR_DEFINITIONS) $(ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS) $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC)
SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT)
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) GLES_SILENCE_DEPRECATION=1 $(ORK_GCC_PREPROCESSOR_DEFINITIONS) $(ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS)
@@ -3,5 +3,3 @@
//
#include "ResearchKitActiveTask-Shared.xcconfig"
DEBUG_INFORMATION_FORMAT = dwarf
@@ -5,4 +5,4 @@
#include "ResearchKitTests-Shared.xcconfig"
SWIFT_OBJC_BRIDGING_HEADER = ResearchKitTests/ResearchKitTests-Bridging-Header.h
DEBUG_INFORMATION_FORMAT = dwarf
@@ -20,41 +20,6 @@ ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS = $(ORK_FEATURE_CLLOCATIONMANAGER_DEFI
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_0 = ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=0
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_1 = ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=1
// 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
ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION = 1
// Some HealthKit API calls used within the framework require your app to disclose using HealthKit and provide a reason during app store review.
// If your app does not use HealthKit or any of the ResearchKit HealthKit APIs, disable ResearchKit's HealthKit authorization.
ORK_FEATURE_HEALTHKIT_AUTHORIZATION = 1
// GCC Preprocessor definitions
ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC = $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC_$(ORK_FEATURE_HEALTHKIT_AUTHORIZATION))
ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC_0 = ORK_FEATURE_HEALTHKIT_AUTHORIZATION=0
ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC_1 = ORK_FEATURE_HEALTHKIT_AUTHORIZATION=1
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_GCC = $(ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_GCC_$(ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION))
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_GCC_0 = ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=0
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_GCC_1 = ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION=1
// Swift active compilation conditions
ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT = $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT_$(ORK_FEATURE_HEALTHKIT_AUTHORIZATION))
ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT_0 =
ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT_1 = ORK_FEATURE_HEALTHKIT_AUTHORIZATION
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_SWIFT = $(ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_SWIFT_$(ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION))
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_SWIFT_0 =
ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_SWIFT_1 = ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION
#include? "../xcconfig/ResearchKit-Shared.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) GLES_SILENCE_DEPRECATION=1 $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_GCC) $(ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_GCC)
SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) $(ORK_FEATURE_HEALTHKIT_DEFINITIONS_SWIFT) $(ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS_SWIFT)
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) $(ORK_FEATURE_CLLOCATIONMANAGER_DEFINITIONS)
@@ -3,5 +3,3 @@
//
#include "ResearchKitUI-iOS-Shared.xcconfig"
DEBUG_INFORMATION_FORMAT = dwarf
@@ -609,7 +609,7 @@
"ENVIRONMENTSPL_UNIT" = "dBA";
"ENVIRONMENTSPL_CALCULATING" = "Measuring…";
"ENVIRONMENTSPL_THRESHOLD" = "Threshold: %@ dBA";
"ENVIRONMENTSPL_OK" = "Good";
"ENVIRONMENTSPL_OK" = "Background Noise OK";
"ENVIRONMENTSPL_NOISE" = "Too Loud";
"ENVIRONMENTSPL_TITLE_2" = "Find a Quiet Place";
"ENVIRONMENTSPL_INTRO_TEXT_2" = "For accurate results, this task should be completed in a quiet location. Once the background noise measurement reading is completed, you may continue.";
@@ -794,21 +794,3 @@
"KNEE_RANGE_OF_MOTION_TOUCH_ANYWHERE_STEP_INSTRUCTION_RIGHT" = "Place your device on your right knee.\n\nTap the screen and extend your right knee as far as you can.\n";
"KNEE_RANGE_OF_MOTION_SPOKEN_INSTRUCTION_LEFT" = "When you are done, return your left knee to the start position.\n\nThen tap anywhere.";
"KNEE_RANGE_OF_MOTION_SPOKEN_INSTRUCTION_RIGHT" = "When you are done, return your right knee to the start position.\n\nThen tap anywhere.";
/* Family History */
"FAMILY_HISTORY_I_DONT_KNOW" = "I don't know";
"FAMILY_HISTORY_CONDITIONS_FORM_ITEM_TEXT" = "Have they been diagnosed with any of the following diseases or health conditions?";
"FAMILY_HISTORY_CONDITIONS_STEP_TITLE" = "Health Conditions";
"FAMILY_HISTORY_CONDITIONS_STEP_DESCRIPTION" = "Answer these questions to the best of your ability";
"FAMILY_HISTORY_COMPLETION_STEP_TITLE" = "Task Complete";
"FAMILY_HISTORY_NONE_OF_THE_ABOVE" = "None of the above";
"FAMILY_HISTORY_PREFER_NOT_TO_ANSWER" = "I prefer not to answer";
"FAMILY_HISTORY_CONDITIONS" = "Conditions";
"FAMILY_HISTORY_NONE_SELECTED" = "None selected";
"FAMILY_HISTORY_EDIT_ENTRY" = "Edit Entry";
"FAMILY_HISTORY_DELETE_ENTRY_TITLE" = "Are you sure you want to delete this entry from your Family Health History?";
"FAMILY_HISTORY_DELETE_ENTRY" = "Delete Entry";
"FAMILY_HISTORY_CANCEL" = "Cancel";
"FAMILY_HISTORY_ADD" = "Add %@";
"FAMILY_HISTORY_CONDITIONS_STEP_DESCRIPTION_TEMP" = "Confirm any diagnosed diseases or health conditions.";
"AX_FAMILY_HISTORY_EDIT_BUTTON" = "Edit button";
+7 -2
View File
@@ -73,8 +73,13 @@ static NSArray <ORKFormItem*> *ORKRegistrationFormItems(ORKRegistrationStepOptio
answerFormat.autocapitalizationType = UITextAutocapitalizationTypeNone;
answerFormat.autocorrectionType = UITextAutocorrectionTypeNo;
answerFormat.spellCheckingType = UITextSpellCheckingTypeNo;
answerFormat.textContentType = UITextContentTypeOneTimeCode;
if (@available(iOS 12.0, *)) {
answerFormat.textContentType = UITextContentTypeNewPassword;
} else {
answerFormat.textContentType = UITextContentTypePassword;
}
ORKFormItem *item = [[ORKFormItem alloc] initWithIdentifier:ORKRegistrationFormItemIdentifierPassword
text:ORKLocalizedString(@"PASSWORD_FORM_ITEM_TITLE", nil)
answerFormat:answerFormat
@@ -0,0 +1,19 @@
# Active tasks
Present a specific question and collect an answer.
## Topics
### Essentials
- ``ORKActiveStep``
- ``ORKActiveStepViewController``
### Audio
- ``ORKInvalidDBHLValue``
- ``ORKAudiometryTimestampProvider``
- ``ORKAudioChannel``
- ``ORKSpeechRecognizerLocale``
- ``ORKAudiometryProtocol``
@@ -4,21 +4,12 @@ Present a specific question and collect an answer.
## Topics
### Age
- ``ORKAgeAnswerFormat``
### Color Choice
- ``ORKColorChoiceAnswerFormat``
- ``ORKColorChoice``
### Essentials
- ``ORKAnswerFormat``
- ``ORKNumericPrecision``
### Height and Weight
### height, and weight
- ``ORKHeightAnswerFormat``
- ``ORKWeightAnswerFormat``
@@ -11,10 +11,11 @@ Obtain a participant's consent to collect research data.
- ``ORKCustomSignatureAccessoryViewDelegate``
- ``ORKCustomSignatureAccessoryViewProtocol``
- ``ORKCustomSignatureAccessoryViewProvider``
- ``ORKCustomSignatureFooterViewStatusDelegate``
- ``ORKConsentSectionType``
### Signature acquisition
- ``ORKSignatureView``
- ``ORKConsentSignature``
- ``ORKSignatureFormatter``
- ``ORKHTMLPDFWriter``
- ``ORKSignatureViewDelegate``
@@ -1,46 +0,0 @@
# Constants
Constants utilized throughout ResearchKit.
## Topics
### Constants
- ``CheckmarkViewDimension``
- ``ORKAuxiliaryImageTintColorKey``
- ``ORKBackgroundColorKey``
- ``ORKBlueHighlightColorKey``
- ``ORKBodyToBodyPaddingStandard``
- ``ORKBodyToBodyParagraphPaddingStandard``
- ``ORKBulletItemTextColorKey``
- ``ORKCaptionTextColorKey``
- ``ORKCardDefaultBorderWidth``
- ``ORKCardDefaultCornerRadii``
- ``ORKCardDefaultFontSize``
- ``ORKConsentBackgroundColorKey``
- ``ORKDarkTintColorKey``
- ``ORKDoneButtonPressedKey``
- ``ORKEffectViewOpacityHidden``
- ``ORKEffectViewOpacityVisible``
- ``ORKFormStepLargeTextMinimumHeaderHeight``
- ``ORKFormStepMinimumHeaderHeight``
- ``ORKImageChoiceButtonCornerRadii``
- ``ORKLightTintColorKey``
- ``ORKNavigationContainerColorKey``
- ``ORKNavigationContainerShadowColorKey``
- ``ORKProgressLabelColorKey``
- ``ORKQuestionStepMinimumHeaderHeight``
- ``ORKResetDoneButtonKey``
- ``ORKScreenMetricMaxDimension``
- ``ORKSignatureColorKey``
- ``ORKStepContainerTitleToBodyTopPaddingStandard``
- ``ORKStepContentIconImageViewDimension``
- ``ORKStepTopContentImageChangedKey``
- ``ORKSurveyItemMargin``
- ``ORKSurveyTableContainerLeftRightPadding``
- ``ORKToolBarTintColorKey``
- ``ORKTopContentImageViewBackgroundColorKey``
- ``ORKiPadBackgroundViewBottomPadding``
- ``ORKiPadBackgroundViewColorKey``
- ``ORKiPadBackgroundViewCornerRadius``
- ``ORKiPadBackgroundViewLeftRightPadding``
@@ -1,17 +0,0 @@
# Enumerations
Enumerations utilized throughout ResearchKit.
## Topics
### Enumerations
- ``ORKAudioChannel``
- ``ORKBodySagittal``
- ``ORKHeadphoneTypeIdentifier``
- ``ORKRequestPermissionsState``
- ``ORKSampleJSONOptions``
- ``ORKScreenMetric``
- ``ORKScreenType``
- ``ORKSpeechRecognizerLocale``
- ``ORKTaskFinishReason``
@@ -1,31 +0,0 @@
# Helper Functions
Helper Functions utilized throughout ResearchKit.
## Topics
### Helper Functions
- ``ORKCardLeftRightMarginForWindow``
- ``ORKColor``
- ``ORKColorSetColorForKey``
- ``ORKGetMetricForWindow``
- ``ORKGetVerticalScreenTypeForWindow``
- ``ORKNeedWideScreenDesign``
- ``ORKScrollIndicatorInsetsForScrollView``
- ``ORKStandardFullScreenLayoutMarginsForView``
- ``ORKStandardHorizontalMarginForView``
- ``ORKStandardLayoutMarginsForTableViewCell``
- ``ORKStandardLeftMarginForTableViewCell``
- ``ORKStepContainerExtendedLeftRightPaddingForWindow``
- ``ORKStepContainerFirstItemTopPaddingForWindow``
- ``ORKStepContainerLeftRightPaddingForWindow``
- ``ORKStepContainerTitleToBodyTopPaddingForWindow``
- ``ORKStepContainerTitleToBulletTopPaddingForWindow``
- ``ORKStepContainerTopContentHeightForWindow``
- ``ORKStepContainerTopPaddingForWindow``
- ``ORKTaskProgressMake``
- ``ORKTaskTotalProgressMake``
- ``ORKTitleLabelFontTextStyleForWindow``
- ``ORKUpdateScrollViewBottomInset``
- ``ORKWidthForSignatureView``
@@ -15,10 +15,6 @@ Obtain information from a step.
- ``ORKTaskResultSource``
### Family History
- ``ORKFamilyHistoryResult``
### File storage
- ``ORKFileResult``
@@ -29,6 +25,14 @@ Obtain information from a step.
- ``ORKSignatureResult``
- ``ORKConsentSignatureResult``
### Hearing
- ``ORKdBHLToneAudiometryResult``
- ``ORKEnvironmentSPLMeterResult``
- ``ORKToneAudiometryResult``
- ``ORKSpeechInNoiseResult``
- ``ORKSpeechRecognitionResult``
### Data collection
- ``ORKCollector``
@@ -36,8 +40,31 @@ Obtain information from a step.
- ``ORKHealthCorrelationCollector``
- ``ORKDataCollectionManager``
- ``ORKDataCollectionManagerDelegate``
- ``ORKRangeOfMotionResult``
- ``ORKReactionTimeResult``
- ``ORKBundleAsset``
### Dexterity
- ``ORKTimedWalkResult``
- ``ORKTowerOfHanoiResult``
- ``ORKTrailmakingResult``
- ``ORKHolePegTestResult``
- ``ORKTappingIntervalResult``
- ``ORKHolePegTestResult``
- ``ORKNormalizedReactionTimeResult``
- ``ORKPSATResult``
### Memory
- ``ORKSpatialSpanMemoryResult``
### Vision
- ``ORKStroopResult``
- ``ORKAccuracyStroopResult``
- ``ORKAmslerGridResult``
### Surveys
- ``ORKQuestionResult``
@@ -61,3 +88,7 @@ Obtain information from a step.
### Web
- ``ORKWebViewStepResult``
### 3-D models
- ``ORKUSDZModelManagerResult``
@@ -11,18 +11,26 @@ Using ResearchKit, you can build apps that obtain consent, give instructions, pr
### Essentials
- ``ORKStep``
- ``ORKStepViewController``
- ``ORKStepViewControllerDelegate``
### Active steps
- ``ORKActiveStep``
- ``ORKActiveStepViewController``
- ``ORKMotionActivityCollector``
- ``ORKMotionActivityPermissionType``
- ``ORKHolePegTestSample``
- ``ORKEnvironmentSPLMeterStep``
- ``ORKBodySagittal``
### Authentication and consent steps
- ``ORKLoginStep``
- ``ORKLoginStepViewController``
- ``ORKSignatureStep``
- ``ORKVerificationStep``
- ``ORKVerificationStepViewController``
- ``ORKLoginFormItemIdentifierEmail``
- ``ORKLoginFormItemIdentifierPassword``
- ``ORKKeychainWrapper``
@@ -44,22 +52,18 @@ Using ResearchKit, you can build apps that obtain consent, give instructions, pr
- ``ORKConsentReviewStep``
- ``ORKConsentSharingStep``
- ``ORKCompletionStep``
- ``ORKCompletionStepViewController``
- ``ORKCompletionStepIdentifier``
### Custom steps
- ``ORKCustomStep``
### Family History
- ``ORKFamilyHistoryStep``
- ``ORKConditionStepConfiguration``
- ``ORKHealthCondition``
- ``ORKRelatedPerson``
- ``ORKRelativeGroup``
- ``ORKCustomStepViewController``
### Form steps
- ``ORKFormStep``
- ``ORKFormStepViewController``
- ``ORKBodyItem``
- ``ORKBulletType``
- ``ORKBodyItemStyle``
@@ -72,31 +76,43 @@ Using ResearchKit, you can build apps that obtain consent, give instructions, pr
### Image and 3D model steps
- ``ORK3DModelStep``
- ``ORK3DModelManager``
- ``ORKUSDZModelManager``
- ``ORK3DModelManagerProtocol``
- ``ORKFrontFacingCameraStep``
- ``ORKImageCaptureStep``
- ``ORKPlaybackButton``
### Location steps
- ``ORKLocation``
- ``ORKLocationPermissionType``
- ``ORK_FEATURE_CLLOCATIONMANAGER_AUTHORIZATION``
### Passcode steps
- ``ORKPasscodeStep``
- ``ORKPasscodeViewController``
- ``ORKPasscodeDelegate``
- ``ORKPasscodeFlow``
- ``ORKPasscodeType``
### PDF and page steps
- ``ORKPDFViewerStep``
- ``ORKPDFViewerStepViewController``
- ``ORKPageStep``
- ``ORKPageStepViewController``
- ``ORKPDFViewerActionBarOption``
### Question and instruction steps
- ``ORKQuestionStep``
- ``ORKInstructionStep``
- ``ORKInstructionStepViewController``
- ``ORKLearnMoreInstructionStep``
- ``ORKLearnMoreStepViewController``
- ``ORKNavigablePageStep``
### Registration steps
@@ -114,6 +130,8 @@ Using ResearchKit, you can build apps that obtain consent, give instructions, pr
### Review steps
- ``ORKReviewStep``
- ``ORKReviewViewController``
- ``ORKReviewViewControllerDelegate``
### Step recording
@@ -124,6 +142,7 @@ Using ResearchKit, you can build apps that obtain consent, give instructions, pr
### Table steps
- ``ORKTableStep``
- ``ORKTableStepViewController``
- ``ORKTableStepSource``
### Video steps
@@ -138,12 +157,19 @@ Using ResearchKit, you can build apps that obtain consent, give instructions, pr
### Wait steps
- ``ORKWaitStep``
- ``ORKWaitStepViewController``
### Web steps
- ``ORKWebViewStep``
- ``ORKWebViewStepDelegate``
- ``ORKWebViewStepViewController``
### Other steps
- ``ORKSecondaryTaskStep``
- ``ORKSkipStepNavigationRule``
- ``ORKTouchAnywhereStep``
- ``ORKTouchAnywhereStepViewController``
- ``ORKAccuracyStroopStep``
@@ -13,20 +13,44 @@ A task can be a simple ordered sequence of steps, or be dynamic with previous re
- ``ORKTask``
- ``ORKOrderedTask``
- ``ORKNavigableOrderedTask``
- ``SwiftUIViewFactory``
### View controllers
- ``ORKTaskViewController``
- ``ORKTaskViewControllerDelegate``
- ``ORKTaskViewControllerFinishReason``
- ``ORKTaskViewControllerReviewMode``
### Audio
- ``ORKAudiometryStimulus``
- ``ORKAudioRecorderConfiguration``
- ``ORKToneAudiometrySample``
- ``ORKdBHLToneAudiometryFrequencySample``
- ``ORKdBHLTaskContext``
- ``ORKdBHLToneAudiometryUnit``
### Dexterity
- ``ORKPredefinedTaskHandOption``
- ``ORKPredefinedTaskOption``
- ``ORKPredefinedTaskLimbOption``
- ``ORKPSATSample``
- ``ORKPSATPresentationMode``
- ``ORKTappingSample``
- ``ORKTappingButtonIdentifier``
- ``ORKTowerOfHanoiMove``
- ``ORKTrailmakingTap``
- ``ORKTrailMakingTypeIdentifier``
- ``ORKTremorActiveTaskOption``
### Memory
- ``ORKSpatialSpanMemoryGameRecord``
- ``ORKSpatialSpanMemoryGameStatus``
- ``ORKSpatialSpanMemoryGameTouchSample``
### Navigation
- ``ORKStepNavigationRule``
@@ -39,6 +63,7 @@ A task can be a simple ordered sequence of steps, or be dynamic with previous re
- ``ORKStepModifier``
- ``ORKResultPredicateTaskIdentifierVariableName``
- ``ORKNullStepIdentifier``
- ``ORKStepViewControllerNavigationDirection``
- ``ORKKeyValueStepModifier``
- ``ORKResultPredicate``
- ``ORKResultSelector``
@@ -48,3 +73,4 @@ A task can be a simple ordered sequence of steps, or be dynamic with previous re
- ``ORKTaskProgress``
- ``ORKTaskTotalProgress``
- ``ORKProgressIndicatorType``
- ``ORKTaskViewControllerProgressMode``
+1 -16
View File
@@ -38,19 +38,4 @@ capabilities of frameworks such as HealthKit and CoreMotion.
- <doc:Consent>
- <doc:Surveys>
- <doc:Understanding-Active-Tasks>
### Articles
- <doc:Conditional-Logic-in-ResearchKit>
- <doc:Creating-Surveys>
- <doc:Family-History-Step>
- <doc:Obtaining-Consent>
- <doc:Setting-up-Your-Project-to-Use-ResearchKit>
- <doc:Understanding-Active-Tasks>
### Other
- <doc:Constants>
- <doc:Enumerations>
- <doc:Helper-Functions>
- <doc:ActiveTasks>
@@ -1,115 +0,0 @@
# Conditional Logic in ResearchKit
How to use conditional logic for ResearchKit steps and forms.
## Understanding Conditional Logic
When presenting a survey or task, conditionally show specific content based on the participant's responses. ResearchKit provides two solutions for conditional logic.
- **Step Navigation rules**: Conditionally navigate to a specific step based on the participant's response.
- **Form Item Visibility rules** - Conditionally hide or show specific form questions based on results from the same form or a form within another step.
### Navigating Steps Conditionally
Review the following classes to conditionally navigate to or skip specific steps during an `ORKTask`.
- `ORKResultSelector` - A class that identifies a result within a set of task results.
- `ORKResultPredicate` - Creates a predicate by accepting an `ORKResultSelector` and the expected result.
- `ORKPredicateStepNavigationRule` - A class that determines what step to navigate to if a given `ORKResultPredicate` is true.
- `ORKNavigableOrderedTask` - A subclass of the `ORKOrderedTask` that can accept one or more `ORKPredicateStepNavigationRule` objects and apply the expected conditional navigation.
The task for this example includes the steps seen below.
![Step 1](conditional-logic-in-researchKit-step1)
![Step 2](conditional-logic-in-researchKit-step2)
![Step 3](conditional-logic-in-researchKit-step3)
The conditional logic is based on answering `Yes` or `No` for the first question ("Do you like Apples?"):
- **Answering yes**: navigates to the second screen to select your favorite apple.
- **Answering no**: skips the second screen and navigates directly to the completion step.
```swift
//Construct Steps
let boolFormStep = ORKFormStep(identifier: "FormStep1")
boolFormStep.title = "Apple Task"
boolFormStep.text = "Please answer the following question."
let boolAnswerFormat = ORKAnswerFormat.booleanAnswerFormat()
let boolFormItem = ORKFormItem(identifier: "BooleanFormItemIdentifier",
text: "Do you like Apples?",
answerFormat: boolAnswerFormat)
boolFormStep.formItems = [boolFormItem]
let appleTextChoiceFormStep = appleTextChoiceFormStepExample()
let completionStep = completionStepExample()
//Conditional Logic
let boolResultSelector = ORKResultSelector(stepIdentifier: boolFormStep.identifier, resultIdentifier: boolFormItem.identifier)
let boolResultPredicate = ORKResultPredicate.predicateForBooleanQuestionResult(with: boolResultSelector, expectedAnswer: false)
let navigationRule = ORKPredicateStepNavigationRule(resultPredicatesAndDestinationStepIdentifiers: [ (boolResultPredicate, completionStep.identifier) ])
//Construct Navigable Task + Set Navigation Rule
let navigableTask = ORKNavigableOrderedTask(identifier: "NavigableTaskIdentifier", steps: [formStep1, appleTextChoiceFormStep, completionStep])
navigableTask.setNavigationRule(navigationRule, forTriggerStepIdentifier: formStep1.identifier)
```
Selecting yes:
@Video(source: "conditional-logic-in-researchKit-step-yes")
Selecting no:
@Video(source: "conditional-logic-in-researchKit-step-no")
### Managing Form Item Visibility
Familiarize yourself with the following classes to conditionally hide or show a question based on results from questions within the same form.
- `ORKResultSelector` - A class that identifies a result within a set of task results.
- `ORKResultPredicate` - Creates a predicate by accepting an `ORKResultSelector` and the expected result.
- `ORKPredicateFormItemVisibilityRule` - A class that determines if the form item it's attached to is hidden or visible if a given `ORKResultPredicate` is true.
Following the previous example, use the same questions but now with both on the same page.
- **Answering yes**: makes the apple choice question visible.
- **Answering no**: hides the apple choice question if visible.
```swift
//Construct FormStep
let formStep = ORKFormStep(identifier: "FormStep1")
formStep.title = "Apple Task"
formStep.text = "Please answer the following question."
let boolAnswerFormat = ORKAnswerFormat.booleanAnswerFormat()
let boolFormItem = ORKFormItem(identifier: "BooleanFormItemIdentifier",
text: "Do you like Apples?",
answerFormat: boolAnswerFormat)
let appleChoiceFormItem = appleChoiceFormItem()
formStep.formItems = [boolFormItem, appleChoiceFormItem]
let completionStep = completionStepExample()
//Conditional Logic
let resultSelector: ORKResultSelector = .init(stepIdentifier: formStep.identifier, resultIdentifier: boolFormItem.identifier)
let predicate = ORKResultPredicate.predicateForBooleanQuestionResult(with: resultSelector, expectedAnswer: true)
let visibilityRule = ORKPredicateFormItemVisibilityRule(predicate: predicate)
appleChoiceFormItem.visibilityRule = visibilityRule
//Construct Navigable Task
let navigableTask = ORKNavigableOrderedTask(identifier: "NavigableTaskIdentifier", steps: [formStep, completionStep])
```
Selecting yes & no:
@Video(source: "conditional-logic-in-researchKit-formItem-yes-no")
@@ -8,6 +8,8 @@ Provide collection and presentation information to a step.
- ``ORKAccelerometerRecorderConfiguration``
- ``ORKDeviceMotionRecorderConfiguration``
- ``ORKHealthClinicalTypeRecorderConfiguration``
- ``ORKHealthQuantityTypeRecorderConfiguration``
- ``ORKLocationRecorderConfiguration``
- ``ORKPedometerRecorderConfiguration``
- ``ORKRecorderConfiguration``
@@ -24,4 +26,8 @@ Provide collection and presentation information to a step.
### Style selection
- ``ORKTextButton``
- ``ORKContinueButton``
- ``ORKBorderedButton``
- ``ORKBorderedButtonDisabledStyle``
- ``ORKNavigationContainerButtonStyle``
@@ -1,198 +0,0 @@
# Creating surveys
Configure and present surveys with ResearchKit.
## Overview
A survey is a sequence of questions that you use to collect data from your users. In a ResearchKit app, a survey is composed of a survey task that has a collection of step objects (``ORKStep``). ``ORKFormStep`` instances can be added to the collection of steps to handle one or more questions each such as "What medications are you taking?" or "How many hours did you sleep last night?".
You can collect results for the individual steps or for the task as a whole. There are two types of survey tasks: an ordered task (``ORKOrderedTask``) and a navigable ordered task (``ORKNavigableOrderedTask``) which can be used to apply conditional logic.
In an ordered task, the order that the steps appear are always the same.
![Ordered Tasks](creating-surveys-ordered-tasks)
In a navigable ordered task, the order of the tasks can change, or branch out, depending on how the user answered a question in a previous task.
![Navigable Ordered Tasks](creating-surveys-navigable-ordered-tasks)
The steps for creating a task to present a survey are:
1. <a href="#create">Create one or more steps</a>
2. <a href="#task">Create a task</a>
3. <a href="#results">Collect results</a>
## 1. Create steps
The survey module provides a form step that can contain one or more questions
(``ORKFormStep``). You can also use an instruction step
(``ORKInstructionStep``) or a video instruction step (``ORKVideoInstructionStep``) to introduce the survey or provide instructions.
### Instruction step
An instruction step explains the purpose of a task and provides
instructions for the user. An ``ORKInstructionStep`` object includes an
identifier, title, text, detail text, and an image. An
instruction step doesn't collect any data and yields an empty
``ORKStepResult`` that records how long the instruction was
on screen.
```swift
let instructionStep = ORKInstructionStep(identifier: "identifier")
instructionStep.title = "Selection Survey"
instructionStep.text = "This survey helps us understand your eligibility for the fitness study."
```
Creating a step as shown in the code above, including it in a task, and presenting with a task view controller, yields something like this:
![Instruction Step](creating-surveys-instruction-step)
### Form Step
Whether your survey has one question or several related questions, you can use a form step (``ORKFormStep``) to present them on one page. Each question in a form step is represented as a form item (``ORKFormItem``), each with its
own answer format.
The result of a form step contains one question result for each form
item. The results are matched to their corresponding form items using
their identifier property.
The following code shows how to create a form that requests some basic details:
```swift
let sectionHeaderFormItem = ORKFormItem(sectionTitle: "Basic Information")
let nameFormItem = ORKFormItem(identifier: "NameIdentifier", text: "What is your name?", answerFormat: ORKTextAnswerFormat())
let emailFormItem = ORKFormItem(identifier: "EmailIdentifier", text: "What is your email?", answerFormat: ORKEmailAnswerFormat())
let headacheFormItem = ORKFormItem(identifier: "HeadacheIdentifier", text: "Do you have a headache?", answerFormat: ORKBooleanAnswerFormat())
let formStep = ORKFormStep(identifier: "FormStepIdentifier")
formStep.title = "Basic Information"
formStep.detailText = "please answer the questions below"
formStep.formItems = [sectionHeaderFormItem, nameFormItem, emailFormItem, headacheFormItem]
```
The code above creates this form step:
![Form Step](creating-surveys-form-step)
### Answer Formats
In the ResearchKit™ framework, an answer format defines how the user should be asked to
answer a question or an item in a form. For example, consider a
survey question such as "On a scale of 1 to 10, how much pain do you
feel?" The answer format for this question would naturally be a
discrete scale on that range, so you can use scale answer format (``ORKScaleAnswerFormat``),
and set its minimum and maximum
properties to reflect the desired range.
The screenshots below show the standard answer formats that the ResearchKit framework provides.
| | |
|---|---|
| ![Background Check Question](creating-surveys-background-check) | ![Blood Type Question](creating-surveys-blood-type) |
| ![Symptoms Question](creating-surveys-symptom-choice) | ![Age Question](creating-surveys-age) |
| ![Time of Day Question](creating-surveys-time-of-day) | ![Next Meeting Question](creating-surveys-next-meeting) |
| ![Text Entry Question](creating-surveys-feeling-text-entry) | ![Mood Question](creating-surveys-slider) |
| ![Email Question](creating-surveys-email) | ![Location Question](creating-surveys-location) |
## 2. Create a survey task
Once you create one or more steps, create an ``ORKOrderedTask`` object to
contain the steps. The code below shows the steps created above being added to a task.
```swift
// Create a task wrapping the instruction and form steps created earlier.
let orderedTask = ORKOrderedTask(identifier: "OrderedTaskIdentifier", steps: [instructionStep, formStep])
```
You must assign a string identifier to each step. The step identifier must be unique within the task, because it's the key that connects a step in the task hierarchy with the step result in the result hierarchy.
To present the task, attach it to a task view controller and present
it. The code below shows how to create a task view controller and present it modally.
```swift
let taskViewController = ORKTaskViewController(task: task, taskRun: nil)
taskViewController.delegate = self
present(taskViewController, animated: true)
```
## 3. Collect Results
The result property of the task view controller gives you the results of the task.
Each step view controller that the user views produces a step result
(``ORKStepResult``). The task view controller collates these results as
the user navigates through the task, in order to produce an
``ORKTaskResult``.
Both the task result and step result are collection results, in that
they can contain other result objects. For example, a task result contains an array of step results.
The results contained in a step result vary depending on the type of
step. For example, a form step produces one question result for
every form item; and an active task with recorders generally produces
one result for each recorder.
The hierarchy of results corresponds closely to the input
model hierarchy of task and steps as you can see here:
![Results Hierarchy](creating-surveys-results-hierarchy)
Among other properties, every result has an identifier. This
identifier is what connects the result to the model object (task,
step, form item, or recorder) that produced it. Every result also
includes start and end times, using the startDate and endDate
properties respectively. Use these properties to infer how long the user
spent on the step.
#### Saving Results on Task Completion
After a task is completed, you can save or upload the results. This approach
will likely include serializing the result hierarchy in some form,
either using the built-in `NSSecureCoding` support, or another
format appropriate for your application.
If your task can produce file output, the files are generally referenced by an ``ORKFileResult`` object and they are placed in the output directory that you set on the task view controller. After you complete a task, one implementation might be to serialize the result hierarchy into the output directory, compress the entire output
directory, and share it.
In the following example, the result is archived with
`NSKeyedArchiver` on successful completion. If you choose to support
saving and restoring tasks, the user may save the task. This
example also demonstrates how to obtain the restoration data that
would later be needed to restore the task.
```swift
func taskViewController(_ taskViewController: ORKTaskViewController,
didFinishWith reason: ORKTaskFinishReason,
error: Error?) {
switch reason {
case .completed:
// Archive the result object first
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: taskViewController.result,
requiringSecureCoding: true)
// Save the data to disk with file protection
// or upload to a remote server securely.
// If any file results are expected, also zip up the outputDirectory.
} catch {
print("error archiving result data: \(error.localizedDescription)")
}
break;
case .failed, .discarded, .earlyTermination:
// Generally, discard the result.
// Consider clearing the contents of the output directory.
break;
case .saved:
let data = taskViewController.restorationData
// Store the restoration data persistently for later use.
// Normally, keep the output directory for when you will restore.
break;
}
taskViewController.dismiss(animated: true, completion: nil)
}
```
Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Some files were not shown because too many files have changed in this diff Show More