Справочная информация: по умолчанию формат plist в Mac OS X является двоичным, что не очень хорошо для таких вещей, как отслеживание с помощью git. Существует команда plutil -convert
которая может преобразовывать туда и обратно из двоичного файла в XML, но, кажется, невозможно заставить данный файл plist остаться в формате XML.
Моя идея состоит в том, чтобы использовать функциональность launchd WatchPaths для установки двух сценариев: один изменяет двоичный файл в ~/Library/Preferences
на XML-файл в моем git-репо, а другой - обратно преобразовывает двоичный файл, если изменяется версия XML (я Мне нужно это второе направление, потому что я собираюсь использовать его для синхронизации двух компьютеров).
Единственная проблема заключается в том, что, если я просто настрою это наивно, он будет работать бесконечно, потому что, как только двоичный файл изменится, он обновит XML-файл, но тогда это будет изменение XML-файла, что приведет к это обновление двоичного файла и так далее.
Есть ли умный способ избежать этого цикла. Я думаю, что я хочу сделать, это проверить в скрипте, который преобразует из двоичного в XML, если вещь, которая написала файл последним, была программа, для которой файл предпочтений, или сам скрипт, и если это последний, чтобы не запустить. Есть ли какой-нибудь атрибут, который я могу добавить в файл, который сообщит об этом, который будет очищен, когда обычная программа записывает файл?