iOS静态库文件(.framework和.a)合并,兼容真机以及模拟器

开发过程中有时候需要讲一些功能代码封装到静态库文件中,以确保代码的安全性。

主要分为:静态库、动态库两种

静态库和动态库的存在形式

静态库: .a 和 .framework   

动态库: .dylib 和 .framework

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

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

需要注意的是:项目中如果使用了自制的动态库,不能被上传到 AppStore

所以基本上就用不到制作动态库文件了,下面来说一说静态库文件,下面以本地framework为例。

静态库文件在编译时,你选择不同的设备时编译出来的framework所支持的环境也会不同,也就是你在制作完framework后,选择的是在模拟器下编译的话,那么你引入到其他工程中,就只能在模拟器下调用执行。如果你选择的是在真机环境下编译的话,那么你引入到其他工程中,只能在真机上调试运行。

选择不同的编译环境,你编译出的framework所支持的环境也不一样,每次在不同的环境下编译后,你可以选中你的framework(注意编译command+B通过后,相应的framework的名字颜色会又红色变为黑色),鼠标右键,Show in Finder,可以对比一下,你会发现在模拟机版本编译后的文件路径在:Debug-iphonesimuator文件夹下。而选择真机版本编译后的文件路径在:Debug-iphonesimuator文件夹下。

so,问题来了,如果想要在真机跟模拟器下都能使用我们自己制作的framework的,要怎么解决这个问题呢?总不能没次更换不同环境下的framework吧(其实不怕麻烦的程序员可以这么整,但作为一个资深强迫症患者程序员来说,太痛苦了,宝宝做不到啊)。

解决上面这个问题的话,就需要我们手动合并我们framework里面的一些文件。


举例:

比如我编译的framework为:ZHWActivity.framework

选择不同环境下的framework,并Show in Finder,会发现在两个ZHWActivity.framework文件夹下面都有一个名为ZHWActivity(你编译的framework的名字)的文件,这个文件在Mac下显示的是一个白板文件。

下面我们就需要将这个两个文件合并成一个ZHWActivity文件:

在桌面新建一个文件夹merge,在merge文件夹下在新建两个文件夹merge1,merge2

讲不同环境下的framework中的ZHWActivity(就是那个白板文件),分别放到这个两个文件夹里。

然后打开终端,cd到merge目录下,执行一下命令:

lipo -create merge1/ZHWActivity merge2/ZHWActivity -output ZHWActivity

(参考:lipo -create “……真机/目录/那个白板文件“ "……/模拟器/目录/那个白板文件" -output “…..另保存的/目录/文件”)

在终端执行完后,会发现在merge目录下,多出来一个ZHWActivity文件(也是一个白板文件),这个就是已经合并后的文件。

将合并后的文件拷贝一份,然后在你导入ZHWActivity.framework工程里,Show in Finder一下。讲工程里原来的ZHWActivity(旧的白板文件),替换成我们合并后的ZHWActivity(新的白板文件,可以看一文件的大小已经是之前旧文件的两倍)。在重新编译一下,你会神奇的发现,在真机跟模拟器下无缝切换,再也不会报错了有木有。


tip1:同理在制作.a静态库文件时,也是区分真机跟模拟器的。也是可以按照上面的方法来合并**.a文件,方便我们开发过程中使用。

tip2:如果我们的制作的静态库文件中有包含的有.mm文件(c++跟oc混编的代码文件),那么我么在其他地方导入时,就需要讲相应的.m文件也改为.mm文件才能正常使用。(如在ViewController.m中引入头文件那么就需要改成ViewController.mm)。

关于静态库文件的制作可以参考下面这篇文章:

xocde7标准Framework静态库制作方法,工程转Framework

iOS开发之静态库.a的制作教程

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

推荐阅读更多精彩内容