iOS 中静态库的创建

本文主要说明.framework的创建与使用

iOS 中静态库简单介绍

1、iOS 中静态库的形式可以分为.a 和.framework,动态库形式分为.dylib和.framework;

2、静态库和动态库都包含framework是因为,系统的framework是动态的,我们自己建立的.framework是静态的;

3、.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件;

    .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用;

    .a + .h + sourceFile = .framework

   所以一般建议用 .framework

4、 使用静态库可以方便共享代码,便于合理使用;实现iOS程序的模块化,可以把固定的业务模块化成静态库;和别人分享你的代码库,但不想让别人看到你代码的实现。


开始创建 .framework

1、首先创建一个项目用于制作 .framework,点击图中加号按钮

2、选择framework(这个默认是动态库,我们需要在后边配置改成静态)

3、配置库库属性

Target: -> Build Settings ->  Architectures -> Build Active Architecture Only 全改成NO;

这个属性是兼容全部设备,这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本,所以会报错编译不到文件,出错("_OBJC_CLASS_$_xxxxxx", referenced from:)而设置为no时,会编译所有的版本,这样就解决编译出错的问题了。

设置这个兼容属性的原因是:如果生成静态库的时候是选择的ipad retain生成的,那么这个库导出的时候只能在ipad retain的设备上运行,在别的设备上就会报错,感兴趣的可以试试哦!所以一定要设置设备兼容。

Target:在 Deployment 下,将 Targeted Device Family 改成  1/2 ,根据自己的需要改。1代表iPhone,2代表iPad,1/2代表兼容iPhone和ipad,将  iOS Deployment Target ,改成 iOS 7.0,也就是说这个静态库支持7.0以上版本。

Target:在 Linking 下,将 Mac-O Type  改为 Static Library(静态库)

4、给静态库添加文件 (.h .m 文件等)

我创建了一个MyViewController的类(带xib文件,后期使用)

首先介绍一下属性:

1:暂时没用过,希望大神补充下。

2:程序文件放的地方:(*.m 、*.mm等),需要压缩保护的代码,只要放在这里的文件,都将被静态库压缩。使用静态库的一方是无法看到源代码的。

3:库文件放的地方,比如把其他的静态库、动态库压缩到这里。

4:对外接口。主要就是这里,展开后,会看到第一行(Public),不用介绍了吧,看英文应该就能猜到,何况这个单词是程序中常用的单词,公用吗!,只要是放到这里的文件,都将会暴露给使用方,建议把所有的*.h文件放到这里。

5:资源文件放的地方,图片、音视频、xib、Images.xcassets、甚至是Main.storyboard(故事板);只要放到这里,都将被压缩,使用方是无法编译或者看到源代的。

介绍完之后那我们把我建好的类拖入到对应的当中去

这里面其中 MyFramework.h是创建库的时候自动生成的,MyViewController.h是我自己创建的,我们可以把自己创建的MyViewController类import到自动生成的MyFramework.h文件,这样的话如果在别的项目用到的,我们只需要导入MyFramework.h就可以了。

MyViewController类写了一个简单的输出方法,当然如果要外部调用,不管是静态方法还是动态方法都需要在.h文件声明哦,最好加上一些注释,这样用的人直接看.h文件就知道什么用处了。

5、运行,生成.framework

我们先来看下我们创建的framework,依然还是红色,是因为现在还找不到这个库

别急,让我们command+B,当然一定要选中当前的库哦,不要选项目名字

看,黑了吧,说明已经有了,选中它,鼠标右键,Show in Finder

看到了没,首先这个是模拟器才能用的一个库,是因为我们是选中的模拟器command+B的。

再解释一下为什么command+B

framework(App图标样式)是App 工程文件,选中这个运行(command+R 或command+B)意思是让工程导出或者测试运行可发布的应用程序(就是上线文件)。对应功能就不一一介绍了。

MyFramework(Bundle图标样式)是静态库。选中这个运行(只能运行command+B,不能运行command+R)意思是导出静态库,也就是自己的封装代码,用于共享给其他人。如果选中iOS Device运行(command+R),将会导出真机版本的静态库,如果选中iOS Simulator以下其他任何版本运行(command+R),将会导出模拟器的静态库版本。至于为什么这样,是因为真机的iOS和Mac系统中的虚拟iOS目录结构是不一样的,如果导错了,编译器会报错,“找不到指定文件”;当然这俩库也可以合并为一个,既能真机用也能模拟器用,那就需要在终端用命令合并一下,不知道的百度一下就好了,这里不在赘述。

framework导入新的项目进行测试

直接导入库的.h文件,然后调用NSLog静态方法。

看,成功了吧,有点小小的欢喜哈,咱们接着来~~

引入xib文件到framework

1、创建一个叫 Resource.bundle的静态库资源文件

2、配置属性

Target:并选择 Build Settings ->  Architectures -> Base SDK  改为Latest iOS(iOS 9.3)

Target:在 Deployment 下,Target:将 iOS Deployment Target,改为 iOS 7.0

3、完善MyViewController类,加载xib文件

4、然后把xib文件拖入Bundle Resources

5、选中Resources,command+B

编译成功之后,因为MyFramework 也增加了新的内容,所以要从新command+B,这样把.MyFramework 和 Resource.bundle 同时导出放到之前的测试项目里面。让我们看下效果:

这样就把我之前的xib文件显示出来了,大家可以看下Resource.bundle 里面的东西

加入图片到静态资源文件

1、首先我要先改动一下xib文件,让他加载一个imageview,怎么改变就不必上图了,大家看效果就行啦

加入图片之后,也需要把图片像拖xib那样拖入到 Bundle Resources 

拖入成功之后,选中Resource  进行command+B,然后同样导出到之前的测试 项目,替换原来的即可。(因为现在只是改变的xib的东西,然后xib又包含在资源文件里面,所以只需要对Resource Resource)让我们看下效果:

看,现在是不是多了一个图片~~

如果你不想让用你framework的人看到你的图片怎么办?好,那让我们把图片加入到工程里面的图片管理器,直接把图片管理器拖入到 Bundle Resources。


现在准备就绪,只需要 command+B 一下 Resource,然后导出替换测试项目里面的Resource.bundle,运行看下效果:


现在大家可以看到之前放到资源管理里面的图片已经看不到啦,只是多了一个不明的文件:Assets.car。这个就是Images.xcassets管理,里边所有的图片都被封装了,也就是说被Images.xcassets管理的图片竟然也被加密保护了起来,别人也不会看到你的照片了!

至此,静态库创建以及一些代码思路已经全部搞定,库以及资源文件根据你的需求可以加上任意东西,大家有没有想要试一试的冲动啊!!!

如有不足,欢迎大家指出,共同进步。

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

推荐阅读更多精彩内容