一,靜態庫和動態庫的區別在這里就不說了,個人感覺如果是自己封裝提供別人下載的話應該是靜態庫比較方便.(本文就是創建靜態庫及使用)
二,使用Xcode創建靜態庫
1,首先創建靜態庫工程
xcode ---->選擇IOS下的Framework&Library ----->選擇Cocoa Touch Static Library (記得這里確定是IOS下的,不是watchOS下的,小編第一次就是不注意創建錯.)
2,創建完成之后,我們可以看一下界面順便再.h和.m里面分別創建方法和輸出信息
.h界面 創建方法
1 #import <Foundation/Foundation.h> 2 3 @interface logNews : NSObject 4 -(void)logNewsA; 5 +(void)logNewsB; 6 @end
.m界面實現方法
1 #import "logNews.h" 2 3 @implementation logNews 4 -(void)logNewsA{ 5 NSLog(@"--------A"); 6 } 7 8 +(void)logNewsB{ 9 NSLog(@"--------B"); 10 } 11 12 @end
3,點擊 Build Phases -Copy Files 點擊左下角的+號,會彈出項目中所有的文件.h和.m文件,這里的意思是要你添加你完成封裝之后讓別人能夠看到的文件,這里我只選擇 .h文件,選中文件之后點擊add進行添加 如圖(我添加的是logNews.h)
注:我在一篇帖子中看到過,如果項目中使用類目的話,會碰到鏈接問題,解決的辦法就是需要同時在生成靜態庫的工程和使用靜態庫的工程中使用“-all_load”編譯選項,即在對應target的"Build Settings"中的“Other Linker Flags”選項添加“-all_load”,使用靜態庫的工程中是一定要加該編譯選項的!至於生成靜態庫的工程中加不加沒有試過,不過建議還是加上該編譯選項.下面是原帖子地址:
(文/Shelin(簡書作者)
原文鏈接:http://www.jianshu.com/p/656ba8094d1d)
4,選擇Edit Scheme 將BuildConfiguration下的Debug更改為Release之后close
5,之后進行模擬器編譯和真機編譯,你會發現左側的liblogNews.a文件由原來的紅色變為現在的黑色
6,將模擬器.a文件和設備真機.a文件合成一個文件
首先找到對應項目的模擬器.a文件和真機.a文件
(1)打開終端在終端輸入 open /Users/smile/Library/Developer/Xcode/DerivedData/ (smile 是自己的電腦名字)在打開的文件夾中找到自己對應的文件,logNews-hiakdvdtfjbhsjanpxkvmfmavmcb ------->Build ------>Products 在里面我們看到兩個文件夾,這里面就是模擬器.a文件和真機.a問價(這里我就不截圖了)
(2)在終端輸入 lipo -create 模擬器.a文件的路徑 真機.a文件的路徑 -output 合並后的保存路徑 我們就得到合並之后的.a文件
三,靜態庫的使用
1,新建文件夾命名為logNewsSDK,把我們獲得的.a文件和我們需要顯示的.h文件拷貝進去,就行了
2,把logNewsSDK導入新建的項目中.
(1),首先導入.h文件
(2)創建對象,創建對象之后,調用加好方法和減號方法
1 logNews * p = [[logNews alloc]init]; 2 [p printA]; 3 [Print printB];
3,最后輸出結果