iOS - Bundle 资源文件包

1、Bundle 文件

  • Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。
  • Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle 包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的 2 进制数据。

2、制作 Bundle 文件

  • 1、新建 Bundle 项目

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

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

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

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

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

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

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

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

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

3、使用 Bundle 文件

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

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

  • 2、加载 Bundle 中的图片资源文件
    • 指定绝对路径的形式

          UIImage *image = [UIImage imageNamed:@"SourcesBundle.bundle/demo2.jpg"];
    • 拼接路径的形式
          NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];
          NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"demo4"];
      
          UIImage *image = [UIImage imageWithContentsOfFile:imgPath];
    • 宏定义的形式
          #define MYBUNDLE_NAME   @"SourcesBundle.bundle"
          #define MYBUNDLE_PATH   [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MYBUNDLE_NAME]
          #define MYBUNDLE        [NSBundle bundleWithPath:MYBUNDLE_PATH]
      
          NSString *imgPath= [MYBUNDLE_PATH stringByAppendingPathComponent:@"demo4"];
          UIImage *image = [UIImage imageWithContentsOfFile:imgPath];
    • 效果

时间: 2025-01-30 01:13:57

iOS - Bundle 资源文件包的相关文章

请问,如何将网页文件放到资源文件的包里,然后用webbrowser加载资源文件包里的网页?

问题描述 我想将网页文件放到资源文件的包里,然后再用webbrowser加载资源文件包里的此网页,具体怎么实现,帮帮忙吧,万分感激 解决方案 解决方案二:没做过有一些资料,看看能不能帮你:加载的本地资源有两种情况:一:加载程序集里面的资源信息 1.加载html资源 (1) StreamReaderreader=Application.GetResourceStream(NewUri("path",UriKind.Relative).Stream; webBrowser.Navigate

全志平台Android4.0预装媒体资源文件文件

  全志平台Android4.0预装媒体资源文件        最近开发来了一个小需求:在发布的软件包里面预装一些多媒体资源文件.想起来,挺容易的,不就是把多媒体文件拷贝到系统里面去吗?是的,确实是这样,可是得在不同开发平台做法不大一样,目前全志软件打包升级工具还没有很完善,只是在卡启动的做卡程序里可以在烧卡的时候预装一些媒体资源文件.    在文件管理器访问的路径是/mnt/sdcard这个挂载点是管理了nand用户数据区域的,可以通过USB连到电脑拷贝.删除文件.但是这是一个挂载点,并且是在

Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)

最近有一个需要,我们公司做了一个apk客户端,然后其他的公司可以根据自己的需要来替换里面的资源图片,文字等一些资源文件问题,我本来想这个简单,用两个工程直接替换里面的资源文件就行,老大说,这样子不好,如果要改需要改两个客户端,而且还麻烦,叫我将所有的Activity打成Jar包的形式,这样子我们改了里面的内容就直接发布Jar包出去,其他公司直接下载Jar来使用,这样子他们自己公司也能更好的维护. 所以我就想直接将Activity打成Jar包,可是在使用的过程中发现这样子根本行不通,因为如果Act

iOS开发中将资源文件本地化

资源文件包括:图片文件.音频文件以及前文提到的Localizable.strings等文件,它们的特点是都是随着应用一起打包发布.但就本地化而言无论是图片文件还是音频文件都必须实现的步骤都是类似的,因此我们重点介绍图片文件的本地化. 资源文件的本地化,也是需要准备好几个本地化版本的文件.图片需要本地化,就是要创建几个版本的本地化文件.例如,我们要实现一个游戏的控制画面,画面中有控制关闭或者打开背景音乐的按钮和音效按钮,它们是图片按钮,上面的文字是图片上的文字,因此需要图片的本地化的. 开发中将资

Java或者JAR包获取读取资源文件的路径的问题总结

这里分为具体两种:  第一种:资源文件为一般后缀文件  第二种:资源文件为图片文件  [NO1]第一种    使用这行代码可以获取class类的根目录的路径    String path =Thread.currentThread().getContextClassLoader().getResource("").getPath();  例子:我用的开发软件MyEclipse 6.5  假设项目文件夹如下:     files---bin--core(生成class包)        

java 读取jar包中的资源文件实例程序

1) ClassLoader是abstract的,不可能实例化对象,更加不可能通过ClassLoader调用上面两个方法.所以我们真正写代码的时候,是通过Class类中的getResource()和getResourceAsStream()方法,这两个方法会委托ClassLoader中的getResource()和getResourceAsStream()方法 .好了,现在我们重新写一段Resource代码,来看看上面那段费解的话是什么意思了: Java代码  代码如下 复制代码 package

基于将Android工程做成jar包和资源文件的解决方法_Android

需要特别注意的是,以jar包和资源包方式提供给第三方开发者,我们的工程的代码中就不能使用类似于R.layout.main.R.string.name等等这样的方式来引用资源了. 为此,我们就不能直接使用R文件,而是要通过字段名称来动态的获取资源的id,再来使用. 以下封装了一个类,可以通过字段名称动态获取id. 复制代码 代码如下: package com.arui.util;  import android.content.Context;  public class ResourceUtil

基于将Android工程做成jar包和资源文件的解决方法

需要特别注意的是,以jar包和资源包方式提供给第三方开发者,我们的工程的代码中就不能使用类似于R.layout.main.R.string.name等等这样的方式来引用资源了. 为此,我们就不能直接使用R文件,而是要通过字段名称来动态的获取资源的id,再来使用. 以下封装了一个类,可以通过字段名称动态获取id.复制代码 代码如下:package com.arui.util; import android.content.Context; public class ResourceUtil { p

iOS开发那些事-iOS应用本地化-资源文件本地化

资源文件包括:图片文件.音频文件以及前文提到的Localizable.strings等文件,它们的特点是都是随着应用一起打包发布.但就本地化而言无论是图片文件还是音频文件都必须实现的步骤都是类似的,因此我们重点介绍图片文件的本地化. 资源文件的本地化,也是需要准备好几个本地化版本的文件.图片需要本地化,就是要创建几个版本的本地化文件.例如,我们要实现一个游戏的控制画面,画面中有控制关闭或者打开背景音乐的按钮和音效按钮,它们是图片按钮,上面的文字是图片上的文字,因此需要图片的本地化的. 首先,英文