iOS-静态库framework创建教程

12 篇文章 0 订阅

一、新建 framework工程 Test.xcodeproject

Test.xcodeproject中新建tartget , TestBundle(用于存放资源图片)和TestAgg(用于把模拟器和真机framework合成一个framework)

1.1 新建Test.xcodeproject
Test.xcodeproject

1.2 新建TestBundle target
TestBundle
1.3 新建TestAgg target
TestAgg

1.4 最后Targets有三个
Targets有三个

二、工程设置

(1)对TestBundle target进行设置
TARGETSGeneraliOS Deployment Target设置设备和最低支持版本(Xcode13只有一个Deployment Target可选)
TARGETSBuild SettingsBase SDK改成 iOS
TARGETSBuild SettingsSupported Platforms改成 iOS
TARGETSBuild SettingsEnable Bitcode改成 NO
TARGETSBuild SettingsVersioning System改为None(为了去掉构建后Bundle里的可执行文件exec)
TARGETSBuild SettingsCOMBINE_HIDPI_IMAGES改为NO(否则Bundle图片会变为tiff格式)
TARGETSBuild SettingsCode signing identity改为Don’t Code Sign (在提交苹果审核时,bundle如果有任何签名都会被拒)

添加图片资源到TestBundle流程
在这里插入图片描述

在这里插入图片描述

(2)对Test.framework target进行设置

进入TARGETS -> Build Settings

iOS Deployment Target设置最低支持版本
Base SDK改成 iOS
Supported Platforms改成 iOS
Build Active Architecture Only改成 NO(表示支持所有架构)
Dead Code Stripping改成 NO
Link With Standard Libraries改成 NO
Mach-O Type改成 Static Library (静态库的意思,只有系统的framework里有的是动态库,自制的都是静态库)
Other Linker Flags添加-ObjC(如果用了分类加这个参数)
Enable Bitcode改成 NO

把TestBundle.bundle添加到Test.framework Copy Bundle Resources下,这样framework就有自己的图片资源

(3)对TestAgg target进行设置

添加脚本,这是生成framework的脚本。(前提要在Test.framework target下生成模拟器和真机的framework,然后才能执行TestAgg target。)

# Type a script or drag a script file from your workspace to insert its path.
#!/bin/sh

#要build的target名

TARGET_NAME=${PROJECT_NAME}

if [[ $1 ]]

then

TARGET_NAME=$1

fi

UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"

#创建输出目录,并删除之前的framework文件

mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"

rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"

#分别编译模拟器和真机的Framework

xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

#拷贝framework到univer目录

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"

lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"

#合并framework,输出最终的framework到build目录

lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"

#删除编译之后生成的无关的配置文件

dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"

for file in ls $dir_path

do

if [[ ${file} =~ ".xcconfig" ]]

then

rm -f "${dir_path}/${file}"

fi

done

#判断build文件夹是否存在,存在则删除

if [ -d "${SRCROOT}/build" ]

then

rm -rf "${SRCROOT}/build"

fi

rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"

#打开合并后的文件夹

open "${UNIVERSAL_OUTPUT_FOLDER}"


参考文章:iOS | 自制framework详细图文流程介绍

最后demo 传送门
喜欢的点个赞👍🏻

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值