Deckhand® Pro For CatchFlow™ Development
Deckhand® Pro– 3.10.49-6182
Deckhand® Pro– 3.10.31-6147
Deckhand® Pro – 3.10.27-6141
Deckhand® Pro – 3.10.23-6132
Deckhand® Pro – 3.10.21-6129
Deckhand® Pro– 3.10.17-6123
Deckhand® Pro – 3.10.5-6105
Deckhand® Pro– 3.10.3-6103
Deckhand® Pro – 3.8.9-6079
Deckhand® Pro – 3.8.3-6064
Deckhand® Pro – 3.8.0-6061
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. Iffalse
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
andevent
as usual, but also containsoldValue
which contains the previous value of the component before the change. - ADDED:
onLoaded
is now supported for all components. - CHANGED:
onItemAdded
toonItemLoaded
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, ornil
. - CHANGED: The placemark
onUpdate
is now deprecated as its name conflicts with the other uses of onXXX in Deckhand. It has been replaced withupdateMethod
. 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
andsegmentFont
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
withcountDownTimer
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($session.events).setclip.somevar('somevalue')
because of this bug. You’d have to use the unfortunate syntax(first($session.events).setclip.somevar)('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 otherarrayPanel
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 thedateTime
component ofgpsEntry
as well as thedateTimeEntry
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 thedateString()
function as well as the newly addedtimeZone=
attribute. - ADDED:
topComponents
andbottomComponents
can be added to anarrayPanel
(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 supportsexpandable="true"
and it will automatically manage expansion and contraction. IfshowHeader
is true, then the expansion will be controlled in the header, otherwise if there is atopComponents
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 isvisible
meaning that data will be retained only for components which are visible. It can also be set toalways
ornever
. - ADDED: The current session ID is now available as
$session.id
. - 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 thecomponent
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 totrue
orfalse
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 ofrememberValues
set on the view. - ADDED: The view
rememberValues
can be set totrue
orfalse
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-codedcatchEntryView
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 propertiesminValue
,maxValue
,blackListDisposals
,whiteListDisposals
andcontainerCount
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 ofrememberValue="false"
, above. - DEPRECATED:
saveValues
on views have been deprecated in favour ofrememberValues
on views, above. It continues to operate and is roughly equivalent torememberValues="true"
on the view. - REMOVED:
loadFrom
andcomparisonJoin
on components. Neither weren’t used in workflows. - REMOVED: The
catchType
lookup type has been removed from thenumberEntry
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 byid
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.
- Added greater control of activity buttons in the Activity Panel.
- Added fully-featured “choice” style dialogs with info headers.
- Added a new way to configure versatile and flexible dialogs
- Added better validation dialogs
- Added validation options to show event navigation buttons
- Added a greater collection of capabilities to the changeState action option as well as adds an action function to do the equivalent.
- Added better CatchFlow™ error reporting for failed actions.
- Added the new handlers section of template-based reports headers containing both a success and failure handler.
- 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.
- Added a return() function so that expressions can pre-maturely terminate with a returned value.
- Added access to the ReportSubmissionResponse object with properties which can be accessed as well as a modifying .copy() operation.
- Added $retainVariables = true to the IDE to allow variables to persist across workflow reloads.
- Added additional options to changeState so that states such as uploading and readyToSubmit could be simulated.
- Added $action.workflowChangeState which has the same capabilities as the workflow equivalent.
- Added the Panel0 placement for activity buttons so that a help (or other) button could be squeezed between Settings and the All tab.
- 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.
- Added the warnings(n) image name so that warnings as well as errors can be displayed on a button (errors display in red).
- Added onSelected expression and enhanced efficiency of panel button generation to eliminate unneeded builds.
- Added the “blocker” type to dialogs.
- Added template caching to speed up template compilation.
- Added onCloseEvent expression.
- Added $action.openSession and action.closeSession to manage event open/closed status and completion.
- Added $debug.getLog(-2) to return the current log and clear it.
- Added the ability to disable FAB buttons by having the actionDetails enabled set to false.
- Add access to $event.created date as well as $event.type
- Add $action.deleteEvent()
- Add new workflow element cellHeader with markdown and expression ability
- Add lineSpacing and paragraphSpacing to markdown function parameter list
- For dateSerial() add the template= and format= and tz= keywords, but preserve old positional argument formats.
- Added $debug.buildCode so a workflow can tailor itself to debug builds.
- Added new two-column-open layout.
- Added workflow property “compatibleWithAllPreviouslyCreatedEvents”
- Added $action.selectEvent() to select an event in the activity panel
- Added $selectedEvent to return the selected event
- Added new icons such as icon-trash
- Added a “progress spinner” features that launches for long-running actions.
- Added the $system object and system variables to pass onboarding information.
- Added new icon-x and icon-unwind
- Fixed string() so that it outputs CoreData objects properly as their identifying strings instead of a CoreData blob
- 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.
- Fixes a bug where the Panel0 button would interfere with activity slots.
- Fixed a crash bug which could occur when certain objects were dumped to the debugging logs.
- Fixed string() to provide more consistent output.
- 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.
- Fixed crash bug when moving cells quickly between columns (view invalidation index error)
- Fixed memory leak which caused activity view controllers to never be deleted (and all their owned objects).
- Fixed a bug in $selectedEvent where you could not use sub-selectors.
- Fixed a bug which caused $action.selectEvent(nil) not to work.
- 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 – http://catchflow.io/documentation/user-guide/templates/
- Added CatchFlow™ Composer, which allows CSP’s to create and launch workflows that contain compositions. For more info – http://catchflow.io/documentation/user-guide/Composer/
- The composition launch action e.g. $action.launchComposition(‘compositions/summary’, template($workflow.file(‘templates/lobsterpot.t’), $actionEvent)) For more info – http://catchflow.io/documentation/developer-reference/compositions/
- 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.