Nach der Installation unserer Software in/Applications wollte ich, dass unsere Endbenutzer die Seriennummer sehen können, die sie in unserer About-Box eingegeben haben. Da die Software für ALLE BENUTZER aktiviert ist, dachte ich, dass ich diese Informationen in einen gemeinsamen Speicherort für bevorzugte Dateien schreiben muss. Doch Apples docs sagen, dass CFPreferencesAppSynchronize nicht für kCFPreferencesAnyUser verwendet werden:So erhöhen Sie die Berechtigungen zur Verwendung von CFPreferencesSetValue für "jeden Benutzer" - macos 10.10 - 10.12
„Beachten Sie, dass Sie nur Einstellungen für speichern können‚Any User‘, wenn Sie Root-Privilegien“
So natürlich die Code unten funktioniert nicht (obwohl CFPreferencesAppSynchronize liefert true):
void WritePrefTest(void)
{
// Write it out
CFStringRef textKey = CFSTR("myTextKey");
CFStringRef applicationID = CFSTR("com.foo.bar");
CFStringRef textValue = CFSTR("text that should be written");
CFPreferencesSetValue(textKey, textValue, applicationID, kCFPreferencesAnyUser, kCFPreferencesCurrentHost);
Boolean wasSuccessful = CFPreferencesAppSynchronize(kCFPreferencesAnyUser);
assert(wasSuccessful);
// read it back in
CFStringRef prefText = (CFStringRef)CFPreferencesCopyAppValue(textKey, applicationID);
NSLog(@"The text from com.foo.bar == %@", (__bridge NSString *)prefText);
}
Da die Aktivierung und Eingabe der Seriennummer außerhalb der Installateur nimmt, sollte ich 1) Anfrage erhebend Privilegien (noch nie zuvor), 2) ein Plist in einem anderen Ordner erstellen (/ Library/Application Support) - vorausgesetzt, ich darf dort schreiben - oder 3) schreibe es in einen anderen macos-akzeptierten Ordner?