Last active
April 14, 2019 18:57
-
-
Save tempelmann/904e724163ad9ef56ecba8fb97bd68ec to your computer and use it in GitHub Desktop.
Weird NSUserDefaults/CFPreferences behavior. See https://twitter.com/tempelorg/status/1117388426221846529
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
i: 165 | |
r0: 165 | |
r1: (null) | |
r2: 165 | |
r3: (null) | |
r4: 175 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// path contains the full path to the plist file, whereas domain contains just the suite name. | |
// good | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)path, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)path, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)path, kCFPreferencesCurrentUser, kCFPreferencesAnyHost); | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)path, kCFPreferencesAnyUser, kCFPreferencesAnyHost); | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)domain, kCFPreferencesCurrentUser, kCFPreferencesAnyHost); | |
// bad: | |
[NSUserDefaults.standardUserDefaults integerForKey:key]; // stuck value | |
CFPreferencesCopyAppValue((CFStringRef)key, (CFStringRef)path); // stuck value | |
CFPreferencesCopyAppValue((CFStringRef)key, (CFStringRef)domain); // stuck value | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)domain, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); // stuck value | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)domain, kCFPreferencesAnyUser, kCFPreferencesAnyHost); // null | |
CFPreferencesCopyValue((CFStringRef)key, (CFStringRef)domain, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); // null |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// log for the affected app after using: | |
// sudo log config --subsystem=com.apple.{defaults,cfprefsd} --mode "level:debug, persist:debug" | |
// and to turn that logging off again: | |
// sudo log config --subsystem=com.apple.{defaults,cfprefsd} --reset | |
42.491434 cfprefsd Process 1565 sent a request related to { org.tempel.faf2, user: kCFPreferencesAnyUser, kCFPreferencesCurrentHost, no container, managed: 0 } | |
42.491514 cfprefsd Process 1565 sent a request related to { org.tempel.faf2, user: tt, kCFPreferencesCurrentHost, no container, managed: 1 } | |
42.491440 cfprefsd Process 1565 sent a request related to { org.tempel.faf2, user: kCFPreferencesAnyUser, kCFPreferencesCurrentHost, no container, managed: 1 } | |
42.491516 cfprefsd Process 1565 sent a request related to { kCFPreferencesAnyApplication, user: tt, kCFPreferencesCurrentHost, no container, managed: 1 } | |
42.491445 cfprefsd Data for { kCFPreferencesAnyApplication, kCFPreferencesAnyUser } was purged due to memory pressure | |
42.491518 cfprefsd Process 1565 sent a request related to { org.tempel.faf2, user: tt, kCFPreferencesAnyHost, no container, managed: 0 } | |
42.491487 cfprefsd Couldn't open <private> due to No such file or directory | |
42.491535 cfprefsd Process 1565 sent a request related to { org.tempel.faf2, user: tt, kCFPreferencesCurrentHost, no container, managed: 0 } | |
42.491493 cfprefsd Process 1565 sent a request related to { kCFPreferencesAnyApplication, user: kCFPreferencesAnyUser, kCFPreferencesCurrentHost, no container, managed: 0 } | |
42.491551 cfprefsd Data for { kCFPreferencesAnyApplication, <private> } was purged due to memory pressure | |
42.491525 cfprefsd no cache for { kCFPreferencesAnyApplication, kCFPreferencesAnyUser, kCFPreferencesCurrentHost, no container, managed: 0 }, loading from /Library/Preferences/.GlobalPreferences.plist | |
42.491551 cfprefsd Data for { kCFPreferencesAnyApplication, <private> } was purged due to memory pressure | |
42.491577 cfprefsd Process 1565 read data for { kCFPreferencesAnyApplication, kCFPreferencesAnyUser, kCFPreferencesCurrentHost, no container, managed: 0 }, backed by /Library/Preferences/.GlobalPreferences.plist | |
42.491554 cfprefsd Process 1565 read data for { org.tempel.faf2, tt, kCFPreferencesAnyHost, no container, managed: 0 }, backed by /Users/tt/Library/Preferences/org.tempel.faf2.plist | |
42.491572 cfprefsd Process 1565 read data for { org.tempel.faf2, tt, kCFPreferencesCurrentHost, no container, managed: 0 }, backed by /Users/tt/Library/Preferences/ByHost/org.tempel.faf2.21A029CC-8327-558F-BFB3-EB038C8CE205.plist | |
42.491581 cfprefsd Process 1565 sent a request related to { kCFPreferencesAnyApplication, user: tt, kCFPreferencesCurrentHost, no container, managed: 0 } | |
42.491586 cfprefsd Process 1565 sent a request related to { kCFPreferencesAnyApplication, user: tt, kCFPreferencesAnyHost, no container, managed: 0 } | |
42.491661 cfprefsd no cache for { kCFPreferencesAnyApplication, tt, kCFPreferencesCurrentHost, no container, managed: 0 }, loading from /Users/tt/Library/Preferences/ByHost/.GlobalPreferences.21A029CC-8327-558F-BFB3-EB038C8CE205.plist | |
42.491728 cfprefsd no cache for { kCFPreferencesAnyApplication, tt, kCFPreferencesAnyHost, no container, managed: 0 }, loading from /Users/tt/Library/Preferences/.GlobalPreferences.plist | |
42.491820 cfprefsd Process 1565 read data for { kCFPreferencesAnyApplication, tt, kCFPreferencesCurrentHost, no container, managed: 0 }, backed by /Users/tt/Library/Preferences/ByHost/.GlobalPreferences.21A029CC-8327-558F-BFB3-EB038C8CE205.plist | |
42.491873 cfprefsd Process 1565 read data for { kCFPreferencesAnyApplication, tt, kCFPreferencesAnyHost, no container, managed: 0 }, backed by /Users/tt/Library/Preferences/.GlobalPreferences.plist |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { | |
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; | |
NSInteger i = [prefs integerForKey:@"SearchCount"]; | |
[prefs setInteger:i+10 forKey:@"SearchCount"]; | |
NSInteger r0 = [prefs integerForKey:@"SearchCount"]; | |
CFPropertyListRef r1 = CFPreferencesCopyAppValue(CFSTR("SearchCount"), CFSTR("/Users/tt/Library/Preferences/org.tempel.faf2")); | |
CFPropertyListRef r2 = CFPreferencesCopyAppValue(CFSTR("SearchCount"), CFSTR("org.tempel.faf2")); // same as kCFPreferencesCurrentApplication | |
CFPropertyListRef r3 = CFPreferencesCopyValue(CFSTR("SearchCount"), CFSTR("/Users/tt/Library/Preferences/org.tempel.faf2"), kCFPreferencesCurrentUser, kCFPreferencesAnyHost); | |
system("defaults read org.tempel.faf2 SearchCount >/tmp/r4"); | |
NSString *r4 = [NSString stringWithContentsOfFile:@"/tmp/r4" encoding:NSUTF8StringEncoding error:nil]; | |
NSLog(@"\n%ld\n%ld\n%@\n%@\n%@\n%@", i, r0, r1, r2, r3, r4); | |
exit(0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
For anyone finding this and looking for a solution: I eventually found a file inside
/Users/tempi/Library/Preferences/ByHost
that contained all the "stuck" preferences.I identified this file by using FindAnyFile, looking for any files modified in the past 2 days, and with the File Content containing one of the stuck keys.