ИМП и стартовые услуги
Где хранится список «известных» типов файлов?
Официальный термин для «типов файлов» - это
Унифицированные идентификаторы типов
(UTI), а база данных UTI поддерживается
Launch Services .
Используя Терминал , вы можете просматривать содержимое базы данных Launch Services с помощью lsregister
инструмента, который хранится по адресу:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
Вместо того, чтобы указывать этот длинный путь каждый раз, когда вы хотите запустить lsregister
, вы можете временно добавить его каталог в ваш PATH
:
PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"
и тогда вы можете запустить lsregister
, просто введя:
lsregister
Чтобы просмотреть содержимое базы данных Launch Services:
lsregister -dump
Объявление новых ИМП
Есть ли способ заставить OS X распознавать новые типы файлов?
Эта статья Apple
«Объявление новых унифицированных идентификаторов типов» содержит полезную информацию о том, как это сделать. Вот полный процесс:
1. Создайте фиктивное приложение
Создайте фиктивное приложение для регистрации в Launch Services:
- Откройте редактор AppleScript (находится в папке « Утилиты » OS X ).
- Сохраните новый пустой скрипт где-нибудь (например: на рабочем столе), установив для его формата файла значение « Приложение» .
2. Откройте его файл Info.plist
- Найдите ваше новое фиктивное приложение в Finder.
- Щелкните правой кнопкой мыши на нем и выберите « Показать содержимое пакета» во всплывающем меню.
- Откройте его содержимое папки.
- Откройте файл Info.plist в текстовом редакторе (например, TextEdit ).
3. Добавьте свой новый UTI
На выбор есть два ключа:
UTExportedTypeDeclarations
- для ваших собственных расширений файлов.
UTImportedTypeDeclarations
- для расширений файлов, которые уже существуют, но не распознаются OS X.
Выберите ключ, который наиболее подходит для ваших нужд.
Затем в файле Info.plist перед последними двумя строками ( </dict></plist>
) добавьте этот код:
<key>KEY</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>IDENTIFIER</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>EXTENSION</string>
</array>
</dict>
</dict>
</array>
внести следующие изменения:
- Замените
KEY
выбранным вами ключом (или, UTExportedTypeDeclarations
или UTImportedTypeDeclarations
).
- Замените
IDENTIFIER
подходящим идентификатором обратного DNS:
- Экспортировано - что-то вроде
com.mycompany.mytype
- Импортные - Для ID Software «s
Дум WAD формат, подходящий идентификатор будет
com.idsoftware.wad
- Заменить
EXTENSION
с расширением имени файла (без точки), например: wad
.
Это минимальный код, необходимый для запуска служб, чтобы принять ваш новый UTI. Вы также можете добавить следующие дополнительные свойства:
UTTypeConformsTo
- См. Приложение ниже.
UTTypeDescription
- Пользовательское описание, которое будет отображаться в Finder.
UTTypeIconFile
- Если вы добавите
файл изображения значка Apple в папку « Содержание» / «Ресурсы » в приложении-заглушке и добавите его имя файла в это свойство, то файлы с новым расширением имени файла будут использовать этот значок.
UTTypeReferenceURL
- URL справочного документа, описывающего этот тип.
Вот полный пример, показывающий все дополнительные свойства:
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>com.idsoftware.wad</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>wad</string>
</array>
</dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>Doom WAD file</string>
<key>UTTypeIconFile</key>
<string>DoomWAD.icns</string>
<key>UTTypeReferenceURL</key>
<string>http://en.wikipedia.org/wiki/Doom_WAD</string>
</dict>
</array>
4. Зарегистрируйте свой новый UTI в Launch Services.
Запустите эту команду в Терминале:
lsregister <PATH_TO_APP>
замена <PATH_TO_APP>
на путь к вашему фиктивному приложению, например:
lsregister ~/Desktop/MyDummyApp.app
Если вы сейчас создадите файл с новым расширением имени файла, а затем выберите его в Finder и нажмете Enter, Finder должен автоматически выбрать только часть имени файла, а не расширение.
Если вы просматриваете содержимое базы данных Launch Services:
lsregister -dump
Вы должны найти свой новый UTI в списке:
type id: 50364
bindableKey: 12608
generation: 1
uti: com.idsoftware.wad
description: Doom WAD file
flags: imported active apple-internal untrusted
icon: DoomWAD.icns
conforms to: public.data
tags: .wad
Если позже вы захотите отменить регистрацию вашего нового UTI, передайте -u
опцию lsregister
:
lsregister -u ~/Desktop/MyDummyApp.app
Приложение: иерархия и соответствие UTI
OS X объявляет иерархию UTI, которые перечислены здесь: объявленные
системой унифицированные идентификаторы типа .
Вот несколько ИМП в иерархии:
public.content
public.text
public.rtf
public.html
public.xml
public.plain-text
public.source-code
public.c-source
public.c-header
com.sun.java-source
public.image
public.jpeg
public.tiff
public.png
public.audiovisual-content
public.movie
public.audio
Каждый UTI «соответствует» своему родительскому UTI:
Например, UTI public.html
, который определяет текст HTML, соответствует базовому текстовому идентификатору public.text
. В этом случае соответствие позволяет приложениям, которые могут открывать общие текстовые файлы, идентифицировать файлы HTML как те, которые могут открываться. ( ссылка )
При создании нового UTI рекомендуется установить UTTypeConformsTo
свойство для одного из существующих UTI.
Например, если ваш новый ИМП типа исходного кода, то вы должны установить UTTypeConformsTo
свойство public.source-code
, так что он может быть открыт с помощью любых приложений , которые могут открывать
public.source-code
или public.plain-text
или public.text
файлы.
CFBundleTypeExtensions
является устаревшим ключом, который стал устаревшим в OS X 10.5 . Предпочтительным методом с 2007 года является объявление новых UTI, как указано здесь и описано в моем ответе .