iOS静态库之xxx.framework文件


引言
这篇博客是结合众多作者博客的基础上进行实践和整理出来的。从整体上来看,大部分的博客在整体流程上都没什么问题,但基本在SDK合成细节的描述往往不够详细,容易造成不少的误区,被坑在里面了都不知道。针对这个问题和躺过的坑,在整理做了更细致的描述,避免再犯。同时也有一些不明白的地方,有待进一步实践解惑,如有明白的博友欢迎留言。

1、创建workspace项目

1、现在桌面新建一个安放SDK的文件夹【ZMTest-library】文件夹,待用
请添加图片描述
2、打开Xcode,创建一个工作空间【workspace(流程: Xcode—File—New—Workspace 快捷键 :command +N = 创建项目)】,并把创建好的【workspace】添加到【TestSpace】文件中
在这里插入图片描述在这里插入图片描述创建结果:
在这里插入图片描述

2、创建SDK

1、打开【TestSpace.xcworkspace】文件,创建project
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述成功结果:
在这里插入图片描述

3、创建Demo

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述成功效果图
在这里插入图片描述

4、创建 Aggregate 文件关联SDK

命名为【SDK】
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述添加脚本:
在这里插入图片描述脚本如下:

#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"

#创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"

#分别编译模拟器和真机的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

#拷贝framework到univer目录
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"

lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"


#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"

#删除编译之后生成的无关的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done
#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"

拷贝关联后如图:
在这里插入图片描述

5、SDK工程配置

1、这里创建一个Test类
在这里插入图片描述方法实现:

+ (NSString *)testPrint {
    return @"Test SDK";
}

SDK工程配置处理

点击目标工程 >> 选择你创建的Framework >> 点击工程设置 >> 做出如下修改

#1、(必)选择库类型:1、StaticLibrary是静态库;2、RelocatableObjectFile是动态库
Build Settings >>  Mach-O Type >> Static Library

#2、(必)设置适配所有模拟器/真机机型架构
Build Settings >> Build Active Architecture Only 设为NO

#3、(必)增加机型配置
Build Setting >> Architectures >(增加)> armv7s

#4、死代码剥离
Build Settings >> Dead Code Stripping >> 设置为NO

#5、复制过程中删除调试符号
Build Settings >> Strip Debug Symbols During Copy >> 全部设置为NO
#6、
Build Settings >> Strip Style >> 设置为Non-Global Symbols

#7、是否连接到标准库
Build Settings >>  Link With Standard Libraries >> 设置为 NO

#8、配置 Bitcodes
Build Settings >>  Enable Bitcodes >> 设置为 NO

#9、添加 -ObjC
Build Settings >>  Other Linker Flags >> 添加-ObjC

#10、配置Build Active Architecture Only
# 设置为yes表示它只编译当前的architecture版本
# 设置为no表示会编译所有的版本
# 为了提高编译速度:
# 一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。

Build Settings >>  Build Active Architecture Only >> 设置为 NO

#11、配置Perform Single-Object Prelink为YES
Build Settings >>  Perform Single-Object Prelink >> 设置为 YES

#11、(必)设置打包静态库的测试版和发布版(.a和.frameworke)
product -> scheme -> Edit scheme -> Run -> 选择Debug或Release

#12、(必)暴露引用头文件
target -> Build Phases -> Headers -> 把需要公开的头文件从project拖入Public

配置SDK支持设备和最低版本:
在这里插入图片描述
配置SDK Bulid Configuration
在这里插入图片描述在这里插入图片描述

6、测试Demo配置

在这里插入图片描述

#1、添加 -ObjC
Build Settings >>  Other Linker Flags >> 添加-ObjC

#2、配置 Bitcodes
Build Settings >>  Enable Bitcodes >> 设置为 NO

编译运行:
在这里插入图片描述 如果控制台打印了ViewController:Test SDK,表示你已入门SDK开发了!

7、SDK合成

SDK合成有两种方式,下面分别阐述两种不同合成方式以及注意细节。
SDK合成分类:终端合成、脚本合成。

7.1、终端合成

1、在文件导入/创建/处理之后,快捷键【command+B】进行编译,选择虚拟机编译(随便选择一个iphone手机机型)和 Generic in device(真机模式编译)两种模式,第一次进行编译时,对应的xxx.framework文件就会由红色变成黑色。说明编译成功。

在这里创建了两个类
在这里插入图片描述
编译之前
在这里插入图片描述编译之后
在这里插入图片描述

2、右键点击.framework->show in Finder,可以看到对应文件的路径,打开终端查看对应文件支持的设备和机型
在这里插入图片描述在这里插入图片描述
检查各自文件适配类型
在这里插入图片描述

3、在终端输入合并的命令
格式如下:

lipo -create 真机文件包的路径 虚拟机文件包的路径 -output 生成的文件路径(可以自己创建一个文件夹)

示例:
在这里插入图片描述最后生成【TestSDK】(名字可以自定义)

注意: 合成的对象分别是真机【Debug-iphoneos】和虚拟机【Debug-iphonesimulator】文件下的【TestSDK】文件。

4、重复第2步骤,进入文件路径,复制一个【xxx.framework】文件到步骤3的生成文件的文件夹中

在这里插入图片描述
5、将【TestSDK.framework】文件里的【TestSDK】文件替换成外面一个的【TestSDK】,然后查看结果
在这里插入图片描述如上图,说明合并成功,可以直接导入对应的工程项目中使用。

7.2、脚本合成

在第4大点配置完成,只要选择对应的脚本运行即可【command+B】:
在这里插入图片描述

6、Demo与SDK的关联

1、把打包好的framework拖到demo里面
在这里插入图片描述
2、使用SDK,运行demo
注意: 以上功能就是SDK 和 demo 相关联好了.

参考链接:
1、iOS优雅开发SDK详细教程

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜子三百克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值