Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi macOS Dateizugriff verweigert bei FMX App-Store Apps (https://www.delphipraxis.net/196891-macos-dateizugriff-verweigert-bei-fmx-app-store-apps.html)

wjjw 28. Jun 2018 07:25

macOS Dateizugriff verweigert bei FMX App-Store Apps
 
Hallo!

Habe das Problem das wenn eine macOS FMX-App für den App-Store den Zugriff auf diverse Verzeichnis verweigert.
Wenn ich die gleiche App mit Konfiguration "Normal" kompiliere und starte kann ich auf alle Verzeichnisse zugreifen.
Habe natürlich unter "Berechtigungsliste" alle relevanten Optionen markiert (z.b. Lese-/Schreibzugriff auf ...).
Komisch ist auch das ich im Download-Verzeichnis problemlos schreiben/kopieren kann.
Ich brauche eine Funktion die die Daten meiner App auf einen USB-Stick sichert.
Hat jemand ähnliche Probleme?

procedure TForm1.Btn_CopyClick(Sender: TObject);
var fn1, fn2: String;
begin
// Funktioniert NICHT!
fn1 := Von.Text; // "/Users/user1/Downloads/bild.png"
fn2 := Nach.Text; // "/Volumes/USB-Stick/bild.png"
TFile.Copy(fn1, fn2); // Fehler - Permission denied

// Funktioniert!
if SaveDialog1.Execute then
begin
fn1 := Von.Text; // "/Users/user1/Downloads/bild.png"
fn2 := SaveDialog1.FileName; // "/Volumes/USB-Stick/bild.png"
TFile.Copy(fn1, fn2); // KEIN Fehler
end;
end;


/Werner

mkinzler 28. Jun 2018 07:51

AW: macOS Dateizugriff verweigert bei FMX App-Store Apps
 
AppStore-Applikationen sind "sandboxed". Deshalb gelten für diese gewisse Beschränkungen, welche für "normale" Anwendungen nicht bestehen.

wjjw 28. Jun 2018 10:30

AW: macOS Dateizugriff verweigert bei FMX App-Store Apps
 
Komisch ist nur das es via SaveDialog funktioniert - nur "direkt" nicht.
Wie machen andere Apps Sicherungen auf USB-Sticks zum Beispiel??

/Werner

Harry Stahl 28. Jun 2018 22:43

AW: macOS Dateizugriff verweigert bei FMX App-Store Apps
 
Zitat:

Zitat von wjjw (Beitrag 1406021)
Komisch ist nur das es via SaveDialog funktioniert - nur "direkt" nicht.
Wie machen andere Apps Sicherungen auf USB-Sticks zum Beispiel??

/Werner

Apple will, dass Programme auf Dateien außerhalb der Sandbox nur über die Öffnen- und Speichern-Dialoge zugreifen können. Das gehört zum Sicherheitskonzept der Sandbox (so kann also kein Virus unbemerkt auf Dateien zugreifen).

Wenn Du aber einmal auf einen Ordner / eine Datei außerhalb der Sandbox mit den genannten Dialogen erlaubtermaßen Zugriff genommen hast, kannst Du zu diesem Zeitpunkt einen persistenten Zugriff auf diese Resourcen einrichten und zwar über App-Scoped Bookmarks. Bei erneutem Zugriff auf die Datei (auch nach einem Programmneustart) kannst Du darüber dann direkt auf diese Resourcen Zugriff nehmen, ohne über die Dialoge gehen zu müssen.

Das ist allerdings kein ganz so einfaches Thema. In meinem FireMonkey-Buch zu XE7 gibt es dazu ein eigenes Kapitel (Abschnitt 6) und im Anhang ist eine Sandbox-Unit abgedruckt, welche die Öffnen- und Speicherndialoge so anpasst, dass man zum benötigten Zeitpunkt eine Bookmark anlegen kann (das geht nämlich nur, wenn die System-Dialoge gerade ausgeführt werden).

Ich kann die Unit aus rechtlichen Gründen hier nicht veröffentlichen, auch weiß ich nicht, ob die Technik mit dem aktuellen Delphi oder den aktuellen MAC OS noch funktioniert (sollte aber eigentlich). Denn ich selber vertreibe keine MAC-Apps mehr über den Appstore, dass ist mir echt zu zeitaufwändig und das Sandboxing hat mir zuviele Einschränkungen (mein Herz brennt da im Moment eher für Linux). Aber evtl. gibt es ja hier jemandem im Forum, der die Unit noch mit aktuellem Delphi / Mac OS im Einsatz hat und kann was dazu sagen (bei Bedarf kann man das XE7-Buch noch bei Amazon erwerben, noch günstiger als Kindle-Version).

Nur der Vollständigkeit halber sei erwähnt, dass man auch direkt über Entitlements-Keys, die man NUR im Appstore anfordern kann, auch Lese- und Schreibrechte außerhalb der Sandbox bekommen kann. Aber die bekommt man wohl nur wenn man ein Unternehmen von Weltrang ist und einen wirklich guten Grund vorweisen kann. Für mein CopyBack-Programm (Datensicherungsprogramm) war das damals jedenfalls kein ausreichender Grund, um diese Rechte zu erhalten, so hatte ich es eben über die Appscope-Bookmark Lösung gemacht (und die App dann über ein paar Jahre auch im Store gehabt).


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz