iOS的Framework靜態庫

weixin_34402408發表於2018-05-31

靜態庫VS動態庫

  • 靜態庫不需要簽名,動態庫需要簽名。
1642469-81b7c0ddc55ecf63.jpg
你們的老婆叫你們點贊

製作混編靜態庫

  • 庫內部Swift呼叫OC的標頭檔案
    Swift呼叫OC時,庫裡面不能使用bride橋接檔案,需要將OC標頭檔案加入到工程標頭檔案中XFramework.h

  • 庫內部OC呼叫Swift的標頭檔案
    所有庫內部編譯的Swift標頭檔案都在<XFramework/XFramework-Swift.h>裡面,OC呼叫時匯入標頭檔案<XFramework/XFramework-Swift.h>

    #import <XFramework/XFramework-Swift.h>
    

    ⚠️Swift檔案類的許可權可以使用openpublic,擴充套件的許可權使用public

    ⚠️Swift4.0的方法如果要在OC使用,必須手動新增@objc才能編譯到<XFramework/XFramework-Swift.h>標頭檔案中。最好對所有的Swift介面都加上@objc public

  • 對外提供訪問檔案:

    在庫工程的Build PhasesHeaders裡面管理標頭檔案。

    供外部訪問的OC檔案加入到Public中。

    Swift檔案建議都加入到Private中。Swift檔案加入到Public後會對外開放原始碼。

新增庫:

庫可以直接使用.framework或者子工程新增。

  • 使用.framework

  • 使用子工程

呼叫庫檔案:

  • 呼叫庫的OC檔案:

    OC標頭檔案一般都在XFramework.h中:

    #import <XFramework/XFramework.h>
    

    Swift標頭檔案一般都在<XFramework/XFramework-Swift.h>中:

    #import <XFramework/XFramework-Swift.h>
    
  • 呼叫庫的Swift檔案:

    有兩種方式都可以。

    1. 一種是在本地bridge中新增標頭檔案,另一種方式是。

      #import <XFramework/XFramework.h>
      #import <XFramework/XFramework-Swift.h>
      
    2. 在Swift中匯入Framework

      import XFramework
      

擴充套件問題

需要在Targets的build setting選項下有Other linker flags的設定加上-Objc或者-all_load或者-force_load

-all_load表示對所有庫加上鍊接庫。

-force_load只對指定庫加。

-force_load $(SRCROOT)/XFramework.framework/XFramework

Demo地址

上傳中...

相關文章