Checkout API Client, Payment Form UI and Utilities in Swift

Overview

Frames iOS

Build Status CocoaPods Compatible Carthage Compatible Platform codecov codebeat badge license

Demo frames ios

Requirements

  • iOS 10.0+
  • Xcode 12.4+
  • Swift 5.3+

Documentation

Further information on using the Frames SDK is available in the integration guide.

Frames for iOS provides a convenient solution that can take the customer's sensitive information and exchange them for a secure token that can be used within Checkout.com's infrastructure.

Frames can be integrated in 2 ways:

  1. Integrated with the UI Embed the fully customisable UI provided by the SDK to accept card details, customer name and billling details and exchange them for a secure token. (See the CardViewController tab)

  2. Integrated without the UI Use the provided API to send sensitive data to the Checkout.com server and retrieve the secure token (See the Headless tab).

You can find the Frames API reference on this website.

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:

$ gem install cocoapods

CocoaPods 1.10.0+ is required to build Frames.

To integrate Frames into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'Frames', '~> 3'
end

Then, run the following command:

$ pod install

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

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

github "checkout/frames-ios" ~> 3

Run carthage update --use-xcframeworks to build the framework and drag the built Frames into your Xcode project.

Swift Package Manager

Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler.

Once you have your Swift package set up, adding Frames as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/checkout/frames-ios.git", .upToNextMajor(from: "3.0.0"))
]

Usage

Import the SDK:

import Frames

Using the CardViewController UI

class ViewController: UIViewController, CardViewControllerDelegate {

    // Create a CheckoutAPIClient instance with your public key.
    let checkoutAPIClient = CheckoutAPIClient(
        publicKey: "<Your Public Key>",
        environment: .sandbox)

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create the CardViewController.
        let cardViewController = CardViewController(
            checkoutApiClient: checkoutAPIClient,
            cardHolderNameState: .hidden,
            billingDetailsState: .hidden)

        // Set the CardViewController delegate.
        cardViewController.delegate = self

        // Replace the bar button with Pay.
        cardViewController.rightBarButtonItem = UIBarButtonItem(
            title: "Pay",
            style: .done,
            target: nil,
            action: nil)

        // (Optional) Specify which schemes are allowed.
        cardViewController.availableSchemes = [.visa, .mastercard]

        // Push the cardViewController onto the navigation stack.
        navigationController?.pushViewController(cardViewController, animated: false)
    }

    func onTapDone(controller: CardViewController, cardToken: CkoCardTokenResponse?, status: CheckoutTokenStatus) {
        // Called when the tokenization request has completed.
        print(cardToken ?? "cardToken is nil")
    }

    func onSubmit(controller: CardViewController) {
        // Called just before a create card token request is made.
    }

}

Headless Mode

// Create a CheckoutAPIClient instance with your public key.
let checkoutAPIClient = CheckoutAPIClient(
    publicKey: "<Your Public Key>",
    environment: .sandbox)

let phoneNumber = CkoPhoneNumber(
    countryCode: "44",
    number: "7700900000")

let address = CkoAddress(
    addressLine1: "Wenlock Works",
    addressLine2: "Shepherdess Walk",
    city: "London",
    state: "London",
    zip: "N1 7BQ",
    country: "GB")

// Create a CardTokenRequest instance with the phoneNumber and address values.
let cardTokenRequest = CkoCardTokenRequest(
    number: "4242424242424242",
    expiryMonth: "01",
    expiryYear: "29",
    cvv: "100",
    name: "Test Customer",
    billingAddress: address,
    phone: phoneNumber)

// Request the card token.
checkoutAPIClient.createCardToken(card: cardTokenRequest) { result in
    switch result {
    case .success(let response):
        print(response)
    case .failure(let error):
        print(error.localizedDescription)
    }
}

Using Methods available in FramesIos

You can find more examples on the usage guide.

Create the API Client CheckoutAPIClient:

// Replace "pk_test_6ff46046-30af-41d9-bf58-929022d2cd14" with your own public key.
let checkoutAPIClient = CheckoutAPIClient(
    publicKey: "pk_test_6ff46046-30af-41d9-bf58-929022d2cd14",
    environment: .sandbox)

Create the CardUtils instance:

let cardUtils = CardUtils()

Use CardUtils to verify card number:

// Verify card number.
let cardNumber = "4242424242424242"
let isValidCardNumber = cardUtils.isValid(cardNumber: cardNumber)

print(isValidCardNumber) // true

Validate a CVV with CardUtils

// Verify CVV.
let cardNumber = "4242424242424242"
guard let cardType = cardUtils.getTypeOf(cardNumber: cardNumber) else { return }

let cvv = "100"
let isValidCVV = cardUtils.isValid(cvv: cvv, cardType: cardType)

print(isValidCVV) // true

Validate an expiration date with CardUtils

// Verify expiration date.
let expirationMonth = "01"
let expirationYear = "29"

let isValidExpiration = cardUtils.isValid(
    expirationMonth: expirationMonth,
    expirationYear: expirationYear)

print(isValidExpiration) // true

Get information about a card number with CardUtils

let cardNumber = "4242424242424242"
guard let cardType = cardUtils.getTypeOf(cardNumber: cardNumber) else { return }
print(cardType.name) // Visa

Format a card number with CardUtils

let cardNumber = "4242424242424242"
guard let cardType = cardUtils.getTypeOf(cardNumber: cardNumber) else { return }

let formattedCardNumber = cardUtils.format(cardNumber: cardNumber, cardType: cardType)
print(formattedCardNumber) // 4242 4242 4242 4242

Standardize a card number with CardUtils

let cardNumber = "4242 | 4242 | 4242 | 4242 "
let standardizedCardNumber = cardUtils.standardize(cardNumber: cardNumber)
print(standardizedCardNumber) // "4242424242424242"

Create the card token request CkoCardTokenRequest:

// Create a CheckoutAPIClient instance with your public key.
let checkoutAPIClient = CheckoutAPIClient(
    publicKey: "<Your Public Key>",
    environment: .sandbox)

let phoneNumber = CkoPhoneNumber(
    countryCode: "44",
    number: "7700900000")

let address = CkoAddress(
    addressLine1: "Wenlock Works",
    addressLine2: "Shepherdess Walk",
    city: "London",
    state: "London",
    zip: "N1 7BQ",
    country: "GB")

// Create a CardTokenRequest instance with the phoneNumber and address values.
let cardTokenRequest = CkoCardTokenRequest(
    number: "4242424242424242",
    expiryMonth: "01",
    expiryYear: "29",
    cvv: "100",
    name: "Test Customer",
    billingAddress: address,
    phone: phoneNumber)

// Request the card token.
checkoutAPIClient.createCardToken(card: cardTokenRequest) { result in
    switch result {
    case .success(let response):
        print(response)
    case .failure(let error):
        print(error.localizedDescription)
    }
}

The completion handler here provides a Result<CkoCardTokenResponse, NetworkError> value.

Prompt for CVV confirmation

Create and configure a CvvConfirmationViewController.

let cvvConfirmationViewController = CvvConfirmationViewController()
cvvConfirmationViewController.delegate = self

Handle the result by adding conformance to CvvConfirmationViewControllerDelegate.

extension ViewController: CvvConfirmationViewControllerDelegate {

    func onConfirm(controller: CvvConfirmationViewController, cvv: String) {
        // Handle cvv.
    }

    func onCancel(controller: CvvConfirmationViewController) {
        // Handle cancellation.
    }

}

Handle 3D Secure

When you send a 3D secure charge request from your server you will get back a 3D Secure URL. This is available from _links.redirect.href within the JSON response. You can then pass the 3D Secure URL to a ThreedsWebViewController in order to handle the verification.

The redirection URLs (success_url and failure_url) are set in the Checkout.com Hub, but they can be overwritten in the charge request sent from your server. It is important to provide the correct URLs to ensure a successful payment flow.

Create and configure a ThreedsWebViewController.

let threeDSWebViewController = ThreedsWebViewController(
    successUrl: "http://example.com/success",
    failUrl: "http://example.com/failure")
threeDSWebViewController.url = "http://example.com/3ds"
threeDSWebViewController.delegate = self

Handle the result by adding conformance to ThreedsWebViewControllerDelegate.

extension ViewController: ThreedsWebViewControllerDelegate {

    func threeDSWebViewControllerAuthenticationDidSucceed(_ threeDSWebViewController: ThreedsWebViewController, token: String?) {
        // Handle successful 3DS.
    }

    func threeDSWebViewControllerAuthenticationDidFail(_ threeDSWebViewController: ThreedsWebViewController) {
        // Handle failed 3DS.
    }

}

Customize with CheckoutTheme

Further documentation about customizing Frames is available from the customization guide.

CheckoutTheme.primaryBackgroundColor = .purple
CheckoutTheme.secondaryBackgroundColor = .magenta
CheckoutTheme.tertiaryBackgroundColor = .red
CheckoutTheme.color = .white
CheckoutTheme.secondaryColor = .lightGray
CheckoutTheme.errorColor = .blue
CheckoutTheme.chevronColor = .white
CheckoutTheme.font = UIFont(name: "Chalkboard SE", size: 12)!

License

Frames iOS is released under the MIT license. See LICENSE for details.

Comments
  • Compilation issue using Swift Package Manager and v3.4.3

    Compilation issue using Swift Package Manager and v3.4.3

    Describe the bug I'm seeing a compilation issue using Swift Package Manager after updating to v3.4.3.

    To Reproduce Steps to reproduce the behavior:

    1. pull down v3.4.3
    2. Go to build, see below build error

    Screenshots Screenshot 2021-08-09 at 17 04 45

    opened by harryblam 15
  • Fixed issues when 'createCardToken' and 'createApplePayToken' request…

    Fixed issues when 'createCardToken' and 'createApplePayToken' request…

    Fixed issues when 'createCardToken' and 'createApplePayToken' requests could return nothing if an unexpected error occurs. Also, there is an ability now to expand NetworkError enum in order to handle more cases

    opened by christianvershkov 9
  • Xcode 12

    Xcode 12

    Xcode 12: 'PhoneNumberKit' has different definitions in different modules; first difference is definition in module 'PhoneNumberKit.Swift' found method with no designater initializer

    i am using PhoneNumberKit [https://github.com/marmelroy/PhoneNumberKit]

    opened by fahedalahmad 8
  • Can't obtain 3D Secure success/failure url

    Can't obtain 3D Secure success/failure url

    In short: we have a web and mobile application, both using Checkout Hub with data, 3DS works fine for web. I'm trying to use ThreedsWebViewController to implement 3D Secure feature on iOS, but its webView redirects to random url.

    1. Create token with

    CheckoutAPIClient(publicKey: publicKey, environment: .sandbox)

    1. Send token to back-end, back-end responds with url
    2. Create and show

    ThreedsWebViewController(successUrl: "HTTPS://ourapp.com/PaymentSuccess", failUrl: "HTTPS://ourapp.com/PaymentFailure")

    1. Enter code into opened webView window and tap "Continue"
    2. Looking for redirect url in

    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) print(webView.url!)

    Expected value: HTTPS://ourapp.com/PaymentSuccess Actual value: https://3ds2-sandbox.ckotech.co/interceptor/3ds_dl5v2ubsgv4udi2m53i6ze6ki4/device-information

    opened by Oleygen 8
  • Errors when using 3.4.1

    Errors when using 3.4.1

    Describe the bug

    Hi,

    We use frames-ios using Carthage, and last night I merged the upgrade to 3.4.1 for our CI system to pick up. This had required us to change references to Frames from FramesIos in source, and I had linked the new dependencies registered in the Cartfile in the host application (as we do with other Carthage dependencies).

    Everything worked as expected till our nightly AppStore Validate job ran, and we received the following from Apple:

    [00:53:06]: CFBundleIdentifier Collision. There is more than one bundle with the CFBundleIdentifier value 'com.roymarmelstein.PhoneNumberKit' under the iOS application 'OurApp.app'. (1091)
    [00:53:06]: CFBundleIdentifier Collision. There is more than one bundle with the CFBundleIdentifier value 'org.alamofire.Alamofire' under the iOS application 'OurApp.app'. (1091)
    [00:53:06]: Invalid Bundle. The bundle at 'OurApp.app/Frameworks/Frames.framework' contains disallowed nested bundles. (1091)
    [00:53:06]: Invalid Bundle. The bundle at 'OurApp.app/Frameworks/Frames.framework' contains disallowed file 'Frameworks'. (1091)
    
    

    So I'm guessing both of these dependencies are actually embedded in Frames, rather than simply being linked. I attempted to unlink these from the main binary, but now we're seeing issues running tests:

    Could not find module 'Alamofire' for target 'x86_64-apple-ios-simulator'; found: arm64, armv7-apple-ios, arm64-apple-ios, arm, armv7
    

    Repeat for every source file in that target.

    My first thought would be to only link Alamofire and NumberKit in Frames rather than embedding them - leaving the host application to supply the frameworks, as this is standard practice.

    To Reproduce Steps to reproduce the behavior:

    1. Link Frames
    2. Follow steps described above
    3. Receive either an error from Apple or an error trying to test.

    Expected behavior The framework should work as expected

    opened by sebskuse 7
  • html error response

    html error response

    Describe the bug Xcode 10.3 Using your test cards for dev environment 4242 4242 4242 4242 cvv: 100

    Here is what I'm sending: REST POST https://sandbox.checkout.com/api2/v2/payments {'content-type': 'application/json', 'Authorization': 'sk_test_2e41ac0e-fa36-47e6-bbb8-f9c903d2d5c5'} {'source': {'type': 'token', 'token': 'card_tok_735752A2-41C8-41F3-836A-5D59BA562B77'}, 'amount': '1300', 'currency': 'USD', 'payment_type': 'Regular', 'reference': 'A12807|30619', 'capture': True, 'metadata': {'udf2': '9b92d120695a77345aabb8d5b92b9266'}, 'failure_url': 'https://tr3.admiralmarkets.com/transactions/deposit/error/checkout?order_id=A12807|30619', 'success_url': 'https://tr3.admiralmarkets.com/transactions/deposit/success/checkout?order_id=A12807|30619', 'customer': {'email': '[email protected]'}, '3ds': {'enabled': True}} [PENDING].

    And getting huge amount of html code instead (

    Expected behavior At least I would like to get an error message

    Smartphone (please complete the following information):

    • Device: any
    • OS: 12.4
    opened by ViktorAmelin 7
  • ERROR ITMS-90081 when trying to upload build to Appstore Connect

    ERROR ITMS-90081 when trying to upload build to Appstore Connect

    I added Frames framework (v3.5.3) to my project using Carthage: Cartfile: github "checkout/frames-ios" Carfile.resolved:

    github "checkout/frames-ios" "3.5.3"
    github "marmelroy/PhoneNumberKit" "3.3.5"
    

    After that, my CI has started failing with an error message: "ERROR ITMS-90081: "This bundle is invalid. Applications built for more than one architecture require an iOS Deployment Target of 3.0 or later."

    Do you have any idea why is that happening?

    opened by kamilw-au 6
  • Release 3.4.0 broken with Carthage

    Release 3.4.0 broken with Carthage

    Describe the bug

    As of the latest release we are unable to build the SDK with Carthage:

    [16:55:37]: ▸ Dependency "frames-ios" has no shared framework schemes for any of the platforms: iOS
    [16:55:37]: ▸ If you believe this to be an error, please file an issue with the maintainers at https://github.com/checkout/frames-ios/issues/new
    

    It appears that the workspace has moved from the root directory, which means that Carthage is unable to find it.

    To Reproduce Steps to reproduce the behavior:

    1. Add frames-ios as a carthage dependency
    2. Attempt to build dependencies
    3. See error

    Expected behavior The project should build

    opened by sebskuse 6
  • PIMOB-1394: Fix cornerRadius issue in Constants

    PIMOB-1394: Fix cornerRadius issue in Constants

    Proposed changes

    Small bug fix for cornerRadius.

    Types of changes

    What types of changes does your code introduce to Frames Ios? Put an x in the boxes that apply

    • [ x] Bugfix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    Duplicate 
    opened by patrick-hoban-cko 5
  • PI-1738: Billing Form component: Standard

    PI-1738: Billing Form component: Standard

    URL: https://checkout.atlassian.net/browse/PIMOB-956

    Proposed changes

    Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.

    Types of changes

    What types of changes does your code introduce to Frames Ios? Put an x in the boxes that apply

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [x ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Checklist

    Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

    • [ ] Lint and unit tests pass locally with my changes
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] I have added necessary documentation (if appropriate)

    Further comments

    If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...

    opened by ehab-al-cko 5
  • CkoPhoneNumber coding key query

    CkoPhoneNumber coding key query

    Hi.

    Just wanted to query something I've noticed in the API contracts for registering a card in the payment flows (POST https://api.checkout.com/tokens).

    The CkoAddress type (and other associated types, like CkoCardTokenRequest) is encoded using snake case keys (https://github.com/checkout/frames-ios/blob/master/Source/CkoAddress.swift), as can be seen in the Encodable implementation. addressLine1 becomes address_line1 for example.

    However CkoPhoneNumber is not encoded with any custom CodingKeys (https://github.com/checkout/frames-ios/blob/master/Source/CkoPhoneNumber.swift) and will therefore take the standard swift case convention e.g. countryCode remains as countryCode.

    Is this a known quirk on the API? Or maybe a bug in this SDK?

    opened by adamwaite 5
  • Release 4.0.4: Bring latest release changes to main

    Release 4.0.4: Bring latest release changes to main

    Proposed changes

    Bring the missing changes from 4.0.4 release branch back into main:

    • Changelog
    • version update
    • API key changes
    • using String instead of enum for scheme returns
    opened by alex-ioja-yang-cko 0
  • Back Button and Accepted Cards not showing on TestFlight Build

    Back Button and Accepted Cards not showing on TestFlight Build

    We are facing issue when we install application from TestFlight on card page we are not able to see Back button and accepted cards section whereas if we install same build via Diawi link we are able to see the back button & accepted cards section. Kindly help us understand what could be the issue image (4)

    opened by Dev-iOS-Appbirds 1
  • Discussion: Simplify communication paths between Payment VC and its ViewModel

    Discussion: Simplify communication paths between Payment VC and its ViewModel

    Most of the lines changed are within unit tests, where I have created new mock structures and supplemented existing testing!

    See following explanations to understand reasoning for PR

     

    Problem description

    Currently the ViewController holds a reference to the viewModel under 2 separate properties:
    • ViewModel (direct clear reference)

    • Delegate (used improperly)

    The ViewModel then passes information back to the ViewController via completion handlers (/callbacks).


     

    A few reasons why this is not great:

    • architecturally the pattern is a mess. It uses multiple known elements and approaches in ways that are non standard
    • 1 object consumes the child object under different variable names. This in itself causes many issues on scalability

     

     

    Solution

    MVVM (Model - View - ViewModel) is a very straight forward pattern and to fix our current implementation we would be looking to drop the "delegate" from the current implementation.

    This would leave our ViewController to own the ViewModel and the ViewModel to keep a way to communicate upwards in a child - parent relationship.

    We now get clear object relationship that follows basic MVVM architecture.

     

     

    Improved Solution

    The previous Solution is a natural step into fixing the shortcomings of current Problem, it also reduces fragility when considering any future work, but the flow can further be improved with a minor tweak.

    Completion handlers create a 1:1 relationship, 1 property maps to 1 callback. This requires additional overhead (setup, references) and most importantly increases likelihood of memory related issues being introduced.

    Delegate pattern fixes this and enables a 1:many relationship, 1 property maps to many possible callbacks (1 delegate can contain a number of functions), which reduces the need to have a complex setup where each property is assigned individually & enables scalability with no fear of new memory leaks being introduced (whilst scaling the particular relationship the delegate serves!).
     

         

    Changes

    This PR:

    • migrates from the current implementation (under Problem description) to Improved Solution
    • removes some previously unused callbacks
    • introduces UIPresenter. This allows the ViewModel to handle UI navigation without exposing UIKit (and with it UI library)
    • fixes a minor unrelated SwiftLint warnings around FramesBundle
    • migrates the billing summary formatting to a separate object which enables it being tested directly & fully (vs the current minor testing as part of the ViewModel)
    • replaces the concrete use of CardValidator inside the ViewModel with its interface CardValidating
    • updates unit tests in line to architectural changes & adds additional ones
    Discussion 
    opened by alex-ioja-yang-cko 1
  • Frames Cocoapod integration is broken from 4.0.2

    Frames Cocoapod integration is broken from 4.0.2

    Describe the bug Build with Frames 4.0.2/4.0.3 fail with error:

    Multiple commands produce 'FramesCocoapodIssue.app/Assets.car'
    

    To Reproduce Steps to reproduce the behavior:

    1. Create new Xcode project from scrarch;
    2. Add Podfile with dependency on Frames:
    platform :ios, '14.0'
    
    target 'FramesCocoapodIssue' do
      pod 'Frames', '4.0.3'
    end
    
    1. Run pod install
    2. Open workspace and build project

    Expected behavior Build should succeed.

    Desktop (please complete the following information):

    • OS: macOS 13.0.1
    • Xcode: 14.2
    • Build for iOS Simulator with iOS 16.2

    Additional context Hi! I created a test project for reproduce this issue - https://github.com/rock88/FramesCocoapodIssue If use Frames 4.0.1 all works as expected.

    Issue appear in this PR: https://github.com/checkout/frames-ios/pull/359 I think preferred use Resources Bundle instead of just copy resources to application bundle. For include only Assets and Localizations you can use:

    s.resource_bundles = {
      'Frames' => ['Source/Resources/**/*.{xcassets,strings}']
    }
    

    For access to this resources from Frames sources (Both SPM and Cocoapod):

    #if COCOAPODS
    extension Bundle {
        static let module = Bundle.main.path(forResource: "Frames", ofType: "bundle").flatMap { Bundle(path: $0) } ??
          Bundle(for: BundleToken.self).path(forResource: "Frames", ofType: "bundle").flatMap(Bundle.init) ??
          Bundle(for: BundleToken.self)
    }
    
    private final class BundleToken { }
    #endif
    
    // part of https://github.com/checkout/frames-ios/blob/main/Source/Extensions/StringExtensions.swift
    extension String {
        func localized(comment: String = "") -> String {
            NSLocalizedString(self, bundle: .module, comment: comment)
        }
    
        func image() -> UIImage {
            UIImage(named: self, in: .module, compatibleWith: nil) ?? UIImage()
        }
    }
    
    opened by rock88 4
Releases(4.0.4)
  • 4.0.4(Jan 5, 2023)

    4.0.4

    • Mapped the scheme_local property from the /tokens endpoint via the SDK (NAS keys only) [Enhancement]
    • Handles cartes_bancaires and mada strings in scheme property returned from /tokens endpoint [Fix]
    • Passing new error type userCancelled in completion handler for tokenisation journey [Enhancement]

    The completion handler failure case now returns userCancelled. If treating all failure outcomes as Error it might be a good time to review if requirements changed. This however removes the need to detect when control is handed back to your application, as we will call the completionHandler on all paths that complete tokenisation flow.

    Source code(tar.gz)
    Source code(zip)
  • 4.0.3(Dec 5, 2022)

    4.0.3

    • Fix Cocoapods resources in AppStore archive [Fix]

    All Cocoapods integrators should use this version in order to ensure the assets are present in the AppStore distributed build.

    Source code(tar.gz)
    Source code(zip)
  • 4.0.2(Dec 2, 2022)

    4.0.2

    • Fix Security Code input issue with leading zeros [Fix] • Improved phone number validation, improving UX and input handling [Enhancement]

    All SDK integrators desiring the new SDK should use 4.0.2 onwards, as it fixes some known bugs with 4.0.1.

    Source code(tar.gz)
    Source code(zip)
  • 4.0.1(Nov 8, 2022)

    4.0.1

    • Fix Apple Pay token type [Fix] • Fix some typos and cleaned up code [Fix] • Font can now be set within the Theme [Fix] • Improved efficiency of our 3DSWebView [Enhancement] • Enabled host app to use its own navigation controller [Enhancement]

    All SDK integrators desiring the new SDK should use 4.0.1 onwards, as it fixes some known bugs with 4.0.0.

    Source code(tar.gz)
    Source code(zip)
  • 4.0.0(Oct 19, 2022)

    4.0.0

    1. Improved validation and tokenisation logic
    2. Fully updated customisation, to be in line with your app experience
    3. More secure UIs that protect your customers

    Version causes breaking changes. Please check our ReadMe for latest integration advice.

    Source code(tar.gz)
    Source code(zip)
  • 3.5.3(Apr 26, 2022)

  • 3.5.2(Nov 4, 2021)

  • 3.5.1(Oct 19, 2021)

    Released on 2021-10-19.

    Fixed

    • Localizable.strings issue when used with Cocoapods as a static library.
    • Compilation issue for simulator release builds with Swift Package Manager.
    Source code(tar.gz)
    Source code(zip)
  • 3.5.0(Sep 29, 2021)

    Added

    • New delegate methods on ThreedsWebViewControllerDelegate to receive token.

    Fixed

    • URL handling in ThreedsWebViewController

    Removed

    • Alamofire dependency
    Source code(tar.gz)
    Source code(zip)
  • 3.4.4(Aug 25, 2021)

  • 3.4.3(Jun 24, 2021)

    • Cocoapods build issues that blocked release
    • Billing address showing up nil inside CkoCardTokenResponse
    • iOS Custom Example project crash while creating token
    Source code(tar.gz)
    Source code(zip)
  • 3.4.2(May 10, 2021)

  • 3.4.1(Apr 13, 2021)

  • 3.4.0(Mar 31, 2021)

    • Added user-agent for requests.
    • Response objects are now decoded properly using snake case.
    • Distribution via Swift Package Manager is now fixed.
    • PhoneNumberKit source files have been removed, which were embedded in the framework. This includes CKOPhoneNumberKit. PhoneNumberKit is now referenced from the Podspec and Swift Package Manager configuration.
    Source code(tar.gz)
    Source code(zip)
  • 3.3.0(Feb 24, 2021)

  • 3.2.0(Jan 14, 2021)

    • New NetworkError enum allows you to see more details of any errors received from the API.
    • Using DetailsInputView in your own Storyboard file no longer results in a build error.
    Source code(tar.gz)
    Source code(zip)
  • 3.1.1(Oct 30, 2020)

    • Remove the update.sh script (leftover from updating PhoneNumberKit) from the project which would cause failures when validating with Xcode/the App Store.
    Source code(tar.gz)
    Source code(zip)
  • 3.1.0(Oct 21, 2020)

    • Update PhoneNumberKit, rename to CKOPhoneNumberKit to avoid clashing with other integrations of the framework.
    • Update MockingJay framework dependency to a version that supports Swift 5. This is used for unit tests within the Frames-ios Xcode project.
    Source code(tar.gz)
    Source code(zip)
  • 3.0.5(Aug 12, 2020)

  • 3.0.4(May 21, 2020)

  • 3.0.3(May 18, 2020)

  • 3.0.2(Jan 17, 2020)

  • 3.0.1(Oct 30, 2019)

  • 3.0.0(Oct 29, 2019)

  • 2.6.4(Jan 14, 2019)

  • 2.6.1(Nov 22, 2018)

    Added

    • Added the possibility to pre-populate the UI fields of billing details

    Fixed

    • Fixed issue where the keyboard was overriding text fields
    • Fixed the response model of the card token object: now includes postcode and phone number
    Source code(tar.gz)
    Source code(zip)
  • 2.6.0(Nov 19, 2018)

    Added

    • Added a delegate method onSubmit that is executed when the card data is submitted to create the card token.

    Fixed

    • Fixed issue with ios 10 where the fields on the billing address screen will display only one character.
    • Fixed cursor position when formatting card number and phone number input field.
    Source code(tar.gz)
    Source code(zip)
  • 2.5.0(Nov 15, 2018)

    Modified

    • Change the delegate method to not expose the card request in it.
    • billingAddressDetails is now public property to be able to create a token with a predefined address.
    • Remove the * on Address line 2 and County

    Fixed

    • Fix the layout on IphoneX. Make the CardView go all the way to the bottom.
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Nov 8, 2018)

    Added

    • CheckoutTheme that will allow to modify the colors and fonts more easily.
    • Ability to set the default region code for the billing address

    Modified

    • Change the names and order of the Billing details text fields.
    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Sep 11, 2018)

    Modified

    • Change the expiration date format. The expiration year is now 2 digits long (e.g. 19 for 2019).

    Fixed

    • Fixed UI Tests for iOS Custom.
    Source code(tar.gz)
    Source code(zip)
Owner
Checkout.com
A collection of libraries and plugins for Checkout.com
Checkout.com
A Payment Card UI & Validator for iOS

Description Caishen provides an easy-to-use text field to ask users for payment card information and to validate the input. It serves a similar purpos

Prolific Interactive 766 Dec 28, 2022
Payment Portal Interaction

PaymentInteraction Payment Portal Interaction This Interaction was built keeping in mind Usability,Clean UI,Natural Response. Libraries Used Hero-iOS

Utkarsh Dixit 1 Oct 1, 2021
With SwiftUI payment share app

Splitpayment With SwiftUI payment share app.

Ahmet Onur Şahin 3 Apr 18, 2022
In-app purchases and subscriptions made easy. Support for iOS, iPadOS, watchOS, and Mac.

In-app purchases and subscriptions made easy. Support for iOS, iPadOS, watchOS, and Mac.

RevenueCat 1.6k Jan 6, 2023
OnTime - OnTime App is for Scheduling your day and prioritizing your task and also for saving notes

OnTime OnTime App is for Scheduling your day and prioritizing your task and also

Mohammed Sulaiman 1 Jan 7, 2023
iOS SDK for cross-platform in-app purchase and subscription infrastructure, revenue analytics, engagement automation, and integrations

Qonversion is the data platform to power in-app subscription revenue growth. fast in-app subscriptions implementation back-end infrastructure to valid

Qonversion 253 Dec 18, 2022
TPInAppReceipt is a lightweight, pure-Swift library for reading and validating Apple In App Purchase Receipt locally.

TPInAppReceipt is a lightweight, pure-Swift library for reading and validating Apple In App Purchase Receipt locally. Features Read all

Pavel T 520 Jan 4, 2023
Lightweight In App Purchases Swift framework for iOS 8.0+, tvOS 9.0+ and macOS 10.10+ ⛺

SwiftyStoreKit is a lightweight In App Purchases framework for iOS, tvOS, watchOS, macOS, and Mac Catalyst. Features Super easy-to-use block-based API

Andrea Bizzotto 6.1k Jan 7, 2023
A credit card reader and parser for iOS Using Native Vision/VisionKit

card-reader-ios A credit card reader and parser for iOS Using Native Vision/VisionKit May-14-2021.00-43-17.mp4 Instructions Hold camera up to a card a

Khalid Asad 104 Dec 15, 2022
Make and accept payments in your iOS app via Venmo

Venmo iOS SDK The Venmo iOS SDK lets you make and accept payments in your app using Venmo. Installation If you're using CocoaPods: If you don't have a

Venmo 170 Dec 26, 2022
Accept credit cards and PayPal in your iOS app

Important: PayPal Mobile SDKs are Deprecated. The APIs powering them will remain operational long enough for merchants to migrate, but the SDKs themse

PayPal 973 Dec 18, 2022
A study card application built with SwiftUI and Combine

StudyCards Description A study card application. I built this application to get

Matt Manion 2 Sep 26, 2022
Card Decks is a small utility application for your iPhone, iPod touch and iPad which brings you simple, configurable, colored, multi-line text cards that are grouped into card decks

Card Decks is a small utility application for your iPhone, iPod touch and iPad which brings you simple, configurable, colored, multi-line text cards that are grouped into card decks.

Arne Harren 40 Nov 24, 2022
Bank Card Generator with Swift using SnapKit DSL 💳

iCard BankCard & CreditCard generator with Swift 3 using SnapKit DSL iCard is a simple tool for generate Credit & Bank Card , it represent cards as UI

Emrah Korkmaz 334 Nov 28, 2022
Easily integrate Credit Card payments module in iOS App. Swift 4.0

MFCard Buy me a coffee MFCard is an awesome looking Credit Card input & validation control. Written in Swift 3. YOoo, Now MFCard is on Swift 5. Swift

MobileFirst 362 Nov 29, 2022
Debit/Credit card validation port of the Luhn Algorithm in Swift

SwiftLuhn Warning! This repository is no longer maintained. This is a port of the Luhn Algorithm, generally used for validating debit/credit card deta

Max Kramer 135 Sep 9, 2022
Welcome Busines Card Built With Swift

BusinessCard Welcome Busines Card Main screen Contacts screen More info screen

Konstantin Ryabtsev 0 Dec 28, 2021
A card viewer demo for Idolmaster Millionlive Theater Days written in Swift UI

Misaki Gallery A Millionlive's cards gallery to demostrate Swift UI. All api and

Spike 0 Dec 20, 2021
A credit card scanner for iOS written in Swift

DGCardScanner A credit card scanner Requirements iOS 13.0+ Swift 5.5+ Xcode 10.0+ Installation SPM File > Add Packages > https://github.com/donggyushi

donggyu 9 Jun 24, 2022