Bring a large pot of salted water to a boil. Add potatoes and cook until tender but still firm, about 5 minutes. Drain and set aside to cool. Meanwhile, preheat oven to 350 degrees F (175 degrees C).
In a cast iron skillet, heat oil over medium heat. Add onions and cook slowly, stirring occasionally, until onions are soft.
Stir in eggs, drained potatoes, ham, salt and pepper. Cook until eggs are firm on the bottom, about 5 minutes. Top frittata with shredded cheese and place in preheated oven until cheese is melted and eggs are completely firm, about 10 minutes.