在實際開發中,爲了保證所開發的產品可以儘可能完美上線,在上線前會特地測試幾輪,保證所開發的應用沒有問題。可是又能保證測試的一些垃圾數據不影響線上的版本數據,此時就須要區分生產環境
了,通常在測試的時候會專門爲測試而準備一個測試環境
,而上線的時候將測試環境改爲對應的線上環境
以達到上線目的。ios
在進行環境切換的時候,最簡單的方法就是修改全局的公共接口
,這樣作在環境切換上確實可以知足需求,可是,若是此時測試人員要求你在產品的圖標
上面也有所區分,例如App的icon、啓動圖
等,當線上的圖標與測試環境的圖標不一致的時候,就變得略顯麻煩了,由於你每次不只要切換接口,還要去來回的更換環境的圖標。bash
除了上述狀況以外,有一些App還分爲專業版
與普通版
,而專業版與普通版的區別在於一些功能的有無,對於這樣的需求,難道要專門去獨立出來兩個項目嗎?若是要是專門去獨立出來兩個項目,那之後迭代的話,兩個項目都得同時去迭代,工做量是如此浩大,而單一的去copy也不是設計中的一個好的方法。框架
因此爲了解決這樣的問題,咱們能夠經過使用今天所提到的方法,使用多個Target進行項目的版本管理(測試版
與線上版本
等)。ide
在使用它以前,咱們先看一下蘋果官方文檔是如何闡述Target的,以下:測試
A target specifies a product to build and contains the instructions for
building the product from a set of files in a project or workspace. A
target defines a single product; it organizes the inputs into the build
system—the source files and instructions for processing those source
files—required to build that product. Projects can contain one or more
targets, each of which produces one product.
複製代碼
含義也很簡單,它是一個項目環境的設置文件
,一個Target定義了一個單一項目環境,在一個項目工程中能夠包含一個或者多個Target
。也就是說一個項目中能夠設置多種環境。ui
使用spa
其實使用起來仍是很方便的,在使用以前要說明一下,建立Target的方式有兩種:設計
copy
以前項目中的Target配置;接下來,按照步驟來便可。3d
在工程中對已存在的target進行復制,點擊Duplicate
便可 code
若是你想建立一個新的Target
,可使用下面的方法:
Target
的名稱建立完Target之後你會發現名字後面有個copy的字樣,頓時以爲業餘的不行有沒有?此時咱們能夠經過下面的方法進行名字的修改。
Target
下的應用圖標爲了知足項目中不一樣環境下的圖標的更換需求,咱們可使用這種方法來進行。
而在OC中只須要使用如下方法進行環境的區分
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 150, 150)];
UIView *view2 = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 150, 150)];
view1.backgroundColor = [UIColor blackColor];
view2.backgroundColor = [UIColor yellowColor];
#if TARGET_VERSION == 1
[self.view addSubview:view1];
#else
[self.view addSubview:view2];
#endif
}
複製代碼
在Swift中使用以下的方法去區分對應的環境
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let view1 = UIView.init(frame: .init(x: 100, y: 100, width: 150, height: 150));
let view2 = UIView.init(frame: .init(x: 100, y: 100, width: 150, height: 150));
view1.backgroundColor = UIColor.black;
view2.backgroundColor = UIColor.yellow;
#if DEVELOPMENT
self.view.addSubview(view1);
#else
self.view.addSubview(view2);
#endif
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
複製代碼
對應的經過編譯不一樣的Target,咱們也就獲得了不一樣環境下的App了,以下所示:
相信不少時候咱們的項目離不開pods
的框架管理,在使用cocopods
管理的時候,咱們不要忘了將這些框架添加到對應的Target
中,不然,可能使用的時候找不到對應的框架,對於pod
的使用,能夠參考如下代碼進行構建:
platform :ios, '7.0'
workspace 'TestTargetDemo'
link_with 'TestTargetDemo', 'TestTargetDemoDev'
pod 'SDWebImage'
pod 'AFNetworking'
複製代碼
經過使用不一樣的Target來管理咱們的不一樣環境的配置文件,極大的簡化了咱們切換環境的時間,方便了咱們開發的工做,某種意義上也提升了咱們的開發效率,不是嗎?