應(yīng)用場(chǎng)景分析
在 iOS 開發(fā)過程中會(huì)遇到一個(gè)應(yīng)用對(duì)應(yīng)多個(gè)域名的情況,通常情況下使用 DEBUG 的宏來進(jìn)行判斷,這主要是基于 Xcode 中的 Configuration 默認(rèn)給我們創(chuàng)建了 Debug 和 Release 兩個(gè)環(huán)境。我們也可以對(duì)其進(jìn)行新增和修改,來滿足我們實(shí)際開發(fā)下的更多環(huán)境配置。比如: 多有一個(gè)預(yù)生產(chǎn)的環(huán)境域名,同一套代碼需要打包不同的 APP 發(fā)布等情況。
Configuration
新增的時(shí)候是選擇一個(gè)進(jìn)行的復(fù)制,所以建議想要?jiǎng)?chuàng)建的環(huán)境與 Debug 和 Release 是相互對(duì)應(yīng)的,避免一些問題,這樣的話有一些配置你完全可以不用去在意。比如: 在 Release 環(huán)境會(huì)有一些優(yōu)化機(jī)制(內(nèi)聯(lián)優(yōu)化等)。
Build Setting 相關(guān)設(shè)置

在 PROJECT 和 TARGETS 里的 Bulid Setting 都會(huì)進(jìn)行設(shè)置,基于 PROJECT 和 TARGETS 的關(guān)系 TARGETS 會(huì)拷貝一部分 PROJECT 當(dāng)中的一部分設(shè)置,所以會(huì)先去設(shè)置 PROJECT 中的 Bulid Setting 再去對(duì) TARGETS 進(jìn)行對(duì)應(yīng)的檢查設(shè)置。(列舉一下我會(huì)用到的設(shè)置)
- info.plist File
- Product Bundle identifier
- Code Signing Identity
- Development Team
- CustomAppBundleld
- CustomProductName
- Preprocessor Macros 和 Active Compilation Conditions(預(yù)編譯宏,如果是純swift的項(xiàng)目 只需要設(shè)置后者)
- Asset Catalog Compiler - Options (App Icon 和 Launch Image 可以在 Assets 中新增)
在設(shè)置完成會(huì)一般會(huì)到 General 中去查看證書的選擇
info.plist
自定義宏后,打開info.plist,讀取自定義的宏,在運(yùn)行程序的時(shí)候,App對(duì)應(yīng)的設(shè)置就會(huì)讀取宏,對(duì)應(yīng)的值就會(huì)改變

Scheme
-
新增: 可以選擇不同的 Target 進(jìn)行新增
新增 -
編輯: Build Configuration 中選擇對(duì)應(yīng)得 Debug 或 Release
編輯 -
在版本控制中需要將想控制的 Scheme 的 Shared 選中Scheme
Pod
是不是以為 Scheme 設(shè)置完成了就想 Command + R,是不是報(bào)錯(cuò)了! 是因?yàn)樵?Pod 中還沒有得到相對(duì)應(yīng)的環(huán)境配置。所以可以到 Pod 中的 Configurations 也要完成相應(yīng)的設(shè)置,或者去 pod install 一下就可以了。
注: 使用 cocoapods 管理項(xiàng)目的可以編輯 podfile 設(shè)置 build configuration 、 preprocessor macros 和 OTHER_SWIFT_FLAGS 等。
TARGETS
如果想完成多個(gè) APP 且多個(gè)環(huán)境,還可以結(jié)合 TARGETS 進(jìn)行 Configuration 配置和 Scheme 的創(chuàng)建。但要注意文件適用的 TARGETS。

- 多target podFile配置
platform :ios, '8.0'
# 多個(gè)target共用一套pod的寫法,項(xiàng)目中不能有名字為CommonPods,防止沖突;
abstract_target 'CommonPods' do
# 共用的pod第三方
pod 'AFNetworking'
pod 'IQKeyboardManager'
# 項(xiàng)目中的target各自的設(shè)置
target ‘Target1’ do
#可以在這里添加Target1獨(dú)自引用的pod第三方
end
target 'Target2’ do
#可以在這里添加Target2獨(dú)自引用的pod第三方
end
end
