Связь между приложением Cocoa и консольным приложением

У меня есть два приложения, одно с пользовательским интерфейсом (приложение 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];
}

В консольном приложении:

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

person Anoop Vaidya    schedule 13.04.2015    source источник


Ответы (1)


Если вы хотите дружить с подписыванием кода/песочницей и делать с XPC все, что хотите, то это невероятно сложно (по крайней мере, для меня!), но это не имеет значения, потому что работа уже сделана за вас/меня/нас. Google для примера кода проекта "SMJobBlessXPC", основанного на образце кода "SMJobBless"... Он работает, я запускал его сам, хотя это немного больно - убедитесь, что в plist помощника есть ваш правильный код, подписывающий «общее имя» в ключе «Принадлежащие инструментам», и что все имена помощника совпадают в инструменте помощника и в Info.plist приложения и т. д. Если вам НЕ нужна подпись/упаковка, то я думаю вы все еще можете использовать образец кода в качестве шаблона, просто снимите флажки с подписанными/заключенными в коробку аспектами сборки проекта.

person zeppenwolf    schedule 14.04.2015