第一步:创建App工程,命名为 Demo
第二步:关闭Demo 工程,然后在 Demo 目录下创建 Framework 工程,命名为DemoSDK
第三步:关闭DemoSDK工程,创建 WorkSpace,命名为Demo
第四步:连接 Framework 工程和 App 工程
我们需要先打开 Demo.xcworkspace,打开后你会发现这里什么也没有,然后我们直接把需要连接的 Framework 工程(DemoSDK.xcodeproj)和 App 工程(Demo.xcodeproj)拖进来就可以了。
第五步:给 Framework 加点功能
我们增加一个 Person 类,定义一个 doWork 方法,里面实现一个打印功能。
第六步:修改DemoSDK里面的一些配置
1、设置Build Setting参数将Build Active Architecture only设置为NO
2、Mach-o type 修改为Static Librayr(苹果禁用动态库,即你使用了动态库,审核也是不让通过的。)
3、在Build Settings下配置,删除arm64架构,注意:只配置模拟器的选项。(Xcode12模拟器build会自动多一个arm64)
4、设置Headers,将要公开的头文件拖到Public下,要隐藏的放到Private或Project下,隐藏的头文件不能被引用,直接拖拽到Public中
5、在SDKTest.h中将所有要公开的.h文件引入
第七步:添加Aggregate Target
1、添加一个 Aggregate,名字为DemoSDK-Script
2、添加脚本
大家可以直接复制这个脚本内容粘贴到指定地方
# Type a script or drag a script file from your workspace to insert its path.
UNIVERSAL_OUTPUTFOLDER=../Framework/
# 创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
rm -rf "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework"
# 分别编译模拟器和真机的Framework
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
# 定义真机、模拟器Build文件夹路径变量
IPHONE_BUILD=${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_BUILD=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
# 拷贝framework到univer目录
cp -R "${IPHONE_BUILD}" "${UNIVERSAL_OUTPUTFOLDER}/"
#cp -R "${SIMULATOR_BUILD}" "${UNIVERSAL_OUTPUTFOLDER}/"
# 定义输出路径变量
OUTPUT_PATH=${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework
# 合并framework,输出最终的framework到build目录
lipo -create "${IPHONE_BUILD}/${PROJECT_NAME}" "${SIMULATOR_BUILD}/${PROJECT_NAME}" -output "${OUTPUT_PATH}/${PROJECT_NAME}"
第八步:运行脚本
选中DemoSDK-Script脚本,运行脚本就可以生成对应的Framework文件包到项目的目录下,至此,framework包就已经生成完毕。