我正在开发一个 iOS 14 小部件,我希望将其添加到我现有的 iOS 11+ 应用程序中。整个过程相当繁琐,因为经常会出现某些事情没有按预期工作的情况。
例如,小部件显示意外的数据,或者未按预期呈现(例如,如此处所述)。我认为当系统从我的应用程序扩展请求小部件及其内容时出现了问题。但我无法弄清楚这可能是什么。
有什么方法可以实际调试小部件扩展吗?查看代码何时执行以及它是如何工作的?
我已经尝试将调试器连接到小部件扩展(使用 Xcode 中的
Debug/Attach to process
菜单)。虽然进程在那里列出,但调试器没有显示日志输出,也没有在断点处停止。
使用系统控制台显示 iOS 模拟器设备的日志也不起作用。使用
print(...)
或 NSLog(...)
并不重要。控制台没有输出。
Xcode左上角->
Xcode:版本 12.3,iPad:iPadOS 14.3
这对我有用。
由于我找不到其他方法来调试小部件扩展,因此我编写了一个日志记录方法,它将日志输出添加到应用程序组文件夹中的文件中:
static func logToFile(_ text: String) {
if let documentsDirectory = FileManager().containerURL(forSecurityApplicationGroupIdentifier: "my.app.group.key") {
let logFileUrl = documentsDirectory.appendingPathComponent("log.txt")
do {
var logContent = try String(contentsOf: logFileUrl, encoding: .utf8)
logContent = (logContent.count > 0 ? "\(text)\n\(logContent)" : text)
try logContent.write(to: logFileUrl, atomically: false, encoding: .utf8)
}
catch {}
}
}
这不是最好的解决方案,但迄今为止我发现的唯一一个。
在 Xcode 左上角选择您的小部件目标,构建并运行应用程序, 然后小部件进程将能够调试并显示日志。 (此示例项目由Apple提供下载:https://developer.apple.com/documentation/widgetkit/building_widgets_using_widgetkit_and_swiftui)
我也遇到过这个问题。当我在 Xcode 中运行小部件扩展时,日志未显示(或仅有时显示)。
经过几个小时的调试,为我解决的问题是插入我的实际设备(iPhone 12 Pro Max)并在该物理设备而不是模拟器上运行小部件。
这里似乎是 Xcode 错误。 对我来说快速修复是通过 cmd + shift + y 手动打开日志控制台。 并且还添加断点。 然后运行小部件来查看日志。
尝试在扩展程序中禁用位代码,在我这样做之前我很难获取日志。