Экспорт журналов CocoaLumberjack с помощью UIActivityViewController

В одном из моих приложений в прошлом я мог позволить пользователям экспортировать журналы CocoaLumberjack с устройства, используя UIActivityViewController, передавая массив URL-адресов файлов, указывающих на журналы на устройстве пользователя.

Однако, хотя я (думаю, я) перенес тот же код из моего старого приложения, я не могу получить какие-либо параметры для отображения в UIActivityViewController ни на устройстве, ни на симуляторе. Все, что я получаю, это «больше»:

Пустой 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, я смогу перейти к журналам на диске и даже открыть их в консоли, как и любые другие журналы.


person Kane Cheshire    schedule 25.04.2019    source источник


Ответы (1)


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

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

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

person Kane Cheshire    schedule 25.04.2019