来自部署在设备上的应用程序的iOS os.log
我正在使用新的来自部署在设备上的应用程序的iOS os.log,ios,swift,xcode,logging,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 uplo
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)
}
}
日志显示在Console.app
中,这与我从Xcode调试应用程序时的预期一致。但是,是否有可能以某种方式从部署在设备上的应用程序实例检索记录的字符串?我正在远离笔记本电脑的“现场”测试我的应用程序,并希望将收集到的日志转储到文本文件中
我是否需要以某种方式配置日志记录器以持久存储日志,或者只能从已部署的应用程序获取崩溃报告
注意:我使用的是Swift 4/Xcode 9+
我相信你可以用这个答案来解决这个问题: 总结如下: 第一步 将以下代码添加到
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
中添加:
备选案文1
作为属性列表项:
“应用程序支持iTunes文件共享”并设置为“是”
备选案文2
作为源代码:
<key>UIFileSharingEnabled</key>
<true/>
UIFileSharingEnabled
请参见根据联机信息,操作系统日志
日志存储在设备的/var/db/diagnostics/中,您可以稍后从那里检索日志并在控制台中打开它们。但我自己并没有试过。@matt但这家伙似乎创建了一个自定义解决方案来手动将日志写入特定文件。我想改用os.log
代替=)@matt有趣的是,应用程序的容器中没有/var/db/diagnostics/path。你发现了吗?这很好用。只需导入操作系统,并使用操作系统日志。下载应用程序的容器,或使用iTunes文件共享。