iOS - Bundle 资源文件包

举报
风吹稻花香 发表于 2021/06/04 23:20:37 2021/06/04
【摘要】 原文:https://www.cnblogs.com/QianChia/p/6280435.html 1、Bundle 文件 Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。 Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不...

原文:https://www.cnblogs.com/QianChia/p/6280435.html

1、Bundle 文件

  • Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。

  • Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle 包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的 2 进制数据。

2、制作 Bundle 文件

  • 1、新建 Bundle 项目

    • 创建名为 SourcesBundle(最后要生成的 Bundle 文件名称)的工程,注意 Bundle 默认是 macOS 系统的,Xcode 高版本中需要在 macOS => Framework & Library 选项下找到。

      bundle1

      bundle2

      bundle3

  • 2、修改 Bundle 配置信息

    • 因为 Bundle 默认是 macOS 系统的,所有需要修改他的信息,修改成 iOS 系统。

      bundle4

    • 设置 Build Setting 中的 COMBINE_HIDPI_IMAGES 为 NO,否则 Bundle 中的图片就是 tiff 格式了。

      bundle5

  • 3、可选配置

    • 作为资源包,仅仅需要编译就好,无需安装相关的配置,设置 Skip Install 为 YES。同样要删除安装路径 Installation Directory 的值。

      bundle14

      bundle15

    • 该资源包的 pch 文件和 strings 文件是可以删除的。

      bundle16

  • 4、添加文件

    • 将资源文件或文件夹拖动到工程中的 SourcesBundle 文件夹下面。

      bundle6

      bundle7

  • 5、编译生成 Bundle 文件

    • 我们分别选择 Generic iOS Device 和任意一个模拟器各编译一次,编译完后,我们会看到工程中 Products 文件夹下的 SourcesBundle.bundle 由红色变成了黑色。

      bundle8

      bundle9

      bundle10

    • 然后 show in finder,看看生成的文件。我们看到它为真机和模拟器都生成了 .bundle 资源文件。

      bundle11

      bundle12

    • 选中 .bundle 文件右键 显示包内容,我们可以看到之前拖拽到工程中的资源文件都在其中。

      bundle13

      bundle17

3、使用 Bundle 文件

  • 将生成的真机(Debug-iphoneos)Bundle 资源文件拖拽到需要使用的工程中。

    bundle18

  • 1、加载 Bundle 中的 xib 资源文件

    
        
    1. // 设置文件路径
    2. NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];
    3. NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];
    4. // 加载 nib 文件
    5. UINib *nib = [UINib nibWithNibName:@"BundleDemo" bundle:resourceBundle];
    6. NSArray *viewObjs = [nib instantiateWithOwner:nil options:nil];
    7. // 获取 xib 文件
    8. UIView *view = viewObjs.lastObject;
    9. view.frame = CGRectMake(20, 50, self.view.bounds.size.width - 40, self.view.bounds.size.width - 40);
    10. [self.view addSubview:view];
    • 效果

      bundle19

  • 2、加载 Bundle 中的图片资源文件

    • 指定绝对路径的形式

       UIImage *image = [UIImage imageNamed:@"SourcesBundle.bundle/demo2.jpg"];
           
    • 拼接路径的形式

      
            
      1. NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];
      2. NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"demo4"];
      3. UIImage *image = [UIImage imageWithContentsOfFile:imgPath];
    • 宏定义的形式

      
            
      1. #define MYBUNDLE_NAME @"SourcesBundle.bundle"
      2. #define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MYBUNDLE_NAME]
      3. #define MYBUNDLE [NSBundle bundleWithPath:MYBUNDLE_PATH]
      4. NSString *imgPath= [MYBUNDLE_PATH stringByAppendingPathComponent:@"demo4"];
      5. UIImage *image = [UIImage imageWithContentsOfFile:imgPath];
    • 效果

      bundle20 bundle21

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/78660537

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。