Ios 如何使用静态库传输资源文件(如何将资源打包)?

Ios 如何使用静态库传输资源文件(如何将资源打包)?,ios,resources,bundle,static-libraries,nsbundle,Ios,Resources,Bundle,Static Libraries,Nsbundle,我正在为iOS应用程序创建一个静态库。我几乎完成了,但资源有问题 我的静态库使用了很多图像和声音文件。如何使用静态库传输它 我知道我们可以把它包起来,放在文件中。但我不知道如何将图像和声音文件打包成一个捆绑文件 我所做的: 我搜索了很多,但找不到任何有用的链接 我得到了推荐信,但没有找到解决问题的办法 我检查了XCode可用的文件模板,但除了Settings bundle之外,没有看到任何bundle类型。 使用多个bundle和几种不同的方法构建应用程序有几个很好的理由。根据我的经验,最好的


我正在为
iOS
应用程序创建一个
静态库。我几乎完成了,但资源有问题

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

我知道我们可以把它包起来,放在
文件中。但我不知道如何将图像和声音文件打包成一个捆绑文件

我所做的:

  • 我搜索了很多,但找不到任何有用的链接
  • 我得到了推荐信,但没有找到解决问题的办法
  • 我检查了XCode可用的文件模板,但除了
    Settings bundle之外,没有看到任何bundle类型。

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

  • 选择:文件->新项目…->组MacOSX(!)->框架和库->捆绑包。将资源文件添加到项目中
  • 在构建其他iPhone应用程序时构建捆绑包
  • 您可以将此项目添加到静态库项目中,并在库发生更改时重新生成它。您必须知道捆绑包本身不会链接到您的库文件
  • 在应用程序项目中,将.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"] ];
    
    要获得更多帮助,您可以查看这些好文章


  • 希望它对您有所帮助。

    谢谢您的回答:)有一件事:imageWithContentsOfFile性能很差,最好使用imageName,因为它使用缓存,所以速度更快:)此外,您可以通过简单的方式以更少的代码实现相同的结果:
    [UIImage imageName:[NSString stringWithFormat:@“my.bundle/%@”,imageName]]并简单地输入正确的bundle名称集成这样的库需要两件事,.a文件和.bundle文件,对吗?哪个用户必须单独手动导入?