iOS的软件开发工具包SDK,一般是以库的形式出现,从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。开发过程中,我们常常会用到第三方的SDK。尤其是微信、QQ、百度地图、支付功能等。其实我们也可以制作属于自己的库文件呢?如果,将自己写的功能类编译成库文件,分发给其他人来使用呢?

库分 静态库 和 动态库 两种:
1、静态库有 .a 和 .framework两种形式;
2、动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。

静态库和动态库区别,是相对编译期和运行期的:
1、静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;
2、动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。


PS总结:
1、同一个静态库在不同程序中使用时,每一个程序中都得导入一次,打包时也被打包进去,形成一个程序;
2、而动态库在不同程序中,打包时并没有被打包进去,只在程序运行使用时,才链接载入(如系统的框架如UIKit、Foundation等),所以程序体积会小很多,但是苹果不让使用自己的动态库,否则审核就无法通过。


这篇文章主要先针对 framework
静态库的制作过程进行阐述,,由于自己能力小菜,没有实际打包过framework的操作,其实过程跟.a的打包有点类似,不过还是转载一下大神们的一些经验,并绕过一些制作当中的大神们遇到的坑部分后分享给大家,制作环境都是最新的Xcode8来操作!好吧,了解了以上问题之后,让我们开始吧~~~~~

正文:

首先新建一个项目,选择Cocoa touch Framework


然后随便取一个名字


然后将要封装成framework的代码文件拖入工程


接下来,我们【选择工程文件 –> TARGETS第一项 –> Build Setting –> 在搜索栏输入linking】,然后几个需要设置的选项都显现出来,首先是【Dead Code Stripping】设置为NO,如下图:
PS:网上对此项的解释如下The resulting executable will not include any “dead” or unreachable code大致意思是如果开启此项就会对代码中的“dead”、“unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可

接着我们将【Link With Standard Libraries】关闭,如下图:
PS:我想可能是为了避免重复链接

最后将Mach-O Type设为Static Library,如下图:
PS:framework可以是动态库也可以是静态库,对于系统的framework是动态库,而用户制作的framework只能是静态库


接着我们在【Build Setting –> Build Active Architecture Only】菜单中,将其设置为NO,如下图:
PS:如果此选项设为YES,会导致其编译时只生成当前机器的框架,将其设置为NO后,编译后生成的framework同时兼容多个架构


然后点击【Build Phases】选项,我们需要将公开的头文件从Project中拖入Public,如下图:
PS:至于是否需要将私有的头文件拖入Private,我觉得直接放在Project中即可,若是Private中有头文件,打包以后的framework中会多出一个Private的文件夹包含着放入Private的头文件,不过我觉得如果是私有最好还是不要让别人看到


接下来我们可以对一些特殊机型的添加支持,添加armv7s架构,如下图:
PS:当然不添加也没什么问题,因为只有5和5c使用了此架构


下面就开始编译阶段了,如下图,先选择编译选项【Generic iOS Device】,按下Command+B 我们来Build一下
PS:这样一Build,其实可以看作就是真机跑了一遍


然后随意选择一个模拟器,按下Command+B 再次Build一下 ,如下图:


右键选择项目中的framework包,点击【Show in Finder】找到Build后的 framework ,如下图:


我们看到总共有两个文件夹,上面是真机编译生成的文件,下面是模拟器编译生成的文件,如下图:


然后我们找到这两个文件夹路径最下面的.framework文件,如下图:
 

——————————————————————————————————————————————————–


接着用命令行将下面两个文件进行合成, 将合成后的文件输出到桌面上,
命令格式:lipo -create 真机里.framework文件的绝对路径 第二个模拟器里.framework文件的绝对路径 -output 最终的.framework文件路径。 记得每一个文件路径输入后都需要用 空格 隔开哦
本博文中使用的命令如下:


然后用输出在桌面上的YuXinSDK.framework替换掉前面Debug-iphoneos文件夹中的framework包里面的YuXinSDK.framework
接着制作完毕了,我们将这做好的【Debug-iphoneos文件夹中的 framework包】直接拖入要使用的工程当中,如下图:

注意将【Copy items if needed】选项打勾,如下图:


然后在工程的【Build Setting –> 在搜索栏输入search】在search path中加上此framework的Headers的路径,如下图:

成功加上路径之后,我们可以看到,如下图:


好吧,大功告成,我们Run一下,成功运行!~~~

转载:http://blog.csdn.net/sinat_16714231/article/details/52857222

最新文章

  1. Elasticsearch —— bulk批量导入数据
  2. 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法
  3. 报错注入分析之updatexml注入
  4. mssql分页存储过程
  5. Android技术点
  6. 【20160924】GOCVHelper综述
  7. 删除ArrayList中的元素
  8. Web开发常见的漏洞
  9. Java XML解析器
  10. PyQT5 helloworld教程(转载)
  11. lock 单例模式
  12. oracle查询不走索引的一些情况(索引失效)
  13. Oracle 唯一 约束(unique constraint) 与 索引(index) 关系说明
  14. 【转帖】2018年Windows漏洞年度盘点
  15. Unity做AR
  16. oracle 视图带参数
  17. 安装ubuntu16.04的时候出现的detecting file system
  18. pandas使用drop_duplicates去除DataFrame重复项
  19. AndroidStudio gradle配置
  20. 启动windows服务的bat文件编写格式

热门文章

  1. 根据已有的Jar包 一键生成对应的mavenpom.xml信息
  2. 《Python黑帽子:黑客与渗透测试编程之道》 网络:原始套接字和流量嗅探
  3. 名词-JS
  4. Educational Codeforces Round 25 B. Five-In-a-Row
  5. 00-python概述。
  6. 使用 find 命令实现高级排除需求
  7. debug 工具
  8. 如何将Excel导入到Mysql数据库中
  9. node 利用http和cheerio编写简易爬虫
  10. h5在线1v1客服|web在线客服系统|h5即时聊天