動態(tài)庫制作補充

繼上一章后Swift Project制作靜態(tài)Framework ,有兩點需要闡明。

  1. 動態(tài)庫到底能不能用,因為很早前動態(tài)庫導入app不能過審。
  2. 如何可以讓Demo和庫聯(lián)動,最好能斷點調(diào)試bug

iOS的動態(tài)庫(被閹割的動態(tài)庫)

iOS平臺上規(guī)定不允許存在動態(tài)庫,并且所有的 IPA 都需要經(jīng)過Apple的私鑰加密后才能用,基本你用了動態(tài)庫也會因為簽名不對無法加載,(越獄和非 APP store 除外)。于是就把開發(fā)者自己開發(fā)動態(tài)庫成為了天方夜譚。 iOS8之前因為 iOS 應用都是運行在沙盒當中,不同的程序之間不能共享代碼,并且iOS是單進程的,也就是某一時刻只有一個進程在運行,那么你寫個共享庫,給誰共享呢。同時動態(tài)下載代碼又是被蘋果明令禁止的,沒辦法發(fā)揮出動態(tài)庫的優(yōu)勢,綜上所以上動態(tài)庫也就沒有存在的必要了。

但是后來iOS8之后,iOS有了App Extesion特性,而且Swift也誕生了。由于iOS主App需要和Extension共享代碼,Swift語言機制也需要動態(tài)庫,于是蘋果后來提出了Embedded Framework,這種動態(tài)庫允許APP和APP Extension共享代碼,但是這份動態(tài)庫的生命被限定在一個APP進程內(nèi)。簡單點可以理解為被閹割的動態(tài)庫。 但是這種動態(tài)庫(Embedded Framework) 和系統(tǒng)的 UIKit.Framework 還是有很大區(qū)別,傳統(tǒng)的動態(tài)庫是給多個進程用的,而這里的動態(tài)庫(Embedded Framework)是給單個進程里面多個可執(zhí)行文件用的。系統(tǒng)的 Framework 不需要拷貝到目標程序中,我們自己做出來的 動態(tài)庫(Embedded Framework) 哪怕是動態(tài)的,最后也還是要拷貝到 App 中(App 和 Extension 的 Bundle 是共享的)。所以蘋果沒有直接把這種Embedded Framework稱作動態(tài)庫而是叫Embedded Framework。

上面提到跟Swift也有原因,在Swift的項目中如果要在項目中使用外部的代碼,可選的方式只有兩種,一種是把代碼拷貝到工程中,另一種是用動態(tài) Framework。使用靜態(tài)庫是不支持的。這個問題的根本原因主要是 Swift 的運行庫沒有被包含在 iOS 系統(tǒng)中,而是會打包進 App 中(這也是造成 Swift App 體積大的原因),靜態(tài)庫會導致最終的目標程序中包含重復的運行庫。

開始制作SDK(以動態(tài)庫為例)

  1. 將最開始創(chuàng)建的Framework 和 Demo App 放到同一個目錄下,并且創(chuàng)建平行級別的WorkSpace
    ,這里WorkSpace的名字需與Demo App相同。如下


    工程結構
  2. 打開WorkSpace,將工程和Framework都導入。注意: 兩者為同級關系


    image.png

    統(tǒng)計關系
  3. 把Framework添加到App工程中


    導入Framework
  4. 運行即可,在Framework打斷點也可以進行調(diào)試。這里也就實現(xiàn)了斷點調(diào)試。

  5. 如果要導出Framework給別人使用,需要Edit Scheme,將Debug變?yōu)镽elease


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

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容