Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Connect] Prepare to publish StripeConnect module #4035

Merged
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## X.X.X

### Connect
* [Added] `StripeConnect` SDK to add connected account dashboard functionality to your app using [Connect embedded components](https://docs.stripe.com/connect/get-started-connect-embedded-components?platform=ios).

## 24.1.3 2024-12-16
### PaymentSheet, CustomerSheet
* [Changed] Changed the edit and remove saved payment method flow so that tapping 'Edit' displays an icon that leads to a new update payment method screen that displays payment method details for card (last 4 digits of card number, cvc and expiry date fields), US Bank account (name, email, last 4 digits of bank acocunt), and SEPA debit (name, email, last 4 digits of IBAN).
Expand Down
9 changes: 9 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ let package = Package(
.library(
name: "StripeFinancialConnections",
targets: ["StripeFinancialConnections"]
),
.library(
name: "StripeConnect",
targets: ["StripeConnect"]
)
],
targets: [
Expand Down Expand Up @@ -152,6 +156,11 @@ let package = Package(
.process("Resources/Images"),
.process("PrivacyInfo.xcprivacy")
]
),
.target(
name: "StripeConnect",
dependencies: ["StripeCore", "StripeUICore", "StripeFinancialConnections"],
path: "StripeConnect/StripeConnect"
)
]
)
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ For help with Apple's App Privacy Details form in App Store Connect, visit [Stri
| Module | Description | Size ([Download → Install](https://docs.emergetools.com/docs/ios-app-size#download-vs-install-size))                          |
|--------|-------------|------|
| [StripePaymentSheet](StripePaymentSheet) | Stripe's [prebuilt payment UI](https://stripe.com/docs/payments/accept-a-payment?platform=ios&ui=payment-sheet). | [![StripePaymentSheet size](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.emergetools.com%2Fapi%2Fv2%2Fpublic_new_build%3FexampleId%3Dcom.stripe.StripePaymentSheetSize%26platform%3Dios%26badgeOption%3Ddownload_and_install_size%26buildType%3Drelease&query=$.badgeMetadata&label=StripePaymentSheet&logo=apple)](https://www.emergetools.com/app/example/ios/com.stripe.StripePaymentSheetSize/release?utm_campaign=badge-data) |
| [StripeConnect](StripeConnect) | Connect embedded components to add connected account dashboard functionality to your app. | [![StripeConnect size](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.emergetools.com%2Fapi%2Fv2%2Fpublic_new_build%3FexampleId%3Dcom.stripe.StripeConnectSize%26platform%3Dios%26badgeOption%3Ddownload_and_install_size%26buildType%3Drelease&query=$.badgeMetadata&label=StripeConnect&logo=apple)](https://www.emergetools.com/app/example/ios/com.stripe.StripeConnectSize/release?utm_campaign=badge-data) |
| [StripeIdentity](StripeIdentity) | Securely capture ID documents and selfies on iOS for use with [Stripe's Identity API](https://docs.stripe.com/identity) to confirm the identity of global users. | [![StripeIdentity size](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.emergetools.com%2Fapi%2Fv2%2Fpublic_new_build%3FexampleId%3Dcom.stripe.StripeIdentitySize%26platform%3Dios%26badgeOption%3Ddownload_and_install_size%26buildType%3Drelease&query=$.badgeMetadata&label=StripeIdentity&logo=apple)](https://www.emergetools.com/app/example/ios/com.stripe.StripeIdentitySize/release?utm_campaign=badge-data) |
| [StripeFinancialConnections](StripeFinancialConnections) | Securely connect financial accounts to Stripe's merchant account with [Stripe Financial Connections](https://docs.stripe.com/financial-connections). | [![StripeFinancialConnections size](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.emergetools.com%2Fapi%2Fv2%2Fpublic_new_build%3FexampleId%3Dcom.stripe.StripeFinancialConnectionsSize%26platform%3Dios%26badgeOption%3Ddownload_and_install_size%26buildType%3Drelease&query=$.badgeMetadata&label=StripeFinancialConnections&logo=apple)](https://www.emergetools.com/app/example/ios/com.stripe.StripeFinancialConnectionsSize/release?utm_campaign=badge-data) |
| Stripe | Contains all the below frameworks, plus [Issuing](https://stripe.com/docs/issuing/cards/digital-wallets?platform=iOS). | [![Stripe size](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.emergetools.com%2Fapi%2Fv2%2Fpublic_new_build%3FexampleId%3Dcom.stripe.StripeSize%26platform%3Dios%26badgeOption%3Ddownload_and_install_size%26buildType%3Drelease&query=$.badgeMetadata&label=Stripe&logo=apple)](https://www.emergetools.com/app/example/ios/com.stripe.StripeSize/release?utm_campaign=badge-data) |
Expand All @@ -94,6 +95,7 @@ For the `Stripe` module, link the following frameworks:

For other modules, follow the instructions below:
- [StripeApplePay](StripeApplePay/README.md#manual-linking)
- [StripeConnect](StripeConnect/README.md#manual-linking)
- [StripeFinancialConnections](StripeFinancialConnections/README.md#manual-linking)
- [StripeIdentity](StripeIdentity/README.md#manual-linking)
- [StripePaymentSheet](StripePaymentSheet/README.md#manual-linking)
Expand Down
23 changes: 23 additions & 0 deletions StripeConnect.podspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Pod::Spec.new do |s|
s.name = 'StripeConnect'

# Do not update s.version directly.
# Instead, update the VERSION file and run ./ci_scripts/update_version.sh
s.version = '24.1.3'

s.summary = 'Use Connect embedded components to add connected account dashboard functionality to your app.'
s.license = { type: 'MIT', file: 'LICENSE' }
s.homepage = 'https://docs.stripe.com/connect/get-started-connect-embedded-components'
s.authors = { 'Stripe' => '[email protected]' }
s.source = { git: 'https://github.com/stripe/stripe-ios.git', tag: "#{s.version}" }
s.frameworks = 'Foundation', 'WebKit', 'UIKit'
s.requires_arc = true
s.platform = :ios
s.swift_version = '5.0'
# Connect only supports 15+, but setting this to 13.0 to make installation tests easier.
s.ios.deployment_target = '13.0'
mludowise-stripe marked this conversation as resolved.
Show resolved Hide resolved
s.source_files = 'StripeConnect/StripeConnect/**/*.swift'
s.dependency 'StripeCore', s.version.to_s
s.dependency 'StripeUICore', s.version.to_s
s.dependency 'StripeFinancialConnections', s.version.to_s
end
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,18 @@
04E6FCEE1B714AC2000C8759 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E6FCED1B714AC2000C8759 /* Images.xcassets */; };
04E6FCF11B714AC2000C8759 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 04E6FCEF1B714AC2000C8759 /* LaunchScreen.xib */; };
31138E6F28DBD87B008AF554 /* StripePaymentSheet.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31138E6E28DBD87B008AF554 /* StripePaymentSheet.xcframework */; };
31138E7028DBD87B008AF554 /* StripePaymentSheet.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 31138E6E28DBD87B008AF554 /* StripePaymentSheet.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

31138E7228DBD87D008AF554 /* StripePaymentsUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31138E7128DBD87D008AF554 /* StripePaymentsUI.xcframework */; };
31138E7328DBD87E008AF554 /* StripePaymentsUI.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 31138E7128DBD87D008AF554 /* StripePaymentsUI.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
31138E7528DBD881008AF554 /* StripePayments.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31138E7428DBD881008AF554 /* StripePayments.xcframework */; };
31138E7628DBD881008AF554 /* StripePayments.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 31138E7428DBD881008AF554 /* StripePayments.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3137B69427437E3500CE7F5C /* StripeApplePay.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3137B69327437E3500CE7F5C /* StripeApplePay.xcframework */; };
31CA744B25CCC669007FE8BF /* Stripe3DS2.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31CA744A25CCC669007FE8BF /* Stripe3DS2.xcframework */; };
31FF1DB1255FA383000EF4B0 /* Stripe.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04E6FD061B714DDF000C8759 /* Stripe.xcframework */; };
31FF1DB2255FA383000EF4B0 /* Stripe.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 04E6FD061B714DDF000C8759 /* Stripe.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3B3F01C227445CDE00C53D34 /* StripeUICoreAssetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3F01C127445CDE00C53D34 /* StripeUICoreAssetTests.swift */; };
3BD980302741675500B09BCD /* ModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BD9802F2741675500B09BCD /* ModelTests.swift */; };
3BD9808F27431DFE00B09BCD /* StripeCardScan.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BD9808E27431DFE00B09BCD /* StripeCardScan.xcframework */; };
3C4D20AD273C673200BC6444 /* StripeFinancialConnections.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C4D20AC273C673200BC6444 /* StripeFinancialConnections.xcframework */; };
E6AA24ED2744ABE000FD205E /* StripeCameraCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E63B6743274344E400CFEDBA /* StripeCameraCore.xcframework */; };
E6AA24EE2744ABE000FD205E /* StripeCameraCore.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E63B6743274344E400CFEDBA /* StripeCameraCore.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E6AFFAF526E972950067462F /* StripeUICore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6AFFAF426E972950067462F /* StripeUICore.xcframework */; };
E6C5F5FE2CA109F100861709 /* StripeConnect.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6C5F5FD2CA109F100861709 /* StripeConnect.xcframework */; };
E6F05EAA2687C76F00614D61 /* StripeCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6F05EA92687C76F00614D61 /* StripeCore.xcframework */; };
/* End PBXBuildFile section */

Expand All @@ -42,24 +38,6 @@
};
/* End PBXContainerItemProxy section */

/* Begin PBXCopyFilesBuildPhase section */
31FF1DB3255FA383000EF4B0 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
31138E7028DBD87B008AF554 /* StripePaymentSheet.xcframework in Embed Frameworks */,
31138E7328DBD87E008AF554 /* StripePaymentsUI.xcframework in Embed Frameworks */,
E6AA24EE2744ABE000FD205E /* StripeCameraCore.xcframework in Embed Frameworks */,
31FF1DB2255FA383000EF4B0 /* Stripe.xcframework in Embed Frameworks */,
31138E7628DBD881008AF554 /* StripePayments.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
04E6FCE11B714AC2000C8759 /* CarthageTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CarthageTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
04E6FCE51B714AC2000C8759 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
Expand All @@ -83,6 +61,7 @@
E63B6743274344E400CFEDBA /* StripeCameraCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = StripeCameraCore.xcframework; path = Carthage/Build/StripeCameraCore.xcframework; sourceTree = "<group>"; };
E6A36A5B26BA4E0E002A4427 /* StripeIdentity.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = StripeIdentity.xcframework; path = Carthage/Build/StripeIdentity.xcframework; sourceTree = "<group>"; };
E6AFFAF426E972950067462F /* StripeUICore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = StripeUICore.xcframework; path = Carthage/Build/StripeUICore.xcframework; sourceTree = "<group>"; };
E6C5F5FD2CA109F100861709 /* StripeConnect.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = StripeConnect.xcframework; path = Carthage/Build/StripeConnect.xcframework; sourceTree = "<group>"; };
E6F05EA92687C76F00614D61 /* StripeCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = StripeCore.xcframework; path = Carthage/Build/StripeCore.xcframework; sourceTree = "<group>"; };
/* End PBXFileReference section */

Expand All @@ -99,6 +78,7 @@
3C4D20AD273C673200BC6444 /* StripeFinancialConnections.xcframework in Frameworks */,
31138E7228DBD87D008AF554 /* StripePaymentsUI.xcframework in Frameworks */,
3137B69427437E3500CE7F5C /* StripeApplePay.xcframework in Frameworks */,
E6C5F5FE2CA109F100861709 /* StripeConnect.xcframework in Frameworks */,
E6AA24ED2744ABE000FD205E /* StripeCameraCore.xcframework in Frameworks */,
31CA744B25CCC669007FE8BF /* Stripe3DS2.xcframework in Frameworks */,
E6AFFAF526E972950067462F /* StripeUICore.xcframework in Frameworks */,
Expand Down Expand Up @@ -177,6 +157,7 @@
31CA744925CCC669007FE8BF /* Frameworks */ = {
isa = PBXGroup;
children = (
E6C5F5FD2CA109F100861709 /* StripeConnect.xcframework */,
31138E7428DBD881008AF554 /* StripePayments.xcframework */,
31138E7128DBD87D008AF554 /* StripePaymentsUI.xcframework */,
31138E6E28DBD87B008AF554 /* StripePaymentSheet.xcframework */,
Expand All @@ -202,7 +183,6 @@
04E6FCDD1B714AC2000C8759 /* Sources */,
04E6FCDE1B714AC2000C8759 /* Frameworks */,
04E6FCDF1B714AC2000C8759 /* Resources */,
31FF1DB3255FA383000EF4B0 /* Embed Frameworks */,
);
buildRules = (
);
Expand Down Expand Up @@ -435,6 +415,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/iOS",
"$(PROJECT_DIR)/Carthage/Build",
);
INFOPLIST_FILE = CarthageTest/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
Expand All @@ -454,6 +435,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/iOS",
"$(PROJECT_DIR)/Carthage/Build",
);
INFOPLIST_FILE = CarthageTest/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
Expand Down
2 changes: 2 additions & 0 deletions Tests/installation_tests/carthage/CarthageTest/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,7 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSCameraUsageDescription</key>
<string>camera description</string>
</dict>
</plist>
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import Stripe
import StripeApplePay
import StripeCardScan
@_spi(PrivateBetaConnect) import StripeConnect
import StripeFinancialConnections
import UIKit

Expand All @@ -19,25 +20,20 @@ class ViewController: UIViewController {
StripeAPI.defaultPublishableKey = "test"
StripeAPI.paymentRequest(withMerchantIdentifier: "test", country: "US", currency: "USD")

if #available(iOS 12.0, *) {
let _ = FinancialConnectionsSheet(
financialConnectionsSessionClientSecret: "",
returnURL: nil
)
}
let _ = FinancialConnectionsSheet(
financialConnectionsSessionClientSecret: "",
returnURL: nil
)

if #available(iOS 11.2, *) {
let _ = CardImageVerificationSheet(
cardImageVerificationIntentId: "foo",
cardImageVerificationIntentSecret: "foo"
)
}
// Do any additional setup after loading the view, typically from a nib.
}
Comment on lines -22 to -36
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The supported min version is now 13.0, so no need for these checks anymore

let _ = CardImageVerificationSheet(
cardImageVerificationIntentId: "foo",
cardImageVerificationIntentSecret: "foo"
)

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
if #available(iOS 15.0, *) {
let _ = EmbeddedComponentManager {
return nil
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@
"${BUILT_PRODUCTS_DIR}/StripeApplePay/StripeApplePay.framework",
"${BUILT_PRODUCTS_DIR}/StripeCameraCore/StripeCameraCore.framework",
"${BUILT_PRODUCTS_DIR}/StripeCardScan/StripeCardScan.framework",
"${BUILT_PRODUCTS_DIR}/StripeConnect/StripeConnect.framework",
"${BUILT_PRODUCTS_DIR}/StripeCore/StripeCore.framework",
"${BUILT_PRODUCTS_DIR}/StripeFinancialConnections/StripeFinancialConnections.framework",
"${BUILT_PRODUCTS_DIR}/StripeIdentity/StripeIdentity.framework",
Expand All @@ -386,6 +387,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StripeApplePay.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StripeCameraCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StripeCardScan.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StripeConnect.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StripeCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StripeFinancialConnections.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StripeIdentity.framework",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>camera description</string>
Comment on lines +25 to +26
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Connect assertion fails if the app doesn't configure this, so this has been added to all installation test projects

<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import Stripe
import StripeApplePay
import StripeCardScan
@_spi(PrivateBetaConnect) import StripeConnect
import StripeFinancialConnections
import StripeIdentity
import StripePaymentSheet
Expand All @@ -24,30 +25,25 @@ class ViewController: UIViewController {
let _ = IdentityVerificationSheet(verificationSessionClientSecret: "test")
}

if #available(iOS 12.0, *) {
let _ = FinancialConnectionsSheet(
financialConnectionsSessionClientSecret: "",
returnURL: nil
)
}
let _ = FinancialConnectionsSheet(
financialConnectionsSessionClientSecret: "",
returnURL: nil
)

if #available(iOS 11.2, *) {
let _ = CardImageVerificationSheet(
cardImageVerificationIntentId: "foo",
cardImageVerificationIntentSecret: "foo"
)
}
let _ = CardImageVerificationSheet(
cardImageVerificationIntentId: "foo",
cardImageVerificationIntentSecret: "foo"
)

let _ = PaymentSheet(
paymentIntentClientSecret: "",
configuration: PaymentSheet.Configuration()
)
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
if #available(iOS 15.0, *) {
let _ = EmbeddedComponentManager {
nil
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ target 'CocoapodsTest' do
pod 'StripeCardScan', path: '../../../..'
pod 'StripeApplePay', path: '../../../..'
pod 'StripeCameraCore', path: '../../../..'
pod 'StripeConnect', path: '../../../..'
pod 'StripeCore', path: '../../../..'
pod 'StripeUICore', path: '../../../..'
pod 'StripePayments', path: '../../../..'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>camera description</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
Expand Down
Loading
Loading