2016-06-26 16 views
0

Ich möchte die Protokolldatei unter meiner Erweiterung schreiben und sie in meiner App lesen. Dazu verwende ich Gruppen geteilt (also sowohl die App und die Erweiterung aus der gleichen Datei zu lesen, wären in der Lage)Datei im gemeinsam genutzten Container der App-Erweiterung kann nicht gefunden werden

ich den folgenden Code geschrieben:

Erweiterung:

let fileManager = NSFileManager.defaultManager() 
let containerUrl = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.MyCompany.MyProj") 

let extensionLogDirectory = containerUrl?.path?.stringByAppendingString("AppExtensionLogs") 
let logFileManager = DDLogFileManagerDefault(logsDirectory: extensionLogDirectory) 
PacketTunnelProvider.fileLogger = DDFileLogger(logFileManager: logFileManager) 

PacketTunnelProvider.fileLogger!.rollingFrequency = 60*60*12 
PacketTunnelProvider.fileLogger!.logFileManager.maximumNumberOfLogFiles = 1 
DDLog.addLogger(PacketTunnelProvider.fileLogger) 

App (nur die Log-Datei zu lesen):

let fileManager = NSFileManager.defaultManager() 
     let containerUrl = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.MyCompany.MyProj") 
     if let extensionLogDirectory = containerUrl?.path?.stringByAppendingString("AppExtensionLogs") { 
      do { 
       let directoryContents = try fileManager.contentsOfDirectoryAtPath(extensionLogDirectory)//always fails 
       for file in directoryContents { 
        let path = extensionLogDirectory.stringByAppendingString(file) 
        do { 
         let fileContents = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) 
         NSLog("file: \(fileContents)") 
        } 
        catch {/* error handling here */ 

        } 
       } 
      } 
      catch {/* error handling here */ 
       NSLog("nope!") 
      } 

Aber jetzt etwas richtig - es ist scheint wie contentsOfDirectoryAtPath immer mit „keine solche Datei“ schlägt fehl Fehler Was ist falsch in diesem Code?

+1

Wahrscheinlich „stringByAppendingString“ sollte „stringByAppendingPathComponent“ (oder besser „URLByAppendingPathComponent“) - Wenn Sie die erstellten Pfade einloggen dann werden Sie sehen, dass das Pfadtrennzeichen "/" fehlt :) –

+0

Danke! Das war's. Sende es als Antwort und ich akzeptiere es als korrekt – Roee84

Antwort

1

Das Problem hat nichts mit App-Erweiterungen oder CocoaLumberjack zu tun.

stringByAppendingString verkettet nur Zeichenfolgen, so dass der Pfad Trennzeichen "/" im generierten Verzeichnisnamen fehlt.

Es gab eine dedizierte Methode stringByAppendingPathComponent, die jedoch in Objective-C veraltet ist und in Swift nicht mehr verfügbar ist. Sie auf die URL arbeiten sollten über URLByAppendingPathComponent statt:

let extensionLogDirectory = containerUrl?.URLByAppendingPathComponent("AppExtensionLogs").path