iOS快速生成 靜態(tài)庫

開發(fā)中,一些核心技術(shù)或者常用框架,出于安全性和穩(wěn)定性的考慮,不想被外界知道,所以會把核心代碼打包成靜態(tài)庫,只暴露頭文件.比如微信 支付寶 友盟 百度地圖等等,他們的SDK中有很多的framework 和.a文件,相信使用過的盆友都有印象.
在我初出茅廬的時候著實覺得那些后綴名為“.frameworke”、“.a”、“.dylib”的文件很神秘,很高冷,但對這個“庫”究竟是什么“鬼”,一直都是云里霧里。

區(qū)別

 靜態(tài)庫:.a 和 .framework
 動態(tài)庫:.dylib 和 .framework
靜態(tài)庫:鏈接時,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多份冗余拷貝
動態(tài)庫:鏈接時不復(fù)制,程序運(yùn)行時由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個程序共用,節(jié)省內(nèi)存

庫分開源庫和閉源庫

開源庫
源代碼是公開的,你可以看到具體實現(xiàn)。比如GitHub上比較出名的第三方框架AFNetworking、SDWebImage。
閉源庫
不公開源代碼,只公開調(diào)用的接口,看不到具體的實現(xiàn),是一個編譯后的二進(jìn)制文件。這種常見于一些公司的SDK包,比如高德地圖SDK、環(huán)信即時通訊SDK,微信SDK,百度地圖SDK等等。

但是蘋果爸爸比較兇悍在iOS8之前不讓開發(fā)者使用動態(tài)庫了,如果你的項目中使用了動態(tài)庫 ,蘋果爸爸會很無情的拒絕你提交的app.但是iOS8以后可以支持“Embed Frameworks”功能

制作打包靜態(tài)庫

制作打包靜態(tài)庫一般有2種方式,打包成.a 和打包成.framework

framework打包

framework打包方式和.a打包很相似我就簡單講一下,為了簡單我們就不新創(chuàng)建工程了.

  • 1 添加framework
    方式和添加stadic 類似 只是選擇的模式不同,這個framework 我命名為WWFirst
7932DB14-F621-42EB-B101-20D232747BF6.png
F174F99C-EEFA-4AEA-BD3C-B7779A1BF0F0.png
  • 2 添加測試類和方法
    和.a 不同的是這個framework只生成了頭文件 沒有.m文件 ,測試需要我們你自己添加類FrameWorkTestTool(自定義)
    聲明了一個公開方法
+(void)testLog
{
    NSLog(@"靜態(tài)庫測試");
}
DB92EE80-F7B7-4485-B637-F17EF50824DF.png
  • 3 設(shè)置打包的是靜態(tài)庫。因為動態(tài)庫也可以是以framework形式存在,所以需要設(shè)置,否則默認(rèn)打出來的是動態(tài)庫.
B9C769EC-EB63-4374-8633-305D8ABEF32E.png
  • 4 編譯打包,同.a編譯后products下文件(WWFirst)會由紅色變黑色
    注意target的切換 編譯時target應(yīng)該是WWFirst
ABC1980C-98B7-40AF-AC5F-B9B125C361A7.png
36475C94-06E4-4516-B6DA-5BFC713CC498.png
  • 5 測試運(yùn)行
    切換target
5B8AD0F4-6D6B-4C32-B161-C69DB61F2344.png

導(dǎo)入頭文件
測試運(yùn)行

25ECBACC-C446-442C-AB12-E053894A7CE4.png
.a打包
    1. 創(chuàng)建一個工程,名字簡單命名我的命名為TestA,添加靜態(tài)庫AStadic(自己命名)
D87B253A-DACE-4931-8565-B540A2A10177.png
5542EA5B-B90D-4278-8C15-AE8323BB81CC.png
4FDCB3DC-14D1-47CB-A632-FD23BEC30268.png
  • 2.在生成的AStadic中添加測試代碼
5C84D2F2-1972-4D9E-95AD-0B06F852B574.png
+(void)testA
{
    NSLog(@"我遇見誰會有怎么樣的對白");
}
  • 3.編譯生成.a
    選擇AStadic 按住command+ B,編譯
屏幕快照 2017-10-31 下午3.25.02.png

編譯通過后 我們在左邊Products文件夾下可以看到libAStadic 會由火紅色變黑色,圖中l(wèi)ibBStadic是為了對比的 未編譯仍是紅色
另外我們選中l(wèi)ibAStadic 右鍵選擇show in Finder,會看到下圖


2A8DFEAB-ED70-4603-9A9A-3A034745889D.png
    1. 運(yùn)行測試
      切換編譯運(yùn)行的target
屏幕快照 2017-10-31 下午3.36.42.png

導(dǎo)入頭文件

import "AStadic.h"

調(diào)用 [AStadic testA];
如果編譯同過,需要把libAStadic.a添加到進(jìn)去

92199CC2-6FAF-4F02-B63A-834F8DCCD146.png

運(yùn)行結(jié)果

21CEFB6C-6F93-410E-B320-341CF4C2B71F.png

總結(jié)說明

靜態(tài)庫版本有四種,編譯時選擇切換就可以打包成不同的靜態(tài)庫

真機(jī)-Debug版本
真機(jī)-Release版本
模擬器-Debug版本
模擬器-Release版本

framework是現(xiàn)在比較流行的打包方式,用“Cocoa Touch Framework”創(chuàng)建的插件可以包含資源文件,而“Cocoa Touch Static Library”只能包含代碼.而且使用Cocoa Touch Framework也是能打包生成.a的,畢竟“Cocoa Touch Static Library”創(chuàng)建插件已經(jīng)是很老的技術(shù).所以還是推薦大家使用framework

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容