很多时候,我们和合作方合作开发项目。为了保护我方源代码不被对方看到,可能需要制作自己的静态库文件。
iOS制作静态库.a文件:
1,新建一个项目

2,编写类
3,编译成a文件,进行合并
合并命令:
lipo -create “模拟器静态库a文件路径” “真机静态库a文件路径” -output “保存的静态库a文件路径”
查看静态库信息命令:
lipo -info “静态库a文件路径”
示例
1 . 新建项目->iOS->Framework & Library->Cocoa Touch Static Library->MyLib(项目名称)
ps: 创建项目后会自动生成和项目名称相同的MyLib.h、MyLib.m文件,一般我们都是直接从其他项目中拉取文件到此项目或者新建类创建静态库。所以删除自动生成的MyLib.h、MyLib.m文件,创建TheLib.h和TheLib.m文件。
ps: 项目->TARGETS->Build Phases->Comppile Sources 下是显示的是要编译成静态库的.m文件,注意 如果你要编译的.m文件不在此列表内,请手动添加。
选择静态库支持的最低版本,如下图
2 . 编写静态库方法内容。
3 . 编译 选择iOS Device,Ctrl+B 进行编译或运行 然后选择虚拟设备,Ctrl+B进行编译或运行。 Products->libMylib.a 右键show in
Finder 有两个.a文件,如下图 一个是真机的静态库文件另一个文件夹有虚拟机的静态文件。
4 . 查看合并静态库文件
4 .1 查看真机的.a文件信息
wangzhen:~ wjs$ lipo -info /Users/wjs/Library/Developer/Xcode/DerivedData/MyLib-gnfqxcnwsuwicwbcjyqwhpwpbihy/Build/Products/Debug-iphoneos/libMyLib.a
//armv7 arm64 是真机内的处理器,此.m文件只能在真机中运行
Architectures in the fat file: /Users/wjs/Library/Developer/Xcode/DerivedData/MyLib-gnfqxcnwsuwicwbcjyqwhpwpbihy/Build/Products/Debug-iphoneos/libMyLib.a are: armv7 arm64
4 .2 查看虚拟机的.a文件信息
wangzhen:~ wjs$ lipo -info /Users/wjs/Library/Developer/Xcode/DerivedData/MyLib-gnfqxcnwsuwicwbcjyqwhpwpbihy/Build/Products/Debug-iphonesimulator/libMyLib.a
//x86_64 是虚拟机的处理器,此.m文件只能在虚拟机中运行(Android虚拟机真机中都可以运行--因为android基于虚拟机)
input file /Users/wjs/Library/Developer/Xcode/DerivedData/MyLib-gnfqxcnwsuwicwbcjyqwhpwpbihy/Build/Products/Debug-iphonesimulator/libMyLib.a is not a fat file
Non-fat file: /Users/wjs/Library/Developer/Xcode/DerivedData/MyLib-gnfqxcnwsuwicwbcjyqwhpwpbihy/Build/Products/Debug-iphonesimulator/libMyLib.a is architecture: x86_64
4 .3 合并两个.m文件为一个静态库文件,合并的文件在真机和虚拟机中都可以运行
代码如下:
wangzhen:~ wjs$ lipo -create "/Users/wjs/Library/Developer/Xcode/DerivedData/MyLib-gnfqxcnwsuwicwbcjyqwhpwpbihy/Build/Products/Debug-iphoneos/libMyLib.a" "/Users/wjs/Library/Developer/Xcode/DerivedData/MyLib-gnfqxcnwsuwicwbcjyqwhpwpbihy/Build/Products/Debug-iphonesimulator/libMyLib.a" -output "/Users/wjs/Desktop/out.a"
如下图,.h文件和合并的.a文件(二进制文件,可以任意类型)可以共同作为静态库文件导入到项目中使用
导入库可能出现错误,项目->TARGETS->Build Settings Debug设置为NO,去除arm64