40

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?

Matijs
  • 3,118
  • 2
  • 29
  • 41
user2681789
  • 895
  • 2
  • 9
  • 16

14 Answers14

61

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);

Apple Docs

Abhishek Thapliyal
  • 3,497
  • 6
  • 30
  • 69
iOS_DEV
  • 921
  • 6
  • 15
25

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.

D-eptdeveloper
  • 2,430
  • 1
  • 16
  • 30
12

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
LC 웃
  • 18,888
  • 9
  • 57
  • 72
5

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!);
    }
Oded Regev
  • 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
  • It could be an iOS with no SIM card, iPod for example – Oded Regev Nov 15 '16 at 14:11
  • 2
    For 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
5

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
xmhafiz
  • 3,482
  • 1
  • 18
  • 26
2

I think you need to use NSLocale for using Country code of the user.

You can follow this link to understand use of NSLocale class reference.

Also study this link for ISOCountryCode property.

Hope this may help you.

KlimczakM
  • 12,576
  • 11
  • 64
  • 83
Rohan
  • 2,939
  • 5
  • 36
  • 65
  • 2
    he'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
  • 1
    it is giving In for India.Is there option to get country code like +91? – user2681789 Sep 14 '13 at 07:03
2

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.

Antoine Baché
  • 133
  • 2
  • 6
1

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. :)

Anjali jariwala
  • 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
0
    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;
tkanzakic
  • 5,499
  • 16
  • 34
  • 41
0

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"]);
 }];
Jagat Dave
  • 1,643
  • 3
  • 23
  • 30
Linh
  • 57,942
  • 23
  • 262
  • 279
0

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]]];
}
Vineet Rai
  • 80
  • 7
0

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)")
Mike Zriel
  • 1,575
  • 1
  • 17
  • 28
0
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 "+"
}
Elamurugan
  • 19
  • 3
0

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 ?? "") 
Cody Gray - on strike
  • 239,200
  • 50
  • 490
  • 574