开发 sdk 时经常遇到需要打包的情况,如果是多人开发的 sdk 自然是搭建自动化打包平台,利用自动化打包平台比较方便快捷,但单人开发的 sdk 还是配置打包脚本比较方便快捷,本文介绍两种常见的 sdk 开发方式下的打包方式。
1.使用 cocoapods 创建的库
-
使用
pod lib create MyLibrary
创建库 -
在本机安装
gem install cocoapods-packager
-
运行
pod package MyLibrary.podspec
输出 sdk异常处理:
1.如果只是本地开发,未向 repo 提交该库,则需要将 MyLibrary.podspec 中的
s.source
指向本地库路径2.需要打动态库,静态库, framework 运行
pod package —help
查看相关命令
2. 通用方式,包含有 sdk target 的 Xcode 项目
脚本的原理及使用说明在 shell 脚本的注释中有详细说明
使用方式:
-
第一种:直接运行 shell 脚本
脚本文件与工程文件处在同一路径下,命令行打开脚本所在目录执行
sh shellName.sh
-
第二种:在当前工程下创建一个新的 Aggregate target, 在该 target 的 Build Phases 里添加一个 new Run Script Phase,单独运行该 target 就会成产好 sdk
-
第三种:在 target 的 Build Phases 里添加一个 new Run Script Phase, 运行该 tartget 时会运行该脚本,生成 sdk
在新添加的 run script 中添加我们创建的脚本的路径 "${SRCROOT}/path/shellName.sh"
#!/bin/sh
# workspace 工程名,如果是单 target 项目则不需要
PROJECT_NAME='XXX_project'
# target 名
TARGET_NAME="XXX_target"
# 工程文件所在的根目录
SRCROOT='.'
# Sets the target folders and the final framework product.
FMK_NAME='sdk_name'
# 最终 sdk 输出的文件路径
# 在工程文件所在的根目录创建 sdk 输出路径,如果是 framework 形式则为 .framework
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# 在工程文件所在的根目录创建 sdk 输出路径,如果是 static lib 形式则为 .a
# INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.a
# sdk 编译过程的输出文件路径
WRK_DIR=./build
# framework 形式真机架构输出文件路径
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}/${FMK_NAME}.framework
# static lib 形式真机架构输出文件路径
# DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.a
# framework 形式模拟器架构输出文件路径
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}/${FMK_NAME}.framework
# static lib 形式模拟器架构输出文件路径
# SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.a
# -configuration ${CONFIGURATION}
# 清理编译生成真机和模拟器架构的 sdk
# 单 target 项目
# xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
# xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
# 包含 workspace 的项目
xcodebuild -configuration Release -workspace "${PROJECT_NAME}.xcworkspace" -scheme "${TARGET_NAME}" -sdk iphoneos clean build SYMROOT="../${WRK_DIR}"
xcodebuild -configuration Release -workspace "${PROJECT_NAME}.xcworkspace" -scheme "${TARGET_NAME}" -sdk iphonesimulator build SYMROOT="../${WRK_DIR}"
# 清理之前生成的 sdk
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p ${SRCROOT}/Products
cp -LR "${DEVICE_DIR}" "${INSTALL_DIR}"
echo "DEVICE_DIR: ${DEVICE_DIR}"
echo "INSTALL_DIR: ${INSTALL_DIR}"
# Uses the Lipo Tool to merge both binary files (i386/x86_64 + armv7/armv64) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
if [ -d "${INSTALL_DIR}/_CodeSignature" ]
then
rm -rf "${INSTALL_DIR}/_CodeSignature"
fi
if [ -f "${INSTALL_DIR}/Info.plist" ]
then
rm "${INSTALL_DIR}/Info.plist"
fi
复制代码