Сохранение стандартных NSUserDefaults с включенными группами приложений
Исходная ситуация:
Я разрабатываю изолированное приложение на macOS 10.13. Это приложение типа "обувной коробки", состоящее из главного окна с панелью инструментов. Автосохранение для оконной рамы и конфигурации панели инструментов настраивается в Интерфейсном Разработчике.
Если я запускаю и закрываю приложение, я вижу файл настроек (с именем <app-identifier>.plist
) содержит ожидаемые данные в контейнере песочницы приложения. Все отлично работает
Расширение приложения с помощью групп приложений:
Чтобы разрешить обмен данными с другими изолированными приложениями, я создал группу приложений в моей целевой Capabilities
вкладка Xcode.
Пока это работает, то есть при запуске приложения создается дополнительный контейнер группы. Также можно сохранить общие настройки в контейнере группы, создав UserDefaults
объект через UserDefaults.init(suiteName:"<group-name>")
,
Эта проблема:
После добавления группы приложений механизм автосохранения, например, для настройки панели инструментов, больше не работает. Запуск и выход из приложения на чистом Mac больше не создает .plist
файл в Preferences
каталог контейнера приложения. Вместо этого консоль показывает такие сообщения:
[User Defaults] attempt to set <value> for key in <key> in
non-persistent preferences domain CFPrefsPlistSource<address>
(Domain: <app-identifier>, User: kCFPreferencesCurrentUser,
ByHost: No, Container: (null), Contents Need Refresh: Yes)
Мне кажется, что механизм автосохранения больше не может записывать свои данные в файл настроек.
Можно ли одновременно использовать стандартные UserDefaults и общие в группах приложений?
1 ответ
Проблема решена: после перезагрузки Mac все работает как положено. Это действительно странно.