The open-source code for the provides fast, easy credit card scanning in mobile apps
Clone or download
Bryant Luk
Bryant Luk Update CardIOBundle.m
bale assets/ Classes/ --overwrite-delay 0 -z -c CardIOBundle
Latest commit 4e9afce Oct 17, 2017
Failed to load latest commit information.
.github Standardize Feb 25, 2017
CardIO_Public_API Finnish language support (#77) Sep 23, 2016
Classes Update CardIOBundle.m Oct 17, 2017
Release Prepare for 5.4.1 release Sep 16, 2016
Resources Cull dead code and resources Dec 4, 2014
SupportFiles Update to Xcode 7 Recommended Settings Sep 21, 2015
assets Finnish language support (#77) Sep 23, 2016
build_configs Update CardIO_Framework build settings Oct 30, 2015
dmz @ 8ae4ba1 update to latest dmz Jul 5, 2015
icc.xcodeproj Finnish language support (#77) Sep 23, 2016
opencv_device Use libopencv with x86_64 and i386 arch slices Oct 29, 2015
scripts Added entry_cardholder_name to icc_keys.txt Nov 18, 2015
.gitignore fix carthage submodule support Sep 19, 2016
.gitmodules re-add dmz submodule, from public github Dec 1, 2014 Eliminate `develop` branch Dec 8, 2014
CardIOCardholderNameTextFieldDelegate.h Added cardholderName support. Nov 17, 2015
CardIOCardholderNameTextFieldDelegate.m Implemented whitespace styling in added file. Nov 18, 2015 Update license year and company May 16, 2016 Updated README for clarity Oct 3, 2017
UnitTest-Info.plist Update to Xcode 7 Recommended Settings Sep 21, 2015 Port changes back to Sep 16, 2016
icc-Framework-Info.plist Cleanup more warnings Sep 16, 2016 a few tweaks Jan 5, 2015
pip_requirements.txt Fix #33: Update fabric to 1.5. Aug 18, 2015 logo

Credit card scanning for mobile apps

Yes, that's right: the library for iOS is now open-source!

This repository contains everything needed to build the library for iOS.

What it does not yet contain is much in the way of documentation. 😿 So please feel free to ask any questions by creating github issues -- we'll gradually build our documentation based on the discussions there.

Note that this is actual production code, which has been iterated upon by multiple developers over several years. If you see something that could benefit from being tidied up, rewritten, or otherwise improved, your Pull Requests will be welcome! See for details.

Brought to you by
PayPal logo


If you merely wish to incorporate within your iOS app, simply download the latest official release from That repository includes complete integration instructions and sample code.

If you use CocoaPods, then add this line to your podfile:

pod 'CardIO'

If you use Carthage, then add this line to your Cartfile:

github "card-io/"

You must also have an SSH key setup with GitHub so that the dmz submodule will download properly. See the documentation here for directions.

Dev setup

  • clone this repo, including its dmz submodule: git submodule sync; git submodule update --init --recursive
  • requires Xcode 5+ (toolchain for iOS 7)
  • requires Python 2.6+
  • for building releases, requires pip and fabric


We use Python-based build scripts.

If you are using virtualenv and virtualenvwrapper, create a virtual environment (optional but recommended):

# Create virtual environment for Python
mkvirtualenv cardio

Install required Python dependencies (this command may require sudo rights if installing globally):

# Install required dependencies
pip install -r pip_requirements.txt


We use baler (included in pip_requirements.txt) to encode assets (strings and images) within our library. Create a .baler_env file in the top project directory, and set the $PATH environment variable to include where you installed baler. Examples:

    # Create a .baler_env, specifying the correct path for an installation using virtualenv
    echo 'export PATH=$PATH:~/.virtualenvs/cardio/bin' > .baler_env
    # - OR -

    # Create a .baler_env, specifying the correct path if not using virtualenv
    echo 'export PATH=$PATH:'`dirname \`which bale\`` > .baler_env

The submodule (included here in the dmz directory) includes the core image-processing code.

Normal development

Use Xcode in a normal fashion to build the library. The project's icc target is a demo app which will allow you to exercise the library in various ways.

Unofficial release

How to make a Release build of the library for your own use:

  • Run fab build:outdir=~ (or specify some other output directory).

Official release

How official releasers officially make an official release of

Contributors was created by Josh Bleecher Snyder.

Subsequent help has come from Brent Fitzgerald, Tom Whipple, Dave Goldman, Roman Punskyy, Mark Rogers, and Martin Rybak.

And from you! Pull requests and new issues are welcome. See for details.