无法在应用扩展程序的共享容器中找到文件

时间:2016-06-26 16:52:44

标签: ios swift filepath ios-app-extension

我想在我的扩展程序中写日志文件,并在我的应用程序中阅读它。 为此,我正在使用共享组(因此应用程序和扩展程序都可以从同一个文件中读取)

我写了以下代码:

扩展:

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(只是为了阅读日志文件):

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 个答案:

答案 0 :(得分:2)

问题与app扩展或CocoaLumberjack无关。

stringByAppendingString只是连接字符串,以便路径 生成的目录名中缺少分隔符“/”。

然而,有一种专用方法stringByAppendingPathComponent 已在Objective-C中弃用,并且在Swift中不再可用。 您应该使用URLByAppendingPathComponent对网址进行操作 代替:

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