iOS靜態(tài)庫與動態(tài)庫的區(qū)別、制作以及使用

如果我們有些功能要給別人用,但是又不想公開源代碼,比如百度地圖等,這時候我們就可以打包成庫供別人使用。

庫分靜態(tài)庫和動態(tài)庫兩種:

靜態(tài)庫:以.a 和 .framework為文件后綴名。
動態(tài)庫:以.tbd(之前叫.dylib) 和 .framework 為文件后綴名。

靜態(tài)庫與動態(tài)庫的區(qū)別

靜態(tài)庫:鏈接時會被完整的復制到可執(zhí)行文件中,被多次使用就有多份拷貝。
動態(tài)庫:鏈接時不復制,程序運行時由系統(tǒng)動態(tài)加載到內存,系統(tǒng)只加載一次,多個程序共用(如系統(tǒng)的UIKit.framework等),節(jié)省內存。

蘋果規(guī)定不讓使用自己的動態(tài)庫,否則審核就無法通過。
但是現(xiàn)實中集成了動態(tài)庫也能上線審核通過,可能我比較幸運。

我們先來看一下iOS設備有哪些架構,因為下面要用到:

模擬器:
iPhone4s-iPnone5:i386
iPhone5s-iPhone7 Plus:x86_64

真機:
iPhone3gs-iPhone4s:armv7
iPhone5-iPhone5c:armv7s
iPhone5s-iPhone7 Plus:arm64

支持armv7的靜態(tài)庫可以在armv7s上正常運行。

一、 .a靜態(tài)庫的制作

  • 1、先創(chuàng)建一個新的Xcode工程TestStaticLibrary,需要選擇Cocoa Touch Static Library這個模板:
    選擇Cocoa Touch Static Library
  • 2、創(chuàng)建完成后刪除TestStaticLibrary.h和TestStaticLibrary.m兩個沒有用的文件

  • 3、新建文件或者從其它項目中拖入想要打包的文件,這里拖入SmartCLLocationManager.h和SmartCLLocationManager.m兩個文件
    SmartCLLocationManager.h
SmartCLLocationManager.m
  • 3、選擇添加公開頭文件
    為了讓使用者知道有哪些方法可以用,我們需要公開頭文件,這里我們公開SmartCLLocationManager.h:


    添加公開頭文件.gif
  • 4、修改配置
    我們需要把 Build Active Architecture Only 修改為NO,否則生成的靜態(tài)庫就只支持當前選擇設備的架構。

    修改配置

  • 5、然后編譯
    我們在debugRelease下分別選擇 Generic iOS Device任意一個模擬器 各編譯一次,編譯完后我們會看到工程中Products文件夾下的libTestStaticLibrary.a由紅色變成了黑色,然后 show in finder,看看生成的文件:

    編譯生成靜態(tài)庫

我們看到它為真機和模擬器都生成了debugRelease版本的.a靜態(tài)庫。里面都包含我們選擇公開的頭文件。

我們來看看靜態(tài)庫支持的框架:命令為lipo -info 靜態(tài)庫名字

查看靜態(tài)庫支持的框架

我們看到,Debug-iphoneos里面的靜態(tài)庫支持的架構有armv7arm64所以它只能用于真機,在模擬器上會報錯。Debug-iphonesimulator里面的靜態(tài)庫支持的架構有i386x86_64,所以它只能用于模擬器,在真機上會報錯。

如果想要讓模擬器和真機通用一個靜態(tài)庫,我們可以使用終端命令來實現(xiàn)。命令格式:lipo -create 第一個.a文件的絕對路徑 第二個.a文件的絕對路徑 -output 最終的.a文件路徑:

未完待續(xù)。

首推:record,就是上傳時候有點慢。以下鏈接拿好不寫。親測好用。

鏈接:Record screencasts fast & free! with GIF Support!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容