簡介
- 首先不懂的同學(xué)可能想知道
NSTask
是干嘛的?簡單說NSTask
對象的作用是啟動外部進程袜瞬、調(diào)用外部命令
怜俐,在C#中類似于Process - 其次
NSTask
可以創(chuàng)建一個當(dāng)前線程的子進程對象,運行另一個程序邓尤,并監(jiān)視該程序的執(zhí)行(使用NSPipe,NSFileHandle接收結(jié)果)拍鲤。并且不會與創(chuàng)建它的進程共享內(nèi)存空間贴谎。 - 進程在運行中不能更改
- Swift中NSTask更名為
Process
- 你想要運籌帷幄之中,決勝千里之外季稳,NSTask會是你的得力助手
常用方法及屬性
@property (nullable, copy) NSString * launchPath
設(shè)置調(diào)用路徑
@property (nullable, copy) NSArray<NSString *> *arguments;
設(shè)置調(diào)用參數(shù)(被調(diào)用程序命令)
標(biāo)準(zhǔn)輸入\輸出通道擅这,用NSFilehandle或者NSPipe設(shè)置接受
@property (nullable, retain) id standardInput;
輸入信息
@property (nullable, retain) id standardOutput;
輸出
@property (nullable, retain) id standardError;
錯誤輸出
設(shè)置輸出接受handle
NSPipe *pipe = [NSPipe pipe];
[certTask setStandardOutput:pipe];
[certTask setStandardError:pipe];
NSFileHandle *handle = [pipe fileHandleForReading];
NSString *securityResult = [[NSString alloc] initWithData:[handle readDataToEndOfFile] encoding:NSASCIIStringEncoding];
//函數(shù)輸出結(jié)果
- (void)launch;
開始執(zhí)行線程(一個線程只能執(zhí)行一次,之后的調(diào)用都會拋出錯誤異常)
@property (readonly, getter=isRunning) BOOL running;
運行狀態(tài)景鼠,是否在運行
@property (readonly) int terminationStatus;
退出狀態(tài)(判斷命令執(zhí)行是否成功完成)
用法
1.解壓縮
終端用法$unzip -q filepath -d despath
使用NSTask在Mac上調(diào)用:
NSTask *unzipTask = [[NSTask alloc] init];
[unzipTask setLaunchPath:@"/usr/bin/unzip"];
[unzipTask setArguments:[NSArray arrayWithObjects:@"-q", @"~\***.IPA", @"-d", @"~\unzipdirectory", nil]];
[unzipTask launch];
這樣就完成了調(diào)用unzip解壓一個IPA 到指定路徑的命令調(diào)用
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];
暫時寫這么多仲翎,后續(xù)空下來繼續(xù)更新