最近维护一个旧项目,使用到openssl,但是从SVN更新下来代码,缺少openssl.framework,于是乎各种百度搜索,先是从阿里demo中找到openssl。这里有个小插曲,拿到阿里的demo打开,运行没发现openssl这个文件夹在哪啊,但是一个.m文件确实还用到了,但是为啥子不存在这个文件夹呢?一脸懵逼。于是乎在finder中查找openssl文件夹,原来在这里啊!
Snip20171106_1.png
终于找到了,问题这下可解决了吧,于是在项目中导入openssl这个文件夹,开始编译,然后问题从这里开始了,报了一堆错误,项目中导入文件的方式是图一这种导入方式:
图一这也挺简单嘛,改成图二格式不就行了
图二
接着编译,又报错了,这次是openssl文件夹内部文件错误,如图三:
图三于是乎有了这篇文章:
1.新建项目
选择cocoa Touch Framework项目名openssl,这个名称和你最终要创建的XXX.framework中的XXX。
配置正确的项目名2.导入相应的头文件
Snip20171106_8.png 在openssl.h文件中导入响应的头文件3.配置工程
- 公开头文件
公开头文件是什么?
怎么公开头文件?
Snip20171106_12.png
默认好像是在project中一步操作让其移动到public中
Snip20171106_13.png- 让你的framework支持更多的设备,将此配置成NO
- 让你的framework是静态库,默认是动态库
- 让你的framework支持最低版本
4.编译
选择Generic iOS Device 和任何一个模拟器 各自编译一次。
Snip20171106_20.png5.查看和合并静态库
查看静态库
Snip20171106_22.png Snip20171106_23.png查看支持的CPU框架
Snip20171106_24.png使用的终端命令:
lipo -info openssl的文件路径
合并真机和模拟器静态库
Snip20171106_25.png合并生成的是一个openssl.framework中的openssl文件,选择模拟器或者真机中任何一个openssl.framework替换掉其中openssl文件。至此这个你选择的openssl.framework 就是最终的openssl.framework。
6.导入到项目中使用
ps:
如果静态库中有Category类,就要在使用静态库项目的配置中添加-ObjC或者-all_load
如果创建的framework类中使用了.tbd,则项目中也要导入.tbd动态库
引自:iOS中,Framework和.a的打包及使用
合并静态库时遇到的问题参考
iOS 制作FrameWork 以及FrameWork通过包合并支持arm64 armv7 i386 架构
参考链接:
iOS Framework lipo报错 lipo: can't map input file
iOS开发--使用lipo命令制作模拟器与真机通用静态库
iOS 10 打包静态库支持armv7 静态库打包 .a armv7
网友评论