Где хранятся данные NSUserDefaults приложения Mac?


Я использую NSUserDefaults для хранения некоторых данных в моем приложении.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"dummy string" forKey:@"lastValue"];
[prefs synchronize];

для целей тестирования мне нужно увидеть файл plist системных настроек, где мои данные NSUserDefaults сохраняются на Mac.

Я знаю, где хранятся значения по умолчанию пользователя приложения iOS, но я не знаю о приложении mac. Где хранятся данные NSUserDefaults приложения Mac?

5 53

5 ответов:

их можно найти в нескольких местах:

~/Library/Preferences/com.example.myapp.plist
~/Library/SyncedPreferences/com.example.myapp.plist

а если в песочнице

~/Library/Containers/com.example.myapp/Data/Library/Preferences/com.example.myapp.plist
~/Library/Containers/com.example.myapp/Data/Library/SyncedPreferences/com.example.myapp.plist

In ~/Library/Preferences/com.example.myapp.plist.

(Xcode 7.3.1,macOS 10.11.6)

для дополнительного, если вы используете группы приложений

    if let prefs = NSUserDefaults(suiteName: "group.groupApps")  {
       ...
    }

plist файл будет здесь:

~ / библиотека / группа контейнеров / группа. группа / библиотека/предпочтения / группа.группа А.файл plist

на Сьерра, я нашел данные здесь:~/Library/Application Support/.

еще одно возможное место для этих данных вступает в игру при попытке вещи на детской площадке. Я экспериментировал с UserDefaults на игровой площадке, используя XCode 8.3 и Swift 3, и хотел увидеть полученный файл plist. После некоторой детективной работы (файлы UserDefaults имеют идентификатор пакета в имени файла и вызывающий пакет.главный.bundleIdentifier на игровой площадке дает идентификатор XCode) я обнаружил, к моему большому удивлению, что данные UserDefaults были добавлены к:

~/Library/Preferences/com.apple.dt.Xcode

другими словами, ключи и значения добавляются в файл настроек XCode! Я дважды проверил, придумав очень маловероятные строки для ключей, и они действительно были добавлены туда. У меня не было смелости попробовать использовать некоторые ключи, которые уже использовались XCode, но осторожность здесь кажется хорошей.