前面已经介绍了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,大功告成,输出结果跟我们预期的完全一样。

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

  1. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  2. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

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

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...

  4. 李洪强iOS开发之静态库的打包一

    李洪强iOS开发之静态库的打包一 //静态库一般做一下几种事情 //1 工具类 算法逻辑 新建工具类LHQTools 定义类方法 + (NSInteger)sumWithNum1: (NSIntege ...

  5. 【转】 iOS 开发之静态库.a和动态库详解 -- 不错

    原文网址:http://blog.csdn.net/lxl_815520/article/details/52154331 一, 简单介绍 1.什么是库 库是程序代码的集合,是共享程序代码的一种方式 ...

  6. 李洪强iOS开发之静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

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

    前面介绍过,虽然苹果公司禁止在iOS开发中使用动态库,而且也从XCode中移除了创建静态框架的功能,但我们还是可以通过对XCode进行小小的改动来创建静态框架. 编译环境:Macbook Air + ...

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

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 新建工程:File -> Ne ...

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

    在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程 ...

随机推荐

  1. Linux系统下 解决Qt5无法连接MySQL数据库的方法

    Linux平台下解决Qt5连接mysql数据库的问题:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get instal ...

  2. K.O. ----- bat文件的中文乱码

    -------siwuxie095 bat文件在保存时如果没有选择正确的格式,中文部分就会出现乱码 1.记事本 用记事本编写如下代码:        另存为:测试.bat,编码设置为:UTF-8,就会 ...

  3. 防止刷新/后退引起的重复提交问题的Java Token代码,非Struts

    贴子转自http://hi.baidu.com/bobylou,转之前并没有验证文章里的方法是不是有效,估计原作者把它放到blog之前应该做过测试了吧. Struts本身有一套完善的防止重复提交表单的 ...

  4. IOS 从一个小地方想到……

    //(一个比较好的地方是 : cancel代表取消的意思,suspended,表示已经挂起,这些英文记住了用来命名挺好的,看看别人的过去时都是加ed的,就是这么强,所以语法不好的话,多关注ios的命名 ...

  5. Maven学习之 插件plugin

    Maven本质上是一个执行插件的框架.插件共分两类:build插件和reporting插件. build插件,会在build阶段被执行,应该配置在POM的<build/>元素中. repo ...

  6. $ajax引用DOM

  7. Scanf函数输入字符串

    Scanf函数输入字符串 #define _CRT_SECURE_NO_WARNINGS //#pragma warning(disable:4996) #include <stdio.h> ...

  8. aspectj pointcut 找不到类型pointcut cannot be resolved to a type

    引入了aspectJ后,文件提示找不到pointcut类型.修改如下: .project文件添加内容,红色字体为添加的引用 <?xml version="1.0" encod ...

  9. 【Java学习笔记】Map集合的keySet,entrySet,values的用法例子

    import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.M ...

  10. linux 管道命令 竖线 ‘ | ’

    管道符号,是unix功能强大的一个地方,符号是一条竖线:"|", 用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为comm ...