This is a follow-up to my blog post from several months ago, How to restore the Preferences menu item to macOS Ventura. In that blog post, I explained how you could use the default NSMenuShouldUpdateSettingsTitle
to control whether apps have the menu item title "Preferences…" or "Settings…" on Ventura. To restore pre-Ventura behavior for all apps, you could use this Terminal command:
defaults write -g NSMenuShouldUpdateSettingsTitle -bool NO
Unfortunately, Apple has continued and expanded its user hostility by completely removing NSMenuShouldUpdateSettingsTitle
from Ventura. I'm not sure when this happened exactly, but it might have been in this week's macOS 13.1 update.
Since my blog post seems to be the primary source of information on the web about NSMenuShouldUpdateSettingsTitle, perhaps Apple removed the hidden preference because I made it public. This wouldn't be the first time that Apple changed OS behavior because of one of my blog posts. For example, the Safari extension toolbar icon tinting algorithm was changed after I published The Safari extension blues.
I've now looked at how Preferences/Settings works on macOS 13.1, and sadly I haven't found a way to revert to Preferences globally, for all apps. However, I have found a way to revert to Preferences for your own app. You need to subclass NSApplication
and set NSPrincipalClass
to your subclass in your Info.plist
file. Then in your NSApplication
subclass implementation, simply add this method as a no-op:
-(void) _updateSettingsMenuItemIfNeeded { return; }
Warning: _updateSettingsMenuItemIfNeeded
is an Apple private method, so using it could get you rejected from the Mac App Store. But you're free to use it outside the Mac App Store.
On reflection, there's actually a much easier way to restore the "Preferences…" menu item in your app that uses public API fully supported in the Mac App Store. You could even make your app logic check for the NSMenuShouldUpdateSettingsTitle
user defaults key to control the behavior.
Just create a reference to the "Preferences…" item in the main menu, such as with an IBOutlet
. In applicationWillFinishLaunching
, store the menu item's (localized) title. Then in applicationDidFinishLaunching
, reset the menu item's title. Easy! Not sure why I didn't think of that before. I must have been overthinking it.
It's been brought to my attention by Randy Saldinger that macOS 13.1 no longer respects the SDK of the compiled app. Previously, the Preferences menu item was only changed to Settings if the app was compiled with the macOS 13 SDK. Now it happens to every app!