使用shell脚本自动合并framework

我们在做组件化或SDK的时候,经常会打静态库或动态库framework包,最后为了能适配模拟器和真机都能运行,我经常使用命令行的lipo工具把两者合并。

其实为了简化工作,可以使用shell脚本,在xcode上一次性编译合并完成。以上一篇的iOS创建framework静态库(SDK&组件化)工程为例来讲一下。

一、新建Target

为自动化打包创建一个target,在xcode菜单File -- New -- Target,选择Cross-platform,然后选Aggregate:

取个名字:

然后会出现两个Target:

二、添加脚本

1、按如图顺序,点击“+”,然后选择New Run Script Phase

2、在代码区域添加如下脚本:

# Sets the target folders and the final framework product.
FMK_NAME=MySDK
# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
# Cleaning the oldest.
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
# Creates and renews the final product folder.
mkdir -p "${INSTALL_DIR}"
# Copies the headers and resources files to the final product folder.
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"

代码的意思其实就是代替了我们手动去编译模拟器版和真机版framework、以及手动去命令行用lipo合并framework的工作。

三、编译

运行前,先把当前target改成我们刚新建的target,然后点击运行

运行后,观察一下工程目录,会先出现一个build文件夹,里面是编译出的模拟器版和真机版framework,编译完之后又会出现一个Products文件夹,里面就是自动合成后的framework,最后build文件夹会被删除。

打开Products文件夹,里面有一个MySDK.framework,然后看一下它里面的静态文件支持的类型:

此framework已经支持模拟器和真机armv7 i386 x86_64 arm64,就是我们需要的最终版 。

你可能感兴趣的:(使用shell脚本自动合并framework)