iOS 静态库Framework

最近维护一个旧项目,使用到openssl,但是从SVN更新下来代码,缺少openssl.framework,于是乎各种百度搜索,先是从阿里demo中找到openssl。这里有个小插曲,拿到阿里的demo打开,运行没发现openssl这个文件夹在哪啊,但是一个.m文件确实还用到了,但是为啥子不存在这个文件夹呢?一脸懵逼。于是乎在finder中查找openssl文件夹,原来在这里啊!


iOS 静态库Framework_第1张图片
Snip20171106_1.png

终于找到了,问题这下可解决了吧,于是在项目中导入openssl这个文件夹,开始编译,然后问题从这里开始了,报了一堆错误,项目中导入文件的方式是图一这种导入方式:

图一

这也挺简单嘛,改成图二格式不就行了


图二

接着编译,又报错了,这次是openssl文件夹内部文件错误,如图三:

iOS 静态库Framework_第2张图片
图三

于是乎有了这篇文章:

1.新建项目

iOS 静态库Framework_第3张图片
选择cocoa Touch Framework

项目名openssl,这个名称和你最终要创建的XXX.framework中的XXX。

iOS 静态库Framework_第4张图片
配置正确的项目名

2.导入相应的头文件

iOS 静态库Framework_第5张图片
Snip20171106_8.png
iOS 静态库Framework_第6张图片
在openssl.h文件中导入响应的头文件

3.配置工程

  • 公开头文件
    公开头文件是什么?
iOS 静态库Framework_第7张图片
这就是公开的头文件

怎么公开头文件?


iOS 静态库Framework_第8张图片
Snip20171106_12.png

默认好像是在project中一步操作让其移动到public中

iOS 静态库Framework_第9张图片
Snip20171106_13.png
  • 让你的framework支持更多的设备,将此配置成NO
iOS 静态库Framework_第10张图片
Snip20171106_15.png
  • 让你的framework是静态库,默认是动态库
iOS 静态库Framework_第11张图片
Snip20171106_16.png
  • 让你的framework支持最低版本
iOS 静态库Framework_第12张图片
Snip20171106_17.png

4.编译

选择Generic iOS Device 和任何一个模拟器 各自编译一次。

iOS 静态库Framework_第13张图片
Snip20171106_20.png

5.查看和合并静态库

查看静态库

iOS 静态库Framework_第14张图片
Snip20171106_22.png
Snip20171106_23.png

查看支持的CPU框架

iOS 静态库Framework_第15张图片
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

你可能感兴趣的:(iOS 静态库Framework)