续上一篇 framework--多架构(Multi-Architecture)编译
1、问题?
iOS的一个限制,framework只能包含头文件和静态库。那么怎么样通过使用bundle整合资源,让其可以随着framework一起发布。
2、解决方法:
2.1、创建一个Bundle
资源都会被添加到bundle中。这将是A工程上的另一个目标。
1)
2)
3)因为要创建一个在iOS上使用的bundle,这与默认的OS X不同。选择RWUIControlsResources目标,然后点击Build Settings栏,搜索base sdk,选择Base SDK这一行,按下delete键,这一步将OS X切换为iOS。
4)将工程名称改为A。搜索product name,双击进入编辑模式,将${TARGET_NAME}替换为A。
5)默认情况下,有两种resolutions的图片可以产生一些有趣的现象。例如,当你导入一个retina @2x版本的图片时,普通版的和Retina版的将会合并成一个多resolution的TIFF(标签图像文件格式,Tagged Image File Format)。这不是一件好事。搜索hidpi将COMBINE_HIDPI_IMAGES设置为NO。
6)确保当你编译framework时,bundle也能被编译并将framework作为依赖添加到集体目标中。选中Framework目标,选择Build Phases栏,展开Target Dependencies面板,点击 + 按钮,选择AResources目标将其添加为依赖。
7)在Framework目标的Build Phases中,打开MultiPlatform Build面板,在脚本的最后添加下述代码:
//这条指令将拷贝构建好的bundle到用户的桌面上
# Copy the resources bundle to the user's desktop
ditto "${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}.bundle" \
"${HOME}/Desktop/${RW_FRAMEWORK_NAME}.bundle"
8)编译framework scheme,你会发现bundle在桌面上出现
2.2、导入Bundle
为了用这个新的bundle开发,你需要在示例项目中使用它,这意味着你必须既把它作为依赖添加到工程中,同时作为一个对象拷贝到项目中。
2.3、创建一个丝带视图(Ribbon View)
1)从之前下载的压缩文件中将RWRibbon文件夹拖入到B工程下A组中。
2)代码中一个很重要的部分是你怎样引用一张图片。如果你看一下RWRibbonView.m文件中的addRibbonView方法,你将会看到相关的这一行代码:
//Bundle就像一个文件目录,所以引用bundle中的一张图片是非常简单的。
UIImage *image = [UIImage imageNamed:@"A.bundle/RWRibbon"];
3)将图片添加到bundle中
4)导出头文件RWRibbon.h,确保在framework中可以被访问
5)将头文件引用添加到framework的头文件中。打开A.h添加下面这两行:
// RWRibbon
#import < RWUIControls/RWRibbonView.h>
2.4、将丝带添加到示例工程中
1)在B项目中打开RWViewController.m文件,在@interface后的大括号中添加下面的实例变量声明。
RWRibbonView *_ribbonView;
2)在viewDidLoad:的末尾添加下面的代码来创建一个丝带视图:
// Creates a sample ribbon view
_ribbonView = [[RWRibbonView alloc] initWithFrame:self.ribbonViewContainer.bounds];
[self.ribbonViewContainer addSubview:_ribbonView];
// Need to check that it actually works :)
UIView *sampleView = [[UIView alloc] initWithFrame:_ribbonView.bounds];
sampleView.backgroundColor = [UIColor lightGrayColor];
[_ribbonView addSubview:sampleView];
3)编译并运行B scheme。你将看到新的丝带控件出现在应用的下方。