摘要
在开发过程中,经常会遇到很多相同的控件、方法等内容;项目中的隐私核心算法、架构等;采用模块化封装等需求。我们采用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库的头文件配置
.framework 库的头文件配置
7. .framework和.a库编译选择debug和release版本
第一步编辑debug和release
1 第二步选择debug和release 28.查看生成的库文件
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、分别运行真机和模拟器
分别运行一次真机和模拟器,脚本会自动把合并成的库文件目录打开。
网友评论