iOS生成 .framework

前言

在做项目的时候我们经常会用到别人封装好的资源,我们会看到有的资源是.a、.bundle文件,有的是.framework文件,那么.framework文件是怎么生成的呢?接下来我会用图形和文字给大家详细说明一下。

一、什么是库

库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库。
静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间。

二、什么是.a、.bundle、.framework

在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库。
二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。 .a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该bundle文件的名字和.a或.framework的名字相同。

三、静态库使用的必要性

1>. 代码的共享与重用

2>. 程序模块化

3>. 分享给别人代码库时代码隐藏

4>. 开发第三方SDK

步骤

1.打开xcode,新建工程

选择“Framework & Library”,然后next

屏幕快照 2017-01-16 下午3.50.12.png
2.创建功能类

创建一个继承自NSObject的People类。

3.实现功能

在新创建的类里面声明方法并实现。这里我写一个buy的方法,以便后面测试使用。

 在People.h文件里面
#import <Foundation/Foundation.h>

@interface People : NSObject

+ (void)buy;

@end
在People.m文件里面
#import "People.h"

@implementation People

+ (void)buy
{
    NSLog(@"buy");
}

@end
4、更改参数

这里贴上Xcode基本操作
http://blog.csdn.net/phunxm/article/details/17044337

屏幕快照 2017-01-16 下午3.59.59.png
5、设置Headers

将你要公开的头文件拖至Public下,要隐藏的放在Private或者Project下,当然,隐藏的头文件就无法再被引用。


屏幕快照 2017-01-16 下午4.03.40.png

然后需要在CustomFramework.h(必须是公开的,否则无法引用)中将你所有要公开的.h引入

屏幕快照 2017-01-16 下午4.07.48.png

打包Framework

1.选中模拟器,编译程序(cmd+B)

2.选中测试机,编译程序(cmd+B)

3.在finder中找到framework文件

屏幕快照 2017-01-16 下午4.11.21.png
屏幕快照 2017-01-16 下午4.11.32.png

找到下图中所示的CustomFramework文件,一个是Debug-iphoneos(真机)下的,一个是Debug-iphonesimulator(模拟器)下的。

屏幕快照 2017-01-16 下午4.15.46.png

使用xcode自带的lipo可以合并两个版本:在终端下使用命令:lipo -create /User/...../release-iphoneos/xxx.framework/xxx /User/...../release-iphonesimular/xxx.framework/xxx -output ./xxx
其中xxx为你的库的名称,路径为生成的静态库的路径,然后把生成的xxx放到真机或者模拟器版的xxx.framework里面替换里面原有的xxx库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容