Рекомендации по обновлению файлов в песочнице приложений OS X

Мне известны методы переноса приложения без песочницы в изолированную программную среду приложения, хотя я хотел бы знать, каковы наилучшие методы обновления файлов (в основном списков предпочтений), которые уже находятся в контейнере изолированной программной среды приложения?

В конечном счете, если есть метод, похожий на NSUserDefaults, который будет работать для обновления моего списка предпочтений в контейнере песочницы приложения, это то, что я хочу сделать.

Источники, которые я читал:

Руководство по проектированию тестовой среды приложения

Справочник по классу NSUserDefaults

Песочница приложения.


person Ned Schneebly    schedule 04.01.2013    source источник


Ответы (1)


Если вы действительно сохраняете настройки, просто используйте NSUserDefaults. Он работает так же (с точки зрения API) внутри песочницы, как и снаружи. Однако действительно лучше притвориться, что предпочтения не хранятся в списках; полагаясь на эту деталь реализации, вы можете иметь всевозможные неприятные побочные эффекты в последних ОС, поэтому просто используйте API.

Если вы пытаетесь изменить произвольные списки, а не сохранять настройки, не используйте NSUserDefaults. Используйте NSPropertyListSerialization и читайте/пишите их напрямую.

person Catfish_Man    schedule 04.01.2013
comment
* Мне любопытны упомянутые вами побочные эффекты; также хороший ответ здесь. :) - person Ned Schneebly; 04.01.2013
comment
Хех, у меня этот вопрос открыт на вкладке рядом с этим, чтобы напомнить мне ответить на последний комментарий к моему ответу. Побочный эффект, о котором я упомянул, заключается в том, что в Mountain Lion правда о настройках хранится в демоне, а не на диске (хотя диск по-прежнему используется для их сохранения). Удаление/замена файла может быть немедленно отражено или не отражено в API, и, если вам действительно не повезло, он может быть перезаписан асинхронной записью от демона. Точно так же прямое чтение может не привести к получению самых последних данных. - person Catfish_Man; 04.01.2013