Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Read-only file system

Read-only file system

tjost
tjost28.11.2121:26
Hi,

ich bastele an einer Mac App die ffmpeg per Process starten soll aber es kann nichts geschrieben werden. Ich bekomme immer Read-only file system. Ich habe die App Sandbox aus und dann startet ffmpeg auch aber ich bekomme diesen Read-only file system Fehler. Ich habe keine Ahnung wie ich das abstellen kann.
-1

Kommentare

Embrace28.11.2122:24
Dem Terminal oder deiner App in den Systemeinstellungen unter Sicherheit Zugriff auf die Festplatte geben (Festplattenvollzugriff)?
+1
Nebula
Nebula28.11.2122:33
Evtl. kommt auch App Translocation zum Einsatz. Beim Script Debugger gibt's für AppleScript-Applets extra eine Option "self-sign".
„»Wir werden alle sterben« – Albert Einstein“
+1
tjost
tjost29.11.2105:15
Embrace
Dem Terminal oder deiner App in den Systemeinstellungen unter Sicherheit Zugriff auf die Festplatte geben (Festplattenvollzugriff)?

versucht, geht nicht.

Nebula
Evtl. kommt auch App Translocation zum Einsatz. Beim Script Debugger gibt's für AppleScript-Applets extra eine Option "self-sign".

ist kein Script. Ist in Swift.
0
LoCal
LoCal29.11.2108:54
tjost
Hi,

ich bastele an einer Mac App die ffmpeg per Process starten soll aber es kann nichts geschrieben werden. Ich bekomme immer Read-only file system. Ich habe die App Sandbox aus und dann startet ffmpeg auch aber ich bekomme diesen Read-only file system Fehler. Ich habe keine Ahnung wie ich das abstellen kann.

Deine Beschreibung ist leider recht vage.
Aber ein paar Fragen: Auf welchen Pfad willst Du denn schreiben? Hast Du in Xcode auch die nötigen Berechtigungen für die App gesetzt? Wie schreibst Du die Daten?
„Ich hab zwar keine Lösung, doch ich bewundere dein Problem“
+2
ssb
ssb29.11.2109:42
Vielleicht ist auch das Problem, dass deine App zwar die Berechtigungen hat, aber das von der App gestartete ffmpeg nicht. Je nachdem, wie du es startest, könnte ffmpeg in einer Sandbox laufen anstatt die Berechtigungen deiner App zu erben. Da musst du gegebenenfalls den externen Prozess erst besondere Rechte geben. Irgendwo habe ich das mal gemacht, war ein wenig umständlich aber ausreichend dokumentiert.

Das wurde in der Vergangenheit ja schon benutzt, um im Hintergrund Software zu installieren, die unerwünscht sein kann (AdWare zum Beispiel), die dann mit den Benutzerrechten oder gar Adminrechten läuft. Daher hat Apple das dicht gemacht.
+1
Nebula
Nebula29.11.2111:40
tjost
ist kein Script. Ist in Swift.

In welcher Sprache eine App geschrieben ist, ist doch egal. Soweit ich das verstanden habe, soll man eigene Apps generell mit dem Ad-Hoc-Verfahren signieren und bei M1 ist das sogar zwingend nötig. Ich vermute aber mal, dass ssb da auf der richtigen Spur ist.
„»Wir werden alle sterben« – Albert Einstein“
0
tjost
tjost29.11.2111:55
ssb
Vielleicht ist auch das Problem, dass deine App zwar die Berechtigungen hat, aber das von der App gestartete ffmpeg nicht. Je nachdem, wie du es startest, könnte ffmpeg in einer Sandbox laufen anstatt die Berechtigungen deiner App zu erben. Da musst du gegebenenfalls den externen Prozess erst besondere Rechte geben. Irgendwo habe ich das mal gemacht, war ein wenig umständlich aber ausreichend dokumentiert.

Das wurde in der Vergangenheit ja schon benutzt, um im Hintergrund Software zu installieren, die unerwünscht sein kann (AdWare zum Beispiel), die dann mit den Benutzerrechten oder gar Adminrechten läuft. Daher hat Apple das dicht gemacht.

Also über Terminal geht das ffmpeg Problemlos.

Nebula

In welcher Sprache eine App geschrieben ist, ist doch egal. Soweit ich das verstanden habe, soll man eigene Apps generell mit dem Ad-Hoc-Verfahren signieren und bei M1 ist das sogar zwingend nötig. Ich vermute aber mal, dass ssb da auf der richtigen Spur ist.

Wie genau mache ich das?
0
LoCal
LoCal29.11.2112:05
Nebula
tjost
ist kein Script. Ist in Swift.

In welcher Sprache eine App geschrieben ist, ist doch egal. Soweit ich das verstanden habe, soll man eigene Apps generell mit dem Ad-Hoc-Verfahren signieren und bei M1 ist das sogar zwingend nötig. Ich vermute aber mal, dass ssb da auf der richtigen Spur ist.

Es macht natürlich einen Unterschied, ob er ein Script oder eine dedizierte App nutzt.
Das Script erbt die Berechtigungen vom Terminal, eine dedizierte App muss die Berechtigungen selbst "beantragen".

Leider ist es mit den spärlichen Informationen, die tjost gibt, recht schwierig ihm zu helfen.
„Ich hab zwar keine Lösung, doch ich bewundere dein Problem“
0
ssb
ssb29.11.2112:56
tjost
Also über Terminal geht das ffmpeg Problemlos.
Nebula
[...] Ad-Hoc-Verfahren signieren und bei M1 ist das sogar zwingend nötig. [...]
Wie genau mache ich das?
Wenn du das Terminal öffnest, dann erbt das Terminal die Benutzerrechte. Wenn du aus einer App einen externen Prozess startest (da gibt es verschiedene Varianten) dann eben nicht. Mit fork() könnte es gehen, mit system() wird ein (verborgenes) Terminal geöffnet, dass eben nicht alle Rechte bekommen könnte und wenn du "offizielle" Interfaces nutzt, dann wird das per XPC ausgeführt, und dann bekommen die Sub-Prozesse sicher nicht die Rechte vererbt.
XPC ist ja grundsätzlich dafür gedacht, dass man Sub-Prozesse in einer sehr strikten Sandbox ausführen kann, damit diese so wenig Zugriffsrechte wie möglich bekommen. Da musst du dem Sub-Prozess die entsprechenden Rechte geben und du wirst für deine App dann eventuell auch die Entitlements anpassen müssen.

Aber es hängt eben davon ab, wie du ffmpeg ausführst, vermutlich mit Argumenten über ein Terminal. Bei einem "gespawnten" Terminal wird seit ein paar macOS Versionen aber mindestens das Environment abgehängt - weil das eben misbraucht wurde.
Ich weiß nicht, was deine App dann können soll, aber üblicherweise verlinkt man ffmpeg als Bibliothek, das ist nur viel schiweriger in der Implementation. VLCKit (nutzt intern ffmpeg) ist da etwas leichter in der Anwendung.

Ad-Hoc signing kannst du direkt in Xcode machen und bei neuen Projekten ist das als default bereits akitivert.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.