由于在目前的公司從事iOS SDK開發(fā)和維護工作器贩,所以打算用這篇文章回顧總結(jié)下相關(guān)方面的知識以及經(jīng)驗分享朋截。
目前公司主要有很多年視頻和直播類項目經(jīng)驗的積累部服。我的工作也就是維護這些視頻和直播類的底層庫,一起統(tǒng)一封裝成靜態(tài)庫廓八,然后提交給上層iOS端app開發(fā)人員直接進行調(diào)用赵抢。
我們公司主要的底層庫包括播放庫、RTMP庫昌讲、下載庫(p2p)减噪、推流采集庫、FFMpeg庫以及protal查詢庫醋闭。
靜態(tài)庫與動態(tài)庫的區(qū)別
靜態(tài)庫:以.a 和 .framework為文件后綴名朝卒。
動態(tài)庫:以.tbd(之前叫.dylib) 和 .framework 為文件后綴名(系統(tǒng)直接提供給我們的framework都是動態(tài)庫)
靜態(tài)庫:鏈接時會被完整的復(fù)制到可執(zhí)行文件中,被多次使用就有多份拷貝抗斤。
動態(tài)庫:鏈接時不復(fù)制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存龙宏,系統(tǒng)只加載一次伤疙,多個程序共用(如系統(tǒng)的UIKit.framework等),節(jié)省內(nèi)存徒像。
我們公司使用的是使用靜態(tài)庫的方式,提供給上層.a靜態(tài)庫和.h頭文件灭衷。使用shell腳本進行快速統(tǒng)一打包,持續(xù)集成翔曲。
由于不同項目可能需要的底層庫可能有所不同,所以SDK開了不同的分支以應(yīng)對不同的項目部默。并在shell腳本中根本項目的不同來自動選擇不同的依賴進行打包。每次打包都會打上SDK的版本號纷闺。
由于為了方便上層app端的開發(fā),還在一般在開發(fā)過程中將模擬器的靜態(tài)庫和真機的靜態(tài)庫進行合并然后交給他們使用犁功。并配以單獨的release真機包以備發(fā)布時用婚夫。