あなたはそれに専ら頼るべきではありませんが、1つのことはファイルのバンドルビットを設定することです。私はちょうどそれを行うためにNSWorkspaceのカテゴリを持っている:
- (void)setBundleBit:(BOOL)flag forFile:(NSString *)path
{
FSRef fileRef;
OSErr error = FSPathMakeRef((UInt8 *)[path fileSystemRepresentation], &fileRef, NULL);
// Get the file's current info
FSCatalogInfo fileInfo;
if (!error)
{
error = FSGetCatalogInfo(&fileRef, kFSCatInfoFinderInfo, &fileInfo, NULL, NULL, NULL);
}
if (!error)
{
// Adjust the bundle bit
FolderInfo *finderInfo = (FolderInfo *)fileInfo.finderInfo;
if (flag) {
finderInfo->finderFlags |= kHasBundle;
}
else {
finderInfo->finderFlags &= ~kHasBundle;
}
// Set the altered flags of the file
error = FSSetCatalogInfo(&fileRef, kFSCatInfoFinderInfo, &fileInfo);
}
if (error) {
NSLog(@"OSError %i in -[NSWorkspace setBundleBit:forFile:]", error);
}
}
ヒストリカルノート:バンドルビットは、元々のファイルに使用され、ファイルがそれに「BNDL」リソースを持っていたことを意味した。ここ
が可能な属性です。 Finderは、バンドルビットが設定され、initedビットが設定されていないファイルからバンドルリソースを読み込みます。現在、 'BNDL'リソースの機能はInfo.plistファイルによって実現されています。バンドルビットは主にディレクトリで使用され、ファインダとナビゲーションサービスにファイルのようにディレクトリを扱うよう指示します(つまり、ディレクトリをパッケージ)。 –
これをNSWorkspaceに置く理由は何ですか? NSWorkspaceの「自己」ポインタは使用しません。 – adib
私はそれがNSWorkspaceまたはNSFileManagerのいずれかで、残りのCocoaと一致するはずです。私はなぜ前者に解決したのか想起できません。確かにこのコードが書かれて以来、それはNSURL上でより良いかもしれません。 –