什么是启动传参

所谓启动传参,是指在APP启动的时候,从Xcode环境变量或者命令行传入指定的参数,让APP根据不同参数做出不同的响应。

为何要引入启动传参

在UI自动化测试中,需要很多前置的工作,包括替换域名、指定mock/代理服务器地址、关闭长连接、启动后跳转到指定页面、自动登录、设置经纬度等等。这些前置工作都可以通过启动传参来实现。使用启动传参,有利于提高测试效率。

如何实现启动传参

NSProcessInfo

NSProcessInfo是macOS和iOS下的进程信息类。包含进程的所有信息。 globallyUniqueString 获取唯一标识也可以用获取时间后生成唯一标识代替,systemUptime 上次设备重启到现在的秒数这个在开发某些应用应该有些用处。以下仅仅列举部分属性或者方法,还有一些个人认为用不上的就不一一列举了。
NSProcessInfo的常见属性和方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
NSProcessInfo *info = [NSProcessInfo processInfo];
NSLog(@"%@",info.globallyUniqueString); // 获取唯一的标示符,每次调用都会不一样,可以用作一些临时缓存文件的名字
NSLog(@"%f",info.systemUptime); // 上次设备重启到现在的秒数
NSLog(@"%@",info.environment); // 获取运行该进程的系统的环境变量
NSLog(@"%@",info.arguments); // 获取运行该进程的参数
NSLog(@"%@",info.hostName); // 获取主机名称
NSLog(@"%@",info.processName); // 获取该进程的进程名
NSLog(@"%d",info.processIdentifier); // 获取该程序的进程标示符
NSLog(@"%@",info.operatingSystemVersionString); // 系统版本(可用[UIDevice currentDevice].systemVersion代替)
NSLog(@"%lu",info.processorCount); // 获取当前项目进程数量
NSLog(@"%lu",info.activeProcessorCount); // 获取当前项目活跃进程数量
NSLog(@"%llu",info.physicalMemory); // 设备的CPU物理内存(单位:byte)
NSLog(@"%d",info.automaticTerminationSupportEnabled); // 是否支持自动终止(仅限MAC OS)
- (void)disableSuddenTermination // 禁止应用突然被干掉(仅限MAC OS)
- (void)enableSuddenTermination // 允许应用突然被干掉(仅限MAC OS)
- (void)disableAutomaticTermination:(NSString *)reason // 禁止应用突然被干掉的理由(仅限MAC OS)
- (void)enableAutomaticTermination:(NSString *)reason // 允许应用突然被干掉的理由(仅限MAC OS)

其中processInfo是一个静态属性。如下:

1
@property (class, readonly, strong) NSProcessInfo *processInfo;

Xcode实现启动传参

在Xcode的环境变量中配置APP启动时注入的参数,然后使用NSProcessInfo的environment属性获取环境变量。该属性是一个字典,字典里保存了Xcode启动APP时传递的环境变量,如下:

使用NSProcessInfo获取,如下:

1
2
3
4
NSProcessInfo *info = [NSProcessInfo processInfo];
NSDictionary *env = info.environment;
id cityName = [env objectForKey:@"cityName"];
NSLog(@"cityName: %@",cityName); // cityName: beijing

如此一来,我们就可以通过processInfo获取到所有的环境变量,然后根据这些环境变量做出响应。比如,替换userId、关闭长连接、设置mock server等等。只有想不到,没有做不到。