Skip to content

Conversation

@shu-stripe
Copy link
Contributor

Summary

Moved PushProvisioning code to StripeIssuing module and followed https://confluence.corp.stripe.com/spaces/MOBILE/pages/310463072/iOS+SDK+Runbook+Adding+module+dependencies to update dependencies.

Motivation

Move PushProvisioning to it's own module.

Testing

shu@st-shu2 stripe-ios % pod lib lint --include-podspecs=StringIssuing.podspec

 -> Stripe (25.3.0)
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - NOTE  | [iOS] xcodebuild:  note: Building targets in dependency order
    - NOTE  | [iOS] xcodebuild:  note: Target dependency graph (15 targets)
    - NOTE  | xcodebuild:  ld: warning: search path '/var/run/com.apple.security.cryptexd/mnt/com.apple.MobileAsset.MetalToolchain-v17.3.48.0.zWez2a/Metal.xctoolchain/usr/lib/swift/iphonesimulator' not found
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:31.221 appintentsmetadataprocessor[67567:23843793] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:35.443 appintentsmetadataprocessor[67636:23844485] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:38.218 appintentsmetadataprocessor[67704:23845007] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  note: Emplaced /Users/shu/Library/Developer/Xcode/DerivedData/App-ffiiderntqqnbzagsegbakblufrx/Build/Products/Release-iphonesimulator/StripeUICore/StripeUICoreBundle.bundle/Assets.car (in target 'StripeUICore-StripeUICoreBundle' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  note: Emplaced /Users/shu/Library/Developer/Xcode/DerivedData/App-ffiiderntqqnbzagsegbakblufrx/Build/Products/Release-iphonesimulator/StripePayments/Stripe3DS2.bundle/Assets.car (in target 'StripePayments-Stripe3DS2' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:41.759 appintentsmetadataprocessor[67780:23845458] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:51.629 appintentsmetadataprocessor[68178:23846816] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  note: Emplaced /Users/shu/Library/Developer/Xcode/DerivedData/App-ffiiderntqqnbzagsegbakblufrx/Build/Products/Release-iphonesimulator/StripePaymentsUI/StripePaymentsUIBundle.bundle/Assets.car (in target 'StripePaymentsUI-StripePaymentsUIBundle' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:56.141 appintentsmetadataprocessor[68259:23847372] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:56.889 appintentsmetadataprocessor[68302:23847641] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  note: Signing static framework with --generate-pre-encrypt-hashes (in target 'Pods-App' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:28:59.848 appintentsmetadataprocessor[68512:23848415] warning: Metadata extraction skipped. No AppIntents.framework dependency found.

Stripe passed validation.

shu@st-shu2 stripe-ios % pod spec lint StripeIssuing.podspec 

 -> StripeIssuing (25.3.0)
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - NOTE  | [iOS] xcodebuild:  note: Building targets in dependency order
    - NOTE  | [iOS] xcodebuild:  note: Target dependency graph (12 targets)
    - NOTE  | xcodebuild:  ld: warning: search path '/var/run/com.apple.security.cryptexd/mnt/com.apple.MobileAsset.MetalToolchain-v17.3.48.0.zWez2a/Metal.xctoolchain/usr/lib/swift/iphonesimulator' not found
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:32:08.250 appintentsmetadataprocessor[74502:23872588] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  note: Emplaced /Users/shu/Library/Developer/Xcode/DerivedData/App-dpogskqjesmeplcyntvbbmjmpgku/Build/Products/Release-iphonesimulator/StripeUICore/StripeUICoreBundle.bundle/Assets.car (in target 'StripeUICore-StripeUICoreBundle' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  note: Emplaced /Users/shu/Library/Developer/Xcode/DerivedData/App-dpogskqjesmeplcyntvbbmjmpgku/Build/Products/Release-iphonesimulator/StripePayments/Stripe3DS2.bundle/Assets.car (in target 'StripePayments-Stripe3DS2' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:32:12.424 appintentsmetadataprocessor[74651:23873281] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:32:23.185 appintentsmetadataprocessor[75093:23875051] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  note: Emplaced /Users/shu/Library/Developer/Xcode/DerivedData/App-dpogskqjesmeplcyntvbbmjmpgku/Build/Products/Release-iphonesimulator/StripePaymentsUI/StripePaymentsUIBundle.bundle/Assets.car (in target 'StripePaymentsUI-StripePaymentsUIBundle' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:32:27.617 appintentsmetadataprocessor[75178:23875518] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:32:28.060 appintentsmetadataprocessor[75199:23875749] warning: Metadata extraction skipped. No AppIntents.framework dependency found.
    - NOTE  | [iOS] xcodebuild:  note: Signing static framework with --generate-pre-encrypt-hashes (in target 'Pods-App' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  2025-12-17 14:32:30.315 appintentsmetadataprocessor[75358:23876285] warning: Metadata extraction skipped. No AppIntents.framework dependency found.

Analyzed 1 podspec.

StripeIssuing.podspec passed validation.

Changelog

Not a user facing change.

@shu-stripe shu-stripe requested review from a team as code owners December 19, 2025 07:01
@emerge-tools
Copy link

emerge-tools bot commented Dec 19, 2025

📸 Snapshot Test

Base build not found

No build was found for the base commit c3a8ff7. This is required to generate a snapshot diff for your pull request.

It's possible that you created a branch off the base commit before all of the CI steps have finished processing, e.g. the one that uploads a build to our system. If that's the case, no problem! Just wait and this will eventually resolve.


🛸 Powered by Emerge Tools

@emerge-tools
Copy link

emerge-tools bot commented Dec 19, 2025

1 build increased size, 7 builds had no size change, 1 build errored

Name Version Download Change Install Change Approval
⚠️ StripeSize
com.stripe.StripeSize
1.0 (1) 2.1 MB ⬆️ 22.4 kB (1.07%) 7.0 MB ⬆️ 157.4 kB (2.33%) N/A
StripePaymentsSize
com.stripe.StripePaymentsSize
1.0 (1) 1.2 MB ⬇️ 1 B 4.2 MB - N/A
StripePaymentsUISize
com.stripe.StripePaymentsUISize
1.0 (1) 1.9 MB ⬇️ 5 B 6.4 MB - N/A
StripePaymentSheetSize
com.stripe.StripePaymentSheetSize
1.0 (1) 4.3 MB ⬆️ 6 B 12.4 MB - N/A
StripeIdentitySize
com.stripe.StripeIdentitySize
1.0 (1) 1.3 MB ⬇️ 49 B 4.2 MB - N/A
StripeApplePaySize
com.stripe.StripeApplePaySize
1.0 (1) 502.9 kB - 1.7 MB - N/A
StripeFinancialConnectionsSize
com.stripe.StripeFinancialConnectionsSize
1.0 (1) 1.6 MB ⬆️ 2 B 5.0 MB - N/A
StripeConnectSize
com.stripe.StripeConnectSize
1.0 (1) 1.8 MB ⬇️ 2 B 6.0 MB - N/A

StripeSize 1.0 (1)
com.stripe.StripeSize

⚖️ Compare build
⏱️ Analyze build performance

Total install size change: ⬆️ 157.4 kB (2.33%)
Total download size change: ⬆️ 22.4 kB (1.07%)

Largest size changes

Item Install Size Change
🗑 Stripe.STPFakeAddPaymentPassViewController ⬇️ -13.0 kB
🗑 Stripe.STPEphemeralKeyManager ⬇️ -7.0 kB
🗑 Stripe.STPPinManagementService ⬇️ -6.4 kB
🗑 Stripe.STPPushProvisioningDetailsParams ⬇️ -5.5 kB
📝 StripeIssuing.STPFakeAddPaymentPassViewController.viewDidLoad ⬆️ 5.1 kB
View Treemap

Image of diff

StripePaymentsSize 1.0 (1)
com.stripe.StripePaymentsSize

No changes to report

StripePaymentsUISize 1.0 (1)
com.stripe.StripePaymentsUISize

No changes to report

StripePaymentSheetSize 1.0 (1)
com.stripe.StripePaymentSheetSize

No changes to report

StripeIdentitySize 1.0 (1)
com.stripe.StripeIdentitySize

No changes to report

StripeApplePaySize 1.0 (1)
com.stripe.StripeApplePaySize

No changes to report

StripeFinancialConnectionsSize 1.0 (1)
com.stripe.StripeFinancialConnectionsSize

No changes to report

StripeConnectSize 1.0 (1)
com.stripe.StripeConnectSize

No changes to report

Unsuccessful Builds

Name Message
StripeIssuingSize
com.stripe.StripeIssuingSize
The diff could not be determined because no build for c3a8ff7 was uploaded

🛸 Powered by Emerge Tools

Comment trigger: Size diff threshold of 100.00kB exceeded

@github-actions
Copy link

github-actions bot commented Dec 19, 2025

⚠️ Public API changes detected:

Stripe

- @objc get
- @objc get
- @objc get
- get
- get
- get
- get
- @_Concurrency.MainActor @preconcurrency @objc convenience override dynamic public init(nibName nibNameOrNil: Swift.String?, bundle nibBundleOrNil: Foundation.Bundle?)
- @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidLoad()
- @_Concurrency.MainActor @preconcurrency @objc required convenience dynamic public init?(coder aDecoder: Foundation.NSCoder)
- @available(*, deprecated, renamed: "requestConfiguration(withName:description:last4:brand:primaryAccountIdentifier:)", message: "Use `requestConfiguration(withName:description:last4:brand:primaryAccountIdentifier:)` instead.")
- @objc @_Concurrency.MainActor @preconcurrency public class func canAddPaymentPass() -> Swift.Bool
- @objc @_Concurrency.MainActor @preconcurrency weak public var delegate: (any PassKit.PKAddPaymentPassViewControllerDelegate)?
- @objc deinit
- @objc deinit
- @objc deinit
- @objc deinit
- @objc public class func requestConfiguration(withName name: Swift.String, description: Swift.String?, last4: Swift.String?, brand: StripePayments.STPCardBrand) -> PassKit.PKAddPaymentPassRequestConfiguration
- @objc public class func requestConfiguration(withName name: Swift.String, description: Swift.String?, last4: Swift.String?, brand: StripePayments.STPCardBrand, primaryAccountIdentifier: Swift.String?) -> PassKit.PKAddPaymentPassRequestConfiguration
- @objc public func addPaymentPassViewController(_ controller: PassKit.PKAddPaymentPassViewController, generateRequestWithCertificateChain certificates: [Foundation.Data], nonce: Foundation.Data, nonceSignature: Foundation.Data, completionHandler handler: @escaping (PassKit.PKAddPaymentPassRequest) -> Swift.Void)
- @objc public func retrievePin(_ cardId: Swift.String, verificationId: Swift.String, oneTimeCode: Swift.String, completion: @escaping StripePayments.STPPinCompletionBlock)
- @objc public func updatePin(_ cardId: Swift.String, newPin: Swift.String, verificationId: Swift.String, oneTimeCode: Swift.String, completion: @escaping StripePayments.STPPinCompletionBlock)
- @objc public init(keyProvider: any Stripe.STPIssuingCardEphemeralKeyProvider)
- @objc public init(keyProvider: any Stripe.STPIssuingCardEphemeralKeyProvider)
- @objc public var cardId: Swift.String {
- @objc public var certificates: [Foundation.Data] {
- @objc public var certificatesBase64: [Swift.String] {
- @objc public var nonce: Foundation.Data {
- @objc public var nonceHex: Swift.String {
- @objc public var nonceSignature: Foundation.Data {
- @objc public var nonceSignatureHex: Swift.String {
- @objc required public init(cardId: Swift.String, certificates: [Foundation.Data], nonce: Foundation.Data, nonceSignature: Foundation.Data)
- @objc(createCustomerKeyWithAPIVersion:completion:) func createCustomerKey(withAPIVersion apiVersion: Swift.String, completion: @escaping StripePayments.STPJSONResponseCompletionBlock)
- @objc(createIssuingCardKeyWithAPIVersion:completion:) func createIssuingCardKey(withAPIVersion apiVersion: Swift.String, completion: @escaping StripePayments.STPJSONResponseCompletionBlock)
- @objc(initWithRequestConfiguration:delegate:) @_Concurrency.MainActor @preconcurrency required public init?(requestConfiguration configuration: PassKit.PKAddPaymentPassRequestConfiguration, delegate: (any PassKit.PKAddPaymentPassViewControllerDelegate)?)
- public var apiClient: StripeCore.STPAPIClient
- public var apiClient: StripeCore.STPAPIClient
- }
- }
- }
- }
- }
- }
- }

StripeIssuing

+ @objc get
+ @objc get
+ @objc get
+ get
+ get
+ get
+ get
+ @_Concurrency.MainActor @preconcurrency @objc convenience override dynamic public init(nibName nibNameOrNil: Swift.String?, bundle nibBundleOrNil: Foundation.Bundle?)
+ @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidLoad()
+ @_Concurrency.MainActor @preconcurrency @objc required convenience dynamic public init?(coder aDecoder: Foundation.NSCoder)
+ @available(*, deprecated, renamed: "requestConfiguration(withName:description:last4:brand:primaryAccountIdentifier:)", message: "Use `requestConfiguration(withName:description:last4:brand:primaryAccountIdentifier:)` instead.")
+ @objc @_Concurrency.MainActor @preconcurrency public class func canAddPaymentPass() -> Swift.Bool
+ @objc @_Concurrency.MainActor @preconcurrency weak public var delegate: (any PassKit.PKAddPaymentPassViewControllerDelegate)?
+ @objc deinit
+ @objc deinit
+ @objc deinit
+ @objc public class func requestConfiguration(withName name: Swift.String, description: Swift.String?, last4: Swift.String?, brand: StripePayments.STPCardBrand) -> PassKit.PKAddPaymentPassRequestConfiguration
+ @objc public class func requestConfiguration(withName name: Swift.String, description: Swift.String?, last4: Swift.String?, brand: StripePayments.STPCardBrand, primaryAccountIdentifier: Swift.String?) -> PassKit.PKAddPaymentPassRequestConfiguration
+ @objc public func addPaymentPassViewController(_ controller: PassKit.PKAddPaymentPassViewController, generateRequestWithCertificateChain certificates: [Foundation.Data], nonce: Foundation.Data, nonceSignature: Foundation.Data, completionHandler handler: @escaping (PassKit.PKAddPaymentPassRequest) -> Swift.Void)
+ @objc public func retrievePin(_ cardId: Swift.String, verificationId: Swift.String, oneTimeCode: Swift.String, completion: @escaping StripePayments.STPPinCompletionBlock)
+ @objc public func updatePin(_ cardId: Swift.String, newPin: Swift.String, verificationId: Swift.String, oneTimeCode: Swift.String, completion: @escaping StripePayments.STPPinCompletionBlock)
+ @objc public init(keyProvider: any StripeIssuing.STPIssuingCardEphemeralKeyProvider)
+ @objc public init(keyProvider: any StripeIssuing.STPIssuingCardEphemeralKeyProvider)
+ @objc public var cardId: Swift.String {
+ @objc public var certificates: [Foundation.Data] {
+ @objc public var certificatesBase64: [Swift.String] {
+ @objc public var nonce: Foundation.Data {
+ @objc public var nonceHex: Swift.String {
+ @objc public var nonceSignature: Foundation.Data {
+ @objc public var nonceSignatureHex: Swift.String {
+ @objc required public init(cardId: Swift.String, certificates: [Foundation.Data], nonce: Foundation.Data, nonceSignature: Foundation.Data)
+ @objc(createCustomerKeyWithAPIVersion:completion:) func createCustomerKey(withAPIVersion apiVersion: Swift.String, completion: @escaping StripePayments.STPJSONResponseCompletionBlock)
+ @objc(createIssuingCardKeyWithAPIVersion:completion:) func createIssuingCardKey(withAPIVersion apiVersion: Swift.String, completion: @escaping StripePayments.STPJSONResponseCompletionBlock)
+ @objc(initWithRequestConfiguration:delegate:) @_Concurrency.MainActor @preconcurrency required public init?(requestConfiguration configuration: PassKit.PKAddPaymentPassRequestConfiguration, delegate: (any PassKit.PKAddPaymentPassViewControllerDelegate)?)
+ public var apiClient: StripeCore.STPAPIClient
+ public var apiClient: StripeCore.STPAPIClient
+ }
+ }
+ }
+ }
+ }
+ }
+ }

If you are adding a new public API consider the following:

  • Do these APIs need to be public or can they be protected with @_spi(STP)?
  • If these APIs need to be public, assess whether they require an API review.

If you are modifying or removing a public API:

  • Does this require a breaking version change?
  • Do these changes require API review?

If you confirm these APIs need to be added/updated and have undergone necessary review, add the label modifies public API to this PR to acknowledge and bypass this check.

ℹ️ If this comment appears to be left in error, make sure your branch is up-to-date with master.

@github-actions
Copy link

github-actions bot commented Dec 19, 2025

⚠️ New dead code detected in this PR but ignored:

STPEphemeralKey.swift:14 warning: Property 'created' is assigned, but never used
STPPushProvisioningDetails.swift:13 warning: Property 'cardId' is assigned, but never used

This dead code check has been bypassed with the skip dead code check label.

ℹ️ If this comment appears to be left in error, double check that the flagged code is actually used and/or make sure your branch is up-to-date with master.

[find-dead-code]

@shu-stripe shu-stripe changed the title Move Issuing files to StripeIssuing SDK Move Issuing files to StripeIssuing SDK [Do not merge until Jan 4, 2025] Dec 19, 2025
Added migration instructions for StripeIssuing component.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants