在过去的一个应用中,我允许用户使用UIActivityViewController
从设备中导出CocoaLumberjack日志,并传入指向用户设备上日志的文件URL数组。
但是,即使我(认为我)已经从旧版应用程序移植了相同的代码,也无法在设备或模拟器上的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,就可以导航到磁盘上的日志,甚至可以像其他任何日志一样在控制台中打开它们。
答案 0 :(得分:0)
休息一会儿,看一下我发布的上一个答案后,我正确地弄明白了。之所以不起作用,是因为在创建UIActivityViewController
时,我在另一个数组内部传递了一个URL数组。
所以这一行:UIActivityViewController(activityItems: [logURLs], applicationActivities: nil)
应为:UIActivityViewController(activityItems: logURLs, applicationActivities: nil)