我曾经认为文件夹需要有一个扩展名,以便Finder将它们识别为包。该扩展将在拥有应用程序的Info.plist中声明。
显然还有另一种更优雅的方式,但我无法弄清楚它是如何完成的。
E.g。 Finder将iPhoto图库视为一个包。但它没有延伸。 mdls显示它确实在内容类型树中有“com.apple.package”。实际内容类型是动态分配的。
iPhoto如何创建这样的目录?
答案 0 :(得分:7)
虽然你不应该单独依赖它,但要做的一件事就是设置文件的bundle位。我在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);
}
}
答案 1 :(得分:2)
据我所知,文件和协议仅在您的应用Info.plist中设置。
应用程序会被扫描,并且其plist中的信息会添加到LaunchServices设置中。
Linkinus声明了6种不同的文档类型,TextMate有97种,而CyberDuck有3种。我会做更多搜索,但我认为这可能是首选方法。
答案 2 :(得分: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*