
The subsystem is capable of handling resource violations, and the management of memory, lifecycle, GPU and CPU limits for individual processes which elect for those features. For each it creates a new assertion with an ID such as 287-178-1, then returns a message such as RB assertion success NEW2, for example. Once running, RunningBoard receives incoming connections from processes to handle assertions. It has some interesting concerns, about processes which are ‘inetd-compatible’, those which are ‘multi-instance’, and runs its own ‘resource violation server’. RunningBoard then generates a set of ‘restricted entitlements’ for related daemons including, , and, before setting itself up. Yes, that last entry in the log is real, and presumably the work of a Star Wars fan! Correction: this refers not to Star Wars, but to StarCraft. Its initial log entries are relatively brief:Ģ.504005 RunningBoardServices Initializing connectionĢ.504438 RunningBoardServices Removing all cached process handlesĢ.504472 RunningBoardServices found service Ģ.505210 RunningBoardServices Sending handshake request attempt #1 to serverĢ.505247 RunningBoardServices Creating connection to Ģ.506107 RunningBoardServices Acquiring assertion: Ģ.517294 RunningBoard Battlecruiser operational.

Although run as root, runningboardd is started relatively late after boot, just after the Login Window app starts up, in preparation for the user to log in. In any given minute of unified log extract, you’re likely to see plenty of activity from the subsystem, as it tracks and monitors different processes. At present, RunningBoard and assertions are largely the preserve of macOS and don’t appear to be intended for direct third-party use, except in some Objective-C code. Minimal access is provided from the public macOS interface, in the form of the NSAssertionHandler class and a few calls such as the NSAssert() macro. There is also an amework still, as in Mojave. This subsystem consists of a small service, /usr/libexec/runningboardd, and two Private Frameworks, amework and amework.
#Downie 4 for mac software#
In macOS 10.15 and 10.15.1, at least, the subsystem for handling assertions, RunningBoard, is fully active in release versions, which suggests a substantial change in software practice by Apple. Normally, assertions are used during development and debugging, then switched off when software is released. Assertions can then be a valuable way of handling such errors. But there are situations when the developer may not expect an error to occur, for example when an app changes its preferences, which are managed for it by macOS (the service cfprefsd).

If an app tries to write to a file but can’t, then it should display a meaningful error message to the user and let them try again. That may seem counterproductive, but it’s much better than the app continuing and assuming the memory was provided, as that risks more serious consequences later.Īpps normally handle expected errors gracefully. For example, what happens when an app asks for memory which macOS can’t provide? If the app asserts the variable representing that memory, if that allocation of memory fails, then the app will quit immediately. It deals with what are known as assertions. This sub-system doesn’t exist in Mojave, nor in iOS 12. Among the latter is an active subsystem to replace an old service assertiond, which can cause apps to unexpectedly terminate – to you and me, crash – in both macOS 10.15 and iOS 13: RunningBoard.

Catalina brings several new internal features, a few of which have been documented, but others seem to have slipped past silently. Many of the most significant changes in macOS occur deep inside it, out of sight of users and even developers.
