使用UIActivityViewController导出CocoaLumberjack日志

时间:2019-04-25 07:51:32

标签: ios swift lumberjack cocoalumberjack

在过去的一个应用中,我允许用户使用UIActivityViewController从设备中导出CocoaLumberjack日志,并传入指向用户设备上日志的文件URL数组。

但是,即使我(认为我)已经从旧版应用程序移植了相同的代码,也无法在设备或模拟器上的UIActivityViewController中显示任何选项。我得到的只是“更多”:

Empty UIActivityViewController

在我的其他应用程序中,我可以选择与大多数其他文件一样共享到Slack,Mail,Files等。

要尝试了解我在做什么错,我创建了一个示例项目,但仍然遇到相同的问题。代码非常简单,所以我现在对可能的问题不知所措,我知道这是可能的,因为我已经(以某种方式)在另一个应用程序中使它工作了。这是示例应用程序中的代码:

AppDelegate.swift

import CocoaLumberjack

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        DDLog.add(DDOSLogger.sharedInstance)
        let fileLogger = DDFileLogger()
        fileLogger.rollingFrequency = 60 * 60 * 24
        fileLogger.logFileManager.maximumNumberOfLogFiles = 7
        DDLog.add(fileLogger)
        DDLogInfo("Did finish launching")
        return true
    }


}

ViewController.swift

import CocoaLumberjack

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        DDLogInfo("View did load")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        guard let fileLogger = DDLog.allLoggers.compactMap({ $0 as? DDFileLogger }).first else { fatalError() }
        let logURLs = fileLogger.logFileManager.sortedLogFilePaths.map { URL(fileURLWithPath: $0) }
        let controller = UIActivityViewController(activityItems: [logURLs], applicationActivities: nil)
        present(controller, animated: true)
    }


}

我已经三倍地检查了设备和模拟器上磁盘上是否存在日志,并且它们确实存在。如果我检查logURLs常量中的URL,就可以导航到磁盘上的日志,甚至可以像其他任何日志一样在控制台中打开它们。

1 个答案:

答案 0 :(得分:0)

休息一会儿,看一下我发布的上一个答案后,我正确地弄明白了。之所以不起作用,是因为在创建UIActivityViewController时,我在另一个数组内部传递了一个URL数组。

所以这一行:UIActivityViewController(activityItems: [logURLs], applicationActivities: nil)

应为:UIActivityViewController(activityItems: logURLs, applicationActivities: nil)