Guides and Sample Code


macOS Human Interface Guidelines



Preferences are user-defined settings that your app remembers from session to session. Users expect to be able to customize the appearance and behavior of your app in preferences. For example, in Finder preferences, users can customize the contents of Finder windows and the behavior of File > New Finder Window, among other things.

image: ../Art/finder_preferences_2x.png

Be picky about which app features should have preferences. Avoid implementing all the preferences you can think of. Instead, be decisive and focus your preferences on the features users might really want to modify.

Don’t provide preferences that affect systemwide settings. For example, if users want to change the size of sidebar icons or change the visibility of the running-app indicator in the Dock, they can do so in System Preferences. In particular, your app should not encourage users to change the way your app handles automatic saving of their content; this is a system feature that users expect to rely on in all the apps they use.

As much as possible, ensure that users rarely need to reset preferences. Ideally, preferences include settings that users might want to change only once. If there are settings users might want to change every time they open your app, or every time they perform a certain task, don’t put these settings in preferences. Instead, you could use a menu item or a control in a panel to gives user modeless access to these settings.

Don’t provide a preferences toolbar item. Because the toolbar should contain only frequently used items, it does not make sense to include a preferences item in it. Instead, make app-level preferences available in the app menu (for more information, see The App Menu); and make document-specific preferences available in the File menu (for more information, see The File Menu).

To learn more about implementing preferences using Cocoa, see Preferences and Settings Programming Guide. For information on implementing preferences using Core Foundation, see Preferences Programming Topics for Core Foundation.