Для данного расширения, как вы проверяете, будут ли каталоги с этим расширением отображаться в Finder как пакет?
Я полагал, что приведенный ниже метод является эффективной реализацией для этого, но создание временного каталога похоже на взлом. Я предполагаю, что смогу правильно реализовать это через Launch Services API, но я не могу понять, как это сделать (хотя, возможно, я упускаю из виду очевидное).
// Extension method on NSWorkspace
@implementation NSWorkspace (MyExtraMethods)
- (BOOL) isPackageExtension: (NSString*) extension
{
NSString * pathToTemp = [NSTemporaryDirectory() stringByAppendingPathComponent:[@"Untitled" stringByAppendingPathExtension: extension]];
[[NSFileManager defaultManager] createDirectoryAtPath:pathToTemp withIntermediateDirectories:NO attributes:nil error:NULL];
BOOL result = [[NSWorkspace sharedWorkspace] isFilePackageAtPath: pathToTemp];
[[NSFileManager defaultManager] removeItemAtPath:pathToTemp error:NULL];
return result;
}
@end
// Basic test for the above
- (void) testIsPackageExtension
{
STAssertFalse([[NSWorkspace sharedWorkspace] isPackageExtension: @"txt"], @"");
STAssertFalse([[NSWorkspace sharedWorkspace] isPackageExtension: @"rtf"], @"");
STAssertTrue([[NSWorkspace sharedWorkspace] isPackageExtension: @"rtfd"], @"");
STAssertTrue([[NSWorkspace sharedWorkspace] isPackageExtension: @"app"], @"");
STAssertTrue([[NSWorkspace sharedWorkspace] isPackageExtension: @"kext"], @"");
STAssertTrue([[NSWorkspace sharedWorkspace] isPackageExtension: @"clr"], @"");
/* The following tests depend on having applications installed
that are not included in Mac OS X:
.esproj Espresso, tested with version 2.0.5 ( http://macrabbit.com/espresso/ )
.dtps Instruments, included in Xcode, tested with version 4.5 (4523) */
STAssertTrue([[NSWorkspace sharedWorkspace] isPackageExtension: @"esproj"], @"");
STAssertTrue([[NSWorkspace sharedWorkspace] isPackageExtension: @"dtps"], @"");
}
Изменить: приведенный выше тест был отредактирован, чтобы включить дополнительные примеры расширений (в исходном сообщении использовались только «rtf» и «rtfd»).