В одном из моих приложений в прошлом я мог позволить пользователям экспортировать журналы CocoaLumberjack с устройства, используя UIActivityViewController
, передавая массив 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)
}
}
Я трижды проверил наличие журналов на диске, как на устройстве, так и на симуляторе, и они существуют. Если я проверю URL-адреса в константе logURLs
, я смогу перейти к журналам на диске и даже открыть их в консоли, как и любые другие журналы.