在实际开发中,为了保证所开发的产品能够尽量完美上线,在上线前会特意测试几轮,保证所开发的应用没有问题。据此,在实际的开发过程中,往往需要区分测试环境和线上环境,在Android开发中,可以通过gradle脚本来识别,并在代码中体现出来。
在ios开发中,如果一个包需要同时包含debug和线上的relase环境,则需要打两个.a文件,然后合并在一起。
除了上述情况之外,有一些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
选择Single APP
步骤二:更改Target的名称
创建完Target以后你会发现名字后面有个copy的字样,顿时觉得业余的不行有没有?此时我们可以通过下面的方法进行名字的修改。
步骤三:添加不同Target下的应用图标
为了满足不同环境图标的需求,可以提高两套图片,然后按照如下的方式配置。
然后,根据不同的环境配置不同的图标地址。
步骤四:配置全局宏
配置全局宏,目的是在代码中进行环境的区分。
而在代码中也需要区分开来,不同的环境加载不同的页面,例如:
#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 "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
}
到此,我们在运行下项目,不同的环境运行出来的效果就不一样的了。
Pod管理
相信很多时候,ios的项目离不开pods的框架管理,在使用cocopods管理的时候,我们不要忘了将这些框架添加到对应的Target中,否则,可能使用的时候找不到对应的框架,对于pod的使用,可以参考以下代码进行构建:
platform :ios, '9.0'
workspace 'TestTargetDemo'
link_with 'TestTargetDemo', 'TestTargetDemoDev'
pod 'SDWebImage'
pod 'AFNetworking'
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5928.html