写在前面
本文记录的主要有两点:
-
.a
静态库的制作流程以及使用 -
.framework
静态库的制作流程以及使用
制作.a静态库
第一步:Xcode新建项目 - Frame & Library - Static Library。
第二步:博主这里取名为:StaticLibrary,这里出现的两个文件没有用可以删掉。
第三步:把想要打成静态库的文件放在
StaticLibrary
文件夹下面,博主这里以WWPerson
文件为例。第四步:修改
BuildSetting
配置,将Build Active Architeture Only
设置为NO
。第五步:添加需要暴露在外面的
.h
文件,.m
文件会自动编译到.a
文件中。在未添加之前是下图所示:
点击+添加,添加之后:
需要注意的是:这里需要暴露的
.h
文件需要放在Public
列表栏里面。第六步:
Edit Scheme
- 模式改为release
模式。第八步:分别在真机和模拟器上都要
Command+B
编译,编译之后我们可以看到如下内容。其中,
Release-iphoneos
代表的是真机下的静态库文件,Release-iphonesimulator
表示的是模拟器下的静态文库文件。
温馨提示:
- 在模拟器上编译静态库时最好选择高端一点的设备,这样低端设备也可以用,如果选择低端设备可能会出现在高端模拟器上出现错误等问题。
- 通过
Xcode
-Preferences
-Location
可以找到上面的静态库内容。
到这里静态库的制作方法就基本完成了,但是还有一个重要的问题我们还没有解决,那就是模拟器和真机下的静态库需要合并,接下来我们看一下如何合并静态库。
合并静态库
-
新建一个文件夹用来存放真机和模拟器下打包出来的静态库,博主这里新建一个“合并静态库”的文件夹。
- 打开终端,在终端输入
lipo -create 模拟器下的.a 真机下的.a -output 新合并的静态库的存放路径
,如下:
温馨提示:
如果在合并的过程中有人碰到跟博主一样的错误的话,请按照下面的方式修改Xcode配置,然后重新编译生成新的.a静态库:
出现错误的原因在于:在Xcode12之后编译的模拟器静态库也支持arm64,会导致真机和模拟器有相同的支持架构arm64,这也就导致模拟器和真机不能合并的问题。
上面Xcode设置就是将arm64架构移除。
-
合并之后,可以在目标文件夹下看到我们刚合并的静态库:
- 可以使用
lipo -info
看一下我们打出来的这个静态库支持的架构是哪些:
.a静态库的使用
静态库的使用很简单,只需要将暴露在外面的.h
文件和.a
静态库放在项目中即可使用:
.framework静态库制作流程
第一步:Xcode新建项目 - Frame & Library - Framework,将需要打包成framework
静态库的文件资源等拖拽进该项目。
配置framework:
Build Settings
配置:
Product Name
:可以修改名称,这里的名称是最终打包出来的framework
的名称,博主这里叫PrintFramework
。Mac-O Type
:选择Static Library
。Build Active Architeture Only
:设置为NO
。Base SDK
:选择iOS
。iOS Deployment Target
:选择打包出来的framework
最低支持的iOS版本。
Build Phases
配置:
Copy Bundle Resource
:在这里面添加framework
项目使用到的一些资源文件,包括:xib
、plist
、图片等。Link Binary With Libraries
:在这里面添加framework
项目的依赖库。Compile Sources
:framework
项目包含的实现文件。Headers
:将要暴露出来的头文件放在public
下,不需要暴露在外面的头文件放在project
下。
第二步:如果项目中用到了图片、Xib
等资源时需要创建一个Bundle
:File - New - Target - macOS - Bundle。
温馨提示:
在创建Bundle
时的名称不能和framework
的名称一样,一样会导致失败。
配置Bundle:
- 选中
Bundle
Target,Product Name
- 修改Bundle
名称,博主这里叫PrintFramework
。
Base SDK
:修改为iOS
。Supported Platforms
:修改为iOS
。Enable Bitcode
:设置为NO
。COMBILE_HIDPI_IMAGES
:设置为NO
。(避免Bundle
中的图片变成tiff
格式而无法使用)
使用Bundle:
- 在
framework
项目中使用Bundle资源不能再通过直接获取资源名称来获取,需要通过获取Bundle资源路径来获取资源,比如:
第三步:将创建好的Bundle
添加到framework
项目的依赖中去。
第四步:Edit Scheme
- 模式改为release
模式。
第五步:分别在真机和模拟器下编译framework
项目,得到两个文件如下:
到这里,我们制作的framework
静态库就基本完成,接下来就是和制作.a
静态库一样需要合并静态库,博主这里久不过多阐述了,按照上面的方式产生新的framework
静态库。
第六步:将新合并的framework
文件替换掉之前的xxx.framework
中的framework
文件。
.framework静态库使用
将打包出来的xxx.framework
和Bundle
导入项目中即可使用:
到这里,关于
.framework
静态库的制作方法就结束了。
写在最后
iOS中关于制作.a
和.framework
静态库的流程到这里就基本结束了,下一篇文章博主将来详细讲一下静态库和动态库的区别,最后欢迎大家去我的个人技术博客逛逛。