1. 程式人生 > >.a靜態庫的打包(包括打包的檔案中用到了一些別人的三方庫和分類的處理)

.a靜態庫的打包(包括打包的檔案中用到了一些別人的三方庫和分類的處理)

 

一、概念篇

什麼是庫? 庫是程式程式碼的集合,是共享程式程式碼的一種方式 根據原始碼的公開情況,庫可以分為2種類型 開源庫 公開原始碼,能看到具體實現 比如SDWebImage、AFNetworking 閉源庫 不公開原始碼,是經過編譯後的二進位制檔案,看不到具體實現 主要分為:靜態庫、動態庫 靜態庫和動態庫的存在形式 靜態庫:.a 和.framework 動態庫:.dylib 和.framework 靜態庫和動態庫在使用上的區別 靜態庫:連結時,靜態庫會被完整地複製到可執行檔案中,被多次使用就有多份冗餘拷貝

動態庫:連結時不復制,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只加載一次,多個程式共用,節省記憶體

需要注意的是:

動態庫,不能被上傳到AppStore(逼格太高 大蘋果可是不允許的哈  哈哈)

總結:個人覺得 .a靜態庫的 本身就是一個對程式碼或者一個功能的封裝,只不過是不開源的。

二、製作流程(如下均是Xcode7展示的操作)

新建一個純淨的專案-> 選擇 “Cocoa Touch Static Library”

輸入想要打包的靜態庫的名稱

把庫需要包含的原始碼拖入此專案中 

此處有一些注意點見下圖

選擇需要暴露出來的.h檔案,.m檔案會自動編譯到.a檔案中



分別選擇模擬器和真機(並不需要真正的手機),依然Command+B ,模擬器和真機環境下用的.a檔案是分開的

這一步,如果看到.a檔案由紅變黑說明編譯等都沒有問題  已經完成一半了

右擊“ShowInFinder”,檢視製作好的.a檔案

n
Debug-iphoneos資料夾裡面的東西是用在真機上的 Debug-iphonesimulator資料夾裡面的東西是用在模擬器上的
如果想讓一個.a檔案能同時用在真機和模擬器上,需要進行合併

在終端輸入指令
首先檔案切換到 Products資料夾  

然後輸入

lipo -createDebug-iphoneos/libXXX.a Debug-iphonesimulator/libXXX.a  -output  libXXX.a

藍色部分是固定指令 紅色、紫色是真機和模擬器.a檔案的路徑 綠色是所合成.a檔案的路徑 .a檔案的體積(一般情況下) 真機用的.a> 模擬器用的.a

所合成.a== 真機用的.a+ 模擬器用的.a

使用.a 靜態庫

現在.a靜態庫和標頭檔案都有了就可以把它們拖到專案中使用了

使用時直接#import"xxx.h"就可以直接匯入呼叫使用了

至此,靜態庫算是製作完了,但是有以下幾點需要說明

無論是 .a 靜態庫還是.framework 靜態庫,最終需要的都是: 二進位制檔案 +.h+ 其它資原始檔

倘若自己所需要打包的靜態庫程式碼中用到了別人的三方框架比如“AFNetworking”等,此時只需要把用到的三方庫檔案的標頭檔案在選擇暴露標頭檔案時都給暴露出去,然後匯入的專案中如果也用到了相同的三方框架,此時此專案就不需要拖入這個三方庫程式碼直接,需要使用時直接把你所提供的.a靜態庫和標頭檔案匯入 然後#import你所提供的相關標頭檔案即可使用(注意:一定是以你的打包的為準)比如 直接#import"xxx.h"

若是自己的靜態庫原始碼中使用了分類  比如NSString+xxxx,此時一定需要更改下專案的環境配置
新增一個“-ObjC”(注意"O""C"是大寫的)