Единый идентификатор типа ( UTI ) — это текстовая строка, используемая в программном обеспечении, предоставленном Apple Inc., для уникальной идентификации заданного класса или типа элемента. Apple предоставляет встроенные UTI для идентификации общих системных объектов — типов файлов документов или изображений, папок и пакетов приложений, потоковых данных, данных вырезок, данных фильмов — и позволяет сторонним разработчикам добавлять свои собственные UTI для специфичных для приложения или фирменных целей. Поддержка UTI была добавлена в операционную систему Mac OS X 10.4 , интегрированную в технологию поиска Spotlight на рабочем столе, которая использует UTI для категоризации документов. Одной из основных целей разработки UTI было устранение неоднозначностей и проблем, связанных с выводом содержимого файла из его типа MIME , расширения имени файла или типа или кода создателя . [1]
UTI используют структуру именования с обратной DNS . Имена могут включать символы ASCII A–Z, a–z, 0–9, дефис («-») и точку («.»), а также все символы Unicode выше U+007F. [1] Двоеточия и косые черты запрещены для совместимости с соглашениями о путях файлов Macintosh и POSIX . UTI поддерживают множественное наследование , что позволяет идентифицировать файлы с любым количеством соответствующих типов в соответствии с содержащимися данными. UTI нечувствительны к регистру. [2]
Одной из трудностей в поддержании операционной системы , доступной пользователю, является установление связей между типами данных и приложениями или процессами, которые могут эффективно использовать такие данные. Например, файл, содержащий данные изображения в определенном формате сжатия, может быть открыт и обработан только в приложениях, которые способны обрабатывать данные изображения, и эти приложения должны иметь возможность определять, какой тип сжатия использовался для извлечения и работы с этими данными. В ранних компьютерных системах — в частности, DOS , ее вариантах и некоторых версиях Windows — ассоциации файлов поддерживались расширениями файлов . Трех-четырехсимвольный код, следующий за именем файла, указывает системе открыть файл в определенных приложениях.
Начиная с System 1 , [3] операционные системы Macintosh прикрепляли коды типов и коды создателей как часть метаданных файлов . Эти четырехсимвольные коды были разработаны для указания как приложения, создавшего файл (код создателя), так и конкретного типа файла (код типа), чтобы другие приложения могли легко открывать и обрабатывать данные файла. Однако, хотя коды типов и создателей расширяли гибкость системы — определенный тип файла не ограничивался открытием в определенном приложении — они страдали от многих из тех же проблем, что и расширения файлов. Коды типов и создателей могли быть утеряны, когда файлы переносились через не-Macintosh-системы (например, серверы на базе Unix), а обилие кодов типов делало идентификацию проблематичной.
Кроме того, классическая Mac OS вообще не распознавала расширения файлов, что приводило к нераспознанным ошибкам файлов при передаче файлов из систем DOS/Windows. OPENSTEP , который лег в основу Mac OS X, использовал расширения, и ранние версии Mac OS X последовали этому примеру. Это привело к некоторым противоречиям с пользователями и разработчиками, пришедшими в OS X из NeXT или Windows, выступавшими за продолжение использования расширений файлов, и теми, кто перешел из Classic Mac OS, призывавшими Apple заменить или дополнить расширения файлов типами и создателями. [4]
Существуют и другие типы идентификации файлов: например, типы MIME используются для идентификации данных, передаваемых через Интернет. Однако система UTI компании Apple была разработана для создания гибкой системы ассоциаций файлов, которая будет описывать данные иерархически и обеспечивать лучшую категоризацию и поиск, стандартизировать описания данных в разных контекстах и предоставлять единый метод расширения типов данных. Например, UTI public.jpeg и public.png наследуют от UTI public.image , позволяя пользователям выполнять узкий поиск изображений JPEG или PNG или широкий поиск любого типа изображений, просто изменяя специфику UTI, используемого при поиске. Кроме того, разработчики приложений, которые разрабатывают новые типы данных, могут легко расширять доступные UTI. Например, новый формат изображения, разработанный компанией, может иметь UTI com.company.proprietary-image и быть указан для наследования от типа public.image .
MacOS от Apple продолжает поддерживать другие формы ассоциации файлов и содержит утилиты для преобразования между ними, но при наличии возможности будет отдавать предпочтение UTI.
Apple поддерживает домен public.* как набор базовых типов данных для всех UTI. Другие UTI связаны с этими базовыми UTI с помощью соответствия , системы, похожей на наследование классов. UTI, которые соответствуют другим UTI, имеют общие базовые типы, и в целом любое приложение, работающее с данными более общего UTI, должно иметь возможность работать с данными любого UTI, который соответствует этому общему UTI.
Наиболее базовые публичные UTI в иерархии Apple следующие:
UTI используются даже для идентификации других идентификаторов типов файлов:
Динамические UTI могут создаваться по мере необходимости приложениями; они имеют префикс dyn. и принимают форму «совместимой с UTI оболочки вокруг иначе неизвестного расширения имени файла, типа MIME, OSType и т. д.» [1]
Apple предоставляет большую коллекцию системно объявленных унифицированных идентификаторов типов. Сторонние приложения могут добавлять UTI в базу данных, поддерживаемую macOS, «экспортируя» UTI, объявленные в пакете приложения. Поскольку новые UTI могут быть объявлены как «соответствующие» существующим системным UTI, а декларации могут связывать новые UTI с расширениями файлов, экспортированная декларация сама по себе может предоставить операционной системе достаточно информации для включения новых функций, таких как включение быстрого просмотра для новых типов файлов.
Чтобы получить UTI определенного файла, используйте команду mdls (список метаданных, часть Spotlight ) в Терминале .
mdls -name kMDItemContentType -name kMDItemContentTypeTree -name kMDItemKind FILE