簡單的理解的話, 可以認為一個target對應一個新的product(基于同一份代碼的情況下).雖然代碼是同一份, 但編譯設置(比如編譯條件), 以及包含的資源文件卻可以有很大的差別. 于是即使同一份代碼,不同的target 產出的product也可能大不相同
Target指定的內容:
從XCode左側的列表中, 我們可以看到一個Target包含了Copy Bundle Resources, Compile Sources, Link Binary With Libraries.
Copy Bundle Resources 是指生成的product的.app內將包含哪些資源文件
Compile Sources 是指將有哪些源代碼被編譯
Link Binary With Libraries 是指編譯過程中會引用哪些庫文件
- 通過Copy Bundle Resources中內容的不同設置, 我們可以讓不同的product包含不同的資源, 包括程序的主圖標等, 而不是把XCode的工程中列出的資源一股腦的包含進去.
- 而這還不是一個target所指定的全部內容. 每個target可以使用一個獨立、 不同的Info.plist文件.
我們都知道, 這個Info.plist文件內定義了一個iPhone項目的很多關鍵性內容, 比如程序名稱, 最終生成product的全局唯一id等等. - 而且不同的target還可以定義完整的差異化的編譯設置, 從簡單的調整優化選項, 到增加條件編譯所使用的編譯條件, 以至于所使用的base SDK都可以差異化指定.