2016-10-25 3 views
0

Ich versuche, ein Word-Dokument vom Firebase-Speicher herunterzuladen. Am Simulator funktioniert alles wie erwartet. Doch auf meinem Gerät, bekomme ich folgende Fehlermeldung:Herunterladen von Firebase-Speicherdateien Gerätefehler

Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." UserInfo={object=26 October 2016.docx, bucket=app.appspot.com, NSLocalizedDescription=An unknown error occurred, please check the server response., ResponseErrorDomain=NSCocoaErrorDomain, NSFilePath=/tmp/bulletin, NSUnderlyingError=0x1702590b0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}, ResponseErrorCode=513})

Andere Beiträge scheint ich gesucht habe bei mir nicht einer Arbeits Antwort zu geben, und alles, was ich weiß, dass es ein Problem mit Dateiberechtigungen, auch obwohl ich das empfohlene Verzeichnis (tmp) verwende.

Dies ist der Code für das Herunterladen der Datei

let Ref_Bulletin = Bulletin.referenceForURL("gs:/app.appspot.com/Bulletin/\(Today.stringFromDate(NSDate())).docx") 

    // Create local filesystem URL 
    let localURL: NSURL! = NSURL(string: "file:///tmp/today.docx") 


     // Download to the local filesystem 
     let downloadTask = Ref_Bulletin.writeToFile(localURL) { (URL, error) -> Void in 
      if (error != nil) { 
       print(error.debugDescription) 
       // Uh-oh, an error occurred! 
      } else { 
       print("Working As Expected") 
       self.Web_View.loadRequest(NSURLRequest(URL: localURL)) 
      } 

Also, was dieses Problem verursacht, und wie kann ich es beheben?

Update:

Also habe ich versucht, das Verzeichnis zu erstellen, aber ich höre, daß ich habe keine Berechtigung, obwohl die Dokumentation sagt, dass ich auf die tmp schreiben kann.

Unable to create directory Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “today.docx” in the folder “h”." UserInfo={NSFilePath=/tmp/h/today.docx, NSUnderlyingError=0x1702498a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

Dies ist der Code für die Erstellung des Verzeichnisses:

do { 
     try NSFileManager.defaultManager().createDirectoryAtPath(localURL.path!, withIntermediateDirectories: true, attributes: nil) 
    } catch let error as NSError { 
     NSLog("Unable to create directory \(error.debugDescription)") 
    } 
+0

Mögliches Duplikat von [Firebase-Speicher: Versuch, in lokale Datei zu speichern, gibt einen Fehler] (http://stackoverflow.com/questions/37792882/firebase-store-trying-to-store-to-local-file-gives -an-error) –

+0

Sieht so aus, als ob es ein iOS-Problem ist: https://forums.developer.apple.com/thread/19844 –

+0

@MikeMcDonald Aber die Antwort, mit der du mich verlinkt hast, sagt, ich kann an tmp schreiben, ich habe meine aktualisiert Frage. –

Antwort

3

Ich gehe davon aus, dass das Problem hier ist, dass die tmp und Documents Verzeichnisse Leben nicht wirklich an /tmp und /Documents (zum Beispiel, es scheint, als ob /Documents/User/Documents ist eigentlich, was /private/var/mobile/Documents tatsächlich ist, siehe: https://www.theiphonewiki.com/wiki/)

Sie über wollen sicherstellen, dass Sie Ihre Datei-URLs basiert weg sind zu schaffen, wo das System die Verzeichnisse sind, anstatt eine Zeichenfolge meint:

NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; 
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"my_file"] URLByAppendingPathExtension:@"txt"]; 

oder ähnlich für NSDocumentDirectory. Warum das am Simulator funktioniert: Ich nehme an, das liegt daran, dass Sandboxing auf dem Simulator nicht wie ein echtes Gerät funktioniert und dass /tmp anscheinend ein gültiger Speicherort ist, an den Sie schreiben können (obwohl wahrscheinlich nicht der gewünschte) um zwei zu schreiben, wie von iOS gezeigt wird, das einen zischenden Anfall wirft, wenn Sie versuchen, es auf einem realen Gerät zu tun).

+0

Danke Mike, es funktioniert jetzt. Ich glaube jedoch nicht, dass dies in den anderen Fragen erwähnt wurde. –