Text input mask for React Native on iOS and Android
react-native-text-input-mask
Text input mask for React Native, Android and iOS.
Examples
Setup
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 react-native-text-input-mask@0.3.2
Usage
import TextInputMask from 'react-native-text-input-mask';
...
<TextInputMask
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 https://github.com/react-native-community/react-native-text-input-mask/issues/22):
ERROR ITMS-90206: "Invalid Bundle. The bundle at 'myapp.app/Frameworks/InputMask.framework' contains disallowed file 'Frameworks'."
To solve this, two steps are necessary:
-
Disable the "Always Embed Swift Standard Libraries" on bothe the
RNTextInputMask
and itsInputMask
dependecy by:- clicking on them in
Libraries > RNTextInputMask
andLibraries > RNTextInputMask > Libraries > InputMask
xcodeproj - Choose the
Build settings
tab Always Embed Swift Standard Libraries
toNo
OR
- 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 yourpostinstall
command) - clicking on them in
-
Add a script phase to delete an extra
Frameworks/
folder
EXTRA_DIR="${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Frameworks/InputMask.framework/Frameworks"
if [[ -d "${EXTRA_DIR}" ]]; then
rm -rf "${EXTRA_DIR}"
fi
Make sure that This script happens at the end of your build flow (after the Embed Frameworks script)