'SwiftUI / Xcode Error - Updating took more than 5 seconds
When I try to preview one of my views in the canvas I keep getting the following error:
PreviewUpdateTimedOutError: Updating took more than 5 seconds
All my other views load perfectly fine.
Why is this happening and how do I resolve?
I am using SwiftUI in Xcode 11.4 (public release)
Solution 1:[1]
I stopped using the simulator and chose "Any iOS Device" and that solved the problem.
Solution 2:[2]
In my case the issue was this line in Build settings:
Something I did accidentally changed signing settings in my project. Specifically, "signing identity" was set to "Sign to Run Locally.". For some reasons, SwiftUI Previews don't work then.
Simply deleting this line from build settings (aka setting default value) solved the problem.
Solution 3:[3]
Some time, the error displaying is not the real error.
For me it was because i missing : .environmentObject(...)
Solution 4:[4]
As of Xcode 12.5.1, the message PreviewUpdateTimedOutError: Updating took more than 5 seconds
most likely means that your app crashed and thus updating the preview failed. The real reason for the crash is unfortunately obscured by this useless message (why Apple would do that is beyond me). To get at the real reason, you'll need to:
- click
Diagnostics
at the top of the preview next to the useless error message - in the next dialog, click
Generate Report
>Reveal in Finder
This will take a bit. Then Finder will open with a folder highlighted. Open that folder. Inside you'll see a lot of log files and folders.
If your app indeed crashed, you'll see a folder called CrashLogs
which contains crash logs for your app, including the error message and stack trace. This should help you resolve the actual error causing the preview to break.
Note that for me, sometimes the CrashLogs
were not included in the report even though my app really did crash. Retrying the preview and generating another report fixed this for me. The whole error reporting process seems to be rather unstable for the previews, unfortunately.
Solution 5:[5]
Try Clean (Shift + ? + K) and Build (? + B) to build again the SwiftUI project, it works in Xcode 11.6. Try building a basic hello world app.
Solution 6:[6]
In my case the issue was that the PreviewProvider
was marked private
. Simply make it internal
or remove the private
access modifier.
private /* <- remove */ struct YourView_Previews: PreviewProvider {
static var previews: some View {
// Your previews
}
}
Solution 7:[7]
In my case viewModel required to display SwiftUI_preview was doing a call to a CoreData (fast call) in the init of the viewModel.
Moved actual call of that "reload() method" so it's not called on preview, fixed.
(I believe the correct way is to use mocked protocol instead of instance of the viewModel)
Solution 8:[8]
If you have an .onAppear clause, try commenting that out for preview.
Solution 9:[9]
None of these suggestions helped me but I did discover that you can't rely entirely on a successful build to pick up all issues. In my case I had '.modifier(modifier:)' entered incorrectly as 'modifier(modifier:)'. My code built successfully but my preview did not work until I added the period before modifier.
Solution 10:[10]
For me the issue was related to a force unwrapping of an element not being found at preview time.
Note: Always check the diagnostics report. The issue will be at the top section after termination reason.
Solution 11:[11]
I am using Version 13.2.1 (13C100). I have Clean (Shift + ? + K) and Build (? + B) the project. But, the problem remains.
Then, just restarted Xcode. And the problem gone.
Solution 12:[12]
In my case the canvas/screen size was smaller than the content, so simply wrapping my content in the scrollView do remove the error and displaying the content in the canvas.
Solution 13:[13]
I had a fatalError("...")
in my code, which I only figured out after reading the diagnostic logs. Would be nice if SwiftUI actually hinted this!
You can get the diagnostics by clicking "Diagnostics" next to "Try Again" at the top of the preview window.
To summarise lots of answers here, it seems that the preview taking a while to update is the equivalent of a crash, when running on a real device or on the simulator.
Solution 14:[14]
First comment out all the environment Objects are used for the particular View. Once you get preview then uncomment it to run the build. This trick works for me
//@EnvironmentObject var observerObj:PropertyObserver
Solution 15:[15]
I had this issue as well, and nothing fixed the problem. I am now on 11.6 and after updating the issue went away. I think it might be a problem with Xcode 11.4.
I'd suggest updating Xcode if possible.
Solution 16:[16]
In SwiftUI, you couldn't add more than 10 subviews into your contentview, otherwise it couldn't compile.
Solution 17:[17]
I had the same problem, then I started to comment out the subViews inside my main view, one by one & try to preview again then I found out the problem was caused because I forgot to put a dot before one of the subViews attributes.
So that's how I fixed it.
Solution 18:[18]
The reason is because its unable to find the landmarkData.json file. To resolve this,
- select landmark.json file in Resources.
- Show Inspectors ( top right icon )
- Select show file inspector
- Under Target membership, select / check Landmarks
This should resolve the preview issue.
Solution 19:[19]
For some reason, in SwiftUI, when I embeded Text in Scroll View and VStack, this error occurred. After few unsuccessful attempts to fix this by clearing and building project, I deleted code and wrote it down again, same as it was. Now it is working.
Solution 20:[20]
I had my run device set to a real device I use for testing. When I changed that to one in the simulator it started working again.
Solution 21:[21]
Similar to @YannSteph, this happened to me because I put the .environmentObject()
at the app entry point where it creates the first view:
@main
struct RecipeApp: App {
var body: some Scene {
WindowGroup {
RecipeTabView()
.environmentObject(RecipeModel())
}
}
}
But this prevented the preview from working. I thought I was being smart putting it there, so all the views could have access to it, but it just crashed the preview.
Moving it back into the main View.Swift
file that is my app's starting view fixed the preview issue.
^^^
EDIT: Ran into this again when I didn't put the .environmentObject()
in the struct
for the preview. Probably a rookie mistake but there appears to be many ways to trigger this error.
Solution 22:[22]
I had the same issue after creating a brand new Multiplatform App project using Xcode 12.5. Based on the solutions above I followed a hunch and now believe that the issue is due to invalid path parameters.
After renaming the Schemes and Targets from (iOS)
to .iOS
(and the same for macOS), to remove spaces and brackets, it is now working.
Solution 23:[23]
I had this issue after changing bundle id and signing from personal to team.
After changing device to Any device as advised here, I received another error description, saying
Could not install the preview host "AppName.app" on iPhone 12 Pro Max
agentBundle = com.bundle.Its.AppName { url: file:///Users/macbookair/Library/Developer/Xcode/DerivedData/AppName-> desupjbpqvjlegfbskxydixpouvc/Build/Intermediates.noindex/Previews/AppName/Prod> ucts/Debug-iphonesimulator/AppName.app > version: 49557 signingInformation: Code Signing { identifier: com.bundle.AppName hasGetTaskAllow: false isSandboxed: false } }
Clean build, deleting Derived, Deleting all apps installed on simulators, cleaning Xcode Cache, restarting Xcode and Mac didn't help.
What had helped was creating new project with initially correct bundle id and copying all my files there.
Solution 24:[24]
I have got into the same issue on Xcode 12.4, but the code works fine on Xcode 13.0.
Solution 25:[25]
I was following the IOS App Dev Tutorial, where one creates an app named ScrumDinger. I ran into this issue at Displaying Data in List
In my case the problem was that I wrote in CardView.swift
HStack {
Label("\(scrum.attendees.count)", systemImage: "person.3")
accessibilityLabel("\(scrum.attendees.count) attendees")
instead of
HStack {
Label("\(scrum.attendees.count)", systemImage: "person.3")
.accessibilityLabel("\(scrum.attendees.count) attendees")
The missing dot before accessibilityLabel
was the problem.
Tutorial: https://developer.apple.com/tutorials/app-dev-training/displaying-data-in-a-list
Solution 26:[26]
In my case the issue was that I was trying to preview a view with a fixed width (.previewLayout(.fixed(width: 344, height: 220))
) wider than the selected simulator (iPhone SE 1st generation) ?
Solution 27:[27]
I get this error often. My last time of occurrence, I had "gesture" instead of ".gesture". Usually its best to just need to find the error in your code yourself because Xcode does not point out the issue directly.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow