iOS新建target,使两个不同项目共用某一模块

一、背景介绍,为什么要新建target?

公司的一个新需求,需要在原有的企业版app基础上,新做一个用户版的app。由于两个app大部分内容很相似,而且有一个共用的业务模块。

大概情况如上,而痛点如下:

  • 虽然大部分内容一开始相同,但后面分歧会越来越大,毕竟是两个app,各有各的业务,所以这大部分相同的代码,将会被拷贝成两份代码
  • 共用一个业务模块。在第1个痛点的时候,我们已经把不共用的代码拷贝成两份了,如果共用模块也拷贝两份代码的话,那以后共用模块出现修改的话,就需要在共用模块的两份代码都修改一遍,容易出错。
  • 共用模块也会出现小部分的两个app不同的业务处理

针对以上三个痛点,新建一个target正好可以解决这几个问题。

二、如何新建target?

新建target有两个方法。

方法一:复制target

在已有的target上,已有target-->右键-->Duplicaate-->Duplicaate Only

复制target方法

复制成功后,工程目录下会出现copy-Info.plist文件。

方法二:新建target

通过菜单-->Editor-->Add Target--> Application --> Singe View Application --> Product Name

新建target方法

新建成功后,工程目录会出现新target目录,里面会包含以下文件

新出现的文件

方法一、二的不同点:

方法一中,新target保留了被拷贝的target全部配置和文件引用,只需稍作修改就能生成一个新的app(比如修改包名、图标和启动图之类的)。

方法二中,新target将不保留被拷贝的target全部配置和文件引用,相当于一个全新的app(Singe View Application)。

三、不同的target作用

每个Target都包含了Copy Bundle Resources, Compile Sources, Link Binary With Librariesinfo.plist等,对不同的app进行管理。

不同target的资源文件

其作用如下:

  • Copy Bundle Resources 是指生成app后里面所包含的资源文件,比如图片。
  • Compile Sources 是指哪些源代码会被该target引用编译。
  • Link Binary With Libraries 是指引用哪些库文件。
  • info.plist,这个应该都是知道是比较重要的,比如包名、版本号和权限之类的。

四、选择方案

为了解决上面的第1个痛点,我选择方法二来新建target。因为方法一会引用原有的大部分源代码,不符合我需要拷贝两份代码的需求。

好了,方案确定了,就准备大干一场了,因为方法二会相对复杂很多,也会报很多的错误,接下来一一解决。

五、开始新建target工作

1、使用方法二新建target

2、新建一个共用模块文件夹

468468465.png

3、把需要共用模块的代码(看你的需要),拷贝到CommonModule的finder目录下。

498446486.png

4、在工程中目录中,彻底删除原target中共用模块代码。(Move to Trash)

5、再把这些共用模块代码拉到CommonModule工程目录下,Add to选中: 原target+新target

BEE2D83C-4AA6-4EC8-88F6-19B40CFF8855.png

PS:(2、3、4、5概括来说就是:共用模块独立出来,并被新旧两个target所引用)

6、在工程中目录中,彻底删除新target里的所有东西

首先,彻底删除掉这几个文件:

删除的文件
彻底删除

如果新target的finder目录下还有一些空文件夹,也全部删除。

7、把原target的finder目录下所有文件,拷贝到新target的finder目录下。

8、把新target的finder目录下所有文件,拉到新target的工程目录下。Add to选中:新target

1449846515616.png

9、至此,新建target的前期工作就完成了,剩下的改配置、修复报错和修复引用之类的了。

六、CocoaPods在多target中安装相同pod的优雅解决方案

如果工程中使用了CocoaPods,请参考这篇文章解决。

七、修改新target的配置

1、下图的配置修改我就不详细说了,作为iOS开发者应该都懂。

1351151561.png

2、然后就是设置编译宏来区别代码

分别在新旧两个target的Build Settings中搜索Preprocessor Macros然后增加宏(这里用IsUserTarget=1)

468486446136.png

然后在代码中验证一下就知道了。

884616846.png

八、修复报错

首先,切换target编译一下,看一下报什么错(每个人的报错可以不一样,这里只解决我遇到的)

263161516.png

报错1:

The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor.

解决1:

这里说swift版本的问题,在新target的Build Settings中搜索swift language,把版本改为你所需要的。

1651646416.png

报错2:

No known class method for selector 'yy_modelWithJSON:

解决2:

没有方法yy_modelWithJSON。因为YYModel我是加到pch预编译头文件里面去了,所以这个报错就是pch没有正确引用。

在新target的Build Settings中搜索prefix header,然后添加一下路径。

48484156165.png

报错3:

NSTimer+Blocks.m:16:12: ARC forbids explicit message send of 'release'

解决3:

NSTimer+Blocks.m这个文件是使用MRC的,所以要改为ARC。

在新target的Build Phases中搜索NSTimer+Blocks,然后改为ARC。

1568161651.png

原文链接:https://www.jianshu.com/p/365e211b6ed0

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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,121评论 29 470
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,460评论 25 707
  • 需求:当两个甚至两个以上的app存在小差异时,可以在一个工程(project)创建多个target每个target...
    寸光片静阅读 29,900评论 21 69
  • $ sudo apt-get install screenfetch$ screenfetch 系统信息 顺便提一...
    好棒啊阅读 4,635评论 1 8
  • 第一次见到麻子,是在一场群架现场,他以一敌五,最后以麻子的胜利结束。 那场架打得那么理所当然,酒后闹事。 麻子爱喝...
    陵山阅读 3,874评论 4 11