前言
在實際開發中,為了保證所開發的產品能夠儘量完美上線,在上線前會特意測試幾輪,保證所開發的應用沒有問題。但是又能保證測試的一些垃圾資料不影響線上的版本資料,此時就需要區分生產環境
了,一般在測試的時候會專門為測試而準備一個測試環境
,而上線的時候將測試環境改成對應的線上環境
以達到上線目的。
在進行環境切換的時候,最簡單的方法就是修改全域性的公共介面
,這樣做在環境切換上確實能夠滿足需求,但是,如果此時測試人員要求你在產品的圖示
上面也有所區分,例如App的icon、啟動圖
等,當線上的圖示與測試環境的圖示不一致的時候,就變得略顯麻煩了,因為你每次不僅要切換介面,還要去來回的更換環境的圖示。
除了上述情況之外,有一些App還分為專業版
與普通版
,而專業版與普通版的區別在於一些功能的有無,對於這樣的需求,難道要專門去獨立出來兩個專案嗎?如果要是專門去獨立出來兩個專案,那以後迭代的話,兩個專案都得同時去迭代,工作量是如此浩大,而單一的去copy也不是設計中的一個好的方法。
所以為了解決這樣的問題,我們可以通過使用今天所提到的方法,使用多個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.
複製程式碼
含義也很簡單,它是一個專案環境的設定檔案
,一個Target定義了一個單一專案環境,在一個專案工程中可以包含一個或者多個Target
。也就是說一個專案中可以設定多種環境。
使用
其實使用起來還是很方便的,在使用之前要說明一下,建立Target的方式有兩種:
- 直接
copy
之前專案中的Target配置; - 建立新的Target配置;
接下來,按照步驟來即可。
- 步驟一:建立Target
在工程中對已存在的target進行復制,點選Duplicate
即可
如果你想建立一個新的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了,如下所示:
擴充套件(對於cocopads的使用)
相信很多時候我們的專案離不開pods
的框架管理,在使用cocopods
管理的時候,我們不要忘了將這些框架新增到對應的Target
中,否則,可能使用的時候找不到對應的框架,對於pod
的使用,可以參考以下程式碼進行構建:
platform :ios, '7.0'
workspace 'TestTargetDemo'
link_with 'TestTargetDemo', 'TestTargetDemoDev'
pod 'SDWebImage'
pod 'AFNetworking'
複製程式碼
總結
通過使用不同的Target來管理我們的不同環境的配置檔案,極大的簡化了我們切換環境的時間,方便了我們開發的工作,某種意義上也提高了我們的開發效率,不是嗎?