您的位置:首页 > 移动开发 > IOS开发

ios制作.a静态库

2015-10-09 20:22 309 查看
开发中大家都会使用或多或少的第三方sdk,这些sdk基本都是一个.a文件和若干.h文件组成。.a文件就是ios的静态库,还有一种是.framework/.dylib的动态库。但是自己编写的动态库不能通过审核,所以一般使用的是制作静态库。

新建工程



编写代码

项目会生成一个.h和一个.m初始文件,然后我们编写一个最简单的打印(NSlog)功能的静态库。

#import <Foundation/Foundation.h>

@interface libraryDemo : NSObject

-(void)printA;
+(void)printB;

@end


#import "libraryDemo.h"

@implementation libraryDemo

-(void)printA
{
NSLog(@"PrintA");
}

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

@end


编译

接下来就行编译,cmd+b或者product中build都行。注意这里要进行两次,一次是以真机或者ios device进行编译,一次以模拟器进行编译(先以真机或ios device编译)。因为模拟器和真机的运行不一样,编译成功后,products文件夹下的.a文件会变为正常颜色。show in finder后,可以看到两个文件夹,如图



合并静态库(.a文件)

刚才生成了两个文件夹,我们自己制作的sdk不可能让别人分两个环境去使用,所以我们需要合并两个.a文件。

命令为:

lipo -create /yourpath1/lib.a /yourpath2/lib.a -output lib.a


可以用 lipo -info lib.a来查看生成的静态库是支持哪个环境,armv7 arm64 armv7s(根据architectures的valid architecture来生成)的为真机环境,为i386(iPhone4s) x86_64(5s及以上)的话为模拟器。最后合并成功的是两这都有的。在某些情况下生成的静态库会导致build报错,使用不同的模拟器生成.a库,必要的时候还需修改build settings 里的architectures的属性,然后再生成进行合并。

使用静态库

新建一个普通项目,把.h和合并后的.a文件加入工程中,然后

#import "libraryDemo.h"

- (void)viewDidLoad
{
[super viewDidLoad];
[libraryDemo printB];

libraryDemo *testDemo = [[libraryDemo alloc]init];
[testDemo printA];

}


运行程序就可以在控制台看见 printB与printA了。

到此为止,就完成了一个最简单的ios静态库的制作。

望指正与补充~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息