Text input mask for React Native, Android and iOS.


React Native Text Input Mask iOS
React Native Text Input Mask Android


npm install --save react-native-text-input-mask
react-native link react-native-text-input-mask

For Android it just works.

For iOS you have to drag and drop InputMask framework to Embedded Binaries in General tab of Target and check ‘Yes’ in ‘Always Embed Swift Standard Libraries’ of Build Settings.

For RN 0.47 use 0.3.2 version – npm install --save [email protected]


import TextInputMask from 'react-native-text-input-mask';
  refInput={ref => { this.input = ref }}
  onChangeText={(formatted, extracted) => {
    console.log(formatted) // +1 (123) 456-78-90
    console.log(extracted) // 1234567890
  mask={"+1 ([000]) [000] [00] [00]"}

Testflight upload error

You might encounter the following error when trying to upload a build to Testflight (see

ERROR ITMS-90206: "Invalid Bundle. The bundle at '' contains disallowed file 'Frameworks'."

To solve this, two steps are necessary:

  • Disable the "Always Embed Swift Standard Libraries" on bothe the RNTextInputMask and its InputMask dependecy by:

    • clicking on them in Libraries > RNTextInputMask and Libraries > RNTextInputMask > Libraries > InputMask xcodeproj
    • Choose the Build settings tab
    • Always Embed Swift Standard Libraries to No


    • running sed -i '' -E 's/ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;/ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;/g' ./node_modules/react-native-text-input-mask/ios/RNTextInputMask/RNTextInputMask.xcodeproj/project.pbxproj && sed -i '' -E 's/ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;/ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;/' ./node_modules/react-native-text-input-mask/ios/RNTextInputMask/InputMask/InputMask.xcodeproj/project.pbxproj

    Everytime you reinstall your node_modules. (Or just add the above script to your postinstall command)

  • Add a script phase to delete an extra Frameworks/ folder


if [[ -d "${EXTRA_DIR}" ]]; then
  rm -rf "${EXTRA_DIR}"

Make sure that This script happens at the end of your build flow (after the Embed Frameworks script)