iOS靜態庫 framework的製作

2021-08-09 07:00:37 字數 2054 閱讀 6280

.frameworke靜態庫的製作

1、先建立乙個新的xcode工程libtest,需要選擇下面這個模板:

建立完成後是這個樣子的:

建立完成後我們可以看到,工程本身自帶乙個libtest.h檔案和乙個info.plist檔案。

2、我們建立乙個類printstring,新增乙個單純列印字串的簡單方法:

3、選擇新增公開標頭檔案

為了讓使用者知道有哪些方法可以用,我們需要公開標頭檔案,我們需要在 並且將target->build phases->headers中的project中要暴露的標頭檔案拖拽到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的配置。

乙個libtest資料夾:靜態庫裡面的類們都放在這裡面。

product資料夾下面的libtest.framework:在這裡show in finder找到編譯後生成的靜態庫。

3、開發除錯**

我們看到程式可以正常執行,並可以在動態庫裡面蹲點執行。方便我們除錯。

4、確保**沒問題後,選擇對應的target編譯生成。

IOS 靜態庫和Framework區別

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

iOS SDK 製作Framework靜態庫

前言 由於工作需要,要做乙個sdk提供給第三方開發人員,就是將我們的乙個功能模組封裝一下,不能直接給對方原始碼,將原始碼打包成二進位制檔案,這也是我們常見的使用第三方工具的打包方式。在建立sdk的時候,由於開發的時候經常要除錯,不能每次除錯就打一包,所以我們要建立在乙個工程裡,以便於我們開發和除錯。...

iOS庫 a與 framework區別

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