最近打算做一下项目组件化,所以先要夯实基础,自制一下framework!公司项目中遇到TableView和CollectionView无数据的情况,各种无数据视图代码copy来copy去的,无比难过!这个framework就做列表无数据视图的功能!
1,首先创建工程,选择iOS->Cocoa Touch Framework,如下图所示:
1.1 选择平台,搜索framework,这里我选择的是iOS平台的
1.2 设置名称语言等信息,这个和创建工程近似
" alt="" width=“28” height=“30” align="">
1.3 xcode会自动生成一个和framework同名的头文件
2,新建或者拖入代码、资源文件到framework下,完成framework的目的功能
2.1 写、拖入功能代码
2.2 把需要对外暴露的头文件写道framework同名头文件中
3,做相应的配置
3.1 选择framework类型
3.2 选择对外暴露的头文件,public --> 对外暴露
4,工程其他相关配置
4.1 Build Settings中Link下面的Dead Code Stripping设置为NO:先不进行死代码剥离。
4.2 Build Settings中Link下面的Link With Standard Libraries设置NO:避免重复链接
4.3 Build Settings中Build Active Architecture Only设置为NO, 如果设为YES,会导致其编译时只生成当前机器的框架;将其设置为NO后,发现用模拟器编译后生成的framework同时包含x86_64和i386架构。在 Excluded Architectures里Release模式下排除模拟器Any iOS Simulator SDK。因为xcode12生成的模拟器版本静态库会多包含一个arm64架构,这样会妨碍后面模拟器版本和真机版本合并,这样设置就可让模拟器版本没有arm64架构。
5,Build配置打包
5.1 配置构建环境 Debug - Release
5.2 找到framework文件
5.3 查看framework文件结构
6,主项目引入配置
6.1 配置framework的Embed属性
6.2 配置主工程other link flag
7,终端合并真机和模拟器的framework
分别找到真机和模拟器Build成功之后framework的所在路径,然后运行下面命令(路径换成自己的哈)
lipo -create Release-iphoneos/ListEmptyDataStyle.framework/ListEmptyDataStyle Release-iphonesimulator/ListEmptyDataStyle.framework/ListEmptyDataStyle -output FatFile/ListEmptyDataStyle
8,爬坑提示
8.1 理解一下动态库和静态库: www.jianshu.com/p/4e0fd0214…
8.2 由于iOS8之后才允许使用插入动态库,所以网上大部分教程在选MachO-Type的时候选择的是Static Library。但是.a静态库和静态framework无法访问库中的资源图片的。所以自己创建的framework如果想访问库中的资源文件,那么必须要是动态库。
8.3 自建动态库手动拖入的工程后,必须选择embed选项,否则的话,启动即崩溃。
8.4 静态库中关联的对象无法用KVO进行观察,不会触动KVO回调方法。