Xcode 8 Erweiterung, die NSTask ausführt

9

Mein Ziel ist es, eine Erweiterung zu erstellen, die das clang-Format ausführt. Mein Code sieht ungefähr so ​​aus:

%Vor%

Der Grund, warum ich diesen try-catch-Block brauche, ist, dass beim Versuch, diesen Code auszuführen, eine Ausnahme ausgelöst wird. Der Ausnahmegrund ist:

  

Fehler: Startpfad nicht zugänglich

Der Pfad für mein clang-Format ist / usr / local / bin / clang-format. Was ich entdeckt habe, ist, dass ich nicht versuche, auf eine Anwendung in / usr / local / bin zuzugreifen, aber / bin ist in Ordnung (wenn ich versuche, / bin / ls auszuführen, gibt es kein Problem).

Eine andere Lösung, die ich ausprobiert habe, war / bin / bash, indem ich den Startpfad und Argumente wie folgt einstelle:

%Vor%

Dies startet die Aufgabe erfolgreich, aber es schlägt mit der folgenden Fehlerausgabe fehl:

  

/ bin / bash: / etc / profile: Operation nicht erlaubt   / bin / bash: / usr / local / bin / clang-format: Operation nicht erlaubt

Die erste Fehlermeldung ist darauf zurückzuführen, dass versucht wurde, den Parameter -l in bash aufzurufen, der versucht, sich als Benutzer anzumelden.

Irgendeine Idee, wie ich den Zugang zu diesen anderen Ordnern ermöglichen kann? Gibt es irgendeine Art von Sandbox-Umgebungseinstellung, die ich aktivieren muss?

    
Guy Kogus 09.09.2016, 14:26
quelle

2 Antworten

1

Ich denke, das ist wegen des Sandboxing nicht möglich. Sie könnten die ausführbare Datei im Clam-Format bündeln und von dort aus verwenden.

    
Jochen 16.09.2016 15:34
quelle
0

Ich persönlich denke, dass Sie alles falsch machen. Erweiterungen sollen schnell sein (wenn man sich das Video auf Xcode-Erweiterungen anschaut, wiederholt er es mehrmals, um rein und raus zu kommen). Und sie sind stark eingeschränkt.

Es gibt jedoch noch eine andere - die Container-App kann diese Verarbeitung für Ihre Erweiterung ohne alle Hacks durchführen. Der Nachteil ist, dass Sie den Puffer zu und von der Erweiterung übergeben müssen.

Es ist nicht einfach, aber es kann gemacht werden. Einfach peasy, um Ihren Container zum Laufen zu bringen. Ändern Sie zunächst die Info.plist der Container-App (nicht die Erweiterung Info.plist), sodass sie einen URL-Typ aufweist.

In Ihrer Erweiterung können Sie die Container-App "aufwachen", indem Sie Folgendes ausführen:

%Vor%

Wie für die Kommunikation zwischen den beiden, hat Apple eine Fülle von Methoden. Ich, ich bin Old-School, also verwende ich DistributedNotificationCenter - für den Moment.

Obwohl ich es nicht ausprobiert habe, sehe ich nicht, warum bei der Container-App ein Problem beim Chatten auftreten sollte (ich verwende die Container-App für Einstellungen).

    
Lloyd Sargent 22.09.2016 18:13
quelle