Я хочу определить разрешенные типы файлов (типы содержимого) в файле Info.plist
моего приложения Cocoa. Поэтому я добавил их, как показано в следующем примере.
# Extract from Info.plist
[...]
CFBundleDocumentTypes
CFBundleTypeName
public.png
CFBundleTypeIconFile
png.icns
CFBundleTypeRole
Viewer
LSIsAppleDefaultForType
LSItemContentTypes
public.png
[...]
Далее, мое приложение позволяет открывать файлы с помощью 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
? Есть ли встроенная в Cocoa функция? public.folder
?Примечание:
В ходе моего исследования я нашел эту статью весьма информативной: Simplifying Data Handling with Uniform Type Identifiers.