美文网首页
IOS中,制作.a 和 .framework详细流程和讲解

IOS中,制作.a 和 .framework详细流程和讲解

作者: Flame_Dream | 来源:发表于2019-01-09 19:51 被阅读0次

摘要

在开发过程中,经常会遇到很多相同的控件、方法等内容;项目中的隐私核心算法、架构等;采用模块化封装等需求。我们采用Framework或.a库进行封装这些内容,可以尽可能减少在开发过程中存在的重复操作和保密的功能。

一、制作.framework和.a 库

在制作.framework和.a 库过程并不复杂,只要根据步骤操作一遍.framework和.a 库的制作你就很轻松的学会了,不要被这些步骤吓到,尝试一下就可以了。

1.选择制作静态库的类型

首先打开Xcode创建项目,选择需要制作的静态库类型,制作.framework和.a 库的方法和步骤大致相同,就一起把.framework和.a 库结合在一起来讲解


选择制作静态库的类型
2.创建库文件

当我们创建好一个库的项目之后,需要创建封装的类文件。封装的的控件,封装隐私算法等内容,需要分装的内容全部搞定之后,配置库的


841547026855_.pic_hd.jpg
3.打包库的配置

配置当前支持架构(处理器)的类型:armv7,armv7s和arm64,i386,x86_64。


打包库处理器支持配置
4.静态库支持的版本

App有系统的最低版本配置,而分装的库同样也有版本的配置,默认情况下是当前Xcode的最支持的最高版本,所以在制作过程中一定要选择库的版本配置。


库支持的最低版本
5.选择库的类型(静态库/动态库)

根据具体需要选择封装库的类型(静态、动态等)


静态库/动态库 选择
6.库的头文件

.framework和.a 库的头文件的选择是不一样的,下边分别对.framework和.a 库的两种情况都有说明

.a库的头文件配置

a库的头文件配置

.framework 库的头文件配置

.framework 库的头文件配置
7. .framework和.a库编译选择debug和release版本

第一步编辑debug和release

1 第二步选择debug和release 2
8.查看生成的库文件

1.选择当前的设备,build或者运行当前库。

如果选择任意模拟器运行(或者build),生成的库文件支持当前所有模拟器的处理器类型。
如果选择真机运行(或者build),生成的库文件支持当前所有真机的处理器类型

查看库文件

分别执行模拟器和真机,查看库所在文件目录,可以真机和模拟器两种库文件。但是我们在执行项目过程中,运行真机使用真机的库,模拟器使用模拟器的库,替换过程中很是麻烦,所以需要制作出一个支持所有设备的库文件。第二部分会详细讲解如何制作一个支持模拟器和真机的库


库文件所在目录

二、制作的支持的所有设备处理器的.framework和.a 库

1.通过终端查看当前.framework和.a 支持处理器

通过终端命令行的方式查看当前库支持的处理器。

查看方法:打开终端输入如下:(AAA代表库)
# 1. .framework库
lipo -info  /path/AAA.framework/AAA
# 2. .a库
lipo -info  /path/AAA.a
查看库支持处理器类型
2.合并支持模拟器和真机两种处理器的库文件

第一种方法:
采用最基本的命令行的方法:

#在终端运行
[xxxx$]: lipo - create PATH1 PATH2 -output PATH3

# .framework (输出目录选择任意地址或者真机、模拟器库文件的地址都可以)
 lipo - create /PATH1/AAA.framework/AAA  /PATH2/AAA.framework/AAA  -output /PATH3/AAA.framework/AAA

# .a (同上)
 lipo - create /PATH1/AAA.a  /PATH2/AAA.a  -output /PATH3/AAA.a

在终端运行 lipo - create PATH1 PATH2 -output PATH3

第二种方法:

1、配置和书写脚本
采用脚本的方式:创建脚本的方法如下:
7,8,9分别代表1,2,3步骤(7=>1,8=>2,9=>3)

添加脚本合并支持模拟器和真机处理器

.framework 架构合并方法的代码

# Type a script or drag a script file from your workspace to insert its path.
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework

# 如果真机包或模拟包不存在,则退出合并
if [ ! -d "${DEVICE_DIR}" ] || [ ! -d "${SIMULATOR_DIR}" ]
then
exit 0
fi

# 如果合并包已经存在,则替换
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# 使用lipo命令将其合并成一个通用framework  
# 最后将生成的通用framework放置在工程根目录下新建的Products目录下  
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#合并完成后打开目录
open "${SRCROOT}/Products"

fi

.a库的脚本合成

# Type a script or drag a script file from your workspace to insert its path.
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.a

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.a

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.a

# 如果真机包或模拟包不存在,则退出合并
if [ ! -d "${DEVICE_DIR}" ] || [ ! -d "${SIMULATOR_DIR}" ]
then
exit 0
fi

# 如果合并包已经存在,则替换
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# 使用lipo命令将其合并成一个通用framework  
# 最后将生成的通用framework放置在工程根目录下新建的Products目录下  
lipo -create "${DEVICE_DIR" "${SIMULATOR_DIR}" -output "${INSTALL_DIR}"

#合并完成后打开目录
open "${SRCROOT}/Products"

fi

2、分别运行真机和模拟器

分别运行一次真机和模拟器,脚本会自动把合并成的库文件目录打开。

相关文章

网友评论

      本文标题:IOS中,制作.a 和 .framework详细流程和讲解

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