iOS framework静态库中使用xib和图片资源详解

一、新建bundle

前2篇文章介绍了iOS 最新framework和.a静态库制作及使用全解   iOS 工程套子工程,主工程和framework工程或.a library静态库工程联调

我现在是在主工程的子工程里进行,当然你在创建静态库工程(子工程)的时候也可以。前面我是懒得再建工程了,接着现成主工程套子工程的项目。

1.按下图步骤操作

2.因为iOS框架中没有bundle,要选中OS X框架找到bundle,如下图

二、往bundle加资源文件

将工程中的资源文件都加入到刚刚建的bundle中,如xib、图片。点+号或直接拖都行。步骤如下图。

三、设置bundle

1.iOS Deployment Target改为你支持的最低版本

2.设置base SDK 为latest iOS

3.COMBINE_HIDPI_IMAGES设置为NO

  iOS 创建Bundle时放入的图片资源(.png)在默认配置下会被转为.tiff格式,使用的时候找不到。因为在iOS中创建bundle时会用一个“hack”,为了使所有的运行需要更改一个配置。找到bundle的工程,Buld Settings > COMBINE_HIDPI_IMAGES设置为NO

四、编译bundle

如下图选择你的bundle作为target进行编译

五、使用bundle里的资源文件

1.如下图将你的bundle拖到主工程的copy bundle resources

2.使用xib代码如下

NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"APPBaseSDKBundle" withExtension:@"bundle"]];
    NSArray *nibs =  [bundle loadNibNamed:@"ZLFTabBar" owner:nil options:nil];
_view = nibs[0];

控制器是xib的情况

//定义一个bundle的宏
#define APPBaseSDKBundle [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"APPBaseSDKBundle" withExtension:@"bundle"]]

- (instancetype)init {
    self = [super initWithNibName:@"LKVideoQueueController" bundle:APPBaseSDKBundle];
    return self;
}

 

3.使用图片代码如下

NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"APPBaseSDKBundle" withExtension:@"bundle"]];
UIImage *iv = [UIImage imageNamed:@"zhuanqian" inBundle:bundle compatibleWithTraitCollection:nil];
//或
UIImageView *v2 = [[UIImageView alloc] initWithFrame:CGRectMake(0,100, 50, 50)];
 v2.image = [UIImage imageNamed:@"APPBaseSDKBundle.bundle/zhuanqian"];

六、修改资源文件后的处理

1.对于已经制作成了静态库,每次对资源文件有修改都要重新编译bundle。

2.对于主工程套子工程的情况还有另一种方法不用重新编译bundle。如下图给主工程添加对子工程的依赖,这样每次编译主工程的时候也会编译子工程。(经测试这一步可以省略)

给子工程添加对bundle的依赖,这样每次编译子工程时候也会编译bundle。

经过2层依赖关系,那么编译主工程时候就会编译资源文件。

 

posted @ 2016-05-20 00:27  张林峰  阅读(6943)  评论(2编辑  收藏  举报