Deckhand® Pro – 3.12.13-6318

March 17th, 2023
Requires iPadOS 15 or later
Requires CatchFlow™ IDE version 1.1 or higher

This release addresses the following:


  • Internet Monitoring Control with $debug.enableInternetMonitor(): We have introduced a new command, $debug.enableInternetMonitor(), to provide more control over internet monitoring for debugging purposes. This command allows you to stop Deckhand from monitoring the internet and simulate an offline mode, even when the device is actually online. To use this command, execute $debug.enableInternetMonitor(false). After executing this command, Deckhand will stop monitoring the internet and behave as if it is offline. This can be useful for debugging scenarios where you want to test how the app behaves in an offline environment.
  • Reverse Functionality with reverse(): We have introduced a new function called reverse(). This function allows you to obtain the reversed version of a string or an array. To use the reverse() function, simply pass the string or array you want to reverse as the input parameter. The function will return the reversed version of the input.
  • Customization of Internet Submission Algorithm with requireInternet: We have introduced a new feature that allows you to customize the internet submission algorithm for report templates. With the addition of the requireInternet parameter, you can control Deckhand’s behavior when attempting to submit reports in offline or limited network conditions. By default, requireInternet is set to true, which means that Deckhand will prioritize submitting reports only when an internet connection is available. This helps to avoid unnecessary retries and conserve device resources.
  • Customization of Submission Queue Retention with hoursToCancellation: We have introduced a new parameter called hoursToCancellation that allows you to define the duration for which an item should remain in the submission queue before being canceled. By default, Deckhand retains items in the submission queue for 2 days when the device is offline, and for 30 minutes when the device is online. However, with the addition of the hoursToCancellation parameter in report templates, you can override these default values and set a specific duration for item retention.
  • Expression Support for ‘name’ Property in Placemarks: We have introduced a new feature that allows you to use expressions for the ‘name’ property of placemarks. With this enhancement, you can now dynamically generate the name of a placemark using expressions. This provides greater flexibility and customization options when labelling your placemarks based on various data sources and conditions.
  • onRequestUserDelete Event Confirmation: We have expanded the functionality of the "onRequestUserDelete" event. Now, when a component is “swipe deleted” by the user, the onRequestUserDelete event is triggered and requires a response of either “true” or “false” to allow or cancel the deletion. With this enhancement, you have more control over the deletion process and can implement custom logic to confirm or cancel the deletion based on your specific requirements. By returning “true” from the onRequestUserDelete event, you allow the deletion to proceed, while returning “false” cancels the deletion action.
  • String Replacement with replace() Function: We are excited to introduce the new replace() function. This function allows you to perform simple string replacements within your expressions and templates. With the replace() function, you can specify a target string and a replacement string, and the function will search for occurrences of the target string and replace them with the provided replacement string. This feature is particularly useful when you need to modify or update specific parts of a string dynamically.
  • Number Sequences with seq() Function: We are excited to introduce the new seq() function. This function allows you to create number sequences that are particularly useful in iteration scenarios, such as in for loops. The seq() function enables you to generate a sequence of numbers based on specified parameters. You can define the start, end, and step values to customize the sequence according to your requirements. This functionality provides greater flexibility and control when working with iterative operations.


  • Updated Expression Error Reporting: We have made changes to the error reporting system for expressions. Previously, expression errors were treated as warnings. With this update, expression errors are now considered as errors rather than warnings. When an expression error occurs, it will be reported via Crashlytics, providing better visibility into any issues related to expressions. This change allows us to capture and analyze expression errors more effectively, leading to quicker identification and resolution of potential issues.
  • Enhanced Embedded Expressions in Views: We have made an important improvement to the embedded expressions in views. Now, all embedded expressions fully support both the ‘component’ and ‘event’ context variables. Previously, some embedded expressions in views only had access to either the ‘component’ or ‘event’ context variable, which could limit the flexibility of your data manipulation. With this update, you can leverage both variables within embedded expressions, allowing for more comprehensive and dynamic data processing.

Fixed Issues:

  • Custom Report Submissions Retry on Network Failures: We have addressed an issue related to custom report submissions. Previously, when encountering network failures during report submissions, the system would return an error immediately without attempting to retry the submission. With this fix, the custom report submission process has been improved to be more tolerant of network problems. If a network failure occurs during the submission of a custom report, the system will now make multiple retry attempts before returning an error. This ensures a more robust and reliable submission process, allowing for a higher chance of successful report delivery, even in the presence of intermittent network issues.
  • Corrected onValidate Error Dialog Display: We have addressed an issue related to the onValidate function. Previously, when the onValidate function returned nil and there were no errors to display, an empty error dialog would be incorrectly shown. With this fix, the behavior of the onValidate function has been corrected. If the onValidate function returns nil and there are no errors to display, the error dialog will no longer appear, ensuring a more accurate representation of the validation status.
  • Addressed Memory Corruption and Lockup Issue: We have resolved an issue related to the concurrent execution of the same expression. Previously, if the same expression were executed twice concurrently, it could lead to memory corruption or lockups. With this fix, the memory corruption and lockup issue has been addressed, ensuring a stable and reliable execution of expressions even when executed concurrently.
  • Placemark Creation for Hidden Containers: In previous versions of Deckhand Pro, there was a bug where placemarks that were supposed to be hidden because their container was collapsed were not being created as expected. With the fix in place, placemarks within collapsed containers will now be properly hidden, ensuring consistent behavior and accurate representation of your data.

Thank you for your continued support and valuable feedback. We strive to provide you with the best experience, and your reports help us identify and resolve any issues promptly. If you encounter any further problems or have suggestions for improvement, please don’t hesitate to reach out to our support team.

-The Deckhand Pro Team