前言
最近公司的一個項目是分兩個app端,兩個app差異很小,差不多70%都是相同的模塊,只是個別模塊有些差異。最開始沒想那么多,為了簡單,分別創(chuàng)建了兩個項目,后來因為領(lǐng)導(dǎo)要求兩個端要同時進行,突然覺得要在兩個項目中切換,復(fù)用相同的模塊很麻煩,毅然決定,把兩個app端柔和在一個項目中。記得以前在github上下載的第三方庫提供的demo,可以選擇不同的運行target,于是想到了創(chuàng)建多個target生成不同的app端,說干就干,于是開始試驗項目中多個target配置。
配置多個target
1.copy target。
在項目配置TARGETS中,選中需要復(fù)制的target目標(biāo),右鍵選擇Duplicate,然后就會出現(xiàn)一個叫*** copy名字的target。
2.修改target名稱。
首先可以先把新復(fù)制的target的名稱修改了,雙擊target名字進入編輯狀態(tài),進行名字修改。
然后修改scheme的名稱,在Xcode左上角點擊工程名稱,在彈出的下拉框中選擇Manage Schemes,在彈出的列表框中,選擇新加的名為 *** copy的target,將它修改成和前面修改的相同的名字。
3.配置target。
在copy target的時候同時也復(fù)制了一份*** copy-info.plist文件,當(dāng)然可以根據(jù)自己的需要修改此plist的的名字,但是一定將此plist文件和target重新綁定。選擇新copy的target,點擊General,會出現(xiàn)一個選擇文件的按鈕,點擊選擇你新修改名字的plist文件。
到此2個target其實已經(jīng)基本成功了,目前兩個target已經(jīng)可以運行了。后面你添加文件的時候,根據(jù)自己需要添加到對應(yīng)的target就可以了。但是在代碼中怎樣區(qū)分兩個target呢?我們可以添加一個預(yù)編譯宏來解決。target->Build Setting,搜索:Preprocessor Macros,設(shè)置Debug和Release里的預(yù)編譯宏內(nèi)容,比如TARGET_VERSION=1表示一個target版本(注意=前后不能右空格,有空格會編譯不過),程序中對不同版本這樣判斷:
#if TARGET_VERSION_LITE ==1
...
#elif TARGET_VERSION_LITE ==2
...
#endif
問題來了?
由于項目中之前配置了podfile,復(fù)制之后兩個target沒什么問題,但是當(dāng)我在podfile中添加一個新的三方庫,pod install的時候,就會導(dǎo)致其中一個target會找不到頭文件。之前查閱資料就看到一篇文章,提示要先把podfile文件寫好,并且pod install了,最后再copy,這樣就不會出現(xiàn)問題。但是一個項目有時候很難預(yù)料后面會用到什么第三方庫,又是多人協(xié)作,難免別人不會再后面會添加新的第三方庫。經(jīng)過多次試驗,查閱資料,感覺自己又像發(fā)現(xiàn)新大陸一樣,原來pod文件編寫也是一門學(xué)問,也是有很多語法的。解決問題的方法就是podfile文件的正確編寫。查看了官方podfile文件編寫語法,經(jīng)過試驗,終于解決了此問題。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
abstract_target 'AAAA' do
pod 'AFNetworking', '~> 3.0'
pod 'Masonry'
pod 'MJRefresh'
pod 'SDWebImage', '~>3.8'
pod 'RongCloudIM/IMLib', '2.8.0'
pod 'RongCloudIM/IMKit', '2.8.0'
pod 'SVProgressHUD'
target 'BBBB'
target 'CCCC'
end
在podfile配置文件中,我使用了abstract_target關(guān)鍵字,后面跟的名字AAAA是一個不存在的target名字,后面增加我項目中實際存在的兩個target,整體表示我這個兩個target共用上面的所有庫。當(dāng)然我覺得還有其他方式可以實現(xiàn),pod語法還不是很熟,還有很多需要學(xué)習(xí)了解的地方。
最后,因為還有啟動頁和icon圖片沒有設(shè)置,不知道多個target會有如何配置,若有,會后續(xù)更新文章說明。
結(jié)語
第一次寫簡書,記錄自己的開發(fā)筆記,還有很多不熟地方,對markdown不熟,語言組織能力也還欠缺,總覺得自己沒講清楚,繼續(xù)努力。希望以后可以配圖,圖文并茂。
最后文章有什么不對的地方,請大家多多指教~