Ich habe eine Mac OSX-Anwendung, die eine ausführbare Datei in/Contents/Resources startet. Die Anwendung soll nicht im App Store veröffentlicht werden und deshalb habe ich Sandbox nicht eingeschaltet.Starten der ausführbaren Datei mit NSTask - Sandboxing Probleme?
Der Start Code:
toolPath = [[[NSBundle mainBundle] pathForResource:@"myexecutable" ofType:@""] copy];
task = [[NSTask alloc] init];
[task setLaunchPath: toolPath];
pipe = [[NSPipe alloc] init];
[task setArguments:[NSArray arrayWithObjects:@"-someArg", someVariable, nil]];
file = [[NSFileHandle alloc] initWithFileDescriptor:[pipe fileHandleForReading].fileDescriptor];
[task setStandardOutput: stderrPipe];
[task launch];
Die Sache ist - das alles funktioniert gut, wenn in Xcode läuft. Es funktioniert auch gut, wenn Sie die Anwendung auf den Desktop exportieren und ausführen.
Wenn ich jedoch die Anwendung zip, auf einen Webserver hochladen, und dann auf dem gleichen Computer (oder Dropbox auf einen anderen Mac), wird die Aufgabe nicht mehr gestartet! Ich bekomme keinen Fehler in der Systemkonsole oder irgendetwas.
Ich recherchierte einige zu diesem Problem und fand, dass OSX eine neue Anwendung als "unter Quarantäne gestellte" Sonderberechtigungsrecht markieren wird. So untersuchte ich den Unterschied zwischen dem heruntergeladenen App und der exportierten App:
Berechtigungen für die ausführbare Datei nach meiner Anwendung von Xcode exportieren:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
An dieser Stelle der App funktioniert gut und die ausführbare Datei wird von einem ins Leben gerufen Schaltfläche in der App.
und nach der Anwendung zippen, auf dem Server hochgeladen, heruntergeladen, entpackt und die Anwendung öffnen und die Annahme des Dialogs „Diese Anwendung wurde aus dem Internet heruntergeladen“:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
com.apple.quarantine 26
An diesem Punkt nichts passiert, wenn ich schiebe die Schaltfläche in meiner App.
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
aber die ausführbare Datei ist noch nicht gestartet werden:
Wenn ich laufe xattr -rd com.apple.quarantine
auf der gesamten App dann wird der Quarantäne Hinweis entfernt!
An diesem Punkt habe ich nun die folgenden Berechtigungen auf meinem Desktop App:
/Contents/MacOS:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/Contents/Resources:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
Und auf die heruntergeladene App, die ich verwendet Xattr -rd auf:
/Inhalt/MacOS:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/Contents/Resources:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
Die erste App funktioniert gut und der zweite startet nie die ausführbare Datei. Was zum Teufel ist hier los? Es ist die gleiche App, auf demselben Computer, mit den gleichen Berechtigungen, aber die heruntergeladene funktioniert einfach nicht.
Dieses Problem tritt in allen OSX-Versionen auf verschiedenen Computern auf.
thx !!!! das half –
kein Kind Prozess, Haupt-App wird abgestürzt coz dieser Ausgabe – Swati
danke! Ich habe NSTask verwendet und das Hinzufügen der App Sandbox = NO Berechtigung hat mich gerettet. – iOSDec