如何在Cocoa中以编程方式创建一个包?

时间:2013-06-07 12:56:45

标签: cocoa bundle core-foundation

我尝试创建像

这样的包
CFBundleRef bundleRef = CFBundleCreate(kCFAllocatorDefault, (CFURLRef)@"/Users/MyUser/source/Mybundle.component");

但得到了SIGABRT

NSBundle* myBundle = [[NSBundle alloc]initWithPath:@"/Users/MyUser/source/Mybundle.component"];

但是没有。我怎么能正确地做到这一点?我应该在之前创建Mybundle.component目录吗?

1 个答案:

答案 0 :(得分:1)

  

我尝试创建像

这样的包
CFBundleRef bundleRef = CFBundleCreate(kCFAllocatorDefault, (CFURLRef)@"/Users/MyUser/source/Mybundle.component");
     

但得到了SIGABRT

那是因为字符串不是CFURL对象。 CFBundleCreate需要一个URL对象,并且挥手并告诉它“这完全是一个CFURL对象”并不足以将该路径合并为一个。您需要实际创建CFURL或NSURL对象并将其传递给那里。

确保使用正确的功能/方法。要从路径创建URL,在Cocoa中,您需要fileURLWithPath:,而不是URLWithString:(后者需要一个表示URL的字符串,而不是路径)。 CF具有与这些功能相对应的功能。

  

NSBundle* myBundle = [[NSBundle alloc]initWithPath:@"/Users/MyUser/source/Mybundle.component"];
     

但是没有。 ...我应该在之前创建Mybundle.component目录吗?

我不会指望一个空目录被接受为一个包,但是你需要在该路径(或CF中的URL)中已经存在一个包,然后才能为它创建一个包对象。

如果您想以编程方式从头开始在磁盘上创建捆绑包,请考虑使用NSFileWrapper