iOS开发之制作framework

项目结构如下:

iOS开发之制作framework_第1张图片
image

首先,熟悉下iOS静态库和动态库的区别:

静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。以.a 和 .framework形式存在。

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间。以.tbd 和 framework形式存在

备注:

.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。

.framework既可能是动态库又可能是静态库,iOS中系统级的.framework是动态库,用户级的.framework是静态库, 动态库拒绝上架。

主要分如下几步:

新建一个framework工程, 准备好打包的文件

将target->Build Setting->Mach-o Type 设为Static Library

Build Active Architecture Only修改为NO

把需要暴露的文件添加到公开头文件, 并在Build Phases -> Headers 暴露需要的头文件

新建一个Target,选择Other ->Aggregate

选中新建的Target,点击Build Pharas ,选中左上角的+,New Run Script Phase,添加脚本

备注:自动合并真机模拟器framework

#这里填入工程下 Targets 中所有的 framework 包名字,用空格分隔 如有 aaa bbb ccc 三个

frameworkNames=(aaa bbb ccc)

for framework in ${frameworkNames[@]}

do

FMK_NAME=$framework

# Install dir will be the final output to the framework.

# The following line create it in the root folder of the current project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ];then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"

rm -r "${WRK_DIR}"

open "${INSTALL_DIR}"

done

修改Scheme 为Release, Command + B 分别在真机和模拟器编译。

切换到Aggregate Target,build下即可。

lipo -info framework二进制文件 // 查看支持架构

备注:

模拟器:
iPhone4s-iPnone5:i386
iPhone5s-iPhone7 Plus:x86_64

真机:
iPhone3gs-iPhone4s:armv7
iPhone5-iPhone5c:armv7s
iPhone5s-iPhone7 Plus:arm64

支持armv7的静态库可以在armv7s上正常运行。

你可能感兴趣的:(iOS开发之制作framework)