(Mac) Создание приложения Xcode, которое выполняет сценарии оболочки
Кажется, что я пытаюсь выполнить такую простую вещь, гораздо меньше, чем то, на что способен Xcode / Interface Builder. Я искал и искал, но не нашел ответа, но большинство поисков привело меня сюда, поэтому я создал учетную запись, чтобы спросить экспертов. Я хочу создать очень простой графический интерфейс, который будет иметь от четырех до пяти кнопок, каждая из которых выполняет простой скрипт оболочки, окно терминала не понадобится, но я могу жить с одним запуском, если это так. Наряду со сценариями оболочки мне нужно иметь в приложении adb (Android debug bridge) и утилиту fastboot. Я предполагаю, что мне нужно поместить adb и fastboot и другие мои файлы в папку Resources, я также предполагаю, что мне нужно поместить свои скрипты оболочки в папку Classes. Мне просто нужно знать, как соединить кнопки со скриптами, я надеюсь, что это просто нечто, что я пропускаю. Заранее спасибо.
MacBook Pro 7,1 OSX 10.6.8 Xcode 3.2.6
1 ответ
Попробуй это:
- (void)runCmd:(NSString *)cmd withArgs:(NSArray *)args
{
if (task)
{
[task interrupt];
}
else
{
task = [[NSTask alloc] init];
[task setLaunchPath:cmd];
[task setArguments:args];
[pipe release];
pipe = [[NSPipe alloc] init];
[task setStandardOutput:pipe];
NSFileHandle* fh = [pipe fileHandleForReading];
NSNotificationCenter* nc;
nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self];
[nc addObserver:self
selector:@selector(dataReady:)
name:NSFileHandleReadCompletionNotification
object:fh];
[nc addObserver:self selector:@selector(dataAvailable:) name:NSFileHandleDataAvailableNotification object:fh];
[nc addObserver:self
selector:@selector(taskTerminated:)
name:NSTaskDidTerminateNotification
object:task];
[task launch];
[fh readInBackgroundAndNotify];
}
}
- (void)dataAvailable:(NSNotification*)n
{
NSLog(@"Data Available : %@",n);
}
- (void)dataReady:(NSNotification*)n
{
NSData* d;
d = [[n userInfo] valueForKey:NSFileHandleNotificationDataItem];
if ([d length])
{
NSLog(@"Data Ready : %@",[[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding]);
[[[task standardOutput] fileHandleForReading] readInBackgroundAndNotify];
}
}
- (void) taskTerminated:(NSNotification*)note
{
[task release];
task = nil;
}