有关framework介绍:
- 静态库和动态库是相对编译期和运行期的:
静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;
动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。
- 库的分类?
开源库: 源码是公开的, 可以看到每个实现文件 .m 的实现, 例如 Github 上常用的开源库 AFNetworking, SDWebImage 等.
闭源库: 不公开源码, 是经过编译后的二进制文件, 看不到具体的实现. 闭源库又分为: 静态库 和 动态库
- 静态库的存在形式?
.a
.framework
- 动态库的存在形式?
.dylib
.framework
- 系统的.framework是动态库,我们自己建立的.framework是静态库,苹果不允许私自接入第三方动态库。
- a与.framework有什么区别?
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
下面我将以Xcode10为例为大家演示一遍制作带有图片资源的framework过程,首先需要把图片资源打包成bundle,然后在创建静态库,如有不足之处,欢迎加我微信交流。(ww1030418469)
把图片资源打包成bundle:
xcode10新建project->选择macOS->Bundle:
在新建的项目里addfile->macOS->Asset Catelog:
->
把你需要打包成bundle的图片资源拖到刚刚创建的这个Media.xcassets里面,效果如下:
然后运行一下,注意,运行要选择在My Mac上,然后找到product文件夹下面的bundle文件,show in finder就可以拿到资源。
打包成静态库:
creat a new project->ios->framework:
->
如上图所示,删除daddemo.h,添加你需要打包的文件到项目中,如下图效果:
进行编译之前应该设置为release模式:
然后我们打开product文件夹,此时下面的.framework是红色的,表示还不存在,模拟器和真机分别运行一下,show in finder就可以得到product文件夹下面的.framework :
命令行语句:sudo lipo -create (此处请填写真机AppVest文件路径) (此处填写模拟器AppVest文件路径) -output 自定义合成文件存储路径(合成文件的名字AppVest):
到output的路径下找到你需要的daddemo文件,替换到真机或者模拟器对应的framework中,就可以使用啦!!!
大功告成。