Связь между приложением Cocoa и консольным приложением
У меня есть два приложения, одно с пользовательским интерфейсом (приложение Какао). Другое - консольное приложение.
Мое требование - принять пользовательский ввод в CocoaApp и передать его для обработки в ConsoleApp и вернуть значение.
Я пробовал что-то вроде этого, я могу отправлять и обрабатывать данные, но не могу вернуться обратно. Я не должен использовать NSDistibutedNotification. Я погуглил и обнаружил, что NSPipe должен работать, но я не могу понять, как создавать и использовать Pipes, пожалуйста, предложите и помогите понять.
Мои коды здесь:
В CocoaApp:
- (IBAction)addClicked:(id)sender {
if (self.firstNumber.stringValue.length == 0 || self.secondNumber.stringValue.length ==0) {
NSLog(@"Enter values in both the fields");
return;
}
NSString *a = self.firstNumber.stringValue;
NSString *b = self.secondNumber.stringValue;
NSTask *unixTask = [[NSTask alloc] init];
[unixTask setArguments:@[a, b]];
[unixTask setLaunchPath:@"/Users/.../ConsoleApp"];//the path
[unixTask launch];
}
В ConsoleApp:
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSArray *args = [[NSProcessInfo processInfo] arguments];
NSLog(@"%@", args);
if(args.count>1){
Adder *adderObject = [Adder new];
adderObject.aInt = [args[1] integerValue];
adderObject.bInt = [args[2] integerValue];
NSInteger sum = [adderObject addAwithB];
NSLog(@"Sum = %ld", sum);
}
}
return 0;
}
1 ответ
Если вы хотите быть дружественным к подписыванию кода / песочнице и делать все, что хотите, XPC, то это невероятно сложно, (по крайней мере, для меня!), Но это не имеет значения, потому что работа уже сделана для вас / меня / нас. Google для примера проекта кода "SMJobBlessXPC", основанного на образце кода "SMJobBless"... Это работает, я сам его запускаю, хотя это немного неприятно сиськами - убедитесь, что в списке помощника есть ваш правильная подпись кода "общее имя" в ключе "Инструменты, принадлежащие", и что все имена помощника совпадают в инструменте помощника и в Info.plist приложения и т. д. Если вам не нужна подпись / бокс, то я думаю, Вы все еще можете использовать образец кода в качестве шаблона, просто снимите флажки со знаком / в рамке сборки проекта.