No ObservableObject of Type "" found.

Im building an recipe app for the social media of my mother. i already have the functionality for the users, when a user gets created an empty array gets initiated at the database named favoriteRecipes, which stores the id of his favorite recipes to show in a view. This is my AuthViewModel which is relevant for the user stuff:

import Firebase
import FirebaseAuth
import FirebaseFirestore

protocol AuthenticationFormProtocol {
    var formIsValid: Bool { get }
}


@MainActor
class AuthViewModel : ObservableObject {
    @Published var userSession: FirebaseAuth.User?
    @Published var currentUser: User?
    @Published var currentUserId: String?
    
    init() {
        self.userSession = Auth.auth().currentUser
        
        Task {
            await fetchUser()
        }
    }
    
    func signIn(withEmail email: String, password: String) async throws {
        do {
            let result = try await Auth.auth().signIn(withEmail: email, password: password)
            self.userSession = result.user
            await fetchUser() // fetch user sonst profileview blank
        } catch {
           print("DEBUG: Failed to log in with error \(error.localizedDescription)")
        }
    }
    
    func createUser(withEmail email: String, password: String, fullName: String) async throws {
        do {
            let result = try await Auth.auth().createUser(withEmail: email, password: password)
            self.userSession = result.user
            let user = User(id: result.user.uid, fullName: fullName, email: email)
            let encodedUser =  try Firestore.Encoder().encode(user)
            try await Firestore.firestore().collection("users").document(result.user.uid).setData(encodedUser)
            await fetchUser()
        } catch {
            print("Debug: Failed to create user with error \(error.localizedDescription)")
        }
    }
    
    func signOut() {
        do  {
            try Auth.auth().signOut() // sign out user on backend
            self.userSession = nil // wipe out user session and take back to login screen
            self.currentUser = nil // wipe out current user data model
        } catch {
            print("DEBUG: Failed to sign out with error \(error.localizedDescription)")
        }
    }
    
    func deleteAcocount() {
        let user = Auth.auth().currentUser

        user?.delete { error in
          if let error = error {
            print("DEBUG: Error deleting user: \(error.localizedDescription)")
          } else {
              self.userSession = nil
              self.currentUser = nil 
          }
        }
    }
    
    func fetchUser() async {
        guard let uid = Auth.auth().currentUser?.uid else { return }
        currentUserId = uid
        
        let userRef = Firestore.firestore().collection("users").document(uid)
        do {
            let snapshot = try await userRef.getDocument()
            if snapshot.exists {
                self.currentUser = try? snapshot.data(as: User.self)
                print("DEBUG: current user is \(String(describing: self.currentUser))")
            } else {
                // Benutzer existiert nicht mehr in Firebase, daher setzen wir die userSession auf nil
                self.userSession = nil
                self.currentUser = nil
            }
        } catch {
            print("DEBUG: Fehler beim Laden des Benutzers: \(error.localizedDescription)")
        }
    }
}

This is the code to fetch the favorite recipes, i use the id of the user to access the collection and get the favoriteRecipes out of the array:

import SwiftUI

@MainActor
class FavoriteRecipeViewModel: ObservableObject {
    @Published var favoriteRecipes: [Recipe] = []
    @EnvironmentObject var viewModel: AuthViewModel
    
    private var db = Firestore.firestore()
    
    init() {
        Task {
            await fetchFavoriteRecipes()
        }
    }
    
    func fetchFavoriteRecipes() async{
        let userRef = db.collection("users").document(viewModel.userSession?.uid ?? "")
        
        do {
            let snapshot = try await userRef.collection("favoriteRecipes").getDocuments()
            let favoriteIDs =  snapshot.documents.map { $0.documentID }
            let favoriteRecipes = try await fetchRecipes(recipeIDs: favoriteIDs)
            
            
        } catch {
            print("DEBUG: Failed to load favorite recipes for user: \(error.localizedDescription)")
        }
  }
    
    func fetchRecipes(recipeIDs: [String]) async throws -> [Recipe] {
        var recipes: [Recipe] = []
        for id in recipeIDs {
            let snapshot = try await db.collection("recipes").document(id).getDocument()
            if let recipe = try? snapshot.data(as: Recipe.self) {
                recipes.append(recipe)

            }
        }
        return recipes
    }
    
}

Now the Problem occurs at the build of the project, i get the error

SwiftUICore/EnvironmentObject.swift:92: Fatal error: No ObservableObject of type AuthViewModel found. A View.environmentObject(_:) for AuthViewModel may be missing as an ancestor of this view.

I already passed the ViewModel instances as EnvironmentObject in the App Struct.

import SwiftUI
import FirebaseCore


class AppDelegate: NSObject, UIApplicationDelegate {
  func application(_ application: UIApplication,
                   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    FirebaseApp.configure()

    return true
  }
}

@main
struct NimetAndSonApp: App {
    @StateObject var viewModel = AuthViewModel()
    @StateObject var recipeViewModel = RecipeViewModel()
    @StateObject var favoriteRecipeViewModel = FavoriteRecipeViewModel()
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(viewModel)
                .environmentObject(recipeViewModel)
                .environmentObject(favoriteRecipeViewModel)
        }
    }
}

The problem is that you use @environmentObject inside a class and not a View.

It is not allowed to do so.

A solution here: https://stackoverflow.com/questions/65370698/how-to-access-a-global-environment-object-in-a-class

No ObservableObject of Type "" found.
 
 
Q