.frameworke靜態庫的製作
1、先建立乙個新的xcode工程libtest,需要選擇下面這個模板:
建立完成後是這個樣子的:
建立完成後我們可以看到,工程本身自帶乙個libtest.h
檔案和乙個info.plist
檔案。
2、我們建立乙個類printstring
,新增乙個單純列印字串的簡單方法:
3、選擇新增公開標頭檔案
為了讓使用者知道有哪些方法可以用,我們需要公開標頭檔案,我們需要在 並且將target->build phases->headers
中的projec
t中要暴露的標頭檔案拖拽到pulic
裡面,這裡我們公開printstring.h
:
注意:暴露出來的標頭檔案中import的其他類也得新增到public中暴露出來。如果不想將import的類暴露出來,那麼在標頭檔案中用@class 然後在對應的.m檔案中再import。
4、設定支援所有架構(和.a製作一樣)
5、修改生成的mach-o
格式,因為動態庫也可以是以framework形式存在,所以需要設定,否則預設打出來的是動態庫。將target->buildsetting->mach-o type
設為static library
(預設為dynamic library
):
6、編譯
我們分別選擇generic ios device
和任意乙個模擬器
各編譯一次,編譯完後,我們會看到工程中products資料夾下的libtest.framework由紅色變成了黑色,然後show in finder
,看看生成的檔案:
我們看到它為真機和模擬器都生成了libtest.framework靜態庫。
我們來檢視靜態庫支援的框架:與上面不同,命令為lipo -info framework下的二進位制檔案名字
如果想要讓模擬器和真機通用乙個靜態庫,我們可以使用終端命令來實現。合併的命令與上面不同的是:framework靜態庫合併的不是framework,而是framework下的二進位制檔案,命令為:
lipo -create 第乙個framework下二進位制檔案的絕對路徑 第二個framework下二進位制檔案的絕對路徑 -output 最終的二進位制檔案路徑
:
然後將任何乙個framework中的二進位制檔案替換成合併後的二進位制檔案,然後把framework新增到要使用的專案中即可使用。
使用生成的.framework靜態庫
新建乙個工程,將靜態庫拖進去,匯入標頭檔案,就可以使用裡面的方法了。經過試驗,我們生成的靜態庫在真機上和模擬器上都能成功列印字串:
注意:如果靜態庫中有category類,則在使用靜態庫的專案配置中other linker flags
需要新增引數-objc
或者-all_load
。
如果建立的framework類中使用了.tbd
,則需要在實際專案中匯入.tbd
動態庫。
執行除錯靜態庫
如果你是開發靜態庫的人,你會發現上面的方法只是製作靜態庫,並沒有辦法執行看效果和除錯bug,這時候我們可以這樣:
1、新建乙個專門用來開發靜態庫的正常工程test:
2、新增乙個靜態庫的target
我們看到它生成了幾樣東西:
乙個framework的target:在這裡面修改靜態庫的配置們,例如支援的架構、要暴露的標頭檔案們和mach-o的配置。3、開發除錯**乙個libtest資料夾:靜態庫裡面的類們都放在這裡面。
product資料夾下面的libtest.framework:在這裡show in finder找到編譯後生成的靜態庫。
我們看到程式可以正常執行,並可以在動態庫裡面蹲點執行。方便我們除錯。
4、確保**沒問題後,選擇對應的target編譯生成。
IOS 靜態庫和Framework區別
ios靜態庫和framework區別 一 什麼是庫?庫是共享程式 的方式,一般分為靜態庫和動態庫。二 靜態庫與動態庫的區別?靜態庫 鏈結時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。動態庫 鏈結時不複製,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只載入一次,多個程式共用,節省記憶體...
iOS SDK 製作Framework靜態庫
前言 由於工作需要,要做乙個sdk提供給第三方開發人員,就是將我們的乙個功能模組封裝一下,不能直接給對方原始碼,將原始碼打包成二進位制檔案,這也是我們常見的使用第三方工具的打包方式。在建立sdk的時候,由於開發的時候經常要除錯,不能每次除錯就打一包,所以我們要建立在乙個工程裡,以便於我們開發和除錯。...
iOS庫 a與 framework區別
一 什麼是庫?庫是共享程式 的方式,一般分為靜態庫和動態庫。二 靜態庫與動態庫的區別?靜態庫 鏈結時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。動態庫 鏈結時不複製,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只載入一次,多個程式共用,節省記憶體。三 ios裡靜態庫形式?a和.fra...