Экспорт журналов CocoaLumberjack с помощью UIActivityViewController - PullRequest
0 голосов
/ 25 апреля 2019

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


}

Я утроил, проверил, существуют ли журналы на диске, как на устройстве, так и на симуляторе, и они есть.Если я проверяю URL-адреса в константе logURLs, я могу перейти к журналам на диске и даже открыть их в консоли так же хорошо, как и любые другие журналы.

1 Ответ

0 голосов
/ 25 апреля 2019

Я правильно понял это после перерыва и просмотра предыдущего ответа, который я написал. Причина, по которой это не сработало, заключается в том, что я передавал массив URL-адресов внутри другого массива при создании UIActivityViewController.

Итак, эта строка: UIActivityViewController(activityItems: [logURLs], applicationActivities: nil)

Должно быть: UIActivityViewController(activityItems: logURLs, applicationActivities: nil)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...