XCode工程中 Targets講解是本文要介紹的內容,相信不少人都注意到XCode中, 有個Target的概念. 這在不少地方都有所體現, 好比打開一個工程後, 左側的列表中有Targets一項, 而在工程界面的頂部菜單中, project裏面也有多個涉及到Target的項目, 那麼這個Target究竟是什麼呢? app
Apple的人是這樣說的:「 Targets that define the products to build. A target organizes the files and instructions needed to build a product into a sequence of build actions that can be taken.」優化
簡單的理解的話, 能夠認爲一個target對應一個新的product(基於同一份代碼的狀況下). 但都一份代碼了, 弄個新product作啥呢? 折騰這個有意思麼?ui
其實這不是單純的瞎折騰, 雖然代碼是同一份, 但編譯設置(好比編譯條件), 以及包含的資源文件卻能夠有很大的差異. 因而即便同一份代碼, 產出的product也可能大不相同.遊戲
咱們來舉幾個典型的應用多Targets的狀況吧, 好比完整版和lite版; 好比同一個遊戲的20關, 30關, 50關版; 再或者好比同一個遊戲換些資源和名字就當新遊戲賣的(喂喂, 你在教些什麼...)資源
Targets之間, 什麼相同, 什麼不一樣get
既然是利用同一份代碼產出不一樣的product, 那麼到底不一樣Target之間存在着什麼樣的差別呢?it
要解釋這個問題, 咱們就要來看看一個Target指定了哪些內容.io
從XCode左側的列表中, 咱們能夠看到一個Target包含了Copy Bundle Resources, Compile Sources, Link Binary With Libraries. 其中編譯
Copy Bundle Resources 是指生成的product的.app內將包含哪些資源文件file
Compile Sources 是指將有哪些源代碼被編譯
Link Binary With Libraries 是指編譯過程當中會引用哪些庫文件
經過Copy Bundle Resources中內容的不一樣設置, 咱們可讓不一樣的product包含不一樣的資源, 包括程序的主圖標等, 而不是把XCode的工程中列出的資源一股腦的包含進去.
而這還不是一個target所指定的所有內容. 每一個target可使用一個獨立, 不一樣的Info.plist文件.
咱們都知道, 這個Info.plist文件內定義了一個iPhone項目的不少關鍵性內容, 好比程序名稱, 最終生成product的全局惟一id等等. 並且不一樣的target還能夠定義完整的差別化的編譯設置, 從簡單的調整優化選項, 到增長條件編譯所使用的編譯條件, 以致於所使用的base SDK均可以差別化指定.