adyen-ios icon indicating copy to clipboard operation
adyen-ios copied to clipboard

[BUG] With Adyen delivered by SPM Adding Apple Pay card causes crash

Open odys1528 opened this issue 6 months ago • 2 comments

Describe the bug I'm using Adyen dropin to add a regular card or Apple Pay card. I'm in progress of migrating from Cocoapods to SPM. The problem appears when I'm trying to add an Apple Pay card as a payment method. When I'm confirming the authorization payment and the system popup is in processing state, the app crashes with error:

-[AdyenComponents.ApplePayComponent paymentAuthorizationViewController:didAuthorizePayment:completion:]: unrecognized selector sent to instance

To Reproduce Steps to reproduce the behavior:

  1. Add Adyen to the project with SPM
  2. Open dropin component with Apple Pay configured
  3. Try to add Apple Pay card from wallet

Expected behavior Card is correctly processed.

Environment

  • Device: any device (not simulator)
  • iOS Version: 16.6.1
  • SDK Version: 17,0: (21A325)
  • Adyen API Version: 5.3.0
  • Package management system: SPM
  • Xcode version: 15.0
  • Mac OS type: Intel

Additional context The problem does not occur when Adyen is provided by Cocoapods. The problem occurs also on Adyen v5.6.0. Project is build with Tuist. The problem occurs on both v3 and v4.

odys1528 avatar Feb 21 '24 14:02 odys1528

Hi @odys1528,

I just tried to reproduce the issue by building a small example app but can't reproduce the issue you are describing. Is there a way for you to isolate the issue (e.g. not using Tuist)?

Best, Alex

goergisn avatar Feb 22 '24 15:02 goergisn

The project is pretty complex. Let me try to post some details. In Package.swift PackageSettings is initiated with productTypes including "Adyen": .framework.

let packageSettings = PackageSettings(
    productTypes: [
        "Adyen": .framework
    ],
    ...
)

Then Package is initiated with dependencies including

.package(
    url: "https://github.com/Adyen/adyen-ios",
    exact: "5.3.0"
)

Then a Module struct mainTargetDependencies includes .external(name: "Adyen") like this:

struct SomeModule: Module {
    var mainTargetDependencies: [TargetDependency] {
         .external(name: "Adyen")
    }
    ...
}

And as described, it causes the app to build and run correctly until a payment attempt.

odys1528 avatar Mar 12 '24 18:03 odys1528