NSTask

简介

首先不懂的同学可能想知道NSTask是干嘛的?简单说NSTask对象的作用是启动外部进程、调用外部命令,在C#中类似于Process

其次NSTask可以创建一个当前线程的子进程对象,运行另一个程序,并监视该程序的执行(使用NSPipe,NSFileHandle接收结果)。并且不会与创建它的进程共享内存空间。

进程在运行中不能更改

Swift中NSTask更名为Process

你想要运筹帷幄之中,决胜千里之外,NSTask会是你的得力助手

常用方法及属性

@property (nullable, copy) NSString * launchPath设置调用路径
@property (nullable, copy) NSArray *arguments;设置调用参数(被调用程序命令)
标准输入\输出通道,用NSFilehandle或者NSPipe设置接受
@property (nullable, retain) id standardInput;输入信息
@property (nullable, retain) id standardOutput;输出
@property (nullable, retain) id standardError;错误输出

- (void)launch;开始执行线程(一个线程只能执行一次,之后的调用都会抛出错误异常)
@property (readonly, getter=isRunning) BOOL running;运行状态,是否在运行
@property (readonly) int terminationStatus; 退出状态(判断命令执行是否成功完成)

代码示例:

设置输出接受handle
 NSPipe *pipe = [NSPipe pipe];
 [certTask setStandardOutput:pipe];
 [certTask setStandardError:pipe];
 NSFileHandle *handle = [pipe fileHandleForReading];

NSString *securityResult = [[NSString alloc] initWithData:[handle readDataToEndOfFile] encoding:NSASCIIStringEncoding];
//函数输出结果

用法 1.解压缩

终端用法

$unzip -q filepath -d despath

使用NSTask在Mac上调用

NSTask *unzipTask = [[NSTask alloc] init];
 [unzipTask setLaunchPath:@"/usr/bin/unzip"];
 [unzipTask setArguments:[NSArray arrayWithObjects:@"-q", @"~\***.IPA", @"-d", @"~\unzipdirectory", nil]];
 [unzipTask launch];

这样就完成了调用unzip解压一个IPA 到指定路径的命令调用

2.读取签名证书列表

终端命令为

$security find-identity -v -p codesigning
NSTask *certTask = [[NSTask alloc] init];
 [certTask setLaunchPath:@"/usr/bin/security"];
 [certTask setArguments:[NSArray arrayWithObjects:@"find-identity", @"-v", @"-p", @"codesigning", nil]];
 NSPipe *pipe = [NSPipe pipe];
 [certTask setStandardOutput:pipe];
 [certTask setStandardError:pipe];
 NSFileHandle *handle = [pipe fileHandleForReading];
 [certTask launch];
温馨提示:
本文最后更新于2024-06-09 07:58:18
某些文章具有时效性,若有错误或已失效,请在下方留言或联系Apibug咨询更新价格。
© 版权声明
THE END
喜欢就支持一下吧
点赞11赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容