有的時(shí)候我們工程開發(fā)過程中需要不同的(個(gè)人賬號(hào)/企業(yè)賬號(hào))版本管理、同一份代碼換個(gè)皮膚重新上架到別的賬號(hào)等情況,這個(gè)時(shí)候創(chuàng)建多target管理就非常有用了。
一、創(chuàng)建新的target
直接創(chuàng)建
1.如果直接在這里點(diǎn)擊加號(hào)創(chuàng)建新的target,相當(dāng)于有創(chuàng)建了一個(gè)新的空工程,代碼無法復(fù)用,也就沒什么意義了,所以這種操作直接pass!

11.jpg

22.jpg

333.jpg
copy創(chuàng)建
1.右鍵需要復(fù)用的target,點(diǎn)擊Duplicate,然后Duplicate Only,就是復(fù)制一份出來。

4444.png
2.會(huì)提示是否復(fù)制一份iPad版本的,這個(gè)根據(jù)實(shí)際情況選擇,這里選擇緊急復(fù)制Duplicate Only。

5555.png
3.創(chuàng)建出來的是一個(gè)以copy結(jié)尾命名的target。

7777.jpg
4.隨便點(diǎn)擊一個(gè)文件,看到右邊被兩個(gè)target引用。這就是我們想要的復(fù)用一份代碼的效果。

6666.jpg
到這里一個(gè)復(fù)用代碼的target就創(chuàng)建成功了。但是此時(shí)選擇新的target編譯會(huì)報(bào)錯(cuò),提示找不到相應(yīng)的info.plist文件。因?yàn)槭侵苯訌?fù)制的target,配置信息都是一樣的,但是生成新的info.plist文件名稱和路徑都變了,下面我們進(jìn)行配置。
下面是一些必要的配置
二、配置
修改名稱,這里暫且以DemoRelease命名。有三個(gè)地方需要修改:target,info.plist,Scheme。

8888.jpg
target和info.plist直接選中回車修改

9999.png

aaa.png
Scheme需要選中彈窗 Manager Schemes。

bbb.png
選中回車直接修改。

ccc.png
三處命名以修改完成。

ddd.jpg
其他配置
我們將info.plist放到一起,直接拖動(dòng)。然后再DemoRelease中的Building Setting中修改路徑。

1-aa.jpg
修改到這里,新的target就可以編譯成功了。
然后修改名稱,BundleID,Icon什么的基礎(chǔ)信息就可以打包成一個(gè)新的app了。
增加宏定義區(qū)分代碼(OC)
如果我們需要不同target的代碼功能有所不同,可以設(shè)置宏定義來區(qū)分

1-bbb.jpg

1-ccc.jpg
設(shè)置好以后,代碼中直接使用設(shè)置的宏定義來區(qū)分功能。
UILabel *label = [UILabel new];
if (AppTag == 1) {
label.textColor = [UIColor redColor];
}else if (AppTag == 2) {
label.textColor = [UIColor blackColor];
}else {
label.textColor = [UIColor yellowColor];
}
#ifdef isDemo
label.text = @"這是Demo的target";
#else
#endif
#ifdef isDemoRelease
label.text = @"這是DemoRelease的target";
#endif
增加宏定義區(qū)分代碼(Swift)

111111111.jpg
格式 : -D XXX 中間有空格。
不管是純OC或者純Swift或者混編項(xiàng)目,OC代碼的定義都在Preprocessor Macros,Swift代碼的定義都在Swift Compiler - Custom Flags
三、刪除
要?jiǎng)h除多余的target,直接刪除生成時(shí)三處位置即可

1-eee.jpg

1-fff.jpg