Shortly after I released SilentKnight version 3.01 some of you discovered reliable ways to make it crash, by using inappropriate commands left in its menus. Those included apparently innocent commands such as New Window and those for tabs, irrelevant for the app but left there all the same.
SwiftUI has a strange and frustrating approach to managing menus based on standard sets that it decides are appropriate for an app, and won’t let apps manage them individually, as AppKit and Cocoa have done so well in the past. This new version strips out those menu commands that aren’t of any relevance, several of which could crash SilentKnight.
Auto-update
I have also taken the opportunity to add support for my usual auto-update mechanism in this new version. This works the same as in previous versions of SilentKnight, although given the limitations of SwiftUI it doesn’t use an entry in the Help menu to inform you when a check has been completed. The first time each day that you run SilentKnight 3.02 or later, it checks whether there’s an update available. If there is, it will invite you to download it from here. That comes as a standard Zip archive which you can then unarchive and install. It doesn’t attempt to update or install itself, so ensuring the new version is correctly quarantined and checked by macOS.
You can customise this behaviour by changing SilentKnight’s preferences. The keys to use are:
noUpdateCheck, a Boolean. When set totrue, this disables all update checking. Default isfalse.updateCheckInt, a real number (Double). When set to a value greater than 1.0, it becomes the minimum time interval between checks, in seconds, and defaults to 43,200, which is 12 hours. If you set it to any value less than 1, SilentKnight will reset it automatically to that default.
To change either of these, use a Terminal command of the form
defaults write co.eclecticlight.SilentKnight3 updateCheckInt '10'
which works properly through the preferences server cfprefsd.
Disclosures in Sequoia
While working on this update, I took the opportunity to try some workarounds for SilentKnight’s behaviour in macOS Sequoia, where clicking on its disclosure chevrons often doesn’t open or close that section as you’d expect. I’m afraid that I’m no closer to a solution to this, but have found it works as intended if you click once on the chevron, then click on the Refresh tool, a feature only provided when running in Sequoia. As this only affects that version of macOS, I’d rate this as a bug in SwiftUI, but will continue to look for a workaround.
As a result, if you’re still running Sequoia and happy with SilentKnight version 2, you may want to remain there until you upgrade macOS to Tahoe or Golden Gate before moving up to SilentKnight version 3. But if you’re already using Tahoe or Golden Gate, I think you’ll find this new version a great improvement.
XProtect updates in macOS 27 beta
The current beta-release of Golden Gate appears to have a bug blocking iCloud updates to the new primary location of XProtect data. When you run
sudo xprotect check
in affected Macs running Golden Gate, it returns an error normally seen when the iCloud update service isn’t available. Using the sudo xprotect update command then fails to recognise any update that should be available, and the primary location is left with the previous version, which SilentKnight complains is out of date.
As there is a background service that can update the primary copy of XProtect data from that updated by softwareupdate, it’s possible that will use the secondary copy to update the primary. However, there’s nothing you can do about that, and it awaits a further beta release, I fear.
Availability
SilentKnight version 3.02 for macOS Sequoia 15.6 and later is now available from here: sk302
from Downloads above, and from its Product Page. The next update will also be available through its auto-update mechanism.
