Эквиваленты XDG_CONFIG_HOME и XDG_DATA_HOME на Mac OS X?
Я планирую разработать кросс-платформенный script. В Linux и других операционных системах он сохранит конфигурацию в XDG_CONFIG_HOME
и файлы данных (в частности, загруженные плагины) в XDG_DATA_HOME
. В Windows он будет использовать APPDATA
для обоих (если у кого-то нет лучшей идеи). Однако, что было бы правильным в Mac OS X?
С первого взгляда в удобном каталоге Macbook ~/Library
я увидел папки Preferences
и Application Support
. Первоначально планировалось использовать их, но Preferences
кажется, просто содержит plists с обратными именами домена, такими как com.apple.foo.bar.baz.plist
, и каждая папка в Application Support
соответствует набору в /Applications
, поэтому я не уверен, насколько хорошо система будет реагировать на файлы, которые не соответствуют его стандартам. Хранение их непосредственно в ~/Library
может быть вариантом, но я не хочу загрязнять его с помощью бродячего файла myscript.conf
, если для него лучше.
Где я должен хранить эти файлы? (И, пожалуйста, не говорите просто ~/.myscript
. Я знаю, что это традиция Unix, но мне не нравится видеть случайные dotfiles в домашнем каталоге.)
Ответы
Ответ 1
Я бы использовал ~/Library/Application Support/script_name/
. Подкаталоги внутри Application Support
обычно используются различными приложениями, включая собственные программные продукты Apple. Но он не применяется ОС и не привязан к приложениям внутри /Applications
. Таким образом, вы можете свободно создавать в нем свой собственный каталог.
Для структуры каталогов OS X в целом см. этот документ Apple.
Ответ 2
Сравнение документации Apple для различных путей к спецификациям базового каталога XDG приближается к следующим местоположениям:
-
XDG_CONFIG_HOME
▶ ︎ ~/Library/Preferences/
-
XDG_DATA_HOME
▶ ︎ ~/Library/
-
XDG_CACHE_HOME
▶ ︎ ~/Library/Caches/
Сопоставление местоположений спецификации базового каталога XDG для "Моего приложения" в Mac OS X может выглядеть так:
-
XDG_CONFIG_HOME
▶ ︎ ~/Library/Preferences/name.often.with.domain.myapp.plist
-
XDG_DATA_HOME
▶ ︎ ~/Library/My App/
-
XDG_CACHE_HOME
▶ ︎ ~/Library/Caches/My App/
Эти отображения кажутся довольно разумными, но они не точны. Некоторые типы кеша или данных могут быть подходящими для ~/Library/Application Support/My App
, а другие могут быть лучше всего в временных папках или наборе приложений. Все это по соглашению, и те же причины для использования лучших мест XDG_
применяются для использования лучших мест в системе Mac OS X.
Ваше раздражение в ~/.myscript
соответствует рекомендациям Apple: "Не загрязняйте пространство пользователя".
Литература:
Ответ 3
Я согласен с комментарием OJFord: если вы пишете сценарий, лучше просто следуйте XDG Base Directory.
Обоснования:
- Имена в
XDG_CONFIG_HOME
как правило, представляют собой XDG_CONFIG_HOME
имена, такие как git
; те, что в ~/Library/Preferences/
как правило, ограничены обратными доменными именами, такими как com.apple.foo-bar
, или именами, разделенными заглавными буквами, начинающимися с заглавной буквы, такими как Foo Bar
. - Приложения с графическим интерфейсом следовали соглашениям macOS при размещении в
/Applications
. Вы не размещаете свой скрипт в /Applications
; Вы помещаете их в директории, специфичные для UNIX. Лучше быть последовательным. -
~/Library/Preferences/
полна .plist
s. Ни один кросс-платформенный скрипт, который я знаю, не использует списки свойств. - Пользователи могут захотеть синхронизировать кросс-платформенную конфигурацию и только MacOS.
Например, Git помещает их конфигурационный файл в XDG_CONFIG_HOME/git/config
, а не в ~/Library/Preferences/Git/config
. Имеет смысл для меня.
нота
Я сделал это только для файлов конфигурации ($XDG_CONFIG_HOME
) и файлов данных ($XDG_DATA_HOME
); для файлов кэша это становится тонким. Согласно How-To Geek, каталог ~/Library/Caches
исключен из Time Machine по умолчанию. Меня это не волнует, так как я не копирую ни один каталог.