来自部署在设备上的应用程序的iOS os.log

时间:2018-05-21 15:54:41

标签: ios swift xcode logging

我正在使用新的os.log内容登录我的应用程序,如下所示:

import os.log

class ViewController: UIViewController {
    // a bunch of methods
}

extension OSLog {
    static let ui = OSLog(subsystem: "io.my.app", category: "ui")
}

extension ViewController {        
    func upload(locations: [LocationProtocol]) {
        os_log("Sending locations to server", log: .ui, type: .debug)
        self.server_api.send(locations)
    }
}

当我从Xcode调试应用程序时,日志显示在Console.app中。但是有可能以某种方式从部署在设备上的应用程序实例中检索记录的字符串吗?我正在测试我的应用程序“在现场”,远离笔记本电脑,并希望将收集的日志转储到文本文件中。

我是否需要以某种方式配置记录器以持久存储日志,或者只能从已部署的应用程序获取崩溃报告?

  

注意:我使用的是 Swift 4 / Xcode 9 +

1 个答案:

答案 0 :(得分:1)

我相信您可以通过以下答案解决此问题:https://stackoverflow.com/a/13303081/2136375

总结:

步骤1

将以下代码添加到didFinishLaunchingWithOptions中,以使应用能够登录到文件:

var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let deviceName = UIDevice.current.name
let fileName = "\(deviceName) - \(Date()).log"
let logFilePath = (documentsDirectory as NSString).appendingPathComponent(fileName) freopen(logFilePath.cString(using: String.Encoding.ascii)!, "a+", stderr)

步骤2

info.plist中添加:

Alt 1

作为属性列表项:

“应用程序支持iTunes文件共享”并设置为“是”。

替代2

作为源代码:

<key>UIFileSharingEnabled</key>
<true/>