I am new to Xcode, macOS development etc.. So maybe its just because I am new – but I could not make a simple printout to console work with all effort.
I created a minimum nonworking example of my problem:
import SwiftUI
struct Test: View {
@State var message = "Test"
var body: some View {
Button(action: {
print("test worked")
message = "test worked"
}) {
Text(message)
}
}
}
struct Test_Previews: PreviewProvider {
static var previews: some View {
Test()
}
}
When executing this the Button text changes, but nothing appears in console.
I tried by following this tutorial, but it did not work with it either: https://www.hackingwithswift.com/read/18/2/basic-swift-debugging-using-print
I tried by enabling debug preview according to this thread: How to print() to Xcode console in SwiftUI?
And I tried by enabling this setting:
Nothing helps.. I am using Xcode Version 12.1 (12A7403) btw.
4
Answers
I have faced the same problem nothing shows in console.This helps me. Make sure you mark right side button to see the debug console.
You cannot print to the console from a SwiftUI preview.
The only possibility for outputting debug info in a preview is to display your logs in a
Text
(or any other UI element) that’s displayed in your Preview.However, if you need proper debugging, run the full app, don’t use previews. Previews are great for initial wireframes, but once you get to the stage where you need debugging, switch to using the view in your app and running that on the Simulator (or a real device) rather than using the preview.
It’s possible to debug SwiftUI previews and print in the console without launching the app on a device or simulator. From the canvas, make sure to click on "Debug preview". More info can be found on Apple website.
Xcode 12
Long press on the Live Preview button, then click on Debug Preview.
Xcode 11
Right-click (or Control-click) on the Live Preview button in the bottom right corner of the preview.
I’m also having the same problem. I think it’s a bug. I am pretty sure it was working on some previous xcode versions.
Anyway as a workaround you can just set a breakpoint on the line where you ‘d like to log something and manually set a debugger command action like you can see in the picture.
Don’t forget to tick the checkbox if you want to just print the log without actually stopping.