美文网首页
iOS 打包静态库

iOS 打包静态库

作者: iOS小武哥 | 来源:发表于2020-11-14 17:54 被阅读0次

在iOS开发过程中,有时候我们可以自己写个功能的API,但是不希望别人知道具体实现,这是我们就可以打包静态库,只提供头文件供别人使用.

开发环境:Xcode 12

1.我们新建一个工程:
WechatIMG36.jpeg
Zw+MD5Lib就是你打包静态库的名字.
WechatIMG37.jpeg
最后您的工程目录如下:
WechatIMG38.jpeg
现在我的工程里面只有Zw_MD5Lib.h和.m文件,也可以是多个,看你需求. 我们在Zw_MD5Lib.h文件中值暴露一个方法给字符串进行MD5加密,然后在.m中打印出来.由于别人看不见.m具体实现,打印在控制台看就行.
WechatIMG39.jpeg
上面完成之后,就可以进行打包了,打包分为模拟器与真机,同时也分Debug与Release.
WechatIMG40.jpeg
首先我们先真机 -- Release打包:
WeChat52a6a7a118fb7b28e46cede70cc34db1.png
运行成功之后,Products文件下的.a不红了,说明成功了,然后我们点击它 -- 右键 -- Show in Finder 如下图:
WechatIMG42.jpeg
可以修改上图的文件路径,我们删除Release-iphoneos文件下所有文件. Name下面的.h文件就是暴露出来的,可以是多个.
WechatIMG43.jpeg
把Subpath路径include 后面的路径删除,一个是模拟器的Debug模式(选中模拟器,Run一下),然后在运行,截图如下:
WeChat415ab522d2a87756c7ea357ba6e317f4.png
接下来我们需要对模拟器的Debug和真机Release模式的Lib.a进行合并. 将2个libZw_MD5Lib.a放到桌面上,由于名字一样,我们需要修改一下,如下图:
WeChat9465c1c052e2258716d0147d3abc7b59.png
命名分别为:libZw_MD5LibD.a 和 libZw_MD5LibR.a,打开终端到桌面,输入命令:
lipo -create libZw_MD5LibD.a libZw_MD5LibR.a -output libZw_MD5Lib.a
libZw_MD5Lib.a这个名字就是合并后最终的.a文件.
执行上步之后会有error(原因是我用的是x-code12 生成的).
error:have the same architectures (arm64) and can't be in the same fat output file
问题原因:
XCode12之前:
编译模拟器静态库支持i386 x86_64两架构
编译真机静态库支持armv7 arm64两架构
使用lipo -create -output命令可以将两个库合并成一个支持模拟器和真机i386 x86_64 armv7 arm64四种架构的胖子库。

XCode12编译的模拟器静态库也支持了arm64,导致出现真机库和模拟器库不能合并的问题。
解决方案:
Build Settings -> Excluded Architectures 添加: Any iOS Simulation SDK 后面添加arm64.
或者使用命令行移除模拟库的arm64
 lipo libZw_MD5LibD.a -remove arm64 -output xxxxxx.a
解决之后,在执行上面的合并操作,最终桌面上会生成一个新的Lib.a 文件. 然后我们新建一个工程测试,将.a和.h拖入新建的工程,导入头文件,调用方法截图如下:
531605497498_.pic_hd.jpg
运行工程就会发现控制台打印输出了
MD5 string = FC63EF1764109110F84D58B4D5479CEA
这个打印是在Zw_MD5Lib.m对字符串进行加密后打印结果.

到此为止,静态库的打包已经完成了!

相关文章

  • iOS静态库与动态库的区别与打包

    iOS静态库与动态库的区别与打包iOS静态库与动态库的区别与打包

  • iOS封装framework,包含xib,storyboard,

    0. 网络含有很多有关iOS封装framework .a静态库文章,本文推荐 iOS静态库iOS打包framewo...

  • cocoaPods 打包静态库 遇到的坑 and git

    cocoaPods 打包静态库 遇到的坑参考资料iOS 打包.a文件的那些事儿iOS-将自己的库支持CocoaPo...

  • iOS中的静态库 .a 和 .framework &&a

    一、iOS里静态库形式 二、.a 与 .framework有什么区别 三、为什么要使用静态库 四、如何打包 .a ...

  • iOS 静态库开发

    iOS 静态库开发 本文旨在说明静态库制作中的一些常见问题和特殊处理1. 打包静态库需要的相关问题和设置 静态库中...

  • iOS 静态库

    iOS 静态库 iOS 静态库

  • 使用XCode7打包动态库/静态库

    使用XCode7打包动态库/静态库 @(▶开发)[iOS,Xcode]文章同步在个人主页~ [TOC] iOS中的...

  • iOS 打包静态库

    最近项目需要静态库打包,看了几篇文章 。做个总结本文介绍的是.frameWork静态库制作方法 第一步:创建fra...

  • iOS 静态库打包

    一、简单介绍 什么是库 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。...

  • ios 打包静态库

    首先 先介绍一下什么是库.所谓库就是程序代码的集合,是共享程序代码的一种方式。库的分类分为开源库和闭源库 至于什么...

网友评论

      本文标题:iOS 打包静态库

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