iOS平臺靜態(tài)庫的打包和調(diào)用

在iOS平臺為了實現(xiàn)源代碼保護,可以將具體實現(xiàn)細節(jié)打包為靜態(tài)庫.a文件,同時暴露.h文件方便業(yè)務代碼調(diào)用。制作靜態(tài)庫的過程如下:

制作并打包靜態(tài)庫.a文件

  • 新建工程new -> project,選擇iOS tab,Framework & Library分類下的Cocoa Touch Static Library,如圖:
  • 下一步next,輸入靜態(tài)庫名稱MyStaticLib等信息,Language暫時選擇Objective-C。

  • 生成項目工程,會看到生成了MyStaticLib.hMyStaticLib.m兩個文件,Products目錄下的靜態(tài)庫文件libMyStaticLib尚未生成。
  • 靜態(tài)庫文件的代碼既支持Objective-CSwift,也支持原生的C語言。這里使用C作為示例語言編寫一個簡單的邏輯。將MyStaticLib.h改造為C代碼,引入標準C函數(shù)庫,并在其中定義一個方法sum,它接受兩個int類型的參數(shù),返回它們的

    #ifndef MyStaticLib_h
    #define MyStaticLib_h
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int sum(int a, int b);
    
    #endif /* MyStaticLib_h */
    
  • MyStaticLib.m文件中添加sum方法的具體實現(xiàn):

    #import "MyStaticLib.h"
    
    int sum(int a, int b) {
        return a + b;
    }
    
  • 示例代碼的邏輯很簡單,現(xiàn)在可以配置工程的一些屬性了。在Build Phases頁面,Copy Files選項中已經(jīng)自動為我們添加了暴露給外部調(diào)用的頭文件MyStaticLib.h。

切換至Build Settings頁面,注意選項Build Active Architecture Only,通常Debug選擇YES,而Release選擇NO。如果是YES,代表靜態(tài)庫只針對當前設備的架構打包,即只針對圖中設備模擬器iPhone XR的架構x86_64進行打包。

  • 運行程序,在Products目錄下生成了靜態(tài)庫文件libMyStaticLib.a,查看目錄可以發(fā)現(xiàn)同時暴露了MyStaticLib.h頭文件。至此,靜態(tài)庫.a文件已經(jīng)制作完成。

測試調(diào)用靜態(tài)庫

  • 新建一個簡單的Single View App,在工程目錄下新建文件夾3rd,并將之前生成的libMyStaticLib.a和頭文件MyStaticLib.h拖入3rd文件夾下,注意選中Copy items if needed。檢查General頁面下選項Linked Frameworkd and Libraries中是否自動識別并添加了libMyStaticLib.a。如果沒有,需要點擊+添加。

  • 切換至Build Settings頁面,找到選項Header Search Paths,輸入../3rd,并設置為recursive遞歸的方式尋找。Xcode會在配置的目錄下尋找頭文件。
  • 編輯源文件ViewController.m如下,引入頭文件MyStaticLib.h,添加測試代碼

    #import "ViewController.h"
    #import "MyStaticLib.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 測試代碼
        int result = sum(5, 10);
        NSLog(@"%d", result);
    }
    
    @end
    
  • 運行程序,可以在控制臺看到輸入了正確的值15。至此,靜態(tài)庫的調(diào)用實現(xiàn)完成。

依照不同的CPU架構打包

  • 模擬器架構為x86_64,真機架構為armv7、armv7s、arm64

  • 之前打包時,我們選擇的設備是模擬器iPhone XR,因此生成的靜態(tài)庫libMyStaticLib.a支持的架構是x86_64,真機是無法運行的。可以通過命令lipo -info libMyStaticLib.a查看:

    lipo -info libMyStaticLib.a
    

    輸出結(jié)果為libMyStaticLib.a is architecture: x86_64。

  • 要想在真機上運行,打包時必須選擇對應的設備架構。注意:依照不同架構生成靜態(tài)庫文件的大小也是不同的。 切換至Build Settings頁面,配置選項ArchitecturesValid Architectures,具體配置如下:

    1. armv7
  1. armv7s
  1. arm64
  1. 通用


工程示例代碼參見Github

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

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

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