美文网首页
iOS .a静态库的生成和使用

iOS .a静态库的生成和使用

作者: 编程猫猫 | 来源:发表于2018-10-24 16:32 被阅读0次

    近来想把项目中复用的代码以.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时一定要仔细。

    相关文章

      网友评论

          本文标题:iOS .a静态库的生成和使用

          本文链接:https://www.haomeiwen.com/subject/twzttqtx.html