I am developing an iOS app in which the user enters their mobile number. How do I get their country calling code? For example, if a user is in India, then +91
should be prefixed automatically. Is there an option that adds country codes automatically?

- 3,118
- 2
- 29
- 41

- 895
- 2
- 9
- 16
-
Will the user be getting the option to select country? – icodebuster Sep 14 '13 at 04:59
-
no user did not get option – user2681789 Sep 14 '13 at 05:17
-
@user2681789 please read out my answer and once go through the link i have provided. – Rohan Sep 14 '13 at 05:23
-
please wait i am reading – user2681789 Sep 14 '13 at 05:32
-
@user2681789 have you got the answer? If yes than accept the answer please , so that other viewers can also use this solution for their this kind of issue :-) – Rohan Sep 14 '13 at 05:56
-
You can use https://github.com/NikKovIos/NKVPhonePicker framework. – Nike Kov May 28 '17 at 14:18
-
You may check this https://stackoverflow.com/a/13116227/8061359 As classes also validating phone numbers. – Anjali jariwala Apr 06 '18 at 09:17
14 Answers
Import Statement :
#import<CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
you can get country code for the current Carrier using CoreTelephony framework:
CTTelephonyNetworkInfo *network_Info = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = network_Info.subscriberCellularProvider;
NSLog(@"country code is: %@", carrier.mobileCountryCode);
//will return the actual country code
NSLog(@"ISO country code is: %@", carrier.isoCountryCode);

- 3,497
- 6
- 30
- 69

- 921
- 6
- 15
-
3I don't need this, nor do I know how I ended up on this SO question, but +1 for this! Awesome work and thanks for sharing! – Brad Moore Oct 16 '13 at 08:12
-
8
-
9
-
1What is so useful about this? This is of no use for getting the country code. – bdv Jul 03 '14 at 19:51
-
3
-
8This returns the ISO code, which is not the dialing code. Useful information, but doesn't answer the question. – Gruntcakes Jan 04 '15 at 21:12
-
I have exact opposite question: how to stop developer from getting my country code? Removing SIM card doesn't work...Some apps restrict their functions when detecting my carrier is from special region. – steven Jul 03 '18 at 02:12
with the use of NSLocale
you can get the country name, code etc. Take a look at below code it will help you to do so.
NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; // get country code, e.g. ES (Spain), FR (France), etc.
for a countries dialing code you can visit this reference code.

- 2,430
- 1
- 16
- 30
-
1it is giving In for India.Is there option to get country code like +91? – user2681789 Sep 14 '13 at 07:02
-
@user2681789 : Take a look at my edited answer i've given one link from there you can get the sample code. – D-eptdeveloper Sep 14 '13 at 07:16
-
I have the same problem as you, I managed to discover the MCC (Mobile country code). 724, but must be so +55 someone can tell me how? – Claudia Mardegan Oct 13 '14 at 14:04
-
@D-eptdeveloper: the reference code is also done manually as they added in plist, we need something from core to give that value directly – Abhishek Thapliyal Mar 02 '17 at 07:55
Use this simple function
func getCountryCallingCode(countryRegionCode:String)->String{
let prefixCodes = ["AF": "93", "AE": "971", "AL": "355", "AN": "599", "AS":"1", "AD": "376", "AO": "244", "AI": "1", "AG":"1", "AR": "54","AM": "374", "AW": "297", "AU":"61", "AT": "43","AZ": "994", "BS": "1", "BH":"973", "BF": "226","BI": "257", "BD": "880", "BB": "1", "BY": "375", "BE":"32","BZ": "501", "BJ": "229", "BM": "1", "BT":"975", "BA": "387", "BW": "267", "BR": "55", "BG": "359", "BO": "591", "BL": "590", "BN": "673", "CC": "61", "CD":"243","CI": "225", "KH":"855", "CM": "237", "CA": "1", "CV": "238", "KY":"345", "CF":"236", "CH": "41", "CL": "56", "CN":"86","CX": "61", "CO": "57", "KM": "269", "CG":"242", "CK": "682", "CR": "506", "CU":"53", "CY":"537","CZ": "420", "DE": "49", "DK": "45", "DJ":"253", "DM": "1", "DO": "1", "DZ": "213", "EC": "593", "EG":"20", "ER": "291", "EE":"372","ES": "34", "ET": "251", "FM": "691", "FK": "500", "FO": "298", "FJ": "679", "FI":"358", "FR": "33", "GB":"44", "GF": "594", "GA":"241", "GS": "500", "GM":"220", "GE":"995","GH":"233", "GI": "350", "GQ": "240", "GR": "30", "GG": "44", "GL": "299", "GD":"1", "GP": "590", "GU": "1", "GT": "502", "GN":"224","GW": "245", "GY": "595", "HT": "509", "HR": "385", "HN":"504", "HU": "36", "HK": "852", "IR": "98", "IM": "44", "IL": "972", "IO":"246", "IS": "354", "IN": "91", "ID":"62", "IQ":"964", "IE": "353","IT":"39", "JM":"1", "JP": "81", "JO": "962", "JE":"44", "KP": "850", "KR": "82","KZ":"77", "KE": "254", "KI": "686", "KW": "965", "KG":"996","KN":"1", "LC": "1", "LV": "371", "LB": "961", "LK":"94", "LS": "266", "LR":"231", "LI": "423", "LT": "370", "LU": "352", "LA": "856", "LY":"218", "MO": "853", "MK": "389", "MG":"261", "MW": "265", "MY": "60","MV": "960", "ML":"223", "MT": "356", "MH": "692", "MQ": "596", "MR":"222", "MU": "230", "MX": "52","MC": "377", "MN": "976", "ME": "382", "MP": "1", "MS": "1", "MA":"212", "MM": "95", "MF": "590", "MD":"373", "MZ": "258", "NA":"264", "NR":"674", "NP":"977", "NL": "31","NC": "687", "NZ":"64", "NI": "505", "NE": "227", "NG": "234", "NU":"683", "NF": "672", "NO": "47","OM": "968", "PK": "92", "PM": "508", "PW": "680", "PF": "689", "PA": "507", "PG":"675", "PY": "595", "PE": "51", "PH": "63", "PL":"48", "PN": "872","PT": "351", "PR": "1","PS": "970", "QA": "974", "RO":"40", "RE":"262", "RS": "381", "RU": "7", "RW": "250", "SM": "378", "SA":"966", "SN": "221", "SC": "248", "SL":"232","SG": "65", "SK": "421", "SI": "386", "SB":"677", "SH": "290", "SD": "249", "SR": "597","SZ": "268", "SE":"46", "SV": "503", "ST": "239","SO": "252", "SJ": "47", "SY":"963", "TW": "886", "TZ": "255", "TL": "670", "TD": "235", "TJ": "992", "TH": "66", "TG":"228", "TK": "690", "TO": "676", "TT": "1", "TN":"216","TR": "90", "TM": "993", "TC": "1", "TV":"688", "UG": "256", "UA": "380", "US": "1", "UY": "598","UZ": "998", "VA":"379", "VE":"58", "VN": "84", "VG": "1", "VI": "1","VC":"1", "VU":"678", "WS": "685", "WF": "681", "YE": "967", "YT": "262","ZA": "27" , "ZM": "260", "ZW":"263"]
let countryDialingCode = prefixCodes[countryRegionCode]
return countryDialingCode!
}
And call as
let currentLocale = NSLocale.currentLocale()
let countryCode = currentLocale.objectForKey(NSLocaleCountryCode) as! String//get the set country name, code of your iphone
print("country code is \(countryCode)")
print(getCountryCallingCode(countryCode))
//change country region Settings>>General>>Language&Region>>Region

- 18,888
- 9
- 57
- 72
-
1
-
Rather than going for Locale, we could use Core Telephony to get the Calling code from Network Provider. See @iOS_DEV answer. – Abdul Yasin Dec 17 '18 at 10:47
Swift
let networkInfo = CTTelephonyNetworkInfo()
if let carrier = networkInfo.subscriberCellularProvider {
print("country code is: " + carrier.mobileCountryCode!);
//will return the actual country code
print("ISO country code is: " + carrier.isoCountryCode!);
}

- 4,065
- 2
- 38
- 50
-
It is not going to if statement. What could be the reason behind this? – User511 Nov 15 '16 at 07:06
-
-
2For iOS 12, given the ability to have multiple SIM cards in some devices, Apple has depreciated 'subscriberCellularProvider' and replaced it with an array of cellularProviders, 'serviceSubscriberCellularProviders'. If unconcerned with CTCarrier selected, just use: `let carrier = networkInfo.serviceSubscriberCellularProviders?.first?.value` – Ever Uribe Mar 26 '19 at 23:33
Swift 5
I combine answer from Oded and LC into a function.
func getCountryCode() -> String {
guard let carrier = CTTelephonyNetworkInfo().subscriberCellularProvider, let countryCode = carrier.isoCountryCode else { return "" }
let prefixCodes = ["AF": "93", "AE": "971", "AL": "355", "AN": "599", "AS":"1", "AD": "376", "AO": "244", "AI": "1", "AG":"1", "AR": "54","AM": "374", "AW": "297", "AU":"61", "AT": "43","AZ": "994", "BS": "1", "BH":"973", "BF": "226","BI": "257", "BD": "880", "BB": "1", "BY": "375", "BE":"32","BZ": "501", "BJ": "229", "BM": "1", "BT":"975", "BA": "387", "BW": "267", "BR": "55", "BG": "359", "BO": "591", "BL": "590", "BN": "673", "CC": "61", "CD":"243","CI": "225", "KH":"855", "CM": "237", "CA": "1", "CV": "238", "KY":"345", "CF":"236", "CH": "41", "CL": "56", "CN":"86","CX": "61", "CO": "57", "KM": "269", "CG":"242", "CK": "682", "CR": "506", "CU":"53", "CY":"537","CZ": "420", "DE": "49", "DK": "45", "DJ":"253", "DM": "1", "DO": "1", "DZ": "213", "EC": "593", "EG":"20", "ER": "291", "EE":"372","ES": "34", "ET": "251", "FM": "691", "FK": "500", "FO": "298", "FJ": "679", "FI":"358", "FR": "33", "GB":"44", "GF": "594", "GA":"241", "GS": "500", "GM":"220", "GE":"995","GH":"233", "GI": "350", "GQ": "240", "GR": "30", "GG": "44", "GL": "299", "GD":"1", "GP": "590", "GU": "1", "GT": "502", "GN":"224","GW": "245", "GY": "595", "HT": "509", "HR": "385", "HN":"504", "HU": "36", "HK": "852", "IR": "98", "IM": "44", "IL": "972", "IO":"246", "IS": "354", "IN": "91", "ID":"62", "IQ":"964", "IE": "353","IT":"39", "JM":"1", "JP": "81", "JO": "962", "JE":"44", "KP": "850", "KR": "82","KZ":"77", "KE": "254", "KI": "686", "KW": "965", "KG":"996","KN":"1", "LC": "1", "LV": "371", "LB": "961", "LK":"94", "LS": "266", "LR":"231", "LI": "423", "LT": "370", "LU": "352", "LA": "856", "LY":"218", "MO": "853", "MK": "389", "MG":"261", "MW": "265", "MY": "60","MV": "960", "ML":"223", "MT": "356", "MH": "692", "MQ": "596", "MR":"222", "MU": "230", "MX": "52","MC": "377", "MN": "976", "ME": "382", "MP": "1", "MS": "1", "MA":"212", "MM": "95", "MF": "590", "MD":"373", "MZ": "258", "NA":"264", "NR":"674", "NP":"977", "NL": "31","NC": "687", "NZ":"64", "NI": "505", "NE": "227", "NG": "234", "NU":"683", "NF": "672", "NO": "47","OM": "968", "PK": "92", "PM": "508", "PW": "680", "PF": "689", "PA": "507", "PG":"675", "PY": "595", "PE": "51", "PH": "63", "PL":"48", "PN": "872","PT": "351", "PR": "1","PS": "970", "QA": "974", "RO":"40", "RE":"262", "RS": "381", "RU": "7", "RW": "250", "SM": "378", "SA":"966", "SN": "221", "SC": "248", "SL":"232","SG": "65", "SK": "421", "SI": "386", "SB":"677", "SH": "290", "SD": "249", "SR": "597","SZ": "268", "SE":"46", "SV": "503", "ST": "239","SO": "252", "SJ": "47", "SY":"963", "TW": "886", "TZ": "255", "TL": "670", "TD": "235", "TJ": "992", "TH": "66", "TG":"228", "TK": "690", "TO": "676", "TT": "1", "TN":"216","TR": "90", "TM": "993", "TC": "1", "TV":"688", "UG": "256", "UA": "380", "US": "1", "UY": "598","UZ": "998", "VA":"379", "VE":"58", "VN": "84", "VG": "1", "VI": "1","VC":"1", "VU":"678", "WS": "685", "WF": "681", "YE": "967", "YT": "262","ZA": "27" , "ZM": "260", "ZW":"263"]
let countryDialingCode = prefixCodes[countryCode.uppercased()] ?? ""
return countryDialingCode
}
Make sure to import CoreTelephony
at the top
import CoreTelephony

- 3,482
- 1
- 18
- 26
-
1Just to mention - .subscriberCellularProvider is deprecated. – Vladimir Sukanica Apr 20 '21 at 17:47
-
2he's asking for the country code (e.g. Canada / US is +1, India is +91, some other country is +49, etc.) – Michael Dautermann Sep 14 '13 at 05:02
-
1@MichaelDautermann ya i know that. But he can use `ISOCountryCodes` property of **NSLocale** class reference as described in this [link](https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSLocale_Class/Reference/Reference.html#//apple_ref/occ/clm/NSLocale/ISOCountryCodes). – Rohan Sep 14 '13 at 05:05
-
if you edit your answer to make it more clear about the ISOCountryCode's option (which wasn't in the original answer and I hadn't seen before... nice find), I can upvote it versus the downvote. – Michael Dautermann Sep 14 '13 at 05:11
-
@MichaelDautermann Thats why i given the link reference which can help him to solve his issue. Because i dont have any more idea about it. :-) – Rohan Sep 14 '13 at 05:18
-
1it is giving In for India.Is there option to get country code like +91? – user2681789 Sep 14 '13 at 07:03
I came up with the following code, based on previous answers:
Swift
#if canImport(CoreTelephony)
import CoreTelephony
#endif
static func getRegionCodeFromSim() -> String? {
#if canImport(CoreTelephony)
let networkInfos = CTTelephonyNetworkInfo()
if #available(iOS 12, *) {
let carrier = networkInfos.serviceSubscriberCellularProviders?
.map { $0.1 }
.first { $0.isoCountryCode != nil }
return carrier?.isoCountryCode
}
return networkInfos.subscriberCellularProvider?.isoCountryCode
#else
return nil
#endif
}
static func getRegionCode() -> String? {
guard let regionCodeFromSim = Self.getRegionCodeFromSim() else {
return NSLocale.current.regionCode
}
return regionCodeFromSim
}
static func getCountryCode() -> String? {
guard let regionCode = Self.getRegionCode() else { return nil }
let prefixCodes = ["AF": "93", "AE": "971", "AL": "355", "AN": "599", "AS":"1", "AD": "376", "AO": "244", "AI": "1", "AG":"1", "AR": "54","AM": "374", "AW": "297", "AU":"61", "AT": "43","AZ": "994", "BS": "1", "BH":"973", "BF": "226","BI": "257", "BD": "880", "BB": "1", "BY": "375", "BE":"32","BZ": "501", "BJ": "229", "BM": "1", "BT":"975", "BA": "387", "BW": "267", "BR": "55", "BG": "359", "BO": "591", "BL": "590", "BN": "673", "CC": "61", "CD":"243","CI": "225", "KH":"855", "CM": "237", "CA": "1", "CV": "238", "KY":"345", "CF":"236", "CH": "41", "CL": "56", "CN":"86","CX": "61", "CO": "57", "KM": "269", "CG":"242", "CK": "682", "CR": "506", "CU":"53", "CY":"537","CZ": "420", "DE": "49", "DK": "45", "DJ":"253", "DM": "1", "DO": "1", "DZ": "213", "EC": "593", "EG":"20", "ER": "291", "EE":"372","ES": "34", "ET": "251", "FM": "691", "FK": "500", "FO": "298", "FJ": "679", "FI":"358", "FR": "33", "GB":"44", "GF": "594", "GA":"241", "GS": "500", "GM":"220", "GE":"995","GH":"233", "GI": "350", "GQ": "240", "GR": "30", "GG": "44", "GL": "299", "GD":"1", "GP": "590", "GU": "1", "GT": "502", "GN":"224","GW": "245", "GY": "595", "HT": "509", "HR": "385", "HN":"504", "HU": "36", "HK": "852", "IR": "98", "IM": "44", "IL": "972", "IO":"246", "IS": "354", "IN": "91", "ID":"62", "IQ":"964", "IE": "353","IT":"39", "JM":"1", "JP": "81", "JO": "962", "JE":"44", "KP": "850", "KR": "82","KZ":"77", "KE": "254", "KI": "686", "KW": "965", "KG":"996","KN":"1", "LC": "1", "LV": "371", "LB": "961", "LK":"94", "LS": "266", "LR":"231", "LI": "423", "LT": "370", "LU": "352", "LA": "856", "LY":"218", "MO": "853", "MK": "389", "MG":"261", "MW": "265", "MY": "60","MV": "960", "ML":"223", "MT": "356", "MH": "692", "MQ": "596", "MR":"222", "MU": "230", "MX": "52","MC": "377", "MN": "976", "ME": "382", "MP": "1", "MS": "1", "MA":"212", "MM": "95", "MF": "590", "MD":"373", "MZ": "258", "NA":"264", "NR":"674", "NP":"977", "NL": "31","NC": "687", "NZ":"64", "NI": "505", "NE": "227", "NG": "234", "NU":"683", "NF": "672", "NO": "47","OM": "968", "PK": "92", "PM": "508", "PW": "680", "PF": "689", "PA": "507", "PG":"675", "PY": "595", "PE": "51", "PH": "63", "PL":"48", "PN": "872","PT": "351", "PR": "1","PS": "970", "QA": "974", "RO":"40", "RE":"262", "RS": "381", "RU": "7", "RW": "250", "SM": "378", "SA":"966", "SN": "221", "SC": "248", "SL":"232","SG": "65", "SK": "421", "SI": "386", "SB":"677", "SH": "290", "SD": "249", "SR": "597","SZ": "268", "SE":"46", "SV": "503", "ST": "239","SO": "252", "SJ": "47", "SY":"963", "TW": "886", "TZ": "255", "TL": "670", "TD": "235", "TJ": "992", "TH": "66", "TG":"228", "TK": "690", "TO": "676", "TT": "1", "TN":"216","TR": "90", "TM": "993", "TC": "1", "TV":"688", "UG": "256", "UA": "380", "US": "1", "UY": "598","UZ": "998", "VA":"379", "VE":"58", "VN": "84", "VG": "1", "VI": "1","VC":"1", "VU":"678", "WS": "685", "WF": "681", "YE": "967", "YT": "262","ZA": "27" , "ZM": "260", "ZW":"263"]
return prefixCodes[regionCode.uppercased()]
}
It tries to fetch the country code from the SIM cards (with multi-sim & non-sim devices support), if available, and fallbacks to the device's locale otherwise.
The prefixCodes
could be loaded from a PLIST or JSON to help with readability.

- 133
- 2
- 6
If you want to prefixed calling country code automatically then you need to get user's country code pragmatically and Drag & drop src Folder in your code Its looks like this:
if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String {
print(countryCode)
let strCode = Countries.countryFromCountryCode(countryCode: countryCode)
btnPhoneCode.setTitle("+\(strCode.phoneExtension)", for: .normal)
}
It works for me, Hope will help you too. :)

- 410
- 5
- 15
-
hi, I found that it's give me the country code based on device region, If user in US and his device region is IN, than it show the user country code IN that's the problem I found, any other solution? – Saurabh Jain Mar 07 '19 at 07:23
NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode];
// get country code, e.g. ES (Spain), FR (France), etc.
NSLog(@"country code is:%@",countryCode);
NSString*lower=[countryCode lowercaseString];
NSString *path = [[NSBundle mainBundle] pathForResource:@"DiallingCodes" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSMutableDictionary *_dictCountry=[[NSMutableDictionary alloc]init];
NSMutableArray *_CodeArray=[[NSMutableArray alloc]init];
[_CodeArray addObject:dict];
_dictCountry = [_CodeArray objectAtIndex:0];
NSString*Country_code=[NSString stringWithFormat:@"+%@",[_dictCountry objectForKey:lower]];
contactTextField.text=Country_code;

- 5,499
- 16
- 34
- 41
You can request to this url.
For get CountryCode or ip, region_name, city, long, lat
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://freegeoip.net/json/"]];
__block NSDictionary *json;
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"Countrycode: %@", json[@"country_code"]);
}];

- 1,643
- 3
- 23
- 30

- 57,942
- 23
- 262
- 279
Here the Objective C code
#import<CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
- (void)viewDidLoad{
CTTelephonyNetworkInfo *network_Info = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = network_Info.subscriberCellularProvider;
NSLog(@"country code is: %@", carrier.mobileCountryCode);
NSLog(@"ISO country code is: %@", carrier.mobileNetworkCode);
NSLog(@"diling code == %@",[self getCountryCode:carrier.isoCountryCode]);
}
- (NSString *)getCountryCode:(NSString *)countryISOCode{
NSDictionary * code = @{@"AF": @"93", @"AE": @"971", @"AL": @"355", @"AN": @"599", @"AS":@"1", @"AD": @"376", @"AO": @"244", @"AI": @"1", @"AG":@"1", @"AR": @"54",@"AM": @"374", @"AW": @"297", @"AU":@"61", @"AT": @"43",@"AZ": @"994", @"BS": @"1", @"BH":@"973", @"BF": @"226",@"BI": @"257", @"BD": @"880", @"BB": @"1", @"BY": @"375", @"BE":@"32",@"BZ": @"501", @"BJ": @"229", @"BM": @"1", @"BT":@"975", @"BA": @"387", @"BW": @"267", @"BR": @"55", @"BG": @"359", @"BO": @"591", @"BL": @"590", @"BN": @"673", @"CC": @"61", @"CD":@"243",@"CI": @"225", @"KH":@"855", @"CM": @"237", @"CA": @"1", @"CV": @"238", @"KY":@"345", @"CF":@"236", @"CH": @"41", @"CL": @"56", @"CN":@"86",@"CX": @"61", @"CO": @"57", @"KM": @"269", @"CG":@"242", @"CK": @"682", @"CR": @"506", @"CU":@"53", @"CY":@"537",@"CZ": @"420", @"DE": @"49", @"DK": @"45", @"DJ":@"253", @"DM": @"1", @"DO": @"1", @"DZ": @"213", @"EC": @"593", @"EG":@"20", @"ER": @"291", @"EE":@"372",@"ES": @"34", @"ET": @"251", @"FM": @"691", @"FK": @"500", @"FO": @"298", @"FJ": @"679", @"FI":@"358", @"FR": @"33", @"GB":@"44", @"GF": @"594", @"GA":@"241", @"GS": @"500", @"GM":@"220", @"GE":@"995",@"GH":@"233", @"GI": @"350", @"GQ": @"240", @"GR": @"30", @"GG": @"44", @"GL": @"299", @"GD":@"1", @"GP": @"590", @"GU": @"1", @"GT": @"502", @"GN":@"224",@"GW": @"245", @"GY": @"595", @"HT": @"509", @"HR": @"385", @"HN":@"504", @"HU": @"36", @"HK": @"852", @"IR": @"98", @"IM": @"44", @"IL": @"972", @"IO":@"246", @"IS": @"354", @"IN": @"91", @"ID":@"62", @"IQ":@"964", @"IE": @"353",@"IT":@"39", @"JM":@"1", @"JP": @"81", @"JO": @"962", @"JE":@"44", @"KP": @"850", @"KR": @"82",@"KZ":@"77", @"KE": @"254", @"KI": @"686", @"KW": @"965", @"KG":@"996",@"KN":@"1", @"LC": @"1", @"LV": @"371", @"LB": @"961", @"LK":@"94", @"LS": @"266", @"LR":@"231", @"LI": @"423", @"LT": @"370", @"LU": @"352", @"LA": @"856", @"LY":@"218", @"MO": @"853", @"MK": @"389", @"MG":@"261", @"MW": @"265", @"MY": @"60",@"MV": @"960", @"ML":@"223", @"MT": @"356", @"MH": @"692", @"MQ": @"596", @"MR":@"222", @"MU": @"230", @"MX": @"52",@"MC": @"377", @"MN": @"976", @"ME": @"382", @"MP": @"1", @"MS": @"1", @"MA":@"212", @"MM": @"95", @"MF": @"590", @"MD":@"373", @"MZ": @"258", @"NA":@"264", @"NR":@"674", @"NP":@"977", @"NL": @"31",@"NC": @"687", @"NZ":@"64", @"NI": @"505", @"NE": @"227", @"NG": @"234", @"NU":@"683", @"NF": @"672", @"NO": @"47",@"OM": @"968", @"PK": @"92", @"PM": @"508", @"PW": @"680", @"PF": @"689", @"PA": @"507", @"PG":@"675", @"PY": @"595", @"PE": @"51", @"PH": @"63", @"PL":@"48", @"PN": @"872",@"PT": @"351", @"PR": @"1",@"PS": @"970", @"QA": @"974", @"RO":@"40", @"RE":@"262", @"RS": @"381", @"RU": @"7", @"RW": @"250", @"SM": @"378", @"SA":@"966", @"SN": @"221", @"SC": @"248", @"SL":@"232",@"SG": @"65", @"SK": @"421", @"SI": @"386", @"SB":@"677", @"SH": @"290", @"SD": @"249", @"SR": @"597",@"SZ": @"268", @"SE":@"46", @"SV": @"503", @"ST": @"239",@"SO": @"252", @"SJ": @"47", @"SY":@"963", @"TW": @"886", @"TZ": @"255", @"TL": @"670", @"TD": @"235", @"TJ": @"992", @"TH": @"66", @"TG":@"228", @"TK": @"690", @"TO": @"676", @"TT": @"1", @"TN":@"216",@"TR": @"90", @"TM": @"993", @"TC": @"1", @"TV":@"688", @"UG": @"256", @"UA": @"380", @"US": @"1", @"UY": @"598",@"UZ": @"998", @"VA":@"379", @"VE":@"58", @"VN": @"84", @"VG": @"1", @"VI": @"1",@"VC":@"1", @"VU":@"678", @"WS": @"685", @"WF": @"681", @"YE": @"967", @"YT": @"262",@"ZA": @"27" , @"ZM": @"260", @"ZW":@"263"};
return [NSString stringWithFormat:@"+%@", [code objectForKey:[countryISOCode uppercaseString]]];
}

- 80
- 7
Swift 5 Support and using optionals here is my solution:
static func GetCountryCallingCode(countryRegionCode:String) -> String? {
let prefixCodes = ["AF": "93", "AE": "971", "AL": "355", "AN": "599", "AS":"1", "AD": "376", "AO": "244", "AI": "1", "AG":"1", "AR": "54","AM": "374", "AW": "297", "AU":"61", "AT": "43","AZ": "994", "BS": "1", "BH":"973", "BF": "226","BI": "257", "BD": "880", "BB": "1", "BY": "375", "BE":"32","BZ": "501", "BJ": "229", "BM": "1", "BT":"975", "BA": "387", "BW": "267", "BR": "55", "BG": "359", "BO": "591", "BL": "590", "BN": "673", "CC": "61", "CD":"243","CI": "225", "KH":"855", "CM": "237", "CA": "1", "CV": "238", "KY":"345", "CF":"236", "CH": "41", "CL": "56", "CN":"86","CX": "61", "CO": "57", "KM": "269", "CG":"242", "CK": "682", "CR": "506", "CU":"53", "CY":"537","CZ": "420", "DE": "49", "DK": "45", "DJ":"253", "DM": "1", "DO": "1", "DZ": "213", "EC": "593", "EG":"20", "ER": "291", "EE":"372","ES": "34", "ET": "251", "FM": "691", "FK": "500", "FO": "298", "FJ": "679", "FI":"358", "FR": "33", "GB":"44", "GF": "594", "GA":"241", "GS": "500", "GM":"220", "GE":"995","GH":"233", "GI": "350", "GQ": "240", "GR": "30", "GG": "44", "GL": "299", "GD":"1", "GP": "590", "GU": "1", "GT": "502", "GN":"224","GW": "245", "GY": "595", "HT": "509", "HR": "385", "HN":"504", "HU": "36", "HK": "852", "IR": "98", "IM": "44", "IL": "972", "IO":"246", "IS": "354", "IN": "91", "ID":"62", "IQ":"964", "IE": "353","IT":"39", "JM":"1", "JP": "81", "JO": "962", "JE":"44", "KP": "850", "KR": "82","KZ":"77", "KE": "254", "KI": "686", "KW": "965", "KG":"996","KN":"1", "LC": "1", "LV": "371", "LB": "961", "LK":"94", "LS": "266", "LR":"231", "LI": "423", "LT": "370", "LU": "352", "LA": "856", "LY":"218", "MO": "853", "MK": "389", "MG":"261", "MW": "265", "MY": "60","MV": "960", "ML":"223", "MT": "356", "MH": "692", "MQ": "596", "MR":"222", "MU": "230", "MX": "52","MC": "377", "MN": "976", "ME": "382", "MP": "1", "MS": "1", "MA":"212", "MM": "95", "MF": "590", "MD":"373", "MZ": "258", "NA":"264", "NR":"674", "NP":"977", "NL": "31","NC": "687", "NZ":"64", "NI": "505", "NE": "227", "NG": "234", "NU":"683", "NF": "672", "NO": "47","OM": "968", "PK": "92", "PM": "508", "PW": "680", "PF": "689", "PA": "507", "PG":"675", "PY": "595", "PE": "51", "PH": "63", "PL":"48", "PN": "872","PT": "351", "PR": "1","PS": "970", "QA": "974", "RO":"40", "RE":"262", "RS": "381", "RU": "7", "RW": "250", "SM": "378", "SA":"966", "SN": "221", "SC": "248", "SL":"232","SG": "65", "SK": "421", "SI": "386", "SB":"677", "SH": "290", "SD": "249", "SR": "597","SZ": "268", "SE":"46", "SV": "503", "ST": "239","SO": "252", "SJ": "47", "SY":"963", "TW": "886", "TZ": "255", "TL": "670", "TD": "235", "TJ": "992", "TH": "66", "TG":"228", "TK": "690", "TO": "676", "TT": "1", "TN":"216","TR": "90", "TM": "993", "TC": "1", "TV":"688", "UG": "256", "UA": "380", "US": "1", "UY": "598","UZ": "998", "VA":"379", "VE":"58", "VN": "84", "VG": "1", "VI": "1","VC":"1", "VU":"678", "WS": "685", "WF": "681", "YE": "967", "YT": "262","ZA": "27" , "ZM": "260", "ZW":"263"]
let countryDialingCode = prefixCodes[countryRegionCode]
return countryDialingCode
}
guard let regionCode = NSLocale.current.regionCode,
let callingCode = GetCountryCallingCode(countryRegionCode: regionCode )
else { return }
print("Region: \(regionCode) Country calling code is \(callingCode)")

- 1,575
- 1
- 17
- 28
import CoreTelephony
/// Method to get the iso calling code
///
/// - Returns: String
public static func getCallingCodePrefix() -> String {
let networkInfo = CTTelephonyNetworkInfo()
let phoneNumberKit = PhoneNumberKit()
if #available(iOS 12.0, *) {
if let carrier = networkInfo.serviceSubscriberCellularProviders?.map({ $0.1 }).first(where: { $0.isoCountryCode != nil }), let isoCode = carrier.isoCountryCode?.uppercased(), let prefixCode = phoneNumberKit.countryCode(for: isoCode) {
return "+" + String(prefixCode)
}
} else {
// Fallback on earlier versions
if let carrier = networkInfo.subscriberCellularProvider, let isoCode = carrier.isoCountryCode?.uppercased(), let prefixCode = phoneNumberKit.countryCode(for: isoCode) {
return "+" + String(prefixCode)
}
}
return "+"
}

- 19
- 3
Use this code to get the user's country in iOS:
func countryName(from countryCode: String) -> String {
if let name = (Locale.current as NSLocale).displayName(forKey: .countryCode, value: countryCode) {
return name
} else {
return countryCode
}
}
//Locale.current.regionCode this is used for Get user current country region code
countryName(from: Locale.current.regionCode ?? "")

- 239,200
- 50
- 490
- 574