一种比较实用的iOS SDK项目架构

在SDK开发中,一般会需要经过几个流程,开发SDK,测试SDK,把SDK交付给使用人员,这些东西看似步骤多,过程繁琐,而且每修改一次SDK就需要重复一次上述的过程,增加了一些不必要的操作。当然,如果我们在SDK设计之初就有一个好的项目架构,就可以极大简化开发流程,提高开发效率,本文将带读者一步一步设计搭建一个个人认为比较好的SDK开发架构。

创建基本的工作空间

工作空间这个概念对于很多人并不陌生,平时使用得很多的CocoaPods里面其实就使用到了工作空间,具体一些原理在我的另外一篇博客。
打开Xcode->New->Workspace,命名为JSDSDKDemo

新建工作空间

为我们的工作空间建立一个目录,因为新建工作空间后,只会为我们生成一个工作空间文件,并不会自动建立目录。

SDK02.png

在我们的工作空间文件同级目录下建立一个用于存放子项目的SubProject目录。

新建目录

打开我们的JSDSDKDemo,新建一个项目,命名为JSSDKForDevelop,该项目主要用于SDK的测试,记得选择添加到JSDSDKDemo,最好不要选自动创建git仓库

新建JSSDKForDevelop工程

然后我们用同样的方法新建一个名为JSSDKInterfaceDemo,该项目用于给SDK使用者作为参考。

添加静态库相关依赖

很多开发者都是把SDK打包之后,然后拿到相关Demo里面进行测试,但是其实我们只需要添加相关依赖,就可以直接在Demo里面进行测试,只需要为它们创建依赖关系。

创建一个静态库项目,命名为JSDSDK,显而易见,该项目是该工作空间中的主要项目。

新建静态库

为了工程的统一性,我们的SDK项目放在和SubProject同一级目录下。为了后续把SDK放到另外一个git模块上面去,我们可以为该SDK创建git工程。

为项目创建Git版本控制

使用Add文件的方式把JSDSDK添加到JSSDKForDevelop里面,注意选Creat folder reference而不是选Create groups

添加SDK项目

选择JSSDKForDevelop项目,在Build Phases-Tatget Dependencies添加JSSDK依赖。

添加依赖

当然,有了这个还不足够,我们还需要在Header Search Paths里面添加SDK的路径。

Header Search Paths

然后,我们在JSSDKForDevelop项目里面引用SDK项目的头文件并使用,我们可以看到可以正常使用,不会报路径相关的错误了,说明依赖没有问题。

依赖成功

使用脚本来简化工作

我曾经也写过一篇文章iOS 静态库打包流程简化
本次脚本在之前的项目之上做了一些改进。

首先为JSSDK创建一个运行脚本的target,New->Target

创建Target

选择Cross-platform->Aggregate,命名为JSSDK_Build_Script

Aggregate

然后创建一个脚本文件,命名为JSSDK_Build

创建一个脚本文件

为刚才建立的JSSDK_Build_Script添加Run Script Phase

添加Run Script Phase

然后配置脚本路径


配置脚本路径

这样SDK的自动化编译打包流程完成。

如何使用该工程

首先我们在在JSDSDK里面完成SDK相关功能的开发之后,可以直接使用JSSDKForDevelop对SDK相关的代码进行测试。然后运行JSSDK_Build_Script,即可把SDK进行相关的打包。

打包后的文件

打包成功后,会把JSSDKForDevelop的文件同步到JSSDKInterfaceDemo。同时会在SubProject目录下生成JSSDKInterfaceDemo的打包文件

打包文件生成目录

运行JSSDKInterfaceDemo测试SDK相关功能是否正常,如果正常则可以把SDK交付使用。

把SDK划分到Git的子模块进行管理

当然,更进一步我们可以使用git submodule把SDK分离出来。

添加

为当前工程添加submodule,命令如下:

git submodule add 仓库地址 路径

其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)

命令执行完成,会在当前工程根路径下生成一个名为.gitmodules的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。

删除

submodule的删除稍微麻烦点:首先,要在.gitmodules文件中删除相应配置信息。然后,执行git rm –cached命令将子模块所在的文件从git中删除。

下载的工程带有submodule

当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:

git submodule update --init --recursive

为了方便大家学习demo,我的demo没有这样做,避免有些开发者在下载之后不能立刻使用会产生一些困扰。

最后附上Demo地址给大家学习,不足之处望批判指正。

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

推荐阅读更多精彩内容