在iOS平臺為了實現(xiàn)源代碼保護,可以將具體實現(xiàn)細節(jié)打包為靜態(tài)庫.a文件,同時暴露.h文件方便業(yè)務代碼調(diào)用。制作靜態(tài)庫的過程如下:
制作并打包靜態(tài)庫.a文件
- 新建工程
new->project,選擇iOStab,Framework & Library分類下的Cocoa Touch Static Library,如圖:

-
下一步
next,輸入靜態(tài)庫名稱MyStaticLib等信息,Language暫時選擇Objective-C。
- 生成項目工程,會看到生成了
MyStaticLib.h和MyStaticLib.m兩個文件,Products目錄下的靜態(tài)庫文件libMyStaticLib尚未生成。

-
靜態(tài)庫文件的代碼既支持
Objective-C、Swift,也支持原生的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頁面,配置選項Architectures和Valid Architectures,具體配置如下:armv7
armv7s

-
arm64
-
通用





