iOS-控件封装为framework来使用

栏目: IOS · 发布时间: 5年前

内容简介:通过将自己的控件封装成framework静态库来使用,可以在不暴露代码的所有实现细节的前提下和他人分享控件.另外通过自己封装的过程也可以对日常使用他人的库有更多的了解, 或者在实现模块化的时候可以把固定的业务模块化成静态库.在iOS中,静态库有两种:

通过将自己的控件封装成framework静态库来使用,可以在不暴露代码的所有实现细节的前提下和他人分享控件.另外通过自己封装的过程也可以对日常使用他人的库有更多的了解, 或者在实现模块化的时候可以把固定的业务模块化成静态库.

framework静态库创建

在iOS中,静态库有两种: .a :一个纯二进制文件,需要有.h文件配合使用 .framework :包含二进制文件和.h文件,还有资源文件

iOS-控件封装为framework来使用 在xcode中,我们可以在已有控件项目中通过添加新的targets来创建静态库,第一个是创建.framework,第二个是创建.a

iOS-控件封装为framework来使用 这里我们需要把Mach-O type改为 Static Library ,因为制作的是一个静态库

iOS-控件封装为framework来使用 把Build Settings -> Architectures -> Build Active Architecture Only -> Release 选择NO,Yes表示只编译选中模拟器设备对应的架构,No则为编译所有模拟器设备支持的cup架构(Debug版本同理,提供给他人是使用时,建议Debug也选中NO)

iOS-控件封装为framework来使用 创建后会生成一个项目,这里的.h要放我们项目中需要暴露给他人调用的头文件,主要需要使用<包名/头文件名.h>,因为在实际使用framework的时候是需要从保重搜索头文件的.

iOS-控件封装为framework来使用 在.h中import后,还需要在 Build Phases - Headers 中把对应的头文件放到 Public

我们在测试添加的文件中写一个log方法

iOS-控件封装为framework来使用

选择模拟器进行编译,然后在 Products 中找到framework右击查看 Show In Finder 其中 Debug-ophonesimulator 中的包就是在debug模式下模拟器可以运行的.framework包,对应的还有 relese 模式的模拟器包和真机包,我们要做的就是讲relese下的模拟器和真机进行合并,因为我们通常使用的framework包都是一个.

合并两种类型的framework

这里有两种方法,一种是通过脚本操作,另一种是通过 lipo 命令行操作,这里介绍第二种

lipo源于mac系统要制作兼容powerpc平台和intel平台的程序.是一个在MacOSX中处理通用程序的工具.常用方法有下面3种:

  • 查看静态库支持的CPU架构
lipo -info libname.a(或者libname.framework/libname)
复制代码
  • 合并静态库
lipo -create 静态库存放路径1  静态库存放路径2 ...  -output 整合后存放的路径
复制代码

对framework只需要合并.a文件就可以

  • 静态库拆分
lipo 静态库源文件路径 -thin CPU架构名称 -output 拆分后文件存放路径
复制代码

将合并后的.a文件替换原本包中的.a,至此,一个简单的framework包就完成了

framework静态库添加.bundle文件资源

当framework中需要依赖一些图片资源等,可以做一个bundle存放图片资源,然后在 Copy Bundle Resources 中添加依赖

新建一个bundle的targets iOS-控件封装为framework来使用

设置

  • Build Settings修改Base SDK->Latest iOS

  • Build Phases将需要的xib,图片资源添加到Copy Bundle Resources

  • Combine High Resolution Artwork 或 COMBINE_HIDPI_IMAGES 这两项一个是OSX下的名字,一个是iOS下的名字,改为NO才可以存图片,不然存进去是tiff 然后build就会生成需要bundle文件

添加图片到bundle iOS-控件封装为framework来使用

添加依赖 iOS-控件封装为framework来使用

这样就可以在framework中引用这些图片资源

framework包对于其他一些第三方库的依赖

在实际应用中,我们的framework包往往会依赖一些第三方的库,比如常见的AFNetworking,SDWebimage等,这些库往往主工程是包含的,如果在framework中再添加,就会引起类重复的冲突.一般有两种处理方法

  • 修改引用库中所有类的类名,添加上我们自己的类头

这种方法对于小一些或者说类少一些的库来说比较合适

  • 添加这些库的时候只引用

我们可以在添加库的时候只引用,然后在framework中引用对应的头文件,这样可以保证 build succeeded 编译成功,而且framework中不会打包进去对应的类文件. 但是已经有了依赖,就需要在主工程中添加对应的库,这里要注意的是,如果作为SDK给第三方使用,要确定framework中依赖库的版本,因为有些库版本改变可能引起对应文件的不同.比如AFNetworking的 2.x 版本和 3.x 版本之间

iOS-控件封装为framework来使用

不要勾选 Add To Terget


以上所述就是小编给大家介绍的《iOS-控件封装为framework来使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iGen

iGen

Jean M. Twenge PhD / Atria Books / 2017-8-22 / USD 27.00

A highly readable and entertaining first look at how today’s members of iGen—the children, teens, and young adults born in the mid-1990s and later—are vastly different from their Millennial predecesso......一起来看看 《iGen》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具