2016-11-15 2 views
0

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?

Antwort

0

Ah hah!

Während CFPreferencesAppSynchronize() KEINE neue Datei unter/Library/Preferences mit dem Parameter kCFPreferencesAnyUser erstellt, wird sie in eine vorhandene Datei geschrieben, WENN die Dateiberechtigungen bereits so eingestellt sind, dass sie von einem Admin-Benutzer (und diesem Benutzer) geschrieben werden können ist angemeldet). Da unsere Installation Administratorrechte erfordert, können die erhöhten Rechte des Apple Installers bei der Ausführung des Apple Installers diese Datei in/Library/Preferences erstellen und ihm Schreibrechte erteilen, so dass später während der Produktaktivierung die Seriennummer des Benutzers geändert werden kann hinzugefügt, damit alle Benutzer darauf zugreifen können.

Beachten Sie, dass diese PLIST-Datei NICHT die PLIST mit anwenderspezifischen Voreinstellungen ist, noch würden wir erwarten, dass der Endbenutzer eine bereits installierte App in diese Datei schreibt (was fehlschlagen würde, wenn sie kein Administratorbenutzer wäre)).

Das bringt uns um das Problem (obwohl ich sicher bin, dass erfahrene Entwickler einige Gedanken hinzufügen können).

Verwandte Themen