In a mixing bowl, combine yogurt, lemon juice, oil, cumin, coriander, garam masala, turmeric, chili powder, salt, garlic, and ginger. Mix well.
Cut the chicken breasts into bite-sized pieces and add them to the marinade. Coat well, cover, and refrigerate for at least 30 minutes or up to overnight for deeper flavor.
If using wooden skewers, soak them in water for 30 minutes to prevent burning. Preheat your grill or oven to 200°C (400°F).
Thread the marinated chicken onto skewers and grill or bake for about 15-20 minutes, turning occasionally, until cooked through and slightly charred.
While the chicken is cooking, heat the oil in a large skillet over medium heat. Add chopped onions and sauté until softened, about 5 minutes.
Stir in minced garlic and grated ginger, cooking for an additional 1-2 minutes until fragrant.
Add the diced tomatoes, stirring well. Simmer for about 10 minutes until the sauce thickens.
Lower the heat, add heavy cream, garam masala, cumin, coriander, and salt to taste, stirring gently to combine. Simmer for 5-10 minutes.
Once the chicken is done, remove it from the skewers and add it to the sauce. Cook for an additional 5 minutes to allow the flavors to meld.
Garnish with fresh cilantro before serving.