目标
- 构建一个 SDK
- 构建一个 App
- App 集成 SDK
- 修改 SDK,在 App 中调试
- 输出 SDK
步骤
1. 创建一个本地工作文件夹
工作目录下包含 SDK + App 工程
2. 创建一个 workspace
新建一个空白的 workspace
3. 创建一个 Framework
在工作目录下创建 SDK 的 framework
4. 创建一个 Demo App
在工作目录下创建 Demo
5. 链接 Demo 跟 SDK
- 打开
workspace添加Add Files to 'xxx.workspace'找到 SDK 和 Demo 的xcodeproj添加进来 - 选中 SDK 工程,找到
Build Settings搜索mach-o type修改为Static Library静态库 - 选中
Build Phases添加脚本New Run Script Phase,导出编译 SDK 后的产物(包含真机以及模拟器),如下
# Framework库合并脚本
# 进入到项目主目录的前一级目录下,../ 表示往前返回一级目录。
cd ${PROJECT_DIR}/../
# 创建一个 '/Frameworks' 的文件夹,用来存放 SDK
mkdir -p Frameworks
cd Frameworks
# 创建一个 '/output' 的文件夹来存放 SDK
mkdir -p output
cd output
# 下面是找到模拟器合真机的打包路径,使用lipo -create命令进行合并。
cp -rf ${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/${PRODUCT_NAME}.framework ./
iphoneosFile=${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PRODUCT_NAME}.framework/${PRODUCT_NAME}
iphonesimulatorFile=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PRODUCT_NAME}.framework/${PRODUCT_NAME}
if [ -f "$iphoneosFile" ] && [ -f "$iphonesimulatorFile" ]; then
lipo -create "$iphoneosFile" "$iphonesimulatorFile" -output ./${PRODUCT_NAME}.framework/${PRODUCT_NAME}
fi
rm -rf ./${PRODUCT_NAME}.framework/_CodeSignature
复制代码
- Xcode 编译目标选择 SDK,build 生成
framework - 在 Demo 工程下添加 SDK:
Add Files to 'Demo',找到/Framework/output路径,选中导出的 SDK 产物 - 在 Demo 打包时去掉模拟器库(可做可不做),选中 Demo 添加脚本
New Run Script Phase
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
if [[ $APP_PATH != *ArchiveIntermediates* ]]; then
exit 0
fi
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
复制代码
6. 调试
- 构建出 SDK 后默认对外开放
xxx.h(SDK名),我们可以在 Demo 中直接导入#import <SDK/SDK.h> - 如果需要 SDK 对宿主提供额外的
.h:选中 SDK 工程,找到Build Phases->Headers->Public把需要公开的类都拉到public中即可 - Xcode 在编译 Demo 时会优先检查依赖库的状态,如果 SDK 发生变化,会重新编译 SDK 输出产物,链接后再编译 Demo
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)