陈斌彬的技术博客

Stay foolish,stay hungry

PhoneNumberKit

PhoneNumberKit

Build Status Version Carthage compatible

PhoneNumberKit

Swift framework for parsing, formatting and validating international phone numbers. Inspired by Google’s libphonenumber.

:construction: PhoneNumberKit is currently alpha software :construction:

| Objective — | — :white_check_mark: | Match Google’s libphonenumber accuracy by passing tests against all example numbers :white_check_mark: | Faster performance. 1000 parses -> ~0.3 seconds. :white_check_mark: | Better formatter. Match Google’s libphonenumber. :x: | AsYouType formatter for UITextField.

Features

  • Quickly validate, normalize and extract the elements of any phone number string.
  • Special function to quickly parse a large array of raw phone numbers.
  • Automatically grab the default region code from the phone’s SIM (or if unavailable, the device’s region). You can override this if you need to.
  • Convert country codes to country names and vice versa.
  • Simple Swift 2.0 syntax and readable codebase.
  • PhoneNumberKit uses the best-in-class metadata and basic approach from Google’s libphonenumber project. By not being a direct port, PhoneNumberKit can focus on a smaller feature-set that’s cleaner, faster and more readable.

Usage

Import PhoneNumberKit at the top of the Swift file that will interact with a phone number.

import PhoneNumberKit

To parse and validate a string, initialize a PhoneNumber object and supply the string as the rawNumber. The region code is automatically computed but can be overridden if needed. In case of an error, it will throw and you can catch and respond to in your app’s UI

do {
    let phoneNumber = try PhoneNumber(rawNumber:"+33 6 89 017383")
    let phoneNumberCustomDefaultRegion = try PhoneNumber(rawNumber: "+44 20 7031 3000", region: "GB")
}
catch {
    print("Generic parser error")
}

If you need to parse and validate a large amount of numbers at once, there is a special function for that and it’s lightning fast. The default region code is automatically computed but can be overridden if needed.

let rawNumberArray = ["0291 12345678", "+49 291 12345678", "04134 1234", "09123 12345"]
let phoneNumbers = PhoneNumberKit().parseMultiple(rawNumberArray)
let phoneNumbersCustomDefaultRegion = PhoneNumberKit().parseMultiple(rawNumberArray, region: "DE")

You can also query countries for a dialing code or the dailing code for a given country

let phoneNumberKit = PhoneNumberKit()
phoneNumberKit.countriesForCode(33)
phoneNumberKit.codeForCountry("FR")

Formatting a parsed phone number to a string is also very easy

phoneNumber.toE164() // +61236618300
phoneNumber.toInternational() // +61 2 3661 8300
phoneNumber.toNational() // (02) 3661 8300

You can access the following properties of a PhoneNumber object

phoneNumber.countryCode
phoneNumber.nationalNumber
phoneNumber.numberExtension
phoneNumber.rawNumber
phoneNumber.type // e.g Mobile or Fixed

Setting up with Carthage

Carthage is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate PhoneNumberKit into your Xcode project using Carthage, specify it in your Cartfile:

github "marmelroy/PhoneNumberKit"

Setting up with CocoaPods

source 'https://github.com/CocoaPods/Specs.git'
pod 'PhoneNumberKit', '~> 0.1'