# PayPal iOS SDK Welcome to PayPal's iOS SDK. This library will help you accept cards, PayPal, Venmo and alternative payments in your iOS app. **The PayPal iOS SDK permits a deployment target of iOS 12.0 or higher**. It requires Xcode 12+ and Swift 5.1+. ## Supported Payment Methods <!-- Which payment methods are required for MVP in Q1 2022? --> - [Credit Cards](#) - [PayPal](#) - [Pay with Venmo](#) - [Apple Pay (iOS)](#) - [Google Pay (Android)](#) - [Samsung Pay (Android)](#) - [APMs/LPMs (iDEAL, giropay, etc.)](#) ``` OPTION 1: config = PaymentConfig(token: "TOKEN") cardClient = CardClient(config: config) venmoClient = VenmoClient(config: config) cardClient.checkoutWithCard(cardRequest: ...) ``` ``` OPTION 2: client = PaymentClient(accessToken: "REAL-CLIENT-ID") cardClient = CardClient(pyplClient: client) venmoClient = VenmoClient(pyplClient: client) cardClient.checkoutWithCard(cardRequest: ...) ``` ``` OPTION 3: merge request details with client venmoClient = VenmoClient(client: client, otherParamsNeededForVenmo...) paypalClient = PayPalClient(client: client, returnUrl: ...) ``` ### Brainstorming Session 2 (7/20/21) - Want to use the current client pattern that is used by the BT SDK - Concerns of fetching Client Config taking too long before payment method usage - Can we synthesize any portion of the mobile SDKs from the orders APIs? Spend less time on networking and more on merchant facing integration - If relying on orders API, what is / is not supported? - Have hardcoded postman requests that help define SDK interface - What endpoints will we be targeting with different features? - What is the MVP? #### Analytics - Amplitude ? - Limitations in # of events. Could be an issue. - Lighthouse ? - No more Arachne - Can support access Amplitude & Lighthouse logs? Would we need to do additional work to support that transition - Should we break up events on development vs product level? - Is breaking up the events b/w two different places more confusing than one central location? ### Brainstorming Session 1 - Hello. Each take a bullet. - Logical separation between payment components and UI components - - [Plugins](https://martinfowler.com/eaaCatalog/plugin.html) with modularity? - Localization, is there a lean way of doing this? - How can this be made into a simple integration experience? Is it possible to do this in under 10 (or other arbitrary number) lines of code for merchants? - CI/CD - How are we going to publish these SDKs? - Cody: Use GitHub Actions? Deploy to Maven Central often? - Steven: Jetpack strategy you deploy alpha builds often and collect feedback, then can cut a release. [Jetpack All Channel Release Notes](https://developer.android.com/jetpack/androidx/versions/all-channel) show from a high level Jetpack component semantic versioning scheme (alpha, beta, rc). - David: During development, let's test out CI & release process so we can learn a lot. - Tim: Snapshot builds are a good option w/ retention policies. Builds kick off "develop" branch and get feedback before an official release. - Sammy: Simplifying is great. GitHub Actions work great w/ BT SDK. - Aki: Let's incrementally automate things as it annoys us as we get closer to GA. - Cody: If we can automate the changelog w/ commit messages, that'd be great. - Modularization or packaging. Is there a core/common package? - How do these components communicate w/ each other? - What languages are we using? Kotlin and Swift? - How will internal teams surface components through the SDK? - Are there standards and best practices for how to contribute to it? - Open-source ftw ftw - Standard way of communicating between SDK and merchant application - develop in the open vs develop on PayPal github + publish to public github - What inputs do we need from merchants? client id, other token? - Is it possible to consolidate EC / BA / order ID into a single token type that we consume? - Will the structure of the SDK be determined by the underlying product offering? e.g. PayPal, Hyperwallet etc - Will there be a strict alignment of the SDK api across each platform? Will there be flexibility to take advantage of the strength of each underlying platform - What is the smallest feature set we can launch with? - What are the security concern when we start open sourcing? - Support UI components in storyboard (iOS) - Merchant integration entry point / authorization - client tokens, tokenization keys, something else? - Are we using BT as the base or are we starting from scratch? - Will BT and BT drop in be combined? are we keeping drop in SDK separated? - How limited is our Mobile SDK API design by the existing JS SDK? Is that SDK also morphing? - Develop in public repos +100 - Defining intial scope of the SDK - Setting the stage for modularity from the start - Focusing early on on unit & integration testing strategy b/w modules in each SDK - Establish style guides & consistent patterns throughout each SDK; set this stage from the start - Persist Braintree's deprecation policy! Keep it alive :)