iOS制作Framework静态库步骤

见文章:
https://blog.csdn.net/dp948080952/article/details/52749120
作者:代培
地址:http://daipei.me/posts/make_framework_by_xcode8/
转载请注明出处
作者的博客搬家了,新博客地址:daipei.me

前言
网上关于Framework制作的教程数不胜数,然而都过于陈旧,最新的也是使用Xcode7的教程,而且有些设置也只给出步骤,并没有给出原因,而且按照有些教程制作出的framework还有些问题,所以我把自己制作framework的过程记录下来,并且使用的是最新的Xcode8环境。

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


image.png

然后随便取一个名字


image.png

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

image.png

选择工程文件>target第一项>Build Setting>搜索linking,然后几个需要设置的选项都显现出来,首先是Dead Code Stripping设置为NO,网上对此项的解释如下,大致意思是如果开启此项就会对代码中的”dead”、”unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可。

The resulting executable will not include any “dead” or unreachable code

然后将Link With Standard Libraries关闭,我想可能是为了避免重复链接

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

image.png

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


image.png

为了对一些特殊机型的支持,添加armv7s架构,当然不添加也没什么问题,只有5和5c使用了此架构。


image.png

下面就开始编译了,先选择Generic iOS Device,按下Command+B:Build一下


image.png

然后随意选择一个模拟器再次Build一下


image.png

找到Build后的framework


image.png

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


image.png

然后用命令行将下面两个文件进行合成


image.png
image.png

将合成后的文件输出到桌面之上,这里解释一下这看似很复杂的命令:lipo -create +上面两个文件的路径 + -output + 合成后文件的输出路径


image.png

然后用输出在桌面上的YuXinSDK替换掉前面Debug-iphoneos中framework中的YuXinSDK

将这做好的framework直接拖入要使用的工程中


image.png

注意将Copy items if needed打勾


image.png

然后在工程的search path中加上此framework的Headers的路径


image.png

image.png

image.png

本以为大功告成,按下了Command+R悠闲的等着编译运行,然而在链接的时候却出了问题


image.png

很经典的错误,库中缺少了i386架构的文件,这时我就比较困惑了,明明将模拟器生成的库文件合并进来了,怎么在模拟器上编不通呢!用lipo命令查看一下,果然没有i386架构的文件


image.png

再看一下用模拟器生成的framework


image.png

居然只有x86_64架构

我换成iPhone 4s模拟器,编译后生成的文件居然包含了i386


image.png

经过我的测试,在iPhone5之前编译的framework都是i386架构,iPhone 5s之后都是x86_64架构,然而在所有模拟器上运行时,这两种架构缺一不可,然后我将这两种架构的framework合并在与真机的合并


image.png

拖入工程后终于能够正常运行了


image.png

后来经过摸索发现之前按照网上的教程却把自己坑了


image.png

开始将上图中的选项设为YES,导致其编译时只生成当前机器的框架,将其设置为NO后,发现用模拟器编译后生成的framework同时包含x86_64和i386架构。

bitCode错误
在项目中引入静态库后,archive的时候又会出现错误

bitcode bundle could not be generated because ... was built without full bitcode.All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64
1
Bitcode是苹果在Xcode7及以后推出的新功能。用于代码的二次编译,针对CPU进行优化,编译工作由苹果AppStore后台来完成。
针对iOS是可选项,默认打开。watchOS 和 tvOS 是必选项。


image.png

所以需要打开库工程的此选项并加上-fembed-bitcode参数,重新编译


image.png

如此archive时就不会出问题了,到此我在制作使用framework时遇到的问题都在这里了。

总结
架构
对于模拟器来说4s和5的模架构是i386的32位架构,5s至今是x86_64的64位架构。对于真机来说3GS~4s是armv7架构,5和5c是armv7s架构,5s至今是arm64架构

静态库
静态库: 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态库
动态库:链接时不会拷贝至可执行文件中,运行时动态加载进内存,供程序调用,只加载一次,多个程序可以共用。

我已经将代码上传到github上,这里给出地址:https://github.com/948080952/YuXinSDK

此篇博客中参考了的博客:https://my.oschina.net/kaqijiang/blog/649632

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容