-(void)awakeFromNib { } -(void)updateString:(NSNotification *)arg { NSData *data = [[arg userInfo] objectForKey:NSFileHandleNotificationDataItem]; NSString *dataAsString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; if(data && [data length]) incomingString = [[incomingString stringByAppendingString:dataAsString] mutableCopy]; [box setString:incomingString]; [box scrollRangeToVisible:NSMakeRange([[box textStorage] length], 0)]; [outData readInBackgroundAndNotify]; } -(void)taskCompleted:(NSNotification *)arg { [nCenter removeObserver:self]; } -(void)launchApp:(id)sender { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; incomingString = [[NSMutableString alloc] init]; NSTask *task = [[[NSTask alloc] init] autorelease]; [nCenter addObserver:self selector:@selector(taskCompleted:) name:NSTaskDidTerminateNotification object:task]; NSPipe *oPipe = [NSPipe pipe]; [task setArguments:[NSArray arrayWithObjects:@"filelist", @"114.ipsw", @"pwnt.ipsw", nil]]; [task setLaunchPath:[[NSBundle mainBundle] pathForResource:@"run" ofType:@"sh"]]; [task setStandardOutput:oPipe]; outData = [oPipe fileHandleForReading]; [nCenter addObserver:self selector:@selector(updateString:) name:NSFileHandleReadCompletionNotification object:outData]; [task launch]; [outData readInBackgroundAndNotify]; [pool drain]; }