You can get this information from iOS' CoreTelephony framework:
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
...
@property (nonatomic, strong) CTTelephonyNetworkInfo* networkInfo;
...
self.networkInfo = [[CTTelephonyNetworkInfo alloc] init];
NSString* country = [self.networkInfo subscriberCellularProvider].isoCountryCode;
I quickly copy-pasted this from one of my apps. I trust you can convert this to Swift if you need to.
subscriberCellularProvider
gives access to the CTCarrier
object, which has more fields than just the country code: MCC, MNC, carrier name, and a flag if VoIP is allowed.
iOS does not give access to IMEI.
The In App Purchase APIs can tell you on which iTunes Store the user is; an ISO country code again. You probably need to have IAP activated for your app, so when you don't sell anything, this may not be allowed/an option.
The current locale can indeed also give you a country code:
let locale = NSLocale.currentLocale()
let country = currentLocale.objectForKey(NSLocaleCountryCode) as? String