Deckhand® Pro – 3.10.49-6182

April 5, 2022
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 1.1 or higher

Latest AppStore Release

  • ADDED: The $dh.mailto API call can now be used in compositions to send email, including attachments.
  • ADDED: onRequestUserChange to components. It will be called whenever the user initiates an interaction with the component. If the expression returns true then the interaction continues and the value can be changed. If false then the interaction will be cancelled.
  • ADDED: onUserChange. It will be called after a user operation results in a change to the component value. The context contains component and event as usual, but also contains oldValue which contains the previous value of the component before the change.
  • ADDED: onLoaded is now supported for all components.
  • CHANGED: onItemAdded to onItemLoaded to array panels. The old name was not entirely accurate as it was called even when existing items were loaded.
  • CHANGED: Panel addItem now returns the newly added item, or nil.
  • CHANGED: The placemark onUpdate is now deprecated as its name conflicts with the other uses of onXXX in Deckhand. It has been replaced with updateMethod. However, for compatibility, onUpdate still operates.
  • CHANGED: The queueAction function can now be executed from any background-enabled context, not just within action definitions.
  • FIXED: The font and segmentFont properties neither compiled nor operated correctly. Now, either name, size, or both can be provided and will be interpreted properly.
  • FIXED: Some expandable display features did not respond properly onscreen.

Note that onUserChange and onRequestUserChange apply to numberEntry, textEntry, booleanSegmentEntry, boolEntry, segmentEntry, and dateTimeEntry, dualNumberEntry, pinLookup, and delimiterTextEntry. These features are not consistently available to components embedded in legacy views such as catchReportView and landingReport.

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.10.31-6147

February 18, 2022
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 1.0.5 or higher

  • FIXED: Components would not always store and retrieve their values properly, especially within nested structures like expandable cells. The new form storage model solves this in all cases except some legacy components like MPI landings.
  • FIXED: Expressions of the format $session.trip.anyValue would not work. This was a bug specific to the $session.trip referencing itself.
  • FIXED: dateTimeEntry with countDownTimer types did not allow proper editing of the value. The pop-up always reset to zero.
  • FIXED: The dateString() function worked only with numeric dates. It did not accept proper date objects.
  • FIXED: Expressions no longer have odd limitations on function and array references. For example, up until now, you could not execute an expression like first($'somevalue') because of this bug. You’d have to use the unfortunate syntax (first($'somevalue'). This has now been fixed.
  • CHANGED: For expandable, arrays, or any composite component, changing the .value() no matter how complicated will completely rebuild the component to reflect the provided data.
  • CHANGED: While, by default, expandable components still look and behave the same, the new onClickExpand=attribute allows any component (not just expandable components) to display the expansion disclosure triangle to allow simulations of expansion to be implemented using expressions. If present, this property will override any default behaviour for expansion.
  • CHANGED: The label component now stores its value, just like any other component.
  • ADDED: The arrayPanel component was added, which is a powerful container providing a great deal of flexibility for embedding multiple sub-components including expandable and other arrayPanel components. This component has a hidden “cell header” similar to other cell headers which can be revealed using the component’s .headerVisible()method. There is an .addItem() method as well as a .removeItem() method so that array cells can be managed.
  • ADDED: The panel component was added, which is a simple container for other components.
  • ADDED: The timeZone= attribute is now supported on the dateTime component of gpsEntry as well as the dateTimeEntry component. This attribute controls only the display of information. Dates and times are always stored in UTC.
  • ADDED: A new variable, $system.timeZone now returns a timezone identifier suitable for use in places like the dateString() function as well as the newly added timeZone= attribute.
  • ADDED: topComponents and bottomComponents can be added to an arrayPanel (and in the future other components) to specify the components which occupy top and bottom positions within the cell while the array contents remain at the centre.
  • ADDED: arrayPanel now supports expandable="true" and it will automatically manage expansion and contraction. If showHeader is true, then the expansion will be controlled in the header, otherwise if there is a topComponents item, the first top component will become the expansion controller. This allows any type of cell to be used as an array header.
  • ADDED: The button component (different than the toolbar button declarations) allow the creation of action buttons directly on forms to allow the construction of new and complex form interactions.
  • ADDED: The retain property has been added to all components. It’s default value is visible meaning that data will be retained only for components which are visible. It can also be set to always or never.
  • ADDED: The current session ID is now available as $
  • ADDED: Every component now has a style= attribute which allows the cell visual style to be specified. In addition, each component has a .style() property which allows querying or changing of the style of active forms objects.
  • ADDED: A complete new Forms API was added, including the $form variable to access the root components, along with reliable access to the component context variable to access the current component properties, parents, and siblings.
  • ADDED: The sleep(seconds) function was added as a way to create momentary delays. This method only has an effect in an action context, and is useful primarily for debugging and automated testing.
  • ADDED: rememberValue can be set to true or false on any component to control whether or not the component’s value is remembered as the form default. If omitted, it defaults to the setting of rememberValues set on the view.
  • ADDED: The view rememberValues can be set to true or false to specify the default for each component.
  • ADDED: $action.getUserChoice() can be used to pop up a data-selection dialog similar to the species selection which occurs in the hard-coded catchEntryView species addition button.
  • ADDED: rememberValueAs can be set to a string identifier (not an expression, similar to a variable name) and the system will save the default value for this component so that any component that uses the same name will share the default. This can be useful for license numbers and other information which is globally applicable to more than one view.
  • ADDED: The forms API for catchEntryView now allows navigation of each catch item. The function .catchValue(species) allows querying of the current catch value and the properties minValue, maxValue, blackListDisposals, whiteListDisposals and containerCount are also supported.
  • DEPRECATED: While still supported, the $view.change() method is no longer the preferred way to access and change component values. The .value() method for each component should be used instead.
  • DEPRECATED: alwaysRequiresEntry has been deprecated in favour of rememberValue="false", above.
  • DEPRECATED: saveValues on views have been deprecated in favour of rememberValues on views, above. It continues to operate and is roughly equivalent to rememberValues="true" on the view.
  • REMOVED: loadFrom and comparisonJoin on components. Neither weren’t used in workflows.
  • REMOVED: The catchType lookup type has been removed from the numberEntry lookup condition type.

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.10.27-6141

December 20, 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.11 or higher

  • CHANGED: The settings button is now Panel1 and it can be replaced or hidden as desired. Defining the action button with no action hides it.
  • ADDED: The $action.launchUserPreferences() function can be used to display user preferences from anywhere.
  • ADDED: The $action.selectFolder(name) function can be used to select a folder by id value.
  • ADDED: The section of a workflow to define logbook categories and folders which correspond to activity columns. It is now possible to completely customise the operation of columns including emulating existing column behaviour in all aspects.
  • ADDED: The concept of a “detached session” is now possible which allow creating events which are not part of trips.
  • ADDED: Events and sessions can now have “tags” to differentiate different types of events and their associations with folders
  • ADDED: Added the icon-engine icon.

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.10.23-6132

November 19, 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.11 or higher

  • ADDED: Within compositions, $dh.closeThenExecute and $dh.execute can now be used to execute actions.
  • ADDED: $system.productsDefined now returns an array of IAP products which have been defined. They may not be available due to the app store configuration, but they have been defined to be presented if available.
  • ADDED: Action expressions can now be executed in the expression tester.
  • FIXED: gpsEntry controls would create a placemark even if hidden. Now, the placemark will be created only the first time the component becomes visible.

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.10.21-6129

November 12, 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.11 or higher

  • FIXED: $workflowActivated was not always activated, such as in some sharecode cases.
  • CHANGE: In a gpsEntry control, placemarks with onUpdate=”modify” will always consider any change to be a modification to the previous value, even if the placemark was non-existent at the time the component was first shown.

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.10.17-6123

November 7, 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.11 or higher

  • ADDED: New $workflowActivated action which can be used to execute code when a workflow appears
  • ADDED: New declareEventAction which can be used on an event to replace the default declaration action
  • ADDED: New type=”presentation” on launchComposition to allow presentation-style modals.
  • ADDED: Presentation Composition Type
  • FIXED: New spatial features additions (such as $workflow.geoData) could interfere with old hardcoded assumptions about MPINZ shape files. This has now been fixed so that the MPI shape files remain a special case, though they can also be used by the newer geodata features.
  • CHANGED: The field canBeEmpty has been removed from disposal-codes-additions.json
  • CHANGED: The field alwaysShowSubAmount has been renamed to requireSubAmount (the previous name is still supported for compatibility with old workflows).
  • CHANGED: The field showSubAmountOnFishingMethods has been renamed to requireSubAmountOnFishingMethods.
  • FIXED: The $view variable would sometimes be blank in cases where an event had a storeId property.
  • FIXED: Deckhand would previously crash if summaries.json was omitted.
  • CHANGE: The $dialog function can now be used as a synonym for $action.dialog. Also, added the message= parameter to dialogs so that the first argument does not have to be the dialog message.
  • CHANGE: setclip can now take two arguments (as in $event.setclip(‘property’, value)) for cases where the property names are stored in variables.
  • ADDED: Shape file support has now been added. The $workflow.geoData property now exposes each shape file and provides ability to do placemark lookup as well as query attributes stored in the shape file.
  • ADDED: The $view.change() function now allows direct changes to values currently displayed by using their id and a new value. The screen will update immediately, including cascading changes.
  • ADDED: Added the onChange handler declaration to all components.
  • ADDED: Added the onOpeningEvent declaration so that whenever an event is opened (new, editing, rehydrating, etc) that this function will be triggered.
  • ADDED: The new $cache() function permits caching up to 20 frequently used values of any kind. They will be kept in the cache based upon how often they are used.

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.10.5-6105

5 October 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.11 or higher

  • ADDED: More obvious mirroring of UserDefinitions in core data to eliminate lost data
  • CHANGED: MOSession/MOTrip are now a 1-to-1 pair
  • CHANGED: MOTrip is mostly superfluous despite the object relationships and this is the first step in it’s retirement.
  • CHANGED: Rehydration is now managed using a new session openState algorithm.
  • ADDED: $session.trip object
  • FIXED: Strange session determination query in MOTrip was eliminated.
  • FIXED: $action.deleteEvent and $action.submitEvent did not return proper success booleans.
  • FIXED: The “accepted” flag was removed when events returned to fishing or ready state or are aborted.
  • ADDED: $workflow.functions which allow querying performance and usage data on functions in the workflow.
  • ADDED: The last() function, similar to first() but cannot be used as an iterator.
  • CHANGED: Built a more deferred queuing algorithm (DeferredQueue) which uses a queue management methodology superior to Apple’s GCD and allows load-based timed queues and better debugging. Incorporated it in several sensitive areas which has improved performance and UI stability.

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.10.3-6103

27 September 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.11 or higher

Added many new features and product enhancements available to CatchFlow™ developers to use for developing workflows that load on the Deckhand™ Pro platform.

  1. Added greater control of activity buttons in the Activity Panel.
  2. Added fully-featured “choice” style dialogs with info headers.
  3. Added a new way to configure versatile and flexible dialogs
  4. Added better validation dialogs
  5. Added validation options to show event navigation buttons
  6. Added a greater collection of capabilities to the changeState action option as well as adds an action function to do the equivalent.
  7. Added better CatchFlow™ error reporting for failed actions.
  8. Added the new handlers section of template-based reports headers containing both a success and failure handler.
  9. Added new resizable vector-based icons with icon-question being the first using scalable presentations which can be used both in activity panel headers and activity panel cells.
  10. Added a return() function so that expressions can pre-maturely terminate with a returned value.
  11. Added access to the ReportSubmissionResponse object with properties which can be accessed as well as a modifying .copy() operation.
  12. Added $retainVariables = true to the IDE to allow variables to persist across workflow reloads.
  13. Added additional options to changeState so that states such as uploading and readyToSubmit could be simulated.
  14. Added $action.workflowChangeState which has the same capabilities as the workflow equivalent.
  15. Added the Panel0 placement for activity buttons so that a help (or other) button could be squeezed between Settings and the All tab.
  16. Added the markdown() (synonym md()) so that special “Markdown strings” can be created to populate dialogs to control formatting. Added various style setting properties (such as h1.fontName) so that the overall formatting style can be controlled.
  17. Added the warnings(n) image name so that warnings as well as errors can be displayed on a button (errors display in red).
  18. Added onSelected expression and enhanced efficiency of panel button generation to eliminate unneeded builds.
  19. Added the “blocker” type to dialogs.
  20. Added template caching to speed up template compilation.
  21. Added onCloseEvent expression.
  22. Added $action.openSession and action.closeSession to manage event open/closed status and completion.
  23. Added $debug.getLog(-2) to return the current log and clear it.
  24. Added the ability to disable FAB buttons by having the actionDetails enabled set to false.
  25. Add access to $event.created date as well as $event.type
  26. Add $action.deleteEvent()
  27. Add new workflow element cellHeader with markdown and expression ability
  28. Add lineSpacing and paragraphSpacing to markdown function parameter list
  29. For dateSerial() add the template= and format= and tz= keywords, but preserve old positional argument formats.
  30. Added $debug.buildCode so a workflow can tailor itself to debug builds.
  31. Added new two-column-open layout.
  32. Added workflow property “compatibleWithAllPreviouslyCreatedEvents”
  33. Added $action.selectEvent() to select an event in the activity panel
  34. Added $selectedEvent to return the selected event
  35. Added new icons such as icon-trash
  36. Added a “progress spinner” features that launches for long-running actions.
  37. Added the $system object and system variables to pass onboarding information.
  38. Added new icon-x and icon-unwind
  39. Fixed string() so that it outputs CoreData objects properly as their identifying strings instead of a CoreData blob
  40. Fixed a crash bug which could occur if attempts were made to store complex objects (such as $event) inside a DataStore. These are now flagged properly as getLog() errors.
  41. Fixes a bug where the Panel0 button would interfere with activity slots.
  42. Fixed a crash bug which could occur when certain objects were dumped to the debugging logs.
  43. Fixed string() to provide more consistent output.
  44. Fixed history so that in two-column mode the trips are in reverse order but the trip contents are in forward order matching the “Open” panel.
  45. Fixed crash bug when moving cells quickly between columns (view invalidation index error)
  46. Fixed memory leak which caused activity view controllers to never be deleted (and all their owned objects).
  47. Fixed a bug in $selectedEvent where you could not use sub-selectors.
  48. Fixed a bug which caused $action.selectEvent(nil) not to work.
  49. Fixed completeSession() so it would accept a session object

For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.8.9-6079

27 August 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.10 or higher

  • Initial implementation of report templates. This can replace reports.json with templates.
  • Added reports/type.t template capability.
  • Existing reports in reports.json will still continue to operate, but will ignore SendPayloadVerbatim
  • New reports formatted using the template processor can now be included in the reports subdirectory.
  • A new report definition attribute, payloadFormat allows specification of the payload format for either the old reports.json or new template-formatted reports.
  • Significant clean-up and simplified reporting function structure
  • Added support for inner variables in expressions
  • Creates a much looser interpretation of bools when they occur in && expressions or ?:.
  • Added Distance calculation functionality
  • $event.placemark changed to access placemarks as a function or dot-notation.
  • Placemarks now support distanceTo() function.
  • Add shape and label functionality to dropAnnotation
  • Expression enhancements to support various workflows operations
  • Added Named Value objects and “name=value” expressions
  • Added Named Value support to dict()
  • Added short-circuit support to ternaries and conditionals.
  • Added template variables support
  • json() would output numbers with decimals as strings
  • Exponential notation was used inappropriately on numbers converted to strings.
  • Added many changes to support drop annotations and placemark creation, plus some better debugging.
  • Added $event.setPlacemark, $event.clearPlacemark, $event.addAnnotation, $event.clearAnnotation expression functionality
  • Added $createPlacemark at the top level
  • Slightly modified the drop annotation shape parameters for thicker borders and greater border opacity.
  • Variables can now be used in the CatchFlow™ IDE. They can be viewed with $debug.variables and cleared with $debug.clearVariables()
  • Added haul, summary, edit, abort, submit, and log icons for action buttons.
  • Added a general keyword argument parsing capability
  • New pinned workflow engine.
  • Startup timing improvements
  • ManUp loading improvements
  • Under normal situations (build not changed)
  • Deckhand checks the ping situation and if the internet does not appear to be available, it falls back to the previous ManUp.
    However, it sets a network monitor up so that the moment a valid internet connection is available, it attempts to load a new ManUp.
    If not successful, Deckhand merely continues trying. However, once successful, the current Personality will be used until the 6-hour reload time interval is met, at which point Deckhand will retry and failsafe if not successful.
    When Deckhand notices a new build number (new feature):
    Deckhand ignores ping but requires that ManUp be loaded from the internet.
    If it cannot be loaded, then Deckhand presents the user with a dialog indicating that a configuration update is required. (see below)
    Once loaded, Deckhand records its new build number and operation continues from then on.
  • Workflow load improvements
  • Workflow load algorithms was changed so that fallbacks to the current workflow are done only when there is no alternative version available in manUp.
  • Added ping monitor for network connectivity and added behaviour log entries so we can more easily determine the user’s situation in the field.
  • Eliminated the workflowLoaded notification completely, making a more straightfoward startup.
  • Added transitionToInteractive() as a way to indicate that environmental changes are complete and the interface is now ready to go live for the user.
  • Added tolerance for duplicate updates from Boat (not sure why these are occurring)
  • Added new ManUp code and that includes a “no network” fallback to Personalities.
  • Fixed a bug in expressions that caused validation problems
  • Fixed a bug in the pre-population of expanded catch cell which was previously undetected.
  • Fixed CatchFlow™ IDE expressions to handle optionals better
  • Fixed some cases where dictionary elements would not respect the ‘key’ and ‘value properties.
  • Fixed some bugs in property access
  • Rehydration did not properly set preFishing mode as it should for rehydrated run-once events.
  • Fixed: optional report problems
  • Fixed several bugs in key renewal. First, the renewed key expiry was not kept properly and key renewal was done unconditionally when it was not supposed to.
  • For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.8.3-6064

27 July 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.10 or higher

  • Added a template engine to Deckhand™ Pro so that general purpose text templates can be expanded for many purposes. For more info –
  • Added CatchFlow™ Composer, which allows CSP’s to create and launch workflows that contain compositions. For more info –
  • The composition launch action e.g. $action.launchComposition(‘compositions/summary’, template($workflow.file(‘templates/lobsterpot.t’), $actionEvent)) For more info –
  • Set embeddedComposition variable to allow compositions to determine whether they are running inside Deckhand.
  • Added json() function and associated functionality
  • json converts anything to valid json
    is jsonobject() returns true if the argument is a valid JSON object represented as set
    $action.launchComposition now accepts either a JSON string or dictionary object as an argument.
    $event supports limited JSON serialisation
  • Fix JSON stringification for the composer
  • Added expandable catch default values to expandableCatchReport enable CatchFlow™ developers to auto-populate their landing reports from their catch reports.
  • Adds the defaultValues attribute support to expandableCatchReport
  • Adds the powerful collect() function to aggregate data appropriate for ECR
  • Adds a synonym dynamicExpandableReport for more consistency with purpose and other views.
  • Added another thread-safe wrapper.
  • Added an observable sessionWorkflow to make the FAB (and future tasks) easier.
  • Consolidated item creation code inside the FAB rather than having external construction.
  • Improved view and button management in the FAB to eliminate some confusion.
  • Created generic item setup with prefix items, events, and pattern matching combined.
  • Disabled web view bounce for compositions
  • Allow access to to the full composition folder.
  • Added missing min() function and added shared reducer utility
  • Updated BoatClient
  • Bundle now correctly chooses logging levels
  • Added setLogLevel and getLogLevel to CatchFlow™ debugging operations
  • Assured expression errors are logged in CatchFlow™ buffer
  • Ping implementation to improve offline behaviour of Deckhand™ Pro
  • Added $action.changeFishingMethod to be able to easily change the placeholder and method from an action
  • Provide a second argument to $action.pushEvent which permits the method to be specified, and forces a new fishing method to be registered as lastFishingMethod
  • Assure fishingMethodCode is always set properly in the data store.
  • Added $eventStack object to easily look at what is currently on the stack.
  • Create Camel-case synonyms for all lowercase expression functions.
  • Better defaults for unused and other common features
  • fisheryModel is completely optional
  • If included, fisheryCode, fishing methods and fishSpecies are also optional
  • Default named actions for $createEvent and $declareEvent are now included
  • autoRehydrateSessions now defaults to true
  • showUnitConversionOptionsInUserPreferences now defaults to false
  • pinSecurityPerSession and pinSecurity default to false
  • Fixed collect() arguments to be easy to understand.
  • Fixed $workflow object to return the descriptive string instead of nil.
  • Fixed a bug where location manager was being created on a background thread.
  • Fixed the use within Analytics.logSituation which was the primary culprit in this case.
  • Removed some unused code in the template processor
  • Fixed: JSON stringification for the composer.
  • Fixed: a bug in argument sub referencing which was triggered by sample template
  • Fixed: Eliminated enterPauseMode and put it in the same class as other markAs… functions, which also solves the deficiency in pauseEvent where events would not be started if they were merely in created mode.
  • For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.

Deckhand® Pro – 3.8.0-6061

15 June 2021
Requires iPadOS 14 or later
Requires CatchFlow™ IDE version 0.6.10 or higher

  • Actions now complete before the next action runs. For example $action.declareEvent($actionEvent); $anyfunc()did not work before as expected because anyfunc would execute immediately rather than waiting for declaration. This also assures that success and failure events properly wait for the full event completion before being triggered.
  • Revamped the way animations work and increased the speed.
  • Changed the label component to dynamically update.
  • Added the experimental $action.refresh() command.
  • Expression evaluation has now been moved onto background threads.
  • Added $event.workflow and $event.title
  • Added $workflow.file() to return the text contents of a file in the workflow directory.
  • Fixed: keys within transformEach in reports were ignoring “isOptional” meaning that errors were thrown for missing fields when they should not have been.
  • Fixed: several unresolved promises during action expressions, including $action.stopSession
  • Fixed: problem where animation interruption would cause promises to be stranded because completion handlers were not called.
  • Fixed: some selectors which still said “animations” to say “withAnimation” for consistency sake.
  • Fixed: bug where duplicate controllers (one empty, one in use) were used at various points in the system. This was triggered by “going backward” where a new controller was re-created and used for some things but the originally controller was still being used for other aspects of the application.
  • Fixed: bug which could have occurred when evaluating variables from an action. getRValue() would run on a background thread instead of the main thread.
  • Fixed: a regression that caused keyword tables not to work correctly on the main thread.
  • For additional information on the above added items for CatchFlow™ developers and to download the latest CatchFlow™ IDE please click here.