对于给定的扩展,如何检查具有该扩展的目录是否会被 Finder 显示为一个包?
我认为下面的方法是一个有效的实现,但是创建一个临时目录感觉就像一个 hack。我猜我应该能够通过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”)。