2015-07-14 17 views
21

Ich habe eine OS X-App im Shoebox-Typ (im Gegensatz zu Dokumenten), die Bilder im Sandbox-Container der App speichert.Verhindern, dass Originaldateien aus dem Sandbox-Container der OS X-Anwendung per Drag & Drop geändert werden oder Erweiterungen teilen?

Diese Bilder können über Share Extensions (in Form eines NSURL) geteilt oder per Drag & Drop exportiert werden.

Wenn ein Bild mit einem Bildbearbeitungsprogramm geteilt wird (z. B. Acorn bietet eine Teileerweiterung) oder in einem Bildbearbeitungsprogramm gelöscht wurde, öffnet der Bildbearbeitungsprogramm die Datei aus meinem Sandbox-Container und kann diese nun ändern, umbenennen oder löschen Datei - die zu allen Arten von Unbeständigkeiten in meiner App führen kann.

Zuerst war ich überrascht, weil ich dachte, Dateien in der Sandbox können nur von der App selbst zugegriffen werden. Aber es scheint, dass dies nicht der Fall ist, wenn ich die NSURL absichtlich teile.

Also, wie kann ich verhindern, dass jemand Dateien in meinem Sandbox-Container ändern kann, während er sie immer noch für Drag & Drop anbietet und Erweiterungen teilt?

  • Ich versuchte, nicht teilen NSURLs aber NSImages, aber viele Teile Erweiterungen mit NSImages nicht funktionieren, so ist dies keine gute Wahl.
  • Ist es eine Möglichkeit zum Schutz der Dateien in der Sandbox?
  • Sollte ich immer eine Kopie eines Bildes zu einem temporären Speicherort machen, bevor ich es für die gemeinsame Nutzung oder per Drag & Drop bieten (könnte für große Bilder langsam sein?)

Ich bin glücklich, Ihre Vorschläge zu hören, oder lerne mehr über das Problem.

+2

Ich sehe 2 Optionen, aber sie kosten. 1 - Sie können alles in eine Datenbank statt der Sandbox, oder 2 - machen Sie Ihre App erstellen eine Kopie der ursprünglichen Datei, und dann geben Sie es an einen Editor ... – Farini

+1

Generell: Sie können Ihre Sandbox nicht verlassen, aber Andere Apps können in Ihre Sandbox gelangen, wenn sie nicht sandboxed sind. Und in Ihrem Fall: Sicher, wenn Sie ihnen die Datei-UR geben, darf die andere App auf die Datei zugreifen. - Schreibschutz ist nicht möglich. Der beste Weg ist, eine temporäre Kopie anzubieten, denke ich. Wenn Sie wirklich große Dateien verwenden und es zu langsam ist, zeigen Sie einen Fortschritt "Öffnen ..." –

+0

Danke für Ihre Zusammenfassung der Sandbox, @AxelZehden. Scheint muss ich einen Weg finden, eine temporäre Kopie zu machen, ohne den Benutzer zu sehr zu nerven. Vielleicht kann ich einen Weg finden, zuerst die Freigabeoptionen anzuzeigen, und dann, während der Benutzer einen auswählt, eine Kopie in NSTemporaryDirectory erstellen und diese Kopie schließlich freigeben. – MartinW

Antwort

1

Erstellen Sie ein Lesezeichen der NSURL.

So kann der Benutzer immer noch die Datei umbenennen, verschieben und löschen, aber Sie bemerken es und kennen den neuen Speicherort und den neuen Namen und können trotzdem auf die Datei zugreifen. Sollte funktionieren, auch wenn es außerhalb Ihrer Sandbox ist. So können Sie damit umgehen. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/

Das ist einer der Vorteile, die mit NSURL und nicht mit einer einfachen Pfadzeichenfolge arbeiten.