- iOS 3.0+
- macOS 10.3+
- tvOS 9.0+
- watchOS 2.0+
Uniform Type Identifiers (or UTIs) are strings which uniquely identify abstract types. They can be used to describe a file format or an in-memory data type, but can also be used to describe the type of other sorts of entities, such as directories, volumes, or packages.
Type declarations appear in bundle property lists and tell the system several things about a type. Detailed information about the format and declaration of a UTI can be found in Uniform Type Identifiers Overview. A few key concepts that are found in the declaration include:
Conformance. Conformance relationships establish a multiple inheritance hierarchy between types. Type property values may be inherited at runtime according to the conformance relationships for each type. When a type's declaration does not include a value for particular type property, then the type's supertypes are searched for a value. Supertypes are searched depth-first, in the order given in the type declaration. This is the only way in which the declared order of the supertypes is significant.
Tags. A tag is a string which indicates the definition of the type in some other type identification mechanism, such as a filename extension or MIME type. The namespace of the other type identification mechanism is known as its class. Classes are themselves identified by uniform type identifiers so that the set of valid tag classes is easily extended in the future.
Type declarations may include several other properties: a localizable user description of the type, the name of an icon resource in the declaring bundle, a reference URL identifying technical documentation about the type itself, and a version number, which can be incremented as a type evolves. All of these properties are optional.