When I develop UI application for OSX I store user's preferences and application config to ~/Library/Preferences/AppName.plist
(using NSUserDefaults).
But when I create global background daemon that will be running using launchd
on behalf of root
– what is the better place to store daemon's config?
On Linux I would put it to the /etc/
directory, but I'm not sure I can do the same on Mac.
Best Answer
Dynamic Paths
On macOS, a process asks the operating system where to save specific types of files using the
NSWorkspace
method URLForDirectory:inDomain:appropriateForURL:create:error:. There is a CoreFoundation C equivalent function for this method.This approach mimics the goals of the XDG Base Directory Specification on other platforms.
Typically
/Library
, however…Before macOS 10.15, computer wide processes, such as daemons, used the
/Library
folder structure:/Library/Preferences/
/Library/Cache/
/Library/Application Support/
See What is the purpose of each folder under /Library and /System in Mac OS X? for a good overview of the various folders and their intended purpose.
However, macOS 10.15 changes the file structure and limits large parts of the core system read-only. Shipping with fixed file paths and assuming those paths to have read-write access is risky.