這篇主要是記錄一下 iOS 下靜態庫與動態庫的打包流程,以便之後用到時快速查閱,供本身也供你們學習記錄。同時也簡述了一下 動態庫
與 靜態庫
的區別。微信
庫是寫好的現有的,成熟的,能夠複用的代碼。本質上來講庫是一種可執行代碼的二進制形式,能夠被操做系統載入內存執行。庫有兩種:靜態庫
和 動態庫
。iphone
連接時會被完整的複製到可執行文件中,被屢次使用就有多分拷貝。以下圖,抖音和微信的可執行文件加載靜態庫時,每一個可執行文件連接時都要加載這份靜態庫。學習
系統的動態庫與咱們本身打包的動態庫還不大同樣,先來看一下系統的動態庫。測試
系統動態庫: 連接時不復制,程序運行時由系統動態加載到內存,系統只加載一次,多個程序共用,節省內存。 例以下圖:抖音和微信的可執行文件加載動態庫時,內存中只有一份動態庫,不用加載到可執行文件。ui
本身打包的動態庫: 本身打包的動態庫,則是在應用程序裏的,可是與靜態庫不一樣,它不在可執行文件中。 操作系統
咱們在 iOS 下能建立的靜態庫分兩種,分爲 .a
和 .framework
兩種。code
首先建立一個工程,選擇爲 Static Library
類型。 cdn
而後咱們在 Products 下就能夠看到一個 .a 文件,可是如今它仍是不存在的,須要咱們 command+B
編譯一下,就能夠找到它了,因爲咱們是在模擬器下編譯的,因此它生成在 「Debug-iphonesimulator」 文件夾下。 blog
若是添加了新的 .h 文件,須要在 Phases 中把頭文件加上,此處 FanjiduoStatic.h
是建立工程時默認加進去了。 ip
(1)首先建立一個工程,選擇爲 Framework
類型。
建立好發現是 .framework
結尾了
(2)這裏要設置一下,由於默認是動態庫,要改成靜態庫。Build Settings => Mach-O Type
改成 Static Library:
首先編寫了一個 Student
類,實現了一個 study
的打印方法, 而後把 Student
類 import 進了 FanjiduoFrameworkTest.h 總的頭文件裏面。
而後在 build Phases => Headers
中把頭文件公開,從默認的 Project 中拖拽到 Public 中:
創建一個名爲 staticTestDemo 的工程引入 framwork
試一下,發現能夠成功調用 study
方法!
動態庫有不少種,目前像 .tbd .dylib
這種的動態庫咱們沒法打包,只能打包 .framework
格式的動態庫。 系統默認設置的就是動態類型,而後就是將新添加的頭文件公開,整個流程和 .framework
靜態庫同樣,這裏就再也不贅述了。
建立一個項目來測試一下這個動態庫,直接拖入工程,引入頭文件,調用動態庫中的方法,而後編譯,編譯經過沒問題。 可是當咱們運行的時候,會報錯誤 "Reason:image not found"
,以下圖:
General => Frameworks, Libraries, and Embedded Content
" 中,把
"Do Not Embed
" 改成
"Embed & Sign
" 便可,以下圖:
以上就是對靜態庫和動態庫的簡單介紹,還有打包的流程,但願在你須要的時候能夠幫到你!
轉載請備註原文出處,不得用於商業傳播——凡幾多