概述
iOS 开发中,常常需要在 App 启动时替换域名、指定mock/代理服务器地址、关闭长连接、启动后跳转到指定页面、自动登录、设置经纬度等等。这些前置工作都可以通过启动传参来实现。使用启动传参,有利于提高开发效率。\
如何启动传参
NSProcessInfo
NSProcessInfo 是 macOS 和 iOS 下的进程信息类。包含进程的所有信息。
NSProcessInfo的常见属性和方法如下:
NSProcessInfo *info = [NSProcessInfo processInfo];
NSLog(@"%@",info.environment); // 获取运行该进程的系统的环境变量
NSLog(@"%@",info.arguments); // 获取运行该进程的参数
NSLog(@"%@",info.globallyUniqueString); // 获取唯一的标示符,每次调用都会不一样,可以用作一些临时缓存文件的名字
NSLog(@"%f",info.systemUptime); // 上次设备重启到现在的秒数
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)
其中 environment 是一个 NSDictionary,App 可以通过这个属性获取到所有的环境变量,比如替换 userId、关闭长连接、设置 mock server等等
而 arguments 是一个数组,可以获取运行该进程的参数。对于通过命令行启动 App 时传参特别方便。如 tidevice 启动 App 时,tidevice launch bundleID aaa,其中 aaa 即为启动参数,App 通过 arguments 即可获得
Xcode 实现启动传参
在 Xcode 的环境变量中配置 App 启动时注入的参数,然后使用 NSProcessInfo的 environment 属性获取环境变量。该属性是一个字典,字典里保存了 Xcode启动 App 时传递的环境变量,如下:
Target -> Edit Scheme -> Run -> Arguments -> Environment Variables 点击+ 添加环境变量
备注:
环境变量一: OS_ACTIVITY_MODE
Xcode8 打印台输出乱七八糟的东西,可以设置 OS_ACTIVITY_MODE 为disable。
环境变量二:DYLD_PRINT_STATISTICS
设置 DYLD_PRINT_STATISTICS 为YES,控制台就会打印 App 的加载时长,包括整体加载时长和动态库加载时长。
NSProcessInfo *processInfo = [NSProcessInfo processInfo];
NSLog(@"environment:%@",processInfo.environment);
NSLog(@"arguments:%@",processInfo.arguments);
NSLog(@"hostName:%@",processInfo.hostName);
processInfo.processName = @"custom_process_name";
NSLog(@"processName:%@",processInfo.processName);
NSLog(@"processIdentifier:%d",processInfo.processIdentifier);
NSLog(@"globallyUniqueString:%@",processInfo.globallyUniqueString);
NSLog(@"operatingSystemVersionString:%@",processInfo.operatingSystemVersionString);
NSLog(@"operatingSystemVersion.majorVersion:%ld",processInfo.operatingSystemVersion.majorVersion);
NSLog(@"operatingSystemVersion.minorVersion:%ld",processInfo.operatingSystemVersion.minorVersion);
NSLog(@"operatingSystemVersion.patchVersion:%ld",processInfo.operatingSystemVersion.patchVersion);
NSLog(@"systemUptime:%f",processInfo.systemUptime);
NSLog(@"lowPowerModeEnabled:%d",processInfo.lowPowerModeEnabled);
网友评论