前言
如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实现细节,而这些实现你可能并不想开源出来。此外,开发者也可能并不想看到你的所有代码,因为他们可能仅仅希望将你的这份漂亮代码的一部分植入自己的应用中。
另一种方法是将你的代码编译成静态库(library),让其他开发者添加到自己的项目中。然而,这需要你一并公布所有的公开的头文件,实在是非常不方便。
你需要一种简单的方法来编译你的代码,这种方法应该使得你的代码易分享,并且在多个工程中易复用。你需要的是一种方法来打包你的静态库,将所有的头文件放到一个单元中,这样你就可以立刻将其加入到你的项目中并使用。
OS X完美地支持这一点,因为Xcode就提供了一个项目模板,包含着默认构建目标(target)和可以容纳类似于图片、声音、字体等资源的文件。你可以为iOS创建Framework,不过这是一个比较复杂的手工活,如果你跟着教程走,你将学到怎么样跨过路障,顺利地完成Framework的创建。
说明
1.什么是库?
库是共享程序代码的方式,一般可分静态库和动态库
2.静态库与动态库的区别?
静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝;
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序通用,节省内存
3.iOS 静态库和动态库的形式
静态库:.a 和 .framework
动态库: .dylib 和 .framework
4.为什么framework既是静态库也是动态库
系统framework为动态库,自己创建的framework为静态库
制作流程
1.打开Xcode,新建工程,选择"Cocoa Touch Framework",点击"next",填写工程名,并进入工程中删除自带与工程同名的头文件
image.png2.创建功能类
Demo中我写了一个叫做"MathMethod"继承自NSObject,用来计算 加法、减法、乘法、除法!
3.实现功能
这里你可以将需要的文件拖入使用,也可以重新创建新的类;
简单的我写了四个方法,就不上代码了,直接截图看:
声明.png 实现.png
4.重点来了!需要生成我们自己的Framework,需要进行如下配置
TARGETS —> Build Settings 中设置相关项
1.Build Active Architecture Only 设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行.
image.png
2.Build Setting 搜索linking 设置Dead Code Stripping 为NO是编译选项优化,包瘦身,(可不改) Mach-O Type 选中StaticLibrary (静态库) Xcode默认是动态库.
image.png
3.设置framework最低支持的版本
image.png
TARGETS —> Build Phases设置相关项
将需要呈现给来的头文件,直接从Project拖到Public中. 不想呈现出来的.h文件不建议拖到Private中. 放在project中即可
image.png
4.在进行编译之前应该设置为release模式
快捷键方式:command + shift + ,
image.png
5.编译运行
来到工程目录树,Products下的文件都是红色的,现在我们选中.framework文件,分别真机和模拟器运行一遍(成功运行
然后Show in Finder 找到对应的 .framework文件(上级目录可以看出是真机还是模拟器文件夹)
真机和模拟器运行成功的文件是在这俩个文件夹内的
image.png
内部分为Debug版本和Release版本,同时两者有分为真机版本和模拟器版本framework(iphoneos后缀代表真机版本,iphonesimulator后缀代表模拟器)
到这里,我们的第一个framework已经制作完成,但是呢还是有一点缺陷和不足,我们的真机版本和模拟器版本framework是分开的 ,如何将两个合成为同一个???
别走开...接着往下看!前方高能!!!!!
6.真机版本和模拟器版本framework合并(这里只做release版本合成)
(1).查看架构信息
打开终端使用命令行 lipo -info 查看framework架构信息
真机版本
真机.png 模拟器.png
2).合并真机模拟器版本
因为以上获取的framework只能在对应的版本上运行(即真机只能在设备上运行,模拟器版本只能在模拟器上面运行使用)所以需要合并为通用版本
命令行语句:sudo lipo -create (此处请填写真机AppVest文件路径) (此处填写模拟器AppVest文件路径) -output 自定义合成文件存储路径(合成文件的名字MathMethod)。
合成.png
根据以上命令就在相应位置生成了新的MathMethod文件,然后把这个新生成的文件拷贝到相应的framework中进行MathMethod文件替换,这里我们替换真机版release包;
3).查看替换后的framework支持全部真机模拟器架构
image.png
7.制作好的framework集成使用
把制作好的framework拖入到工程中,引用相关头文件,然后初始化进行暴露方法调用
ending.png
网友评论