iOS开发技巧iOS学习专题iOS进阶

iOS中,Framework和.a的打包及使用

2017-03-07  本文已影响3613人  carpond

最近在做一个小项目,需要给客户一个demo测试,有一部分核心代码暂时不想让客户知道,就想到了打包成framework或.a库。库有两种:

静态库和动态库的区别

使用静态库的好处

使用动态库的好处

静态库的使用场景

iOS设备的CPU架构
模拟器

真机

没有armv64

下面言归正传,做点正事

.a静态库

1.创建一个新的工程,选择下面这个模板:

图1.png

完成

图2.png

2.我这里就在Test操作了(亲,你打包.a的时候,可以删除默认文件,拉入自己想加入的任何文件)

图3.png 图4.png

下面在创建一个Person类

图5.png 图6.png

3.选择需要公开的头文件

添加头文件.gif

4.修改配置

图7.png 图8.png 图9.png

5.编译
选择Generic iOS Device任意一个模拟器各编译一次,完成后,在工程的Products文件夹下的.a文件从红色编程了黑色。编译成功,然后Show in Finder

编译.gif

可以看到真机与模拟器都生成了.a。里面都有有我选择公开的头文件
这个时候,可以用命令lipo -info 静态库名字来看下,支持的iOS的CPU框架

支持架构.gif

6.合并静态库-让模拟器和真机使用一个静态库
命令如下:
lipo -create第一个.a文件的绝对路径 第二个.a文件的绝对路径 -output 最终的.a文件路径

合成静态库.gif

这个生成的libTest.a,就是支持真机和模拟器的静态库了。创建一个文件夹,把.a和头文件拖进去,这个文件夹就是我们所需要的。

完成.gif

为了开发方便,我们可以使用生成的通用静态库,但是上线的时候只导入真机的,这样工程的体积也会小一些。

使用.a静态库

新建一个工程,把我们的静态库拖进去,导入头文件。

图10.png

.framework静态库

1.Xcode创建一个新工程,需要选择这个Cocoa Touch Framework这个模板

图11.png

2.创建Person,也是输入名字和年龄,和.a一样

图12.png 图13.png
注意事项:
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//拿到路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"bundle" ofType:@"bundle"];
//设置图片
UIImage *image = [UIImage imageNamed:@"delete" inBundle:[NSBundle bundleWithPath:path] compatibleWithTraitCollection:nil];
            
 [button setImage:image forState:UIControlStateNormal];

3.选择要公开的头文件
这里主要是让使用者知道有哪些方法和头文件可以使用

图14.png 第二种方式添加头文件.gif

注意。要在这个文件中引入需要公开的头文件

图15.png

这里有一个注意点,公开的头文件中,#import的其他类也要公开,添加到public中,如果不想公开,就在头文件用用@class的方式,在对应的.m中用#import方式

4.修改配置

图17.png 图18.png

5.编译
选择Generic iOS Device任意一个模拟器各编译一次,完成后,在工程的Products文件夹下的.a文件从红色编程了黑色。编译成功,然后Show in Finder

生成framework.gif

可以看到真机与模拟器都生成了.framework。里面都有我们选择公开的头文件
这个时候,可以用命令lipo -info framework静态库文件下二进制文件的名字来看下,支持的iOS的CPU框架

支持框架.gif

6.合并静态库-让模拟器和真机使用一个静态库
命令如下:
lipo -create第一个framework文件下二进制文件的绝对路径 第二个framework文件下二进制文件的绝对路径 -output 最终的二进制文件路径

新的framework.gif

将合成的二进制文件拖进任何一个framework,替换掉原来的,然后把这个新的framework拖进项目就可以使用了

使用framework静态库

新建一个工程,把我们的静态库拖进去,导入头文件。然后调用Person中的方法。

图19.png

如果静态库中有Category类,就要在使用静态库项目的配置中添加-ObjC或者-all_load
如果创建的framework类中使用了.tbd,则项目中也要导入.tbd动态库

注释:部分名词摘自网络。虽然说,学到的都是我们的,但是也不要忘记他人。

如果有错误的地方欢迎指出,一起学习,一起进步。
如果有不懂的地方,请留言,或者加QQ810646506
如果喜欢给个赞哈

上一篇下一篇

猜你喜欢

热点阅读