iOS开发之静态库(二)—— .a

前面已经介绍了iOS中静态库的基本概念和特点,这里就不再多废话,直接上代码

编译环境Xcode5.1 + Mac OS X 10.9.3

新建静态库项目

Xcode中创建静态库的模板有两个,一个是创建iOS静态库,另一个是创建Mac OS X静态库,我们选择前者

点击右下角Next按钮进入下一步

给工程起个名字MyToolsA,其余的按默认值

点击Next下一步

我们所关心的就只有MyToolsA.h和MyToolsAm文件,其他的暂且不管

//  MyToolsA.h
//  MyToolsA
//
//  Created by LZH on 14-8-14.
//  Copyright (c) 2014年 LZH. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MyToolsA : NSObject

- (int)add: (int)x Second: (int)y; //对象方法
+ (int)sub: (int)x Second: (int)y; //类方法

@end
//  MyToolsA.m
//  MyToolsA
//
//  Created by LZH on 14-8-14.
//  Copyright (c) 2014年 LZH. All rights reserved.
//

#import "MyToolsA.h"

@implementation MyToolsA

- (int)add: (int)x Second: (int)y{

    return x + y;
}

+ (int)sub: (int)x Second: (int)y{

    return x - y;
}

@end

代码完成后开始编译

编译之前需要先配置工程,因为默认情况是生成Debug版本,如果需要生成Release版本就需要重新配置

Xcode->Product->Scheme->Edit Scheme... 或者直接按快捷键"Shift + Command + 逗号"弹出配置面板

将Debug选项改为Release选项

将编译目标改为iOS Device ,表示编译生成的是真机版本的静态库

点击左上角红框内的三角按钮或者快捷键"Command + b"进行编译,当看到“Build Succeeded”表明编译成功

然后便可以看到Products目录下的libMyToolsA.a由红色变成了黑色,说明我们已经成功生成了静态库文件

右键点击libMyToolsA.a选择"Show in Finder"

找到libMyToolsA.a所在文件夹

切换编译目标,将iOS Device 改为 iPhone Retina (3.5-inch),编译生成适用于模拟器的静态库

OK,现在真机版本的静态库和模拟器版本的静态库都已经生成,下面的工作是要将二者合并,生成一个既适用于真机又适用于模拟器的静态库

需要使用下面的命令

lipo -create 1.a 2.a -output 12.a

打开终端,为了方便期间,直接切换到超级用户

找到静态库所在目录

弹出属性菜单,在“位置”属性中记录的便是该目录所在的绝对路径,复制粘贴到终端窗口,即可进入指定文件夹

然后使用lipo命令合成静态库

我们来验证一下生成的库是否支持我们想要的平台

可以看出,我们最终生成的库libMyToolsA.a同时支持32位模拟器架构i386、64位模拟器架构x86_64、32位真机架构armv7/armv7s及64位真机架构arm64

跟我们的预期相吻合。

下面便是测试工程

此处选择iOS工程的单视图模板

右键点击"New Group"新建组"MyTools",将刚刚生成的库文件libMyToolsA.a和头文件MyToolsA.h拖动至MyTools下

注意:

拖动时同时按住Alt键,这样就是复制而不是移动,原来的文件都还在,否则就会把原位置的文件删除了

由于.a静态库的使用必须由头文件配合,所以也要把.h文件拷贝过来

必须勾选上Add to targets 下的StaticLibATest目标,否则即使把文件放进来编译目标时也无法使用

要使用刚刚导入的静态库,只需要加入其头文件即可

修改ViewController.m文件

//  ViewController.m
//  MyToolsATest
//
//  Created by LZH on 14-8-15.
//  Copyright (c) 2014年 LZH. All rights reserved.
//

#import "ViewController.h"
#import "MyToolsA.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.

    int x = 10, y = 7;

    //使用类方法
    NSLog(@"%d - %d = %d", x, y, [MyToolsA sub: x Second: y]);

    //使用对象方法
    MyToolsA *myToolsA = [[MyToolsA alloc] init];

    NSLog(@"%d + %d = %d", x, y, [myToolsA add: x Second: y]);

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

运行结果:

模拟器

真机

OK,大功告成,输出结果跟我们预期的完全一样。

时间: 2024-12-14 05:03:25

iOS开发之静态库(二)—— .a的相关文章

iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework

编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将“iOS开发之静态库(三)—— 图片.界面xib等资源文件封装到.a静态库”中生成的“MyToolsWithAssetsA.bundle”文件直接拿过来使用. 二.创建静态框架 创建过程参考“iOS开发之静态库(四)—— 静态框架framework制作”,里面介绍非常详细. 静态库代码借用“iOS开

李洪强iOS开发之静态库

iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking (2)闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 二.静态库和动态库 1.静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 2.静态库和动

iOS开发之静态库(四)—— 静态框架framework制作

前面介绍过,虽然苹果公司禁止在iOS开发中使用动态库,而且也从XCode中移除了创建静态框架的功能,但我们还是可以通过对XCode进行小小的改动来创建静态框架. 编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 首先创建一个静态库工程 给工程起个名字 创建成功 XCode5.0以后,创建的工程中默认自带了单元测试的代码: 即MyToolsFrameworkTestTests目录及TARGETS中的MyToolsFrame

iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库

编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 新建工程:File -> New -> Project... -> OS X -> Framework & Library -> Bundle 我们必须借助于OS X,因为iOS框架中没有创建Bundle的模板 填写项目名称 保存位置 其实本无需这么麻烦,bundle的本质是一个目录,我们完全可以创建一个文

iOS开发之静态库(一)—— 基本概念

在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程,在iOS开发中却遇到了麻烦,原因是:苹果公司禁止在iOS开发中使用动态库(而苹果自己却可以使用动态库),同时,苹果也从Xcode中移除了创建静态框架的功能.值得庆幸的是我们可以通过对Xcode进行小小的改动来创建静态框架,而静态库和静态框架是被App Store所允许的,其实静态框架本质上说也是静

iOS开发笔记--静态库的制作与使用

一.iOS项目中库的使用 1.开源库 * 公开源代码,能看到具体实现 *比如SDWebImage.AFNetworking 2.闭源库 * 不公开源代码,是经过编译后的二进制文件,看不到具体实现 * 主要分为:静态库.动态库(注意自己制作的动态库不能上传到appStore) 二.本文首先讲的的是静态库的制作以及使用 1.新建静态库项目 新建静态库项目选择cocoa Touch Static Library 然后编写核心代码 2.分别在真机和模拟器下编译生成对应环境的静态库 (注意真机文件夹下得静

iOS开发之静态库(六)—— 时空之争

前面的所有试验中,我们的静态库都支持了所有可能的指令集(i386, x86_64, armv7, armv7s, arm64),最大限 度的匹配了所有可能运行该代码的设备,使代码在当前存在的几乎所有iOS设备上都能以最优的性能运行.然而,这样 做是否真的很好,是否真的必要. 我们来做个试验:参考“Apple移动设备处理器指令集 armv6.armv7.armv7s及arm64”生成各种包含特定指令集 的静态库,查看其占用磁盘空间的大小,结果如下 从上图可以很清楚的看到,生成的二进制文件所支持的指

IOS开发----生成静态库(.a)

转自:http://www.cnblogs.com/ios8/p/ios-static-a.html 由于iPhone控件的极度匮乏和自定义组件在重用上的限制,在过去的项目中我们积累了大量的“纯代码”组件——因为IB本身的限制,我们无法把这些组件封装为IB组件库(本来我们想通过分发xib文件的方式重用这些组件,但最终发现这根本不可能,苹果的Plug-in编程不支持iPhone). 最终我们想到了静态库.虽然这仍然还是一种比较原始的复用方式,但起码我们可以隐藏组件的源代码. 下面, 我们使用iPh

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

简介 什么是库? 库是程序代码的集合,是共享程序代码的一种方式 根据源代码的公开情况,库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking 闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 静态库和动态库 静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 静态库和动态库在使用上的区别 静态库:链接时,静态库会被完整地复制到可执行文件中,被多