NSTask介绍,指令、调用外部程序

简介

  • 首先不懂的同学可能想知道NSTask是干嘛的?简单说NSTask对象的作用是启动外部进程、调用外部命令,在C#中类似于Process
  • 其次NSTask可以创建一个当前线程的子进程对象,运行另一个程序,并监视该程序的执行(使用NSPipe,NSFileHandle接收结果)。并且不会与创建它的进程共享内存空间。
  • 进程在运行中不能更改
  • Swift中NSTask更名为Process
  • 你想要运筹帷幄之中,决胜千里之外,NSTask会是你的得力助手

常用方法及属性

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

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

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

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

用法

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];

暂时写这么多,后续空下来继续更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,611评论 8 265
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 4,348评论 0 11
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,194评论 0 12
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    iOS菜鸟大大阅读 739评论 0 1