Objective c 如何在基于OSX的文档应用程序中导出包文件?

Objective c 如何在基于OSX的文档应用程序中导出包文件?,objective-c,xcode,macos,Objective C,Xcode,Macos,在我的应用程序中,我想加载用户选择的某些图像,进行一些修改,然后以我自己的文件格式保存副本。因为我想跟踪用户修改,所以我决定将文件导出为包(bundle) 因此,在我的文档类中,有一个保存图像文件的NSImage对象。在fileWrapperOfType:error:方法中,我设置了一个NSFileWrapper对象,并将该对象放入其中。代码如下: NSDictionary *fileWrappers = [self.documentFileWrapper fileWrappers]; if (

在我的应用程序中,我想加载用户选择的某些图像,进行一些修改,然后以我自己的文件格式保存副本。因为我想跟踪用户修改,所以我决定将文件导出为包(bundle)

因此,在我的文档类中,有一个保存图像文件的
NSImage
对象。在
fileWrapperOfType:error:
方法中,我设置了一个
NSFileWrapper
对象,并将该对象放入其中。代码如下:

NSDictionary *fileWrappers = [self.documentFileWrapper fileWrappers];
if (image != nil) {
    NSBitmapImageRep *imageRep = [image bitmapImageRepresentation];
    NSData *imageData = [imageRep representationUsingType:NSPNGFileType properties:nil];
    NSFileWrapper *imageFileWrapper = [[NSFileWrapper alloc]
                                       initRegularFileWithContents:imageData];
    [imageFileWrapper setPreferredFilename:@"image"];

    [[self documentFileWrapper] addFileWrapper:imageFileWrapper];
}

return self.documentFileWrapper;
在我的项目plist文件中,我有两种文档类型,第一种是
public.image
类型,因为我需要在我的应用程序中加载图像:

另一个是我自己的文档类型。为了使文件成为包,我选中了xcode中的bundle复选框:

如果我现在简单地运行它,那么代码compains从类型标识符中查找扩展是不推荐的,因此,我设法在导出的UTI中添加了一个条目:


此刻,一切似乎都在运行,除了输出的带有
mdc
扩展名的
文件夹
实际上是一个文件夹而不是一个包,我在这里缺少什么?提前谢谢

要使OS X上的包成为pkg,它必须具有扩展名.pkg。我希望这就像接错分机一样简单

注意:直到最近,.pkg文件还只是目录。现在,我们经常看到package.pkg包被隐藏,如果没有一些技巧,例如使用Pacifist、pkgutil或xar,就无法随意浏览:

pkgutil--解压缩file.pkg文件夹/


xar-xf file.pkg

最后我解决了这个问题,这里的关键是将
符合
字段改为
com.apple.package

我将“Comforms设置为”作为
com.apple.package
,但它也作为文件夹而不是包输出。我不知道为什么?我使用的是Swift 2.0和Xcode 7.3。在添加了像您这样的图像文档类型之后,它就开始工作了。我不知道为什么。