Сценарий:
Мне нравится определять разрешенные типы файлов (типы контента) в файле Info.plist
моего приложения Какао. Поэтому я добавил их, как показано в следующем примере.
# Extract from Info.plist
[...]
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>public.png</string>
<key>CFBundleTypeIconFile</key>
<string>png.icns</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSIsAppleDefaultForType</key>
<true/>
<key>LSItemContentTypes</key>
<array>
<string>public.png</string>
</array>
</dict>
[...]
Далее, мое приложение позволяет открывать файлы, используя NSOpenPanel
. Панель позволяет устанавливать разрешенные типы файлов с помощью следующего селектора: setAllowedFileTypes:
. Документация гласит, что UTI может использоваться .
Тип файла может быть общим расширением файла или UTI.
Индивидуальное решение:
Я написал следующий вспомогательный метод для извлечения UTI из файла Info.plist
.
/**
Returns a collection of uniform type identifiers as defined in the plist file.
@returns A collection of UTI strings.
*/
+ (NSArray*)uniformTypeIdentifiers {
static NSArray* contentTypes = nil;
if (!contentTypes) {
NSArray* documentTypes = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDocumentTypes"];
NSMutableArray* contentTypesCollection = [NSMutableArray arrayWithCapacity:[documentTypes count]];
for (NSDictionary* documentType in documentTypes) {
[contentTypesCollection addObjectsFromArray:[documentType objectForKey:@"LSItemContentTypes"]];
}
contentTypes = [NSArray arrayWithArray:contentTypesCollection];
contentTypesCollection = nil;
}
return contentTypes;
}
Вместо [NSBundle mainBundle]
также можно использовать CFBundleGetInfoDictionary(CFBundleGetMainBundle())
.
Вопросы:
- Знаете ли вы более разумный способ извлечения информации о типе контента
из файла
Info.plist
? Есть ли встроенная функция Какао?
- Как вы справляетесь с определением папок, которые могут содержать
там, например
public.folder
Примечание:
В ходе моего исследования я нашел эту статью довольно информативной: Упрощение обработки данных с помощью унифицированных идентификаторов типов .