我最近需要在启动时调试应用程序的问题,这是因为文件已发送到应用程序中,但是该应用程序未运行(已被强制终止),这意味着该应用程序当时未附加到Xcode。我决定切换到使用统一日志记录,而不只是打印语句。我执行打印的代码是集中的,因此部分工作并不困难,我能够使用os_log将其切换到并在Mac上的Console应用程序中查看输出。我遇到的问题是,在控制台中查看时,某些输出全为乱码,无法正确显示。在Xcode中查看时,os_log语句可以正常打印,只有在控制台中查看时
这是我用来调用os_log的代码:
struct Log {
static let cwp = OSLog(subsystem: “com.mycompany.myappname”, category: "table")
}
class Logger {
class func log(_ items: Any...)
{
let msg = NSArray(array: items).componentsJoined(by: " ")
os_log("%{public}@", log: Log.cwp, type: .info, msg)
}
}
使用此方法调用我的方法时:
Logger.log(url.absoluteString) // url is URL object
我在控制台中出现奇怪的行为。如果文件名中包含一些空格,我可能会看到这个(文件名是new motif1.cwp
)
或其他带有空格的文件名(这个是my filename.cwp
,我得到的是:
只有文件名中没有空格,它才能正确显示。有没有办法让它正确解码字符串并在Console中显示?当我从连接的设备或模拟器实时流式传输日志时,XCode内部控制台显示它很好。当用户要将文件名导入我的应用程序时,我将无法控制他们将拥有哪些文件名。
我正在使用Xcode 10.2.1,Swift 5,控制台显示版本1.1(3.0.17)