* 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
Add a result predicate for determining if the user selected accept or decline in a consent signature step, allowing for custom navigation rules, such as skipping to the end of a survey if the user does not consent.
Also:
- Change some #imports to directly refer headers instead of going though the framework header because it enables it be included as a module through Cocoapods.
- Improve unit test encapsulation by making some classes (recorders) and methods available in the private header
Compilation time after you modify a header file has been greatly improved by avoiding including the umbrella headers (ResearchKit.h and ResearchKit_Private.h) in any of the framework files.
Also:
- Restructure .m files #import section into a hierarchy of alphabetically sorted subsections separated by one newline (1. local views and controls; 2. view controllers and recorders; 3. model files; 4. general files and helpers, 5. iOS frameworks). The #import order follows advice found here: http://qualitycoding.org/import-order/
- Remove needless and duplicate imports from .m files
- Make sure all headers include at least Foundation or UIKit; except Private or Internal headers which only include their own class header at the next public level
- Rename ORKHelpers.h to ORKHelpers_Internal.h (it is not public, and its name was misleading given that we also have ORKHelpers_Private.h).
- Add a few missing NS_ASSUME_NONNULL_BEGIN/NS_ASSUME_NONNULL_END annotation in headers
- Add a few missing double newline before and after import section
Introduce the ORKSkipStepNavigationRule and ORKPredicateSkipStepNavigationRule classes, and the appropriate 'ORKNavigableOrderedTask' methods to insert, view and remove them.
Implement ORKTest example code within the Navigable Loop Task Items.
Implement unit tests for the new functionality, and makes sure all serialization tests continue to pass.
- Fixes tests to reflect the new empty answer for a Choice Answer Format being ORKNullAnswerValue() instead of an empty array (introduced on the Review Step feature).
- Fixes test for task step identifier uniqueness validation (it now takes place on task init).
Also: use new methods in newly added form predicate.
Result predicates without a supplied 'stepIdentifier' argument now only match the corresponding question step result, but not any form item result.
If you pass 'nil', the obtained result predicate will have a $TASK_IDENTIFIER substitution variable which will be replaced in ORKPredicateStepNavigationRule by the ongoing task identifier.
Also:
- Add convenience methods with no 'taskIdentifier' argument to ORKResultPredicate.
- Update ORKTest sample code to use convenience methods.
- Update Unit Tests to cover both convenience and regular nullable methods.
You can now have question results with the same identifier as long as they are part of different task results. Supplying the desired task identifier with the predicate is now compulsory: use the current task identifier if you want to match the ongoing task; or use any of the task result identifiers if you add extra ones to ORKPredicateStepNavigationRule's 'additionalTaskResults' property.
This change:
- Adds the task identifier argument to all predicate-building methods.
- Allows better reuse of predicate building code.
- Modifies ORKPredicateStepNavigationRule and Unit Tests accordingly. Task results are no longer squashed into a question result array. The new result predicates match the ORKTaskResult tree in its original form.