diff --git a/CardIO.podspec b/CardIO.podspec index 0ce463f..975f1d3 100644 --- a/CardIO.podspec +++ b/CardIO.podspec @@ -1,14 +1,14 @@ Pod::Spec.new do |spec| spec.name = 'CardIO' - spec.version = '3.10.1' + spec.version = '4.0.0' spec.license = { type: 'MIT', file: 'LICENSE.md' } spec.homepage = 'https://www.card.io' spec.authors = { 'CardIO' => 'support@paypal.com' } spec.summary = 'Credit card scanning for mobile apps' spec.social_media_url = 'https://twitter.com/cardio' spec.source = { :git => 'https://github.com/card-io/card.io-iOS-SDK.git', :tag => "#{spec.version}" } - spec.platform = :ios, '6.0' - spec.ios.deployment_target = '6.0' + spec.platform = :ios, '6.1' + spec.ios.deployment_target = '6.1' spec.requires_arc = true spec.source_files = 'CardIO/*.h' spec.preserve_path = 'CardIO/*.a' diff --git a/CardIO/CardIO.h b/CardIO/CardIO.h index 20c529b..f62ac87 100644 --- a/CardIO/CardIO.h +++ b/CardIO/CardIO.h @@ -1,8 +1,8 @@ // // CardIO.h -// Version 3.10.1 +// Version 4.0.0 // -// Copyright (c) 2011-2014 PayPal. All rights reserved. +// See the file "LICENSE.md" for the full license governing this code. // // All-in-one header file for card.io sdk. @@ -11,3 +11,4 @@ #import "CardIOViewDelegate.h" #import "CardIOPaymentViewController.h" #import "CardIOPaymentViewControllerDelegate.h" +#import "CardIOUtilities.h" diff --git a/CardIO/CardIOCreditCardInfo.h b/CardIO/CardIOCreditCardInfo.h index bb7e673..70c0a31 100644 --- a/CardIO/CardIOCreditCardInfo.h +++ b/CardIO/CardIOCreditCardInfo.h @@ -1,8 +1,8 @@ // // CardIOCreditCardInfo.h -// Version 3.10.1 +// Version 4.0.0 // -// Copyright (c) 2011-2014 PayPal. All rights reserved. +// See the file "LICENSE.md" for the full license governing this code. // #import @@ -62,6 +62,8 @@ typedef NS_ENUM(NSInteger, CardIOCreditCardType) { /// Was the card number scanned (as opposed to entered manually)? @property(nonatomic, assign, readwrite) BOOL scanned; +/// The rectified card image; usually 428x270. +@property(nonatomic, strong, readwrite) UIImage *cardImage; /// Derived from cardNumber. /// @note CardIOCreditInfo objects returned by either of the delegate methods diff --git a/CardIO/CardIODetectionMode.h b/CardIO/CardIODetectionMode.h new file mode 100644 index 0000000..cf80939 --- /dev/null +++ b/CardIO/CardIODetectionMode.h @@ -0,0 +1,18 @@ +// +// CardIODetectionMode.h +// Version 4.0.0 +// +// See the file "LICENSE.md" for the full license governing this code. +// +// + +#ifndef icc_CardIODetectionMode_h +#define icc_CardIODetectionMode_h + +typedef NS_ENUM(NSInteger, CardIODetectionMode) { + CardIODetectionModeCardImageAndNumber = 0, + CardIODetectionModeCardImageOnly, + CardIODetectionModeAutomatic +}; + +#endif diff --git a/CardIO/CardIOPaymentViewController.h b/CardIO/CardIOPaymentViewController.h index 9232a71..7b162a0 100644 --- a/CardIO/CardIOPaymentViewController.h +++ b/CardIO/CardIOPaymentViewController.h @@ -1,12 +1,13 @@ // // CardIOPaymentViewController.h -// Version 3.10.1 +// Version 4.0.0 // -// Copyright (c) 2011-2014 PayPal. All rights reserved. +// See the file "LICENSE.md" for the full license governing this code. // #import #import "CardIOPaymentViewControllerDelegate.h" +#import "CardIODetectionMode.h" /// CardIOPaymentViewController is one of two main entry points into the card.io SDK. /// @see CardIOView @@ -38,7 +39,7 @@ /// E.g., specifying "en" on a device set to "English" and "United Kingdom" will result in "en_GB". /// /// These localizations are currently included: -/// ar,da,de,en,en_AU,en_GB,en_SE,es,es_MX,fr,he,is,it,ja,ko,ms,nb,nl,pl,pt,pt_BR,ru,sv,th,tr,zh-Hans,zh-Hant,zh-Hant_TW. +/// ar,da,de,en,en_AU,en_GB,en_SE,es,es_MX,fr,he,it,ja,ko,ms,nb,nl,pl,pt,pt_BR,ru,sv,th,tr,zh-Hans,zh-Hant,zh-Hant_TW. @property(nonatomic, copy, readwrite) NSString *languageOrLocale; /// If YES, the status bar's style will be kept as whatever your app has set it to. @@ -80,6 +81,40 @@ /// Mask the card number digits as they are manually entered by the user. Defaults to NO. @property(nonatomic, assign, readwrite) BOOL maskManualEntryDigits; +/// Set the scan instruction text. If nil, use the default text. Defaults to nil. +/// Use newlines as desired to control the wrapping of text onto multiple lines. +@property(nonatomic, copy, readwrite) NSString *scanInstructions; + +/// Hide the PayPal or card.io logo in the scan view. Defaults to NO. +@property(nonatomic, assign, readwrite) BOOL hideCardIOLogo; + +/// A custom view that will be overlaid atop the entire scan view. Defaults to nil. +/// If you set a scanOverlayView, be sure to: +/// +/// * Consider rotation. Be sure to test on the iPad with rotation both enabled and disabled. +/// To make rotation synchronization easier, whenever a scanOverlayView is set, and card.io does an +/// in-place rotation (rotates its UI elements relative to their containers), card.io will generate +/// rotation notifications; see CardIOScanningOrientationDidChangeNotification +/// and associated userInfo key documentation below. +/// As with UIKit, the initial rotation is always UIInterfaceOrientationPortrait. +/// +/// * Be sure to pass touches through to the superview as appropriate. Note that the entire camera +/// preview responds to touches (triggers refocusing). Test the light button and the toolbar buttons. +/// +/// * Minimize animations, redrawing, or any other CPU/GPU/memory intensive activities +@property(nonatomic, retain, readwrite) UIView *scanOverlayView; + +/// CardIODetectionModeCardImageAndNumber: the scanner must successfully identify the card number. +/// CardIODetectionModeCardImageOnly: don't scan the card, just detect a credit-card-shaped card. +/// CardIODetectionModeAutomatic: start as CardIODetectionModeCardImageAndNumber, but fall back to +/// CardIODetectionModeCardImageOnly if scanning has not succeeded within a reasonable time. +/// Defaults to CardIODetectionModeCardImageAndNumber. +/// +/// @note Images returned in CardIODetectionModeCardImageOnly mode may be less focused, to accomodate scanning +/// cards that are dominantly white (e.g., the backs of drivers licenses), and thus +/// hard to calculate accurate focus scores for. +@property(nonatomic, assign, readwrite) CardIODetectionMode detectionMode; + /// Set to NO if you don't need to collect the card expiration. Defaults to YES. @property(nonatomic, assign, readwrite) BOOL collectExpiry; @@ -104,36 +139,33 @@ /// Set to YES to prevent card.io from showing its "Enter Manually" button. Defaults to NO. /// -/// @note If +canReadCardWithCamera returns false, then if card.io is presented it will +/// @note If [CardIOUtilities canReadCardWithCamera] returns false, then if card.io is presented it will /// automatically display its manual entry screen. /// Therefore, if you want to prevent users from *ever* seeing card.io's manual entry screen, -/// you should first check +canReadCardWithCamera before initing the view controller. +/// you should first check [CardIOUtilities canReadCardWithCamera] before initing the view controller. @property(nonatomic, assign, readwrite) BOOL disableManualEntryButtons; /// Access to the delegate. @property(nonatomic, weak, readwrite) id paymentDelegate; -/// The preload method prepares card.io to launch faster. Calling preload is optional but suggested. -/// On an iPhone 5S, for example, preloading makes card.io launch ~400ms faster. -/// The best time to call preload is when displaying a view from which card.io might be launched; -/// e.g., inside your view controller's viewWillAppear: method. -/// preload works in the background; the call to preload returns immediately. -/// The preload method of CardIOPaymentViewController and of CardIOView do the same work, -/// so a call to either of them suffices. -+ (void)preload; - -/// Determine whether this device supports camera-based card scanning, considering -/// factors such as hardware support and OS version. +/// Name for orientation change notification. +extern NSString * const CardIOScanningOrientationDidChangeNotification; + +/// userInfo key for orientation change notification, to get the current scanning orientation. /// -/// card.io automatically provides manual entry of cards as a fallback, -/// so it is not typically necessary for your app to check this. +/// Returned as an NSValue wrapping a UIDeviceOrientation. Sample extraction code: +/// @code +/// NSValue *wrappedOrientation = notification.userInfo[CardIOCurrentScanningOrientation]; +/// UIDeviceOrientation scanningOrientation = UIDeviceOrientationPortrait; // set a default value just to be safe +/// [wrappedOrientation getValue:&scanningOrientation]; +/// // use scanningOrientation... +/// @endcode +extern NSString * const CardIOCurrentScanningOrientation; + +/// userInfo key for orientation change notification, to get the duration of the card.io rotation animations. /// -/// @return YES iff the user's device supports camera-based card scanning. -+ (BOOL)canReadCardWithCamera; - -/// Please send the output of this method with any technical support requests. -/// @return Human-readable version of this library. -+ (NSString *)libraryVersion; +/// Returned as an NSNumber wrapping an NSTimeInterval (i.e. a double). +extern NSString * const CardIOScanningOrientationAnimationDuration; #pragma mark - Deprecated properties diff --git a/CardIO/CardIOPaymentViewControllerDelegate.h b/CardIO/CardIOPaymentViewControllerDelegate.h index b2f6682..ec4dbd5 100644 --- a/CardIO/CardIOPaymentViewControllerDelegate.h +++ b/CardIO/CardIOPaymentViewControllerDelegate.h @@ -1,8 +1,8 @@ // // CardIOPaymentViewControllerDelegate.h -// Version 3.10.1 +// Version 4.0.0 // -// Copyright (c) 2011-2014 PayPal. All rights reserved. +// See the file "LICENSE.md" for the full license governing this code. // #import diff --git a/CardIO/CardIOUtilities.h b/CardIO/CardIOUtilities.h new file mode 100644 index 0000000..0212862 --- /dev/null +++ b/CardIO/CardIOUtilities.h @@ -0,0 +1,37 @@ +// +// CardIOUtilities.h +// Version 4.0.0 +// +// See the file "LICENSE.md" for the full license governing this code. +// + +#import +#import + +@interface CardIOUtilities : NSObject + +/// Please send the output of this method with any technical support requests. +/// @return Human-readable version of this library. ++ (NSString *)libraryVersion; + +/// Determine whether this device supports camera-based card scanning, considering +/// factors such as hardware support and OS version. +/// +/// card.io automatically provides manual entry of cards as a fallback, +/// so it is not typically necessary for your app to check this. +/// +/// @return YES iff the user's device supports camera-based card scanning. ++ (BOOL)canReadCardWithCamera; + +/// The preload method prepares card.io to launch faster. Calling preload is optional but suggested. +/// On an iPhone 5S, for example, preloading makes card.io launch ~400ms faster. +/// The best time to call preload is when displaying a view from which card.io might be launched; +/// e.g., inside your view controller's viewWillAppear: method. +/// preload works in the background; the call to preload returns immediately. ++ (void)preload; + +/// Returns a doubly Gaussian-blurred screenshot, intended for screenshots when backgrounding. +/// @return Blurred screenshot. ++ (UIImageView *)blurredScreenImageView; + +@end diff --git a/CardIO/CardIOView.h b/CardIO/CardIOView.h index 96e4f72..598171f 100644 --- a/CardIO/CardIOView.h +++ b/CardIO/CardIOView.h @@ -1,36 +1,23 @@ // // CardIOView.h -// Version 3.10.1 +// Version 4.0.0 // -// Copyright (c) 2011-2014 PayPal. All rights reserved. +// See the file "LICENSE.md" for the full license governing this code. // #import #import "CardIOViewDelegate.h" +#import "CardIODetectionMode.h" /// CardIOView is one of two main entry points into the card.io SDK. /// @see CardIOPaymentViewController @interface CardIOView : UIView -/// Determine whether this device supports camera-based card scanning, considering -/// factors such as hardware support and OS version. -/// @return YES iff the user's device supports camera-based card scanning. -+ (BOOL)canReadCardWithCamera; - -/// The preload method prepares card.io to launch faster. Calling preload is optional but suggested. -/// On an iPhone 5S, for example, preloading makes card.io launch ~400ms faster. -/// The best time to call preload is when displaying a view from which card.io might be launched; -/// e.g., inside your view controller's viewWillAppear: method. -/// preload works in the background; the call to preload returns immediately. -/// The preload method of CardIOPaymentViewController and of CardIOView do the same work, -/// so a call to either of them suffices. -+ (void)preload; - #pragma mark - Properties you MUST set /// Typically, your view controller will set itself as this delegate. -@property(nonatomic, strong, readwrite) id delegate; +@property(nonatomic, weak, readwrite) id delegate; #pragma mark - Properties you MAY set @@ -47,7 +34,7 @@ /// E.g., specifying "en" on a device set to "English" and "United Kingdom" will result in "en_GB". /// /// These localizations are currently included: -/// ar,da,de,en,en_AU,en_GB,en_SE,es,es_MX,fr,he,is,it,ja,ko,ms,nb,nl,pl,pt,pt_BR,ru,sv,th,tr,zh-Hans,zh-Hant,zh-Hant_TW. +/// ar,da,de,en,en_AU,en_GB,en_SE,es,es_MX,fr,he,it,ja,ko,ms,nb,nl,pl,pt,pt_BR,ru,sv,th,tr,zh-Hans,zh-Hant,zh-Hant_TW. @property(nonatomic, copy, readwrite) NSString *languageOrLocale; /// Alter the card guide (bracket) color. Opaque colors recommended. @@ -64,6 +51,40 @@ /// Set to NO to follow standard iOS constraints. Defaults to YES. (Does not affect the manual entry screen.) @property(nonatomic, assign, readwrite) BOOL allowFreelyRotatingCardGuide; +/// Set the scan instruction text. If nil, use the default text. Defaults to nil. +/// Use newlines as desired to control the wrapping of text onto multiple lines. +@property(nonatomic, copy, readwrite) NSString *scanInstructions; + +/// Hide the PayPal or card.io logo in the scan view. Defaults to NO. +@property(nonatomic, assign, readwrite) BOOL hideCardIOLogo; + +/// A custom view that will be overlaid atop the entire scan view. Defaults to nil. +/// If you set a scanOverlayView, be sure to: +/// +/// * Consider rotation. Be sure to test on the iPad with rotation both enabled and disabled. +/// To make rotation synchronization easier, whenever a scanOverlayView is set, and card.io does an +/// in-place rotation (rotates its UI elements relative to their containers), card.io will generate +/// rotation notifications; see CardIOScanningOrientationDidChangeNotification +/// and associated userInfo key documentation below. +/// As with UIKit, the initial rotation is always UIInterfaceOrientationPortrait. +/// +/// * Be sure to pass touches through to the superview as appropriate. Note that the entire camera +/// preview responds to touches (triggers refocusing). Test the light button and the toolbar buttons. +/// +/// * Minimize animations, redrawing, or any other CPU/GPU/memory intensive activities +@property(nonatomic, retain, readwrite) UIView *scanOverlayView; + +/// CardIODetectionModeCardImageAndNumber: the scanner must successfully identify the card number. +/// CardIODetectionModeCardImageOnly: don't scan the card, just detect a credit-card-shaped card. +/// CardIODetectionModeAutomatic: start as CardIODetectionModeCardImageAndNumber, but fall back to +/// CardIODetectionModeCardImageOnly if scanning has not succeeded within a reasonable time. +/// Defaults to CardIODetectionModeCardImageAndNumber. +/// +/// @note Images returned in CardIODetectionModeCardImageOnly mode may be less focused, to accomodate scanning +/// cards that are dominantly white (e.g., the backs of drivers licenses), and thus +/// hard to calculate accurate focus scores for. +@property(nonatomic, assign, readwrite) CardIODetectionMode detectionMode; + /// After a successful scan, the CardIOView will briefly display an image of the card with /// the computed card number superimposed. This property controls how long (in seconds) /// that image will be displayed. @@ -71,6 +92,25 @@ /// Defaults to 1.0. @property(nonatomic, assign, readwrite) CGFloat scannedImageDuration; +/// Name for orientation change notification. +extern NSString * const CardIOScanningOrientationDidChangeNotification; + +/// userInfo key for orientation change notification, to get the current scanning orientation. +/// +/// Returned as an NSValue wrapping a UIDeviceOrientation. Sample extraction code: +/// @code +/// NSValue *wrappedOrientation = notification.userInfo[CardIOCurrentScanningOrientation]; +/// UIDeviceOrientation scanningOrientation = UIDeviceOrientationPortrait; // set a default value just to be safe +/// [wrappedOrientation getValue:&scanningOrientation]; +/// // use scanningOrientation... +/// @endcode +extern NSString * const CardIOCurrentScanningOrientation; + +/// userInfo key for orientation change notification, to get the duration of the card.io rotation animations. +/// +/// Returned as an NSNumber wrapping an NSTimeInterval (i.e. a double). +extern NSString * const CardIOScanningOrientationAnimationDuration; + #pragma mark - Property you MAY get diff --git a/CardIO/CardIOViewDelegate.h b/CardIO/CardIOViewDelegate.h index 3a23158..1b3d333 100644 --- a/CardIO/CardIOViewDelegate.h +++ b/CardIO/CardIOViewDelegate.h @@ -1,8 +1,8 @@ // // CardIOViewDelegate.h -// Version 3.10.1 +// Version 4.0.0 // -// Copyright (c) 2011-2014 PayPal. All rights reserved. +// See the file "LICENSE.md" for the full license governing this code. // #import diff --git a/CardIO/libCardIO.a b/CardIO/libCardIO.a index 02434a9..fe04d7d 100644 Binary files a/CardIO/libCardIO.a and b/CardIO/libCardIO.a differ diff --git a/LICENSE.md b/LICENSE.md index fc1070f..1a6d8c6 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -2,7 +2,7 @@ All header files are released under the MIT License: The MIT License (MIT) - Copyright (c) 2013-2014 PayPal + Copyright (c) 2013-2014 eBay Software Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index cb77f0d..cdd762a 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,6 @@ Instructions The card.io iOS SDK includes header files and a single static library. We'll walk you through integration and usage. -*(Note: in the past, developers needed to sign up at the [card.io site](https://www.card.io) and obtain an* `app token`. *This is no longer required.)* - ### Requirements * Supports target deployment of iOS version 6.1+ and instruction set armv7+ (including 64-bit). @@ -109,7 +107,7 @@ Make an optional call to speed up the subsequent launch of card.io scanning: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [CardIOPaymentViewController preload]; + [CardIOUtilities preload]; } ``` @@ -146,6 +144,8 @@ Write delegate methods to receive the card info or a cancellation: #### Integrate as a View +*CardIOView is new as of card.io Version 3.3.0 (September 2013). We look forward to seeing how creative developers integrate it into their apps. If you do something cool with it, share it with [@cardio](https://twitter.com/cardio)! We also look forward to quickly resolving any issues that you may discover.* + Create a class (most likely a subclass of `UIViewController`) that conforms to `CardIOViewDelegate`. ```obj-c @@ -171,7 +171,7 @@ Confirm that the user's device is capable of scanning cards: - (void)viewDidLoad { [super viewDidLoad]; - if (![CardIOView canReadCardWithCamera]) { + if (![CardIOUtilities canReadCardWithCamera]) { // Hide your "Scan Card" button, or take other appropriate action... } } @@ -184,7 +184,7 @@ Make an optional call to speed up the subsequent launch of card.io scanning: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [CardIOView preload]; + [CardIOUtilities preload]; } ``` @@ -254,7 +254,7 @@ After confirming that the user's device is capable of scanning cards, set the `d - (void)viewDidLoad { [super viewDidLoad]; - if (![CardIOView canReadCardWithCamera]) { + if (![CardIOUtilities canReadCardWithCamera]) { // Hide your "Scan Card" button, remove the CardIOView from your view, and/or take other appropriate action... } else { self.cardIOView.delegate = self; @@ -269,7 +269,7 @@ Make an optional call to speed up the subsequent launch of card.io scanning: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [CardIOView preload]; + [CardIOUtilities preload]; } ``` @@ -320,4 +320,4 @@ Include a method to cancel card scanning: * Processing images can be memory intensive, so make sure to test that your app properly handles memory warnings. * For your users' security, [obscure your app's cached screenshots](https://viaforensics.com/resources/reports/best-practices-ios-android-secure-mobile-development/ios-avoid-cached-application-snapshots/). **Note:** By default, a `CardIOPaymentViewController` automatically blurs its own screens when the app is backgrounded. A `CardIOView` does not do any automatic blurring. -* The first time that you create either a `CardIOPaymentViewController` or a `CardIOView`, the card.io SDK must load resources, which can result in a noticeable delay. To avoid this delay you may optionally call the `preload` method (of either class) in advance, so that this resource loading occurs in advance on a background thread. +* The first time that you create either a `CardIOPaymentViewController` or a `CardIOView`, the card.io SDK must load resources, which can result in a noticeable delay. To avoid this delay you may optionally call `[CardIOUtilities preload]` in advance, so that this resource loading occurs in advance on a background thread. diff --git a/SampleApp/ScanExample.xcodeproj/project.pbxproj b/SampleApp/ScanExample.xcodeproj/project.pbxproj index fd4489f..1ddbdc0 100644 --- a/SampleApp/ScanExample.xcodeproj/project.pbxproj +++ b/SampleApp/ScanExample.xcodeproj/project.pbxproj @@ -187,7 +187,7 @@ 0A2C902A1564175A000727BC /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0500; + LastUpgradeCheck = 0610; ORGANIZATIONNAME = card.io; }; buildConfigurationList = 0A2C902D1564175A000727BC /* Build configuration list for PBXProject "ScanExample" */; @@ -266,16 +266,17 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -302,16 +303,17 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; diff --git a/SampleApp/ScanExample/ViewController.m b/SampleApp/ScanExample/ViewController.m index 000e9ac..387fe50 100644 --- a/SampleApp/ScanExample/ViewController.m +++ b/SampleApp/ScanExample/ViewController.m @@ -27,7 +27,7 @@ - (void)viewDidLoad { - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [CardIOPaymentViewController preload]; + [CardIOUtilities preload]; } #pragma mark - User Actions diff --git a/release_notes.txt b/release_notes.txt index cc750a8..b711213 100644 --- a/release_notes.txt +++ b/release_notes.txt @@ -1,6 +1,26 @@ card.io iOS SDK release notes ============================= +4.0.0 (Mon 12/1/2014) + +* Build from the new open-source edition of card.io: https://github.com/card-io/card.io-iOS-source +* New class: CardIOUtilities + - libraryVersion (formerly a method of CardIOPaymentViewController) + - canReadCardWithCamera (formerly a method of CardIOPaymentViewController) + - preload (formerly a method of CardIOView and of CardIOPaymentViewController) + - blurredScreenImageView (new method) +* New property on CardIOCreditCardInfo: + - cardImage +* New properties on CardIOView and CardIOPaymentViewController: + - scanInstructions + - hideCardIOLogo + - scanOverlayView + - detectionMode +* New notification: + - CardIOScanningOrientationDidChangeNotification + +-- + 3.10.1 (Wed 11/5/2014) * Restore App Token as a deprecated property, so that existing card.io integrations will continue to build without modification.