ios中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)
创建静态库可能出于以下几个理由:
1.你想将工具类代码或者第三方插件快捷的分享给其他人而无需拷贝大量文件。
2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级。
3.你想将库共享给其他人,但不想让他们看到你的源代码。
Xcode6创建静态库详解(Cocoa Touch Static Library)
一。创建静态库文件
打开Xcode, 选择File ----> New ---> Project。 新建工程。
选择iOS ----> Framework & Library ---> Cocoa Touch Static Library。
点击Next。创建工程

工程目录:

在头文件StaticTest1.h中声明方法
#import <Foundation/Foundation.h> @interface StaticTest1 : NSObject -(void)testStaticLib; @end
在StaticTest1.m中实现方法
#import "StaticTest1.h" @implementation StaticTest1 -(void)testStaticLib
{
NSLog(@"This is a static library test");
} @end
二。创建通用静态库
通过xcode编译出的静态库.a文件因为支持的cpu架构不同而分为iOS Device真机(armv7 arm64), iPhone5(i386),iPhone5s(x86_64)等版本,各个版本的.a文件不能混用,为了解决这个问题需要制作通用的静态库文件

依次使用iOS Device -> iPhone5 ->iPhone5s在Products目录下生成libStaticTest1.a文件(文件名从红色变为黑色既为编译成功),必须先编译iOS Device的.a文件,不然可能编译不通过

通过右键.a文件->show in finder 找到文件libStaticTest1.a,依次重命名libStaticTest1s.a,libStaticTest15.a,libStaticTest15s.a, 名字可以随意

使用mac下的终端命令行工具执行合并语句
lipo -create /Users/outeki/Desktop/libStaticTest1s.a /Users/outeki/Desktop/libStaticTest15s.a /Users/outeki/Desktop/libStaticTest15.a -output /Users/outeki/Desktop/test.a
文件路径可以随意放置,我将文件都放在了桌面上方便写合并语句,注意三个文件路径都用空格分开,/Users/outeki/Desktop/test.a既为生成的通用静态库文件
如果你不知道每个.a文件支持的系统,可以通过lipo -info命令行来查看具体信息
lipo -info /Users/outeki/Desktop/libStaticTest1s.a
如果需要将通用静态库分离成各个版本的静态库,可以参考文章 http://www.cnblogs.com/wengzilin/p/3800856.html
三。使用静态库
新建一个ios项目,并创建lib文件夹,将头文件StaticTest1.h和test.a文件加入项目

在ViewController.m中import头文件,即可使用头文件中定义的方法了
#import "ViewController.h"
#import "StaticTest1.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; StaticTest1 *test = [[StaticTest1 alloc] init];
[test testStaticLib]; } @end
测试输出:

四.知识补充
到此静态库的介绍基本结束,如果你想自定义静态库的头文件,可以在静态库工程中新建一个新的.h头文件,用其替换掉copy file中配置的默认.h头文件
添加Public.h头文件

在public.h中引入可以公开的头文件
#import "StaticTest1.h"
在配置文件Build Phases ->Copy File中修改公共接口文件 (Xcode5以前是Copy Header)

Command+R执行工程即可得到对应的.h和.a文件

如何使用workspace管理静态库源码和原生app代码将在下一篇讨论
ios中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)的更多相关文章
- 使用Xcode 5创建Cocoa Touch Static Library(静态库)
转自:http://blog.csdn.net/jymn_chen/article/details/21036035 首先科普一下静态库的相关知识: 程序编译一般需经预处理.编译.汇编和链接几个步骤. ...
- iOS在Cocoa Touch Static Library使用CocoaPods
1.在XCode中新建静态库工程:DDLogLib. 2.添加对外暴露接口的头文件DDLogLibHeader.h 3.命令行进入DDLogLib目录,运行pod init,并修改Podfile 4. ...
- xcode 4 制作通用静态库
参考:http://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者F ...
- QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData
SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...
- 6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作
一 QT的内存管理 1 QT中的内存管理是QObject来管理的 2 QT中的内存管理没有cocos2dx中的引用计数 3 组件能够指定父对象 QTimer *timer = QTime ...
- iOS中归档对象的创建,数据写入与读取
归档(archiving)是指另一种形式的序列化,但它是任何对象都可以实现的更常规的模型.专门编写用于保存数据的任何模型对象都应该支持归档.比属性列表多了很良好的伸缩性,因为无论添加多少对象,将这些对 ...
- ios中pch文件的创建与配置
PCH文件(Precompile Prefix Header File),也就是预编译头文件,其作用就是,方便你一次性导入在多个文件中同时用到的头文件.宏或者URL地址等(全局使用),可以有效的帮你 ...
- iOS 合并.a文件,制作通用静态库
lipo -create SQY/iOS/iphoneos/libGamePlusAPI.a SQY/iOS/iphonesimulator/libGamePlusAPI.a - output ...
- iOS中偏好设置的创建,数据写入与读取
NSUserDefaults与NSDictinary? 应用通过NSUserDefaults用键值对的方式来读取和保存偏好设置数据,与通过键从NSDictionary对象中获取数据一样,不同之处在于N ...
随机推荐
- Irrlicht 3D Engine 笔记系列 之 教程6- 2D Graphics
作者:i_dovelemon 日期:2015 / 7 / 1 来源: CSDN 主题:2D Graphics, Irrlicht 教程翻译 本篇教程将要向大家展示怎样使用Irrlicht引擎绘制2D图 ...
- ACM:动态规划,01背包问题
题目: 有n件物品和一个容量为C的背包.(每种物品均仅仅有一件)第i件物品的体积是v[i],重量是w[i].选一些物品装到这个背包中,使得背包内物品在整体积不超过C的前提下重量尽量大. 解法:两种思路 ...
- SVN管理工具的使用(实习第9天)
最后就是我进行提交代码的时候要记得写注释,自己写了那些方法要标明,或者自己修改了哪些功能也要表明.不然我会被骂的. 2>代码冲突解决的问题: 服务器上的代码跟自己代码改动的地方不同 这种情况比较 ...
- cpc,tank
先保存一段错误的代码 #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- bzoj1800: [Ahoi2009]fly 飞行棋(乱搞)
1800: [Ahoi2009]fly 飞行棋 题目:传送门 题解: 大水题,早上签个到 没什么好说的...搞个前缀和,算个周长... 周长为奇数肯定误解啊废话QWQ 那么看到n<=20,还不暴 ...
- react --- React中state和props分别是什么?
props React的核心思想就是组件化思想,页面会被切分成一些独立的.可复用的组件. 组件从概念上看就是一个函数,可以接受一个参数作为输入值,这个参数就是props,所以可以把props理解为从外 ...
- SparkCore基础(一)
* SparkCore基础(一) 学习Spark,首先要熟悉Scala,当然你说你会Python或者Java能不能玩Spark?能!但是不推荐,首推Scala,因为Scala非常便捷,而且Scala有 ...
- go语言中在变量后加上接口是什么意思?
如题刚刚开始学习go 语言有些不懂: a.Data = make(map[string]interface{}) 我认为它是在申请a.Data map为字符串类型的空间,那么它后面接一个空的inter ...
- ES6中的let、contst
一 let 1.let 局部变量 不会变量提升,在运用时候要先声明在调用,var 全局变量 会产生变量提升: 2.在块级作用域中纯在let const,他所生命的变量就绑定在这个区域,未经过声明调用会 ...
- python shutil 模块 的剪切文件函数 shutil.movemove(src, dst),换用 os.rename(sourceFile, targetFile)
Google 一搜python 剪切文件,出来shutil 这模块,网上很多人也跟疯说shutil.move(src, dst)就是用来剪切文件的,结果一试,剪切毛线,文件都复制到另一个文件夹了,源文 ...