创建静态库可能出于以下几个理由:

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)的更多相关文章

  1. 使用Xcode 5创建Cocoa Touch Static Library(静态库)

    转自:http://blog.csdn.net/jymn_chen/article/details/21036035 首先科普一下静态库的相关知识: 程序编译一般需经预处理.编译.汇编和链接几个步骤. ...

  2. iOS在Cocoa Touch Static Library使用CocoaPods

    1.在XCode中新建静态库工程:DDLogLib. 2.添加对外暴露接口的头文件DDLogLibHeader.h 3.命令行进入DDLogLib目录,运行pod init,并修改Podfile 4. ...

  3. xcode 4 制作通用静态库

    参考:http://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者F ...

  4. QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData

    SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...

  5. 6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作

     一  QT的内存管理 1  QT中的内存管理是QObject来管理的 2  QT中的内存管理没有cocos2dx中的引用计数 3  组件能够指定父对象 QTimer *timer = QTime ...

  6. iOS中归档对象的创建,数据写入与读取

    归档(archiving)是指另一种形式的序列化,但它是任何对象都可以实现的更常规的模型.专门编写用于保存数据的任何模型对象都应该支持归档.比属性列表多了很良好的伸缩性,因为无论添加多少对象,将这些对 ...

  7. ios中pch文件的创建与配置

     PCH文件(Precompile Prefix Header File),也就是预编译头文件,其作用就是,方便你一次性导入在多个文件中同时用到的头文件.宏或者URL地址等(全局使用),可以有效的帮你 ...

  8. iOS 合并.a文件,制作通用静态库

    lipo  -create  SQY/iOS/iphoneos/libGamePlusAPI.a  SQY/iOS/iphonesimulator/libGamePlusAPI.a  - output ...

  9. iOS中偏好设置的创建,数据写入与读取

    NSUserDefaults与NSDictinary? 应用通过NSUserDefaults用键值对的方式来读取和保存偏好设置数据,与通过键从NSDictionary对象中获取数据一样,不同之处在于N ...

随机推荐

  1. 对于startActivity的使用改进

    传统方式 一直以来,使用startActivity的方式就是例如以下: 比方从AActivity跳转到BActivity.那么我们是在AActivity中这样去写: Intent intent = n ...

  2. SQL Server 运行计划操作符具体解释(3)——计算标量(Compute Scalar)

    接上文:SQL Server 运行计划操作符详细解释(2)--串联(Concatenation ) 前言: 前面两篇文章介绍了关于串联(Concatenation)和断言(Assert)操作符,本文介 ...

  3. UVA 1415 - Gauss Prime(数论,高斯素数拓展)

    UVA 1415 - Gauss Prime 题目链接 题意:给定a + bi,推断是否是高斯素数,i = sqrt(-2). 思路:普通的高斯素数i = sqrt(-1),推断方法为: 1.假设a或 ...

  4. blog_html

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html> <html b:v ...

  5. poj--1789--Truck History(prim)

    Truck History Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit ...

  6. Mysql 主从主主复制总结(详细)

    环境:Centos 6.9,Mysql 8.0 配置准备:1.为Centos配置好网络,使用远程工具连接. 2.安装mysql,途径不限.mysql8.0和5.7区别不大,8.0在配置主从的时候默认开 ...

  7. 一次AIX LVM PV重复PVID故障处理记录

    故障背景:客户需要把AIX 5.3.10上的一些VG做两台存储之间的LVM级别的Mirror,存储使用的是两台EMC DMX3,但是由于两套SAN存储之前是使用EMC的软件做存储级别的Mirror,所 ...

  8. iPad popView封装

    仿照UITableView的UITableViewDataSource 协义 1.代理.让代理帮我们类完毕一些方法 2.完毕当前类不能完毕的事情还有传值等功能 实现方法 // 1. 声明一个协议 // ...

  9. Linux系统编程——进程间通信:信号中断处理

    什么是信号? 信号是 Linux 进程间通信的最古老的方式.信号是url=474nN303T2Oe2ehYZjkrggeXCaJPDSrmM5Unoh4TTuty4wSgS0nl4-vl43AGMFb ...

  10. openVswitch(OVS)源码分析之工作流程(哈希桶结构体的解释)

    这篇blog是专门解决前篇openVswitch(OVS)源码分析之工作流程(哈希桶结构体的疑惑)中提到的哈希桶结构flex_array结构体成员变量含义的问题. 引用下前篇blog中分析讨论得到的f ...