changed 4 years ago
Linked with GitHub

PayPal iOS SDK

Welcome to PayPal's iOS SDK. This library will help you accept card, PayPal, Venmo, and alternative payments in your iOS app.

Support

The PayPal iOS SDK supports a minimum deployment target of iOS 13+ and requires Xcode 13+. See our Client Deprecation policy to plan for updates.

Since this SDK will release in Q1 2021, requiring iOS 13+ and Xcode 13+ is in accordance with our deprecation policy. A lot of research went into creating the existing client deprecation policy, regarding OS deprecation timelines, and so far has worked out well for BT.

Package Managers

  • CocoaPods
  • Swift Package Manager

Languages

This SDK supports Swift 5+.

This SDK is written in Swift.

UI Frameworks

  • UIKit
  • SwiftUI

Note: Let's try to use the beta to let it dictate what merchants actually want, not what we think they want. For example, let's start without explicit Objective-C support and see what type of feedback we get in pilot / beta.

Modularity

The PayPal iOS SDK is comprised of various submodules.

  • PaymentsCore
  • PayPalPayments
  • CardPayments
  • ApplePayPayments
  • ThreeDSecurePayments
  • PayoutsCore
  • PayPalPayouts

To accept a certain payment method in your app, you only need to include that payment-specific submodule.

Question: Should 3DS capabilities be a separate module? If we're using Cardinal, it should to shield non-3DS merchants from Cardinal issues.

Question: Rahul mentioned wanting to keep the naming extensible for Payouts & other cabailities, so that is why we tried the above names. Is this something we need to be actively considering during MVP?

Sample Code

// STEP 0: Fetch an ACCESS_TOKEN and ORDER_ID from your server.

// STEP 1: Create a PaymentConfiguration object
paymentConfig = PaymentConfig(token: ACCESS_TOKEN)

// STEP 2: Create payment method client objects
cardClient = CardClient(config: paymentConfig)

// STEP 3: Collect relevant payment method details
card = Card(number: 4111111111111111, cvv: 123, ...)

// STEP 4: Call checkout method
cardClient?.checkoutWithCard(orderID: ORDER_ID, card: card) { result in
    switch result {
        case .success(let orderId):
          // Send orderID to your server to process the payment
        case .error(let error):
          // handle checkout error
    }
}

// STEP 5: Send orderID to your server to capture/authorize

Testing

This project uses the XCTest framework provided by Xcode. Every code path should be unit tested. Unit tests should make up most of the test coverage, with integration, and then UI tests following.

CI

GitHub Actions CI will run all tests and build commands per package manager on each PR.

Local Testing

TBD until development progresses. We will use Rake, Fastlane, or some other tool for easy command-line build tasks.

Release Process

This SDK follows Semantic Versioning. The release process will be automated via GitHub Actions.

Analytics

Client analytics will be collected via Lighthouse/FPTI.

Select a repo