Your first idea (using the iOS Core Location API) is the best. Indeed, you cannot rely on IP for geolocation. When it works, it's not accurate. And, most of the time, it just gives a wrong location. And it's easily fakeable (with a VPN for example).
From my point of view, you have to rely on the iOS Core Location API. It's the most reliable solution (and the less fakeable). But, to be clear: I don't know any solution to be 100% sure of the user location in iOS. The only way would be to install some equipment in the targeted area (like iBeacons).