'SwiftUI 2.0 CoreData issues with new project - 'Cannot find type 'Item' in scope'

[EDIT] I was hoping that Apple would have fixed what is obviously a bug. The solution is to clear the cache, close and reopen Xcode..

I am on Xcode Beta and starting a new project and without writing a single line of code I already get an error. I could not find anything online. Perhaps is this too new?

In the new version of Xcode I selected new Project,

selecting new project

then ticked the box with Core Data

ticking the box Core Data

If I do not tick the box I would get the usual Xcode SwiftUI template with "hello world", but ticking the Core Data box I get a ton more template code from Apple and without touching anything and without changing a single line of code, I get an error message compiling it..

Error

The error is: "Cannot find Item in scope"

Quite frustrating, especially because all tutorials I have start with the classic 'AppDelegate' file configuration.. while the new SwiftUI is 'universal'!

I checked the file .xcdatamodeld and it looks fine, and has the 'Item' entity. Why it doesn't compile?

So I am now at a loss, is there a solution or this is a bug and need to wait that Apple releases a fix. If so I do not need to start with a new project until then!

PS Today I cleaned the cache with CMD-ALT-SHIFT-K, closed Xcode, deleted the app from the simulator, reopened, rebuilt and it did compile.. but nothing in the simulator! We are making progress! Still I did not change a line of code. Everything is the Apple template yet!

enter image description here



Solution 1:[1]

The normal Xcode clearing works for me:

  1. Clean build folder (SHIFT + COMMAND + K)

  2. Quit Xcode completely

  3. Delete the project's contents in, DerivedData/{Project Name}_some_hash

    The default location is ~/Library/Developer/Xcode/DerivedData, but if it's nowhere to be found, check the Derived Data property under, Xcode ? Preferences ? Locations

  4. Try again (run Xcode & build)

Solution 2:[2]

For a brand new project, press Command+B to build and it will be fine.

Solution 3:[3]

Firstly it's not an issue with your app but an issue with a preview. Your app works properly on the simulator. The white screen is because you need to wrap your list with NavigationView() to see add and edit button. See this answer: https://stackoverflow.com/a/66234095/15224199

After that, you will see add and edit button on the simulator. But you have to fix the preview too. It doesn't work because you have an empty entity and you need to mock it. Go to Persistance.swift and you should add similar for loop as mine to create mocked Items in preview varable:

static var preview: PersistenceController = {
    let result = PersistenceController(inMemory: true)
    let viewContext = result.container.viewContext
    for _ in 0..<10 {
        let newItem = Item(context: viewContext)
        newItem.timestamp = Date()
    }
    do {
        try viewContext.save()
    } catch {
        // Replace this implementation with code to handle the error appropriately.
        // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        let nsError = error as NSError
        fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
    }
    return result
}()

At the end make sure that your preview use those mocked values:

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
    ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
}

After that, it should work perfectly fine, hope it helps. I don't know why Apple provides a template that doesn't work properly at the beginning.

Solution 4:[4]

I didn't find any of the others answers worked for me, but what did was:

  • Opening (ProjectName).xcdatamodel
  • Adding an attribute to the Item entity, shouldn't relly matter what, I just add "foo" of type "String"
  • Cmd-B to build (You are then free to delete the new attribute).

Solution 5:[5]

If you still have problems, you may forgot to add your .xcdatamodel file to the Test Target.

Target Memgership

Solution 6:[6]

Project Clean and Build works for me.

Solution 7:[7]

In my case the problem was: Core data was extending model, but i newer created struct model for it to extend... silly mistake... When you get cant find in scope error always read the line above (with warning) thats most likely the real problem...

Solution 8:[8]

Just clean build folder and restart Xcode works for me.

  1. Clean build folder (SHIFT + COMMAND + K)
  2. Quit Xcode and start again

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Zach Young
Solution 2 Jacob
Solution 3 Jakub Jakubowski
Solution 4 The Mad Bug
Solution 5 SteffenK
Solution 6 Manish
Solution 7 Tomáš Vyhnálek
Solution 8 Singh