特定の拡張子について、その拡張子を持つディレクトリが 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" のみが使用されていました)。