建立使用 framework和 a靜態庫

2021-09-11 14:02:53 字數 1775 閱讀 2893

###簡介 在開發中.framework靜態庫還是比較常見的,比如:sdk,公司間的**合作等。我們可以把一些不願意讓別人見到的**,用靜態庫的方式把它隱藏起來,只留下.**件顯示方法供程式設計人員使用。而.a檔案出了靜態庫本身外,還需要引入.**件,而.framework就不需要如此,由於.framework的方便性所以一般情況下我們見到的較多。 ####區別

###.a靜態庫的建立

新建乙個專案,如上圖所示,左側的選項可以新建.framework靜態庫,而右側的則是建立.a的靜態庫。

這裡我們可以刪除自帶的.h和.m檔案換成我們要打包的內容。這裡為了測試,簡單的在檔案中寫乙個方法。當我們靜態庫建立成功之後,引入這個檔案中會列印這句話。

通過上述操作我們已經準備好了要打包的檔案,並把想要暴露的檔案新增完畢,下面我們要進行打包前的設定。 設定編譯模式,開啟xcode選單product--->scheme--->edit scheme,改為release模式,因為最終打包是要用release模式。

編譯機器的選擇,如上圖,如果我們選擇的是no,那麼則會適配所有的機型,當然了編譯後的包的大小會有點大,如果我們選擇yes,那麼編譯的包只會適應當前機型以及版本低的機型,當我們用高於這個手機型號的機型時可能不能用。這裡就看自己需要了。 下面就需要我們進行編譯靜態庫了,注意的是我們要在真機環境和模擬器環境各編譯一次。然後得到兩個靜態的二進位制檔案。下圖為真機環境舉例:

編譯後我們會得到真機和模擬器兩個靜態檔案,下面我們要開啟終端去合併他。合併的命令為: lipo -create 靜態檔案1路徑 靜態檔案2路徑 -output 輸出最終檔案的目的路徑

合併成功那麼現在我們就去試試吧 ,首先我們新建乙個叫做test的測試工程,把我們的.a的靜態檔案加進去同時把我們需要暴露的.**件加進去,如下圖:

通過列印結果我們可以看到,走了我們自己寫的方法。靜態.a檔案打包成功。 ###.framework靜態庫的建立 下面我們來建立乙個常見的.framework靜態庫。

如上圖所示,我們在新建的專案中加入一組.h和.m檔案,檔案中寫了乙個簡單的方法,並把想要暴露的.**件加到public的位置,此時的靜態庫還是紅的的,表示並沒有建立。 和.a檔案一樣設定編譯模式,開啟xcode選單product--->scheme--->edit scheme,改為release模式,因為最終打包是要用release模式。同時我們也可設定他所使用的版本。通過general裡的deployment info選項進行設定。

然後修改生產的mach-o格式。 編譯機器的設定方法與.a設定相同,根據自己的需求進行設定。 完成上述步驟後,我們一如.a的設定一樣在真機和模擬器環境下分別編譯。

編譯結束後我們可以看到framework的顏色已經變為黑色,這是我們 右鍵show in finder這次合併的是目錄下的箭頭所示的檔案。合併方法與.a檔案相同 lipo -create 靜態檔案1路徑 靜態檔案2路徑 -output 輸出最終檔案的目的路徑

這樣我們在桌面上生成了乙個檔案,現在我們進行我們的最後一步,用這個檔案與上圖中.framework檔案下的 模擬器或者真機下對應的這個檔案替換下來。如上圖中紅色箭頭的檔案,把箭頭所示檔案替換下來。 這樣我們替換後的檔案找到,他就是我們要的. framework靜態檔案。 下面我們去試試我們新生成的靜態庫

由上圖可以看到,我們把生成的靜態庫匯入我們的測試工程中,列印出結果,可見我們的生成是正確的。 注意事項:

###補充內容: bundle檔案 在專案中另乙個常見的額就是bundle檔案了,主要用來進行資源的管理,用以存放xib檔案或者等資源,但是需要注意的是bundle檔案是是靜態的,不進行編譯的資源檔案。所以,要使用bundle中的資源,就需要找到相應的資源路徑。

使用Xcode建立framework的一些使用筆記

最近由於業務的拓展,準備開始開發mac上產品,之前為ios版本的產品設計過一套framework 建立你自己的framework 所以現在需要原先ios上使用到的核心sdk進行公升級移植。於是開始對原先 繁瑣的重構和移植工作,深切感受到乙個良好的設計對乙個專案的重要性。一 平台無關性 對於一些核心的...

(使用xmpp)靜態framework的使用

上乙份部落格已經說過動態framework使用,除了需要link,還需要工程配置的general配置項中embeded binary library將動態framework加入,而靜態庫使用與動態庫有所區別 由於xmpp庫中含有類別 category 所以需要修改編譯選項other linker f...

IOS 靜態庫和Framework區別

ios靜態庫和framework區別 一 什麼是庫?庫是共享程式 的方式,一般分為靜態庫和動態庫。二 靜態庫與動態庫的區別?靜態庫 鏈結時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。動態庫 鏈結時不複製,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只載入一次,多個程式共用,節省記憶體...