Как определить унифицированный идентификатор типа в файле plist?
В моем приложении используется следующая функция NSApplicationDelegate
.
- (void)application:(NSApplication*)sender openFiles:(NSArray*)filenames;
Я хочу использовать эту функцию, чтобы пользователь мог перетащить файлы изображений на значок приложения в доке.
Как мне определить определенные типы файлов в моем файле plist
, чтобы ограничить их изображением? Я узнал, что структура должна выглядеть примерно так.
// plist file contents taken from Preview.app
[...]
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFile</key>
<string>jpeg.icns</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSIsAppleDefaultForType</key>
<true/>
<key>LSItemContentTypes</key>
<array>
<string>public.jpeg</string>
</array>
<key>NSDocumentClass</key>
<string>PVDocument</string>
</dict>
</array>
Я добавил его в файл plist
, но он не работает. Всплывающее окно отображает следующее сообщение об ошибке.
Невозможно открыть документ "test.jpg". MyApp не может открывать файлы в формате "JPEG-изображение".
Кроме того, я прочитал в документации, что есть public.image
, который будет тем, что я хочу определить.
Между тем, я узнал, что файл plist
содержит только ключ CFBundleDocumentTypes
, если я создаю приложение Cocoa с опцией "Создать приложение на основе документов". Можете ли вы прояснить, какие существуют зависимости для варианта?
Ответы
Ответ 1
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>png</string>
<string>jpg</string>
... add as many types as you need
</array>
... other keys
</dict>
</array>
Обновление: ключ CFBundleDocumentTypes устарел в Mac OS X v10.5. Вместо этого следует использовать новый ключ LSItemContentTypes. Элементами являются строки UTI:
<key>LSItemContentTypes</key>
<array>
<string>public.png</string>
</array>
Ответ 2
Если типы документов являются общими типами, вы можете использовать UTI's
Об UTI