如何在 Xcode 12 中调试 iOS 14 小部件?
How to debug iOS 14 widget in Xcode 12?
我正在开发一个 iOS 14 小部件,我希望它适用于我现有的 iOS 11+ 应用程序。整个过程相当繁琐,因为经常会发生某些事情没有按预期工作的情况。
例如,小部件显示意外数据,或未按预期呈现 (e.g. as described here)。我假设当系统从我的应用程序扩展中请求小部件及其内容时出现问题。但是我不知道这可能是什么。
有什么方法可以实际调试小部件扩展吗?查看代码何时执行以及它是如何工作的?
我已经尝试将调试器连接到小部件扩展(使用 Xcode 中的 Debug/Attach to process
菜单)。虽然进程在那里列出,但调试器没有显示日志输出,也没有在断点处停止。
使用系统控制台显示 iOS 模拟器设备的日志也不起作用。使用 print(...)
或 NSLog(...)
无关紧要。没有输出到达控制台。
因为我没有找到调试小部件扩展的其他方法,所以我编写了一个日志记录方法,它将日志输出添加到应用程序组文件夹的一个文件中:
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 {}
}
}
不是最好的解决方案,但我目前找到的唯一一个。
Select 您的小部件目标位于 Xcode 的左上角,构建并 运行 应用程序,
然后小部件进程将能够调试和显示日志。
(本示例工程由Apple提供下载:https://developer.apple.com/documentation/widgetkit/building_widgets_using_widgetkit_and_swiftui)
这里似乎有 Xcode 错误。
对我来说快速修复是通过 cmd + shift + y 手动打开日志控制台。
并且还要加断点。
然后 运行 小部件查看日志。
尝试在您的扩展中禁用位码,在我这样做之前我很难获取日志。
我也 运行 关注这个问题。当我 运行 我在 Xcode 中的小部件扩展时,日志没有显示(或仅有时显示)。
经过几个小时的调试,为我解决问题的是插入我的实际设备 (iPhone 12 Pro Max) 并 运行 在该物理设备而不是模拟器上安装小部件.
左上角 Xcode->
- 点击项目名称,可以看到一个列表,selectwidgetname,运行it
- 点击小部件名称,可以看到一个列表,select 项目名称,运行它
Xcode:版本 12.3,iPad:iPadOS 14.3
这对我有用。
我正在开发一个 iOS 14 小部件,我希望它适用于我现有的 iOS 11+ 应用程序。整个过程相当繁琐,因为经常会发生某些事情没有按预期工作的情况。
例如,小部件显示意外数据,或未按预期呈现 (e.g. as described here)。我假设当系统从我的应用程序扩展中请求小部件及其内容时出现问题。但是我不知道这可能是什么。
有什么方法可以实际调试小部件扩展吗?查看代码何时执行以及它是如何工作的?
我已经尝试将调试器连接到小部件扩展(使用 Xcode 中的 Debug/Attach to process
菜单)。虽然进程在那里列出,但调试器没有显示日志输出,也没有在断点处停止。
使用系统控制台显示 iOS 模拟器设备的日志也不起作用。使用 print(...)
或 NSLog(...)
无关紧要。没有输出到达控制台。
因为我没有找到调试小部件扩展的其他方法,所以我编写了一个日志记录方法,它将日志输出添加到应用程序组文件夹的一个文件中:
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 {}
}
}
不是最好的解决方案,但我目前找到的唯一一个。
Select 您的小部件目标位于 Xcode 的左上角,构建并 运行 应用程序, 然后小部件进程将能够调试和显示日志。 (本示例工程由Apple提供下载:https://developer.apple.com/documentation/widgetkit/building_widgets_using_widgetkit_and_swiftui)
这里似乎有 Xcode 错误。 对我来说快速修复是通过 cmd + shift + y 手动打开日志控制台。 并且还要加断点。 然后 运行 小部件查看日志。
尝试在您的扩展中禁用位码,在我这样做之前我很难获取日志。
我也 运行 关注这个问题。当我 运行 我在 Xcode 中的小部件扩展时,日志没有显示(或仅有时显示)。
经过几个小时的调试,为我解决问题的是插入我的实际设备 (iPhone 12 Pro Max) 并 运行 在该物理设备而不是模拟器上安装小部件.
左上角 Xcode->
- 点击项目名称,可以看到一个列表,selectwidgetname,运行it
- 点击小部件名称,可以看到一个列表,select 项目名称,运行它
Xcode:版本 12.3,iPad:iPadOS 14.3
这对我有用。