2016-06-26 7 views
0

私の拡張機能にログファイルを書き込んで、自分のアプリで読みたいと思います。この目的のために 、私は、共有グループを使用しています(そのためのアプリや拡張機能の両方が同じファイルから読み取ることができるだろう)アプリケーション拡張の共有コンテナ内のファイルが見つかりません

私は、次のコードを書いた:

拡張子:

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) 

アプリケーション(単なるログファイルを読むために):

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!") 
      } 

しかし、今何か - contentsOfDirectoryAtPathは常に「いいえそのようなファイル」で失敗するように、それはだが、思わエラー このコードで何が問題になっていますか?

+1

をおそらく: 代わりURLByAppendingPathComponent を使用してURLを操作する必要がありますパスの区切り記号 "/"がありません:) –

+0

ありがとう!それはそれだった。それを回答として投稿し、正しいものとして受け入れる – Roee84

答えて

1

問題はアプリの拡張機能やCocoaLumberjackとは関係ありません。

stringByAppendingStringは、生成されたディレクトリ名にパス " "がないように文字列を連結するだけです。

専用メソッドstringByAppendingPathComponentがありましたが、 はObjective-Cでは推奨されておらず、Swiftでは使用できません。そして、あなたが参照してくださいよ、あなたが作成したパスを記録した場合 - 「stringByAppendingPathComponent」(以上、「URLByAppendingPathComponent」)である必要があり、「stringByAppendingString」、

let extensionLogDirectory = containerUrl?.URLByAppendingPathComponent("AppExtensionLogs").path 
関連する問題