Часто задаваемые вопросы: механизм тегов в macOS (Finder) и реализация в этом приложении
1. Что такое теги Finder в macOS? Где они хранятся?
Теги Finder относятся к метаданным файла и не записываются непосредственно в его содержимое, а сохраняются в расширенных атрибутах (xattr). Основным ключом является:
com.apple.metadata:_kMDItemUserTags
Содержимое этого атрибута представляет собой бинерный plist, который по сути является массивом тегов. Каждый элемент тега содержит название тега и цветовой индекс, где индексы варьируются от 0 до 7: 0 — без цвета, 1 — серый, 2 — зелёный, 3 — фиолетовый, 4 — синий, 5 — жёлтый, 6 — красный, 7 — оранжевый.
Таким образом:
- «Присвоение файла тегу» фактически означает «запись метаданных тега в xattr»;
- Это отдельная операция от возможности поиска таких файлов через Spotlight.
2. О старых расширенных атрибутах com.apple.FinderInfo
com.apple.FinderInfo — это один из более ранних механизмов macOS/Finder:
- Старый механизм: он может указывать только один цвет и не содержит названия тега.
- В новых системах всё ещё может использоваться: даже сейчас, когда основным стандартом является
_kMDItemUserTags, Finder может одновременно записывать/обновлятьcom.apple.FinderInfo(для обеспечения совместимости со старыми системами).
Более конкретно:
- Finder будет записывать/обновлять цветовую информацию в
com.apple.FinderInfoтолько в том случае, если название тега присутствует в списке пользовательских тегов Finder; - При наличии нескольких цветовых тегов будет записан цвет, соответствующий последнему тегу в активном списке.
3. Проблема с локализацией: почему один и тот же цвет на разных языках системы воспринимается как разные теги?
macOS записывает локализованные строки названий тегов:
- В англоязычной системе записывается
Red. - В китайской системе записывается
红色.
Для системы это два разных тега. Наше приложение использует системные API для получения стандартных названий цветовых тегов, поэтому результат зависит от языкового окружения системы (в разделе «Системные настройки → Общие → Язык и региональные параметры / Язык интерфейса», если выбран режим «Автоматически», то используется текущий язык системы). Если язык системы не совпадает с языком приложения, могут возникнуть различия в названиях тегов.
4. Почему настройки приложения должны соответствовать конфигурации тегов в Finder?
- В силу ограничений macOS приложение обычно не может полностью считать список пользовательских пар «название тега ↔ цвет» из Finder.
- При чтении тегов системные API часто предоставляют только название тега, но не цвет; если приложение не настроено на соответствующий цвет для данного названия, отображение цвета может быть некорректным.
- При записи тегов системные API также обычно передают только название тега, а окончательный цвет определяется тем, как Finder интерпретирует это название.
5. Как хранятся метаданные тегов на разных дисках и сетевых ресурсах? (APFS / AppleDouble / NTFS ADS)
5.1 APFS (локальный диск) — нативное хранение xattr (наиболее надёжно)
APFS нативно поддерживает расширенные атрибуты, поэтому метаданные тегов сохраняются непосредственно в xattr самого файла.
5.2 Места, которые не поддерживают или частично поддерживают xattr — AppleDouble (._original_filename)
Когда целевая файловая система или протокол не способны надёжно сохранять xattr (например, FAT32, exFAT, сетевые диски: SMB/WebDAV/NFS и др.), macOS помещает метаданные в сопровождающий файл формата AppleDouble:
._original_filename(например, для файлаphoto.jpgсоздаётся файл._photo.jpg).
Видимость:
- Finder никогда не отображает такие файлы (даже при включённом показе скрытых файлов);
- В терминале их можно увидеть с помощью команды
ls -la; - В Windows, если включить отображение скрытых файлов, эти файлы будут видны (поэтому там можно заметить множество маленьких файлов с префиксом
._).
Важное замечание (частая причина «потери» тегов):
- Если вы перемещаете/копируете файлы в Windows или с помощью некоторых инструментов, перемещая только основной файл и оставляя файлы
._на месте, то после перемещения на новое место теги «исчезнут». - Однако, если затем перенести и соответствующие файлы
._, теги обычно восстанавливаются.
5.3 SMB-соединение с NTFS: возможное использование ADS (альтернативных потоков данных)
При доступе к NTFS через SMB и при соблюдении определённых условий конфигурации сервера/протокола, macOS может не создавать файлы ._, а записывать метаданные в ADS (Alternate Data Streams, альтернативные потоки данных) NTFS:
- ADS — это особенность NTFS: помимо основного содержимого файла, в нём могут существовать дополнительные невидимые потоки данных, используемые для хранения дополнительных метаданных.
- Преимущество: при перемещении/копировании внутри NTFS эти метаданные обычно сохраняются вместе с файлом, что делает процесс относительно «чистым» для пользователей Windows (не создаётся множество файлов
._).
Однако следует помнить:
- Когда вы перемещаете/копируете файлы с NTFS на FAT32 или exFAT, целевая файловая система не поддерживает ADS/xattr и другие подобные метаданные, и Windows часто выдаёт предупреждение типа:
«Вы действительно хотите скопировать файлы без копирования их свойств?» Это означает, что все дополнительные метаданные будут потеряны; после копирования теги могут не сохраниться.
6. Как просмотреть xattr тегов файла?
Командная строка xattr неудобна: она не поддерживает обработку и отображение таких бинарных plist-атрибутов, как com.apple.metadata:_kMDItemUserTags; для корректного вывода необходимо использовать опцию -px, чтобы увидеть данные в шестнадцатеричном формате.
Рекомендуется использовать сторонние инструменты:
- xattred: позволяет наглядно просматривать и проверять xattr, такие как
_kMDItemUserTags,com.apple.FinderInfoи др.
7. Как взаимосвязаны Spotlight и теги? Зависят ли теги от Spotlight?
- Теги сами по себе не зависят от Spotlight: теги записываются в xattr файла в момент их присвоения, и факт их индексации не влияет на саму наличие тегов.
- Spotlight — это лишь механизм индексации: он отвечает за создание индексов на основе метаданных, таких как названия тегов, для системного поиска.
- macOS обычно автоматически обновляет индексы после перемещения или переименования файлов; однако внешние диски, сетевые диски и каталоги, добавленные в «Параметры конфиденциальности поиска», могут не индексироваться Spotlight.
8. Что делает «расширенный индекс» в этом приложении?
Когда Spotlight не может охватить весь объём данных (например, на внешних или сетевых дисках, а также в каталогах, исключённых из поиска), приложение предоставляет расширенный индекс:
- При просмотре папок в приложении оно запоминает информацию о тегах файлов в этой папке;
- Когда вы выбираете в дереве каталогов просмотр всех файлов с определённым тегом, приложение дополняет результаты Spotlight файлами, найденными с помощью расширенного индекса;
- Для обновления индекса тегов в конкретной папке можно щёлкнуть правой кнопкой мыши по папке и выбрать пункт «Сканировать и обновить».