建立靜態庫可能出於如下幾個理由:html
1.你想將工具類代碼或者第三方插件快捷的分享給其餘人而無需拷貝大量文件。
2.你想讓一些通用代碼處於本身的掌控之下,以便於修復和升級。
3.你想將庫共享給其餘人,但不想讓他們看到你的源代碼。ios
Xcode6建立靜態庫詳解(Cocoa Touch Static Library)xcode
打開Xcode, 選擇File ----> New ---> Project。 新建工程。架構
選擇iOS ----> Framework & Library ---> Cocoa Touch Static Library。app
點擊Next。建立工程工具
工程目錄:測試
在頭文件StaticTest1.h中聲明方法ui
#import <Foundation/Foundation.h> @interface StaticTest1 : NSObject -(void)testStaticLib; @end
在StaticTest1.m中實現方法spa
#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代碼將在下一篇討論