Everything Else
Helix 8.0 Release Notes Companion TLW

These release notes describe bug fixes and other improvements in Helix 8.0. Please read them carefully.

These release notes are divided into two sections: What’s New in Helix 8.0 and Bugs Fixed in Helix 8.0. You can click the section titles to show or hide each section.

Release Date: December 21, 2019

Important Notes

Helix 8.0 is not backwards compatible with 7.0.4 or earlier. Helix Client users should not update until the Helix Servers they connect to have been updated.

Helix 8.0 requires macOS 10.6 through 10.14; macOS 10.9 through 10.14 is recommended.
Helix 8.0 is not compatible with macOS 10.15 (Catalina) or later.

What’s New in Helix 8.0

All Products

Collection resources are now stored in the data fork (R9498)

A major internal change to Helix collections, the resource fork is no longer used to store collection information.

Collections updated to Helix 8.0 or later can be stored on an iCloud drive or any ‘cloud’ service.

There is no longer an issue with collection damage when using Dropbox, etc. with Helix 8.0.

Be sure to review the changes in Helix Utility for new error codes related to the new ‘data fork based’ resources.

Resources for internationalization (including HTAB/3000) and the color palette continue to use deprecated APIs. These will be updated in a future release.

The HRFL resource was used historically to specify where to put the recovery file. This code was no longer being used, and nobody complained, so the code to specify recovery file location via a resource is now gone. Those who wish to specify such a location should use the HxShadowFilePaths preference.

Bypass index rebuilding on collection open/close (R9548)

The ability to bypass index rebuilding when a collection is opened or closed is added via the building indexes parameter (code HxBI). The default value is true (since that’s what Helix does by default). There’s no reason to use this parameter other than to write “without building indexes” to prevent index rebuilding.

The primary purpose of this feature is to speed up the situation where a script must close or open a collection that may have indexes that require rebuilding. The indexes will have to be rebuilt eventually (or deleted) but if the next step is going to invalidate an index, waiting for it to rebuild before proceeding just wastes time.

Helix Utility

Reporting errors in data fork based resources

Since resources that used to be stored in the resource fork are now stored in the file directly, they can be treated as ‘data’ allowing examination by Helix Utility. New error codes have been added to report various errors that were previously reported by Update Collection.

  • 0x1F (frtHeaderErr) reports errors in the FRT header
  • 0x20 (frtPageErr) reports errors in the FRT list
  • 0x21 (hrPageErr) reports errors in the Page Table

FRT errors are always fixed by reconstructing the entire FRT. An explanatory message is included in the detailed log. Page Table errors require QSA ToolWorks assistance to repair.

More information about these new error codes is found in the technote New Error Codes in Helix Utility 8.0. If you require assistance repairing a collection that has one of the new error codes, we encourage you to contact our technical support department.

Helix Utility detects and reports duplicate Record IDs, Record ID 0 (zero) (R7142)

An ancient bug that reaches back to the Helix Express days (and possibly earlier) allows Helix to create a record with an illegal internal Record ID. A Record ID of 0 (zero) is not allowed — Record IDs begin with 1 — and Record IDs must be unique within a relation. Helix Utility 8.0 adds a check to confirm that all Record IDs in a relation are greater than zero and in ascending order, as that catches both out-of-sequence and duplicate Record IDs.

The symptoms of such a record issue are unexplained but repeatable crashes and/or indexing issues do occur.

Helix Utility reports these errors using code 0x22 (rowIdErr).

Repairing a Record ID error is not straightforward. The easiest method is to export all data from the affected relation, then use the Design Mode command Delete All Data to reset the relation to zero records, then re-import the records. For cases where this is impractical, we have created a utility program that may enable end-user repair of such a problem. More information about this issue — and access to the utility — is found in the technote Understanding (and Fixing) Type 22 Errors in Helix Utility 8.0. If you require assistance repairing such an error, we encourage you to contact our technical support department.

New menu command: Reveal Logfile in Finder

When assisting in diagnosing errors reported by Helix Utility, QSA ToolWorks needs a copy of the HU log which records the errors in detail. Since the location of the logfile (~/Library/Logs/Helix/Utility/) is hard for people to navigate to the Reveal Logfile in Finder command has been added to the File menu (see at right). Choosing this menu item opens a Finder window with the HU logfile that corresponds to the currently selected collection automatically selected.

The Keyboard equivalent for this command is Command-Option-F.

This command is also found in the contextual menu that opens when right-clicking on an item in the Collections list.

Compress command added to File menu

In prior versions of Helix Utility, the Compress command (to compress a collection) was available as a menu item only through the contextual menu that opens when right-clicking on an item in the Collections list. It has now been added to the File menu (see at right).

The Keyboard equivalent for this command is Command-Option-C.

Enhance keyboard control of three button alerts

All alert dialogs that contain three button now allow the extra button to respond to a Command key equivalent of Command + the first letter of the button name.

Always write detailed logging to file

Since most users never need to deal with errors in Helix Utility, the default logging option is to show a simple overview of the process. The “Detailed Logging” option is available for those who need (or want) to see the process in greater detail.|

Unfortunately, most users are also unaware (or forgetful) of the need to turn on the Detailed Logging option when diagnosing errors. Since the first step in working with QSA ToolWorks technical support is to send us the HU log file, and getting a log file without detailed logging is time-wasting and frustrating for all involved.

Beginning in Helix Utility 8.0, the detailed logging checkbox affects only what is displayed in the window; detailed logging is always written to the log file, regardless of the state of the Detailed Logging checkbox.

Bugs Fixed in Helix 8.0

Design Mode

Attaching post to a view ‘On Export’ now properly enables the Commit buttons (R9510)

In prior versions of Helix RADE, attaching a post to the ‘On Export’ option would fail to enable the Commit buttons. This has been fixed.

Fix crashes when clicking the Font button in the Inspector (R9527)

Helix was using the deprecated UMAGetSystemVersion() API to get system version info. This API has not worked reliably since macOS 10.10, and may have been the source of random crashes or odd behaviors, so all references to it have been updated to use a more modern API.

Delete internal view data when errors are introduced to the template

When a modified template is closed while containing errors, any views that were using that template would contain invalid data, leading to crashes. The internal data for these views is now deleted, eliminating the error.

User Mode (RADE, Engine, Server, Client)

Fix “Connect To” window and “Open Recent” menu in Mojave (R9514)

Starting in macOS 10.14 (Mojave) the Client’s Connect To window, and all application’s Open Recent menu were empty. This is fixed.

Under Mojave, the routine being used to find previously opened collections fails with an erroneous -1401 (FSRef parameter is bad) error. More specifically, the check to determine whether the file is in the trash was treating every file as though it was (in the trash) causing none to appear. This bug was introduced by Apple in Mojave, and rather than wait for a fix from them, we rewrote the code to use different routines to check the validity of the recent files.

Note that although this was most widely seen (and reported) in the Helix Client Connect To… window, the bug had the same effect in the Open Recent menus of all Helix applications have been fixed.

Fix the progress thermometer when updating a collection

The progress thermometer that appears when updating a collection (called automatically by Helix RADE, Server, and Engine as needed) now accurately counts the number of steps update requires, and checks them off as processed. It also correctly adjusts the number of steps when objects are added or deleted.

A crash when updating a connection document (.hcf file) has been resolved (R9516)

An internal ‘usage’ resource in the Client structure file was occasionally causing a crash when a structure was being updated. This resource is no longer checked, since the entire local copy of the structure is about to be replaced by a new download.

Recovering a picture from the session log file no longer crashes (R9526)

A longstanding problem that caused a crash when attempting to apply a session log that included a picture has been fixed.

Additionally, the error message “Problem with a large picture or document” that would appear in such instances has been changed to “Problem with a picture or document”, since all pictures now use byte streams, not just large ones.

Split error code 5411 into three distinct errors

Runtime error code 5411 was previously used to report three similar but distinct runtime data errors. Each is now given its own error code (5411, 5419, 5420) to better identify the error encountered.

Fix typos in the AppleScript dictionary

The following typos have been fixed:

  • The description for the create process for store enumerator now says “for storing one or more records” instead of the grammatically atrocious “for store one or more records”.
  • The description for the delete recordID enumerator is corrected to read “see ‘delete recordIDs’” instead of “see ‘delete records’”.
Fix crash during save after a large number of deletes (R9498)

When deleting a large number of records, many blocks of free space are opened up, causing the FRT (Free Run Table) to undergo many significant changes. During the process of moving the FRT out of the resource fork, bugs were discovered and fixed in the routines that maintain the FRT, eliminating crashes caused by such.

Fix issues due to uninitialized memory

While fixing other bugs, a few cases where Helix relied on a variable that was declared, but never set to an initial value, have been fixed. Such a variable would initially use a random value, which could cause unpredictable behavior, up to and including crashes. All such noted cases are fixed.

Helix Server Specific

Fix crashes converting documents to pictures (R9496)

Helix’s BSPicFromDoc API (for converting documents to pictures via the Picture ◊ tile) has been improved in a number of ways:

  • A “double release” of memory during document processing that was triggering crashes has been fixed.
  • A number of memory leaks have been fixed, including one major leak that required collections that rely heavily on document to picture conversion be restarted on a periodic basis.
  • Better error replies are returned when the process fails. (Check the Why? message when you hear a beep!)
Fix crash connected to Client Idle Timeout (R9509)

The reported crash occurred when the Server was displaying status indicators on an active session while at the same time that session was in the process of timing out. This has been fixed in theory, but since it is impossible to reproduce, it remains to be verified in the field.

During the process of fixing this bug, it was observed, that portions of the session disconnect code continue to assume ancient (Classic) cooperative multithreading protocols rather than the current (macOS) preemptive multithreading protocol. These were not definitively addressed, as it was determined that the time required would far outweigh the benefit of avoiding these particular crashes, which occur when a user is quitting anyway, so no harm (other than a visual annoyance) occurs.

Helix Utility

Suppress ‘records deleted’ sheet when doing repair via AppleScript.

When repairing a collection via AppleScript, if Helix Utility encountered corrupted records to be deleted, the dialog reporting the relations and record counts would appear, causing an eventual timeout, as the script could no longer proceed unless a user was available to manually dismiss the dialog. The dialog no longer appears when repairing via script when the with warnings parameter is false.

Fix typo in AppleScript dictionary’s break all indexes description.

The extraneous word “that” has been removed from the description for the break all indexes command.

Remove ability to compress object map without compressing collection

The option to compress the object map without compressing the data in the collection is removed from Helix Utility, since it never worked reliably. The interface no longer has a checkbox to disable data compression. The ability to disable object map compression remains intact, controlled by the same checkbox as before.