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

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

创建示例demo

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

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

image.png

创建Framework工程

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

image.png

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

image.png

3、修改TestFramework的工程配置

加入armv7s的Architectures
image.png

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

image.png

修改Build Active Architecture为NO

image.png

4、修改TestFrameworkDemo的工程配置

在Target Dependencies添加刚才的SDK

image.png

在Link Binary With Libraries添加SDK

image.png

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

image.png
image.png

创建Aggeregate打包target

1、在TestFramework的工程下创建Aggregate的target
image.png

2、修改Target配置

在Target Dependentcies中添加SDK
image.png

添加armv7s的Architectures

image.png

修改Build Active Architecture Only为NO

image.png

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

在Build Phases中添加Script

image.png

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

image.png
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • (原文:How to Create a Framework for iOS 作者:Sam Davies 译者:Mr...
    王宪岭阅读 4,884评论 2 23
  • (原文:How to Create a Framework for iOS作者:Sam Davies 译者:Mr_...
    Yaanco阅读 2,327评论 4 5
  • 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实现细节...
    小热狗阅读 3,468评论 3 9
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 11,911评论 3 42
  • 来源编辑 “己学”根底来自于两系统:一、来自于传统的儒家哲学系统。特别是儒家所强调之“为己之学”。 二、来自于西方...
    苍米秋豆阅读 447评论 0 0