在iOS平台为了实现源代码保护,可以将具体实现细节打包为静态库.a文件,同时暴露.h文件方便业务代码调用。制作静态库的过程如下:
制作并打包静态库.a文件
- 新建工程
new->project,选择iOStab,Framework & Library分类下的Cocoa Touch Static Library,如图:
-
下一步
next,输入静态库名称MyStaticLib等信息,Language暂时选择Objective-C。
- 生成项目工程,会看到生成了
MyStaticLib.h和MyStaticLib.m两个文件,Products目录下的静态库文件libMyStaticLib尚未生成。
-
静态库文件的代码既支持
Objective-C、Swift,也支持原生的C语言。这里使用C作为示例语言编写一个简单的逻辑。将MyStaticLib.h改造为C代码,引入标准C函数库,并在其中定义一个方法sum,它接受两个int类型的参数,返回它们的和。#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方法的具体实现:#import "MyStaticLib.h" int sum(int a, int b) { return a + b; }
- 示例代码的逻辑很简单,现在可以配置工程的一些属性了。在
Build Phases页面,Copy Files选项中已经自动为我们添加了暴露给外部调用的头文件MyStaticLib.h。
切换至Build Settings页面,注意选项Build Active Architecture Only,通常Debug选择YES,而Release选择NO。如果是YES,代表静态库只针对当前设备的架构打包,即只针对图中设备模拟器iPhone XR的架构x86_64进行打包。
- 运行程序,在
Products目录下生成了静态库文件libMyStaticLib.a,查看目录可以发现同时暴露了MyStaticLib.h头文件。至此,静态库.a文件已经制作完成。
测试调用静态库
-
新建一个简单的
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。至此,静态库的调用实现完成。
依照不同的CPU架构打包
-
模拟器架构为
x86_64,真机架构为armv7、armv7s、arm64 -
之前打包时,我们选择的设备是模拟器
iPhone XR,因此生成的静态库libMyStaticLib.a支持的架构是x86_64,真机是无法运行的。可以通过命令lipo -info libMyStaticLib.a查看:lipo -info libMyStaticLib.a输出结果为
libMyStaticLib.a is architecture: x86_64。 -
要想在真机上运行,打包时必须选择对应的设备架构。注意:依照不同架构生成静态库文件的大小也是不同的。 切换至
Build Settings页面,配置选项Architectures和Valid Architectures,具体配置如下:armv7
armv7s
-
arm64
-
通用











网友评论