如何使用静态库传输资源文件(如何将资源包装在一起)?

问题描述:


我正在为iOS应用程序创建Static Library。我几乎完成了它,但资源存在问题。如何使用静态库传输资源文件(如何将资源包装在一起)?

我的静态库使用了很多图像和声音文件。我怎样才能将其与静态库一起传输?

我知道我们可以将它包装在一个包中,并沿着.a文件给它。但我不知道如何将图像和声音文件封装在一个Bundle文件中。

我做了什么:

  • 我搜索了很多,但找不到任何有用的链接。
  • 我得到Conceptual CFBundles参考,但没有找到任何解决方案,我的问题。
  • 我检查可用的XCode的文件模板,但并没有看到其他任何类型的包比Settings Bundle.

有几个很好的理由来构建多束和几种不同的方式做到这一点的应用程序。以我的经验,最好的办法是开放的Xcode并创建一个新包项目:

  1. 选择:文件 - >新建项目 - >集团的Mac OSX - >框架&图书馆 - >包(!)。将您的资源文件添加到项目中。
  2. 在构建其他iPhone应用程序时构建包。
  3. 您可以将此项目添加到您的静态库项目,并在库更改时重新构建它。您必须知道该包本身不会链接到您的库文件。
  4. 在您的应用项目中添加.bundle文件作为一个普通的资源文件(添加 - >现有文件... - >找到并选择上面构建的.bundle文件,不要复制它)。

例子:

// Static library code: 
#define MYBUNDLE_NAME  @"MyResources.bundle" 
#define MYBUNDLE_IDENTIFIER @"eu.oaktree-ce.MyResources" 
#define MYBUNDLE_PATH  [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME] 
#define MYBUNDLE   [NSBundle bundleWithPath: MYBUNDLE_PATH] 

// Get an image file from your "static library" bundle: 

- (NSString *) getMyBundlePathFor: (NSString *) filename 
{ 
     NSBundle *libBundle = MYBUNDLE; 
     if(libBundle && filename){ 
      return [[libBundle resourcePath] stringByAppendingPathComponent: filename]; 
     } 
     return nil; 
} 

// ..... 
// Get an image file named info.png from the custom bundle 
UIImage *imageFromMyBundle = [UIImage imageWithContentsOfFile: [self getMyBundlePathFor: @"info.png"] ]; 

如需更多帮助,您可以检查这些好文章

  1. iOS Library With Resources

  2. Resource Bundles

希望它可以帮助你。

+0

谢谢你的回答:) – 2013-04-30 11:29:26

+0

嗯。欢迎使用Midhun :-) – 2013-04-30 11:33:31

+0

有一件事:imageWithContentsOfFile在性能较差的情况下使用imageNamed更好,因为它使用缓存,所以它可以更快:)另外,通过简单的代码可以实现相同的结果:'[UIImage imageNamed :[NSString stringWithFormat:@“my.bundle /%@”,imageName]];'并且简单地把正确的软件包名称 – 2014-04-01 13:44:55