如何使用静态库传输资源文件(如何在bundle中包装资源)?

时间:2013-04-30 10:28:50

标签: ios resources bundle static-libraries nsbundle


我正在为Static Library个应用创建一个iOS。我几乎完成了它,但资源存在问题。

我的静态库使用了大量的图像和声音文件。如何使用我的静态库传输它?

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

我做了什么:

  • 我搜索了很多,但找不到任何有用的链接。
  • 我得到Conceptual CFBundles引用,但没有找到解决我问题的方法。
  • 我检查了可用于XCode的文件模板,但没有看到除Settings Bundle.以外的任何包类型

1 个答案:

答案 0 :(得分:9)

使用多个捆绑包和几种不同的方法来构建应用程序有几个很好的理由。根据我的经验,最好的方法是打开Xcode并创建一个新的捆绑项目:

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

    // 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

    3. 希望它对你有所帮助。