iOS新建target惜浅,使兩個(gè)不同項(xiàng)目共用某一模塊

一、背景介紹伏嗜,為什么要新建target坛悉?

公司的一個(gè)新需求伐厌,需要在原有的企業(yè)版app基礎(chǔ)上,新做一個(gè)用戶版的app裸影。由于兩個(gè)app大部分內(nèi)容很相似挣轨,而且有一個(gè)共用的業(yè)務(wù)模塊。

大概情況如上空民,而痛點(diǎn)如下:

  • 雖然大部分內(nèi)容一開(kāi)始相同刃唐,但后面分歧會(huì)越來(lái)越大,畢竟是兩個(gè)app界轩,各有各的業(yè)務(wù)画饥,所以這大部分相同的代碼,將會(huì)被拷貝成兩份代碼浊猾。
  • 共用一個(gè)業(yè)務(wù)模塊抖甘。在第1個(gè)痛點(diǎn)的時(shí)候,我們已經(jīng)把不共用的代碼拷貝成兩份了葫慎,如果共用模塊也拷貝兩份代碼的話衔彻,那以后共用模塊出現(xiàn)修改的話,就需要在共用模塊的兩份代碼都修改一遍偷办,容易出錯(cuò)艰额。
  • 共用模塊也會(huì)出現(xiàn)小部分的兩個(gè)app不同的業(yè)務(wù)處理

針對(duì)以上三個(gè)痛點(diǎn)椒涯,新建一個(gè)target正好可以解決這幾個(gè)問(wèn)題柄沮。

二、如何新建target废岂?

新建target有兩個(gè)方法祖搓。

方法一:復(fù)制target

在已有的target上,已有target-->右鍵-->Duplicaate-->Duplicaate Only湖苞。

復(fù)制target方法

復(fù)制成功后拯欧,工程目錄下會(huì)出現(xiàn)copy-Info.plist文件。

方法二:新建target

通過(guò)菜單-->Editor-->Add Target--> Application --> Singe View Application --> Product Name

新建target方法

新建成功后财骨,工程目錄會(huì)出現(xiàn)新target目錄镐作,里面會(huì)包含以下文件

新出現(xiàn)的文件

方法一、二的不同點(diǎn):

方法一中隆箩,新target保留了被拷貝的target全部配置和文件引用滑肉,只需稍作修改就能生成一個(gè)新的app(比如修改包名、圖標(biāo)和啟動(dòng)圖之類的)摘仅。

方法二中,新target將不保留被拷貝的target全部配置和文件引用问畅,相當(dāng)于一個(gè)全新的app(Singe View Application)娃属。

三六荒、不同的target作用

每個(gè)Target都包含了Copy Bundle Resources, Compile Sources, Link Binary With Librariesinfo.plist等矾端,對(duì)不同的app進(jìn)行管理掏击。

不同target的資源文件

其作用如下:

  • Copy Bundle Resources 是指生成app后里面所包含的資源文件,比如圖片秩铆。
  • Compile Sources 是指哪些源代碼會(huì)被該target引用編譯砚亭。
  • Link Binary With Libraries 是指引用哪些庫(kù)文件。
  • info.plist殴玛,這個(gè)應(yīng)該都是知道是比較重要的捅膘,比如包名、版本號(hào)和權(quán)限之類的滚粟。

四寻仗、選擇方案

為了解決上面的第1個(gè)痛點(diǎn),我選擇方法二來(lái)新建target凡壤。因?yàn)?code>方法一會(huì)引用原有的大部分源代碼署尤,不符合我需要拷貝兩份代碼的需求。

好了亚侠,方案確定了曹体,就準(zhǔn)備大干一場(chǎng)了,因?yàn)榉椒ǘ?huì)相對(duì)復(fù)雜很多硝烂,也會(huì)報(bào)很多的錯(cuò)誤箕别,接下來(lái)一一解決。

五钢坦、開(kāi)始新建target工作

1究孕、使用方法二新建target

2、新建一個(gè)共用模塊文件夾

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概括來(lái)說(shuō)就是:共用模塊獨(dú)立出來(lái),并被新舊兩個(gè)target所引用)

6搅方、在工程中目錄中比吭,徹底刪除新target里的所有東西

首先绽族,徹底刪除掉這幾個(gè)文件:

刪除的文件
徹底刪除

如果新target的finder目錄下還有一些空文件夾,也全部刪除衩藤。

7吧慢、把原target的finder目錄下所有文件,拷貝到新target的finder目錄下赏表。

8检诗、把新target的finder目錄下所有文件,拉到新target的工程目錄下瓢剿。Add to選中:新target

1449846515616.png

9逢慌、至此,新建target的前期工作就完成了跋选,剩下的改配置涕癣、修復(fù)報(bào)錯(cuò)和修復(fù)引用之類的了。

六前标、CocoaPods在多target中安裝相同pod的優(yōu)雅解決方案

如果工程中使用了CocoaPods坠韩,請(qǐng)參考這篇文章解決。

七炼列、修改新target的配置

1只搁、下圖的配置修改我就不詳細(xì)說(shuō)了,作為iOS開(kāi)發(fā)者應(yīng)該都懂俭尖。

1351151561.png

2氢惋、然后就是設(shè)置編譯宏來(lái)區(qū)別代碼

分別在新舊兩個(gè)target的Build Settings中搜索Preprocessor Macros然后增加宏(這里用IsUserTarget=1)

468486446136.png

然后在代碼中驗(yàn)證一下就知道了。

884616846.png

八稽犁、修復(fù)報(bào)錯(cuò)

首先焰望,切換target編譯一下,看一下報(bào)什么錯(cuò)(每個(gè)人的報(bào)錯(cuò)可以不一樣已亥,這里只解決我遇到的)

263161516.png

報(bào)錯(cuò)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:

這里說(shuō)swift版本的問(wèn)題熊赖,在新target的Build Settings中搜索swift language,把版本改為你所需要的虑椎。

1651646416.png

報(bào)錯(cuò)2:

No known class method for selector 'yy_modelWithJSON:

解決2:

沒(méi)有方法yy_modelWithJSON震鹉。因?yàn)閅YModel我是加到pch預(yù)編譯頭文件里面去了,所以這個(gè)報(bào)錯(cuò)就是pch沒(méi)有正確引用捆姜。

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

48484156165.png

報(bào)錯(cuò)3:

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

解決3:

NSTimer+Blocks.m這個(gè)文件是使用MRC的泥技,所以要改為ARC浆兰。

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

1568161651.png

原文鏈接:http://www.reibang.com/p/365e211b6ed0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镊讼,一起剝皮案震驚了整個(gè)濱河市宽涌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝶棋,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忽妒,死亡現(xiàn)場(chǎng)離奇詭異玩裙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)段直,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門吃溅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鸯檬,你說(shuō)我怎么就攤上這事决侈。” “怎么了喧务?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赖歌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我功茴,道長(zhǎng)庐冯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任坎穿,我火速辦了婚禮展父,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玲昧。我一直安慰自己栖茉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布孵延。 她就那樣靜靜地躺著吕漂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙袁。 梳的紋絲不亂的頭發(fā)上痰娱,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音菩收,去河邊找鬼梨睁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娜饵,可吹牛的內(nèi)容都是我干的坡贺。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遍坟!你這毒婦竟也來(lái)了拳亿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤愿伴,失蹤者是張志新(化名)和其女友劉穎肺魁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體隔节,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹅经,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怎诫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘾晃。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖幻妓,靈堂內(nèi)的尸體忽然破棺而出蹦误,到底是詐尸還是另有隱情,我是刑警寧澤肉津,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布强胰,位于F島的核電站,受9級(jí)特大地震影響阀圾,放射性物質(zhì)發(fā)生泄漏哪廓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一初烘、第九天 我趴在偏房一處隱蔽的房頂上張望涡真。 院中可真熱鬧,春花似錦肾筐、人聲如沸哆料。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)东亦。三九已至,卻和暖如春唬渗,著一層夾襖步出監(jiān)牢的瞬間典阵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工镊逝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壮啊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓撑蒜,卻偏偏與公主長(zhǎng)得像歹啼,于是被迫代替她去往敵國(guó)和親玄渗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,135評(píng)論 30 470
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,838評(píng)論 25 707
  • 需求:當(dāng)兩個(gè)甚至兩個(gè)以上的app存在小差異時(shí)狸眼,可以在一個(gè)工程(project)創(chuàng)建多個(gè)target每個(gè)target...
    寸光片靜閱讀 30,024評(píng)論 21 70
  • $ sudo apt-get install screenfetch$ screenfetch 系統(tǒng)信息 順便提一...
    好棒啊閱讀 4,641評(píng)論 1 8
  • 第一次見(jiàn)到麻子拓萌,是在一場(chǎng)群架現(xiàn)場(chǎng)岁钓,他以一敵五,最后以麻子的勝利結(jié)束微王。 那場(chǎng)架打得那么理所當(dāng)然甜紫,酒后鬧事。 麻子愛(ài)喝...
    陵山閱讀 3,877評(píng)論 4 11