如果同一個應用, 需要做一個帶廣告Lite版本, 一個不帶廣告的Pro版本. 那麼問題來了, 該如何優雅的去實現呢?
一般來說有兩種實現方法:
一個把當前工程拷貝然後再修改, 這樣做會導致後期維護成本過高, 每次修改都要同時改兩個工程, 到後期修改簡直提心掉膽, 不過操作傻瓜式.
另外一個種就是在一個Project裡面創建兩個Target, 然後通過判斷Target來修改代碼, 這樣都是基於同一套代碼做修改, 只是部分不相同的地方通過Target來添加不同代碼, 後期修改維護成本低, 推薦大家使用這種方式.
不想看教程的童鞋, 點擊這裡可以下載我已經完成好的代碼.
創建兩個Target:
1.首先先選中Target一個已經存在的版本, 右鍵 Duplicate
2.然後在彈出來的選擇框選擇 Duplicate Only
3.創建完之後你的新Target應該是和我的一樣, 接下來我們就要修改Target, Scheme, Info-plist, 如圖這樣修改:
4.修改完了之後Target, Scheme, plist的名字之後, 你需要在新的Target添加對應的plist文件, 修改CFBundleDisplayName就可以修改應用的名字了.
5.還要記得修改一下Product Name 不然你的Bundle Identifier的後綴名有copy和你的Target名字不一樣, 你還需要在Bundle Setting做一下修改.
開始為兩個不同的應用添加不同的AppIcon, LaunchImage
在這個選擇使用Images.xcassets裡面設置AppIcon和LaunchImage, 注意這裡一個是AppIcon,另一個是AppIcon-2, 以後編譯Target的時候他就會跟隨這裡的設置去拿了開機圖和Icon
2.進入Images.xcassets看下圖片是不是都是勾選了兩個Target, 保持和我下圖一樣的勾選, 如果沒有勾選的話, 你在編譯的不同Target的時候會獲取不到資源.
3.選擇不同Target進行編譯, 你的運行結果應該和我的截圖一樣, 有著不同的AppName和AppIcon,還有不同的LaunchImage,但是代碼是共用, 到這裡你已經成功了一半了, 接下來你肯定是想知道如何在代碼裡面區別不同Target, 然後給它們添加其他的特性.
在代碼裡面利用宏定義來區分不同的Traget
1.在Bundle Setting裡面設置一下Proprecessor Macros添加一份KFREE KPRO的參數來區分到底是那個Traget. 在代碼裡面為需要用到這個宏去判斷代碼塊.
2.在代碼裡面添加Proprecessor Macros裡面宏定義, 你就會發現編譯之前Xcode就會智能的選擇不同代碼. 這樣你就共用一個項目管理兩個不同版本的應用了, 大部分的代碼都復用, 維護管理非常輕松.
總結:
蘋果每年都會推出新的技術, 都是為了減少開發成本和更好的設計, 作為開發者的開發模式應當和蘋果的理念一致. 用最優雅, 簡潔的方式去實現功能.