I have two processes - a user process and a root-level LaunchDaemon. I'd like both processes to have shared settings. I've tried getting this to work via a sqlite database, but have run into corruption issues. I've thought about using NSUserDefaults
, but the NSGlobalDomain
seems to only be global for the user, and I need a cross-user persistent domain, which NSUserDefaults
doesn't seem to provide.
I've tried reading and writing an XML file directly, and I can get this to work fine with multiple threads (via a simple NSLock
), but when I attempt to apply an O_EXLOCK
to the file to prevent one process from writing to the file while the other is, it doesn't seem to work.
CFPreferences
seems to have most of the same issues as NSUserDefaults
. There is a kCFPreferencesAnyUser
constant, but the documentation says that I can only use that if I have admin privileges (which the user process does not have).
So my question is this:
How can I effectively implement cross-process and cross-user shared settings?