iOS开发——Xcode12创建framework静态库记录必要的改动点,以及引用三方库问题

一、前言

记录Xcode12 创建新的framework静态工程时候所需的改动点,以及引用三方库问题。记性不太好,写下来方便自己查看。
引用三方库的意思就是在SDK内使用了第三方工程,但是由于做SDK是不能内嵌开源三方库的,因为容易造成跟宿主的引用出现重复定义的情况。但是编译过程还需要这块内容,本文章第三节就是解决这个问题的,也是网上查找,自己做的总结,已经踩过坑了。

二、创建Framework工程

2.1 项目创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 工程设置

  1. 更改支持版本
    在这里插入图片描述

  2. 修改为静态库
    在这里插入图片描述

  3. 目标架构设置
    这里要移除模拟器的arm64架构,因为Xcode12支持的arm64的模拟器,相关内容请看我的另一篇文章。防止SDK模拟器包和真机包合并时候出现冲突。
    在这里插入图片描述
    在这里插入图片描述

  4. 其他设置
    在这里插入图片描述

2.3 头文件设置

在这里插入图片描述

三、第三方库引用

把需要的静态库拖到项目中,但是Add to targets 项不要打钩(这样其他项目调用静态库时,再把需要的其他静态库添加到应用中,不用担心重复添加的问题)
在这里插入图片描述

四、打包脚本:sh

在这里插入图片描述
打包内容给出,根据自己需要修改

#!/bin/sh

#  Script.sh
#  YourProjectName
#
#  Created by 阿喆 on 2021/3/12.
#

#注意:脚本目录和xxxx.xcodeproj要在同一个目录,如果放到其他目录,请自行修改脚本。
#要build的target名
target_Name=VideoPlayerLib
echo "target_Name=${target_Name}"

#工程名
project_name=$target_Name
echo "project_name=${project_name}"

#打包模式 Debug/Release 默认是Release
development_mode=Release


#当前脚本文件所在的路径 $(pwd)
SCRIPT_DIR=$(pwd)
echo "======脚本路径=${SCRIPT_DIR}======"

#工程路径
#PROJECT_DIR=${SCRIPT_DIR} 和下面写法也样
PROJECT_DIR=$SCRIPT_DIR
echo "======工程路径=${PROJECT_DIR}======"

#build之后的文件夹路径
build_DIR=$SCRIPT_DIR/Build
echo "======Build路径=${build_DIR}======"

#真机build生成的头文件的文件夹路径
DEVICE_DIR_INCLUDE=${build_DIR}/${development_mode}-iphoneos/include/${project_name}



#真机build生成的.a文件路径
DEVICE_DIR_A=${build_DIR}/${development_mode}-iphoneos/lib${project_name}.a
echo "======真机.a路径=${DEVICE_DIR_A}======"

#模拟器build生成的.a文件路径
SIMULATOR_DIR_A=${build_DIR}/${development_mode}-iphonesimulator/lib${project_name}.a
echo "======模拟器.a路径=${SIMULATOR_DIR_A}======"


#目标文件夹路径(也就SDK的文件:.a文件 和 头文件)
INSTALL_DIR=${build_DIR}/Products/${project_name}
echo "======SDK的文件夹路径=${INSTALL_DIR}======"

#目标头文件的文件夹路径
INSTALL_DIR_Headers=${build_DIR}/Products/${project_name}/Headers
echo "======头文件的文件夹路径=${INSTALL_DIR}======"

#目标.a路径
INSTALL_DIR_A=${build_DIR}/Products/${project_name}/lib${project_name}.a
echo "======目标.a路径=${INSTALL_DIR}======"


#判断build文件夹是否存在,存在则删除
#rm -rf 命令的功能:删除一个目录中的一个或多个文件或目录
if [ -d "${build_DIR}" ]
then
rm -rf "${build_DIR}"
fi


#判断目标文件夹是否存在,存在则删除该文件夹
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

#创建目标文件夹
mkdir -p "${INSTALL_DIR}"



echo "======盒子已经准备好了,开始生产.a 并合成装到盒子里吧======"

#build之前clean一下
xcodebuild -target ${target_Name} -configuration ${development_mode} -sdk iphonesimulator clean

xcodebuild -target ${target_Name} -configuration ${development_mode} -sdk iphoneos clean

#模拟器build
xcodebuild -target ${target_Name} -configuration ${development_mode} -sdk iphonesimulator

#真机build
xcodebuild -target ${target_Name} -configuration ${development_mode} -sdk iphoneos


#复制头文件到目标文件夹
#使用-R参数可实现递归功能,即所有子目录中的文件与目录均拷贝
cp -R "${DEVICE_DIR_INCLUDE}" "${INSTALL_DIR_Headers}"


#合成模拟器和真机.a包
lipo -create "${DEVICE_DIR_A}" "${SIMULATOR_DIR_A}" -output "${INSTALL_DIR_A}"

echo "======合成结束======"



# -f 判断文件是否存在
if [ -f "${INSTALL_DIR_A}" ]
then
echo "======验证合成包是否成功======"
lipo -info "${INSTALL_DIR_A}"
fi


#打开目标文件夹
open "${INSTALL_DIR}"


五、打包脚本:Aggregate

在这里插入图片描述
产物名字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值