Вы сможете сделать это, связавшись с платформой ApplicationServices, которая имеет очень удобную функцию "LSCopyApplicationForMIMEType". Это работает так:
CFURLRef appURL = nil;
OSStatus err = LSCopyApplicationForMIMEType(CFSTR("text/x-vcard"), kLSRolesAll, &appURL);
if (err != kLSApplicationNotFoundErr) {
NSLog(@"URL: %@", (NSURL *)appURL);
}
CFRelease(appURL);
Я объясню, что означают параметры. Первый параметр - это CFStringRef типа MIME, который вы ищете. Второй параметр указывает, какое приложение вы ищете, т.е. приложение, которое может редактировать этот файл, или приложение, которое может просматривать этот файл и т. Д. KLSRolesAll означает, что вам все равно. Последний параметр - это указатель на CFURLRef, где функция прикрепит URL-адрес приложения (если он может его найти).
На моей машине это печатает:
2009-08-01 12:38:58.159 EmptyFoundation[33121:a0f] URL: file://localhost/Applications/Address%20Book.app/
Одна из замечательных особенностей CFURLRef - это то, что они бесплатно соединяются с NSURL. Это означает, что вы можете взять CFURLRef и привести его к NSURL, и наоборот. Как только вы получили NSURL приложения, довольно просто использовать что-то вроде NSWorkspace -launchApplicationAtURL: options: configuration: error: метод для открытия приложения.
Если вы хотите открыть определенный файл в этом приложении (например, файл, из которого вы получили тип MIME), вы можете использовать что-то вроде - [NSWorkspace openFile: withApplication:].
Если вы не можете получить MIME-тип (несмотря на то, что вы говорите в своем вопросе), существует множество похожих функций LaunchServices. Вы можете прочитать все о них здесь .