如何打包一个framework

第一步:创建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包就已经生成完毕。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。