创建复合工程-framework和示例demo

在我们的项目开发过程中,我们并不想外部知道某些功能的实现细节,或者有一些重复使用的功能模块,我们会封装成SDK,iOS中有动态库和静态库,framework既可以是动态库也可以是静态库,但我们如何调试我们的framework,不能每次调试都要打包然后嵌到别的项目里运行,这样是很不友好的,现在我们来说一下如何创建一个复合的工程,既包含framework源代码,还可以对源代码进行调试,还有自动打包的功能。

创建示例demo

首先我们创建一个示例demo,该demo可以是framework的使用说明,还可对framework的源码进行调试。

1、创建Single View App,命名为TestFrameworkDemo

创建复合工程-framework和示例demo_第1张图片
image.png

创建Framework工程

1、创建一个Framework工程,命名TestFramework

创建复合工程-framework和示例demo_第2张图片
image.png

2、在选择存储目录的时候,一定要选择添加到哪个工程目录下,如下图选择TestFrameworkDemo,前提TestFrameworkDemo一定要打开的状态,不然不会显示。

创建复合工程-framework和示例demo_第3张图片
image.png

3、修改TestFramework的工程配置

加入armv7s的Architectures
创建复合工程-framework和示例demo_第4张图片
image.png

修改Mach-O Type为静态库(根据你的要求选择静态库还是动态库)

创建复合工程-framework和示例demo_第5张图片
image.png

修改Build Active Architecture为NO

创建复合工程-framework和示例demo_第6张图片
image.png

4、修改TestFrameworkDemo的工程配置

在Target Dependencies添加刚才的SDK

创建复合工程-framework和示例demo_第7张图片
image.png

在Link Binary With Libraries添加SDK

创建复合工程-framework和示例demo_第8张图片
image.png

在Header Search Paths中添加SDK的目录,将两个目录都添加进去

创建复合工程-framework和示例demo_第9张图片
image.png
创建复合工程-framework和示例demo_第10张图片
image.png

创建Aggeregate打包target

1、在TestFramework的工程下创建Aggregate的target
创建复合工程-framework和示例demo_第11张图片
image.png

2、修改Target配置

在Target Dependentcies中添加SDK
创建复合工程-framework和示例demo_第12张图片
image.png

添加armv7s的Architectures

创建复合工程-framework和示例demo_第13张图片
image.png

修改Build Active Architecture Only为NO

创建复合工程-framework和示例demo_第14张图片
image.png

3、添加打包和合并SDK的shell脚本

在Build Phases中添加Script

创建复合工程-framework和示例demo_第15张图片
image.png

将shell脚本添加到输入框,在编译这个TestFrameworkAggregate的Target后,会在TestFramework目录下生成一个product文件夹,里面包含了Release和Debug版本的Framework,这个Framework是将真机和模拟器合并好之后的Framework。

创建复合工程-framework和示例demo_第16张图片
image.png
创建复合工程-framework和示例demo_第17张图片
image.png

自动打包SDK的shell脚本

# Sets the target folders and the final framework product.

# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME

# 例如: FMK_NAME = "MyFramework"

FMK_NAME=${PROJECT_NAME}

if [ "${ACTION}" = "build" ]

then

# 设置Configuration,为Debug和Release

COF_NAME_DEBUG=Debug

COF_NAME_RELEASE=Release

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

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

# 最后生成Debug和Release版本的framework的路径

INSTALL_DIR_DEBUG=${SRCROOT}/Products/${COF_NAME_DEBUG}/${FMK_NAME}.framework

INSTALL_DIR_RELEASE=${SRCROOT}/Products/${COF_NAME_RELEASE}/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

# 编译之后的framework路径

WRK_DIR=build

DEVICE_DIR_DEBUG=${WRK_DIR}/${COF_NAME_DEBUG}-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR_DEBUG=${WRK_DIR}/${COF_NAME_DEBUG}-iphonesimulator/${FMK_NAME}.framework

DEVICE_DIR_RELEASE=${WRK_DIR}/${COF_NAME_RELEASE}-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR_RELEASE=${WRK_DIR}/${COF_NAME_RELEASE}-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

# 编译各个版本的framework

xcodebuild -configuration ${COF_NAME_DEBUG} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphoneos clean build

xcodebuild -configuration ${COF_NAME_DEBUG} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphonesimulator clean build

xcodebuild -configuration ${COF_NAME_RELEASE} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphoneos clean build

xcodebuild -configuration ${COF_NAME_RELEASE} -target "${FMK_NAME}" ONLY_ACTIVE_ARCH=NO -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR_DEBUG}" ]

then

rm -rf "${INSTALL_DIR_DEBUG}"

fi

mkdir -p "${INSTALL_DIR_DEBUG}"

cp -R "${DEVICE_DIR_DEBUG}/" "${INSTALL_DIR_DEBUG}/"

# 合并Debug版本的framework

lipo -create "${DEVICE_DIR_DEBUG}/${FMK_NAME}" "${SIMULATOR_DIR_DEBUG}/${FMK_NAME}" -output "${INSTALL_DIR_DEBUG}/${FMK_NAME}"

# Cleaning the oldest.

if [ -d "${INSTALL_DIR_RELEASE}" ]

then

rm -rf "${INSTALL_DIR_RELEASE}"

fi

mkdir -p "${INSTALL_DIR_RELEASE}"

cp -R "${DEVICE_DIR_RELEASE}/" "${INSTALL_DIR_RELEASE}/"

# 合并Release版本的framework

lipo -create "${DEVICE_DIR_RELEASE}/${FMK_NAME}" "${SIMULATOR_DIR_RELEASE}/${FMK_NAME}" -output "${INSTALL_DIR_RELEASE}/${FMK_NAME}"

# 删除build路径

rm -r "${WRK_DIR}"

open "${INSTALL_DIR_RELEASE}"

fi

你可能感兴趣的:(创建复合工程-framework和示例demo)