2009-11-18 15 views
6

私は、フォルダがFinderによってパッケージとして認識されるように、拡張子を持つ必要があると思っていました。その拡張は、所有するアプリケーションのInfo.plistで宣言されます。フォルダをパッケージとしてフラグを設定するにはどうすればよいですか?

明らかに、別の、よりエレガントな方法がありますが、私はそれがどのように行われたか把握できません。

など。 iPhotoライブラリはFinderによってパッケージとして扱われています。しかし、拡張子はありません。 mdlsはそれが本当にコンテンツタイプツリーに "com.apple.package"を持っていることを明らかにします。実際のコンテンツタイプは動的に割り当てられます。

iPhotoはどのようにこのようなディレクトリを作成しようとしましたか?

答えて

7

あなたはそれに専ら頼るべきではありませんが、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); 
    } 
} 
+2

ヒストリカルノート:バンドルビットは、元々のファイルに使用され、ファイルがそれに「BNDL」リソースを持っていたことを意味した。ここ

が可能な属性です。 Finderは、バンドルビットが設定され、initedビットが設定されていないファイルからバンドルリソースを読み込みます。現在、 'BNDL'リソースの機能はInfo.plistファイルによって実現されています。バンドルビットは主にディレクトリで使用され、ファインダとナビゲーションサービスにファイルのようにディレクトリを扱うよう指示します(つまり、ディレクトリをパッケージ)。 –

+0

これをNSWorkspaceに置く理由は何ですか? NSWorkspaceの「自己」ポインタは使用しません。 – adib

+0

私はそれがNSWorkspaceまたはNSFileManagerのいずれかで、残りのCocoaと一致するはずです。私はなぜ前者に解決したのか想起できません。確かにこのコードが書かれて以来、それはNSURL上でより良いかもしれません。 –

2

私の知る限り、ファイルとプロトコルは、あなたのアプリInfo.plist内でのみ設定できます。

アプリがスキャンされ、plistsの情報がLaunchServices設定に追加されます。

Linkinusには6種類のドキュメントタイプがあり、TextMateには97、Cyber​​Duckには3があります。これ以上検索するつもりはありますが、これが推奨される方法だと思います。

1

は、興味のある二つのコマンドがあります。

GetFileInfo iPhoto\ Library 

attributes: avBstclinmedz 

Bは「バンドル」ビットが設定されていることを述べています。 SetFileコマンドで設定できます。これにより、HFS +の拡張属性(マニュアルページ)にアクセスできます。

A Alias file 
B Bundle 
C Custom icon* 
D Desktop* 
E Hidden extension* 
I Inited* 
M Shared (can run multiple times) 
N No INIT resources 
L Locked 
S System (name locked) 
T Stationery 
V Invisible* 
Z Busy* 
関連する問題