近来想把项目中复用的代码以.a静态库的形式移植到公司的各个项目中,下面记录下.a静态库的生成以便后续再用。
1、生成.a静态库
(1)、创建工程
屏幕快照 2018-10-24 下午2.23.58.png
因为我的代码是之前写好的,那么只需要将代码添加到工程里
(2)、设置要暴露到外面的.h文件
屏幕快照 2018-10-24 下午2.28.43.png
(3)、特别需要注意的是,设置.a静态库支持版本
image.png
公司的工程要求支持8.0以上,故我选的是8.0
(4)、由于debug模式和release模式下不是不一样的,首先要确定你要生成的是debug 模式还是release模式
屏幕快照 2018-10-24 下午2.47.03.png
屏幕快照 2018-10-24 下午2.47.16.png
其次选择要生成的是模拟器的.a 还是真机.a ,如果是模拟器的.a就任选一个模拟器,如果是真机的就选择Generic iOS Device ,然后分别command + B ,编译。
(5)、经过上面的编译之后在路径下已经有相应的.a文件了,那么在哪个路径下呢,看下图 屏幕快照 2018-10-24 下午3.03.33.png图中的Release-iphoneos是release 环境下的真机,Release-iphonesimulator是release环境下的模拟器,Debug-iphoneos 和Debug-iphonesimulator 分别是debug环境下的真机和模拟器。
/Users/登录的用户名/Library/Developer/Xcode/DerivedData/ReviewManager-bkgybqhdslavphewrxlrkpxagzvf/Build/Products
(6)、合并真机和模拟器.a文件
在终端输入以下命令行:lipo -create 空格 模拟器.a文件的路径 空格 真机.a文件的路径 空格 -output 空格 合并后的保存路径
(例:lipo -create /Users/登录的用户名/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphoneos/libxxx.a
/Users/登录的用名/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphonesimulator/libxxx.a 空格 -output 空格 /Users/登录的用户名/Desktop/LibStatic.a)一定要注意空格 ,最终会在桌面得到一个合并后的LibStatic.a文件,再将暴露出来的.h头文件一起复制出来。
(7)、检查生成的.a文件是否满足条件
在终端输入以下mingling :lipo -info 空格 合并后的保存路径
(例:lipo -info 空格 /Users/登录的用户名/Library/Developer/ LibStatic.a)
如果得到的是下面的,则是满足条件的
Architectures in the fat file: /Users/用户名/Desktop/LibStatic.a are: armv7 i386 x86_64 arm64
2、将生成的.a文件和暴露出来的.h头文件导入工程目录下即可使用
之前在看过一篇文章说需要特别注意的是
image.png
果然在我使用的时候,也出现了上面的错误,一开始认为是工程的问题,排除各种假设(如重复引入、倒入头文件错误)等问题,还是没有解决,百思不得解。
111111.png后来发现在debug环境能运行,但是在relese环境上运行就报上图的错误。就开始思考是不是.a文件生成错误了,经过仔细的检测,果然是生成时搞错了,所以大家在生成.a时一定要仔细。
网友评论