Ich habe eine Befehlszeilenanwendung für Mac OS ohne GUI erstellt. Diese Anwendung befindet sich unter/usr/local/bin. Und in einigen Fällen muss ich Apple Script innerhalb dieser Anwendung ausführen. Dazu erstelle ich ein NSTask und versuchen Sie den folgenden Befehl auszuführen:Apple Skript kann nicht über die Befehlszeilenanwendung ausgeführt werden
NSTask *createTask = [[NSTask alloc] init];
createTask.launchPath = @"/bin/bash";
NSString *showAlert = [NSString stringWithFormat:@"/usr/bin/osascript -e 'tell application \"Finder\" to display alert \"My text.\"'"];
NSArray *arguments = [NSArray arrayWithObjects:@"-c",showAlert, nil];
createTask.arguments = arguments;
[createTask launch];
Nachdem es läuft, passiert nichts, nur in Protokollen die Meldung angezeigt werden:
Apr 14 15:35:15 Mac-mini kernel[0]: my-app: guarded fd exception: fd 0 code 0x2 guard 0x7fff8b9e12a8
Apr 14 15:35:15 Mac-mini com.apple.xpc.launchd[1] (com.apple.ReportCrash.Root[26852]): Endpoint has been activated through legacy launch(3) APIs. Please switch to XPC or bootstrap_check_in(): com.apple.ReportCrash.DirectoryService
Apr 14 15:35:15 Mac-mini diagnosticd[16097]: error evaluating process info - pid: 26851, punique: 26851
Apr 14 15:35:16 Mac-mini sandboxd[16099] ([26851]): my-app(26851) deny file-read-data/
Aber wenn Sie diesen Befehl ausführen direkt vom Terminal aus, wird es korrekt ausgeführt. Bitte sag mir, was mache ich falsch?
Ich habe eine Ahnung, dass 'NST ask "würde die Run-Schleife verwenden. Wie verwalten Sie die Run-Loop in Ihrem Programm? – trojanfoe
Es scheint, dass ich nicht Run-Loop-Management verwendet. Können Sie vorschlagen, dass ich es versuchen sollte? – Emmett
Ich glaube nicht, dass es sich tatsächlich um Ihr Problem handelt, aber wenn Sie das Foundation-Framework verwenden, benötigen Sie für viele davon eine Run-Schleife. Ich habe eine einfache [RunLoopController] (https://github.com/trojanfoe/RunLoopController) für die Verwendung in der Befehlszeile, die Sie hilfreich finden könnten. – trojanfoe