前言
在實際開發(fā)中粗井,為了保證所開發(fā)的產(chǎn)品能夠盡量完美上線,在上線前會特意測試幾輪,保證所開發(fā)的應(yīng)用沒有問題告唆。但是又能保證測試的一些垃圾數(shù)據(jù)不影響線上的版本數(shù)據(jù)域携,此時就需要區(qū)分生產(chǎn)環(huán)境
了簇秒,一般在測試的時候會專門為測試而準備一個測試環(huán)境
,而上線的時候?qū)y試環(huán)境改成對應(yīng)的線上環(huán)境
以達到上線目的秀鞭。
在進行環(huán)境切換的時候趋观,最簡單的方法就是修改全局的公共接口
,這樣做在環(huán)境切換上確實能夠滿足需求锋边,但是皱坛,如果此時測試人員要求你在產(chǎn)品的圖標
上面也有所區(qū)分,例如App的icon豆巨、啟動圖
等剩辟,當線上的圖標與測試環(huán)境的圖標不一致的時候,就變得略顯麻煩了往扔,因為你每次不僅要切換接口贩猎,還要去來回的更換環(huán)境的圖標。
除了上述情況之外瓤球,有一些App還分為專業(yè)版
與普通版
融欧,而專業(yè)版與普通版的區(qū)別在于一些功能的有無,對于這樣的需求卦羡,難道要專門去獨立出來兩個項目嗎噪馏?如果要是專門去獨立出來兩個項目麦到,那以后迭代的話,兩個項目都得同時去迭代欠肾,工作量是如此浩大瓶颠,而單一的去copy也不是設(shè)計中的一個好的方法。
所以為了解決這樣的問題刺桃,我們可以通過使用今天所提到的方法粹淋,使用多個Target進行項目的版本管理(測試版
與線上版本
等)。
定義
在使用它之前瑟慈,我們先看一下蘋果官方文檔是如何闡述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.
含義也很簡單,它是一個項目環(huán)境的設(shè)置文件
葛碧,一個Target定義了一個單一項目環(huán)境借杰,在一個項目工程中可以包含一個或者多個Target
。也就是說一個項目中可以設(shè)置多種環(huán)境进泼。
使用
其實使用起來還是很方便的蔗衡,在使用之前要說明一下,創(chuàng)建Target的方式有兩種:
- 直接
copy
之前項目中的Target配置乳绕; - 創(chuàng)建新的Target配置绞惦;
接下來,按照步驟來即可洋措。
- 步驟一:創(chuàng)建Target
在工程中對已存在的target進行復(fù)制济蝉,點擊Duplicate
即可
如果你想創(chuàng)建一個新的Target
,可以使用下面的方法:
- 步驟二:更改
Target
的名稱
創(chuàng)建完Target以后你會發(fā)現(xiàn)名字后面有個copy的字樣菠发,頓時覺得業(yè)余的不行有沒有堆生?此時我們可以通過下面的方法進行名字的修改。
- 步驟三:添加不同
Target
下的應(yīng)用圖標
為了滿足項目中不同環(huán)境下的圖標的更換需求雷酪,我們可以使用這種方法來進行。
- 步驟四:配置全局宏涝婉,目的是在代碼中進行環(huán)境的區(qū)分
而在OC中只需要使用以下方法進行環(huán)境的區(qū)分
#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中使用如下的方法去區(qū)分對應(yīng)的環(huán)境
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.
}
}
對應(yīng)的通過編譯不同的Target,我們也就得到了不同環(huán)境下的App了墩弯,如下所示:
擴展(對于cocopads的使用)
相信很多時候我們的項目離不開pods
的框架管理吩跋,在使用cocopods
管理的時候,我們不要忘了將這些框架添加到對應(yīng)的Target
中渔工,否則锌钮,可能使用的時候找不到對應(yīng)的框架,對于pod
的使用引矩,可以參考以下代碼進行構(gòu)建:
platform :ios, '7.0'
workspace 'TestTargetDemo'
link_with 'TestTargetDemo', 'TestTargetDemoDev'
pod 'SDWebImage'
pod 'AFNetworking'
總結(jié)
通過使用不同的Target來管理我們的不同環(huán)境的配置文件梁丘,極大的簡化了我們切換環(huán)境的時間侵浸,方便了我們開發(fā)的工作,某種意義上也提高了我們的開發(fā)效率氛谜,不是嗎掏觉?