{"id":22170205,"url":"https://github.com/adyen/adyen-ios","last_synced_at":"2025-04-11T23:17:48.149Z","repository":{"id":37406196,"uuid":"90995275","full_name":"Adyen/adyen-ios","owner":"Adyen","description":"Adyen iOS Drop-in and Components","archived":false,"fork":false,"pushed_at":"2025-04-10T14:38:45.000Z","size":243745,"stargazers_count":152,"open_issues_count":23,"forks_count":130,"subscribers_count":18,"default_branch":"develop","last_synced_at":"2025-04-11T23:17:08.140Z","etag":null,"topics":["adyen","adyen-dropin","card-payment","ecommerce","ios","online-payments","payment-methods","swift"],"latest_commit_sha":null,"homepage":"https://docs.adyen.com/checkout/ios","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Adyen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-11T15:31:58.000Z","updated_at":"2025-04-09T08:38:57.000Z","dependencies_parsed_at":"2023-10-02T09:04:13.000Z","dependency_job_id":"9ff72363-455f-4a0f-86f0-d918374669b5","html_url":"https://github.com/Adyen/adyen-ios","commit_stats":{"total_commits":3788,"total_committers":40,"mean_commits":94.7,"dds":0.7819429778247096,"last_synced_commit":"8d3fa55686266692c6f5ba090b13231cdfec7059"},"previous_names":[],"tags_count":116,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Adyen%2Fadyen-ios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Adyen%2Fadyen-ios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Adyen%2Fadyen-ios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Adyen%2Fadyen-ios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Adyen","download_url":"https://codeload.github.com/Adyen/adyen-ios/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248492885,"owners_count":21113163,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adyen","adyen-dropin","card-payment","ecommerce","ios","online-payments","payment-methods","swift"],"created_at":"2024-12-02T06:39:36.141Z","updated_at":"2025-04-11T23:17:48.140Z","avatar_url":"https://github.com/Adyen.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/adyen/adyen-ios/verify-older-os-compatibility.yml?branch=develop)\n[![Pod](https://img.shields.io/cocoapods/v/Adyen.svg?style=flat)](http://cocoapods.org/pods/Adyen)\n[![carthage compatible](https://img.shields.io/badge/carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![SwiftPM](https://img.shields.io/badge/swift%20package%20manager-compatible-brightgreen.svg)](https://swiftpackageregistry.com/Adyen/adyen-ios)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Adyen_adyen-ios\u0026metric=coverage)](https://sonarcloud.io/component_measures?metric=coverage\u0026id=Adyen_adyen-ios)\n\n[![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=Adyen_adyen-ios\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=Adyen_adyen-ios)\n[![SonarCloud Bugs](https://sonarcloud.io/api/project_badges/measure?project=Adyen_adyen-ios\u0026metric=bugs)](https://sonarcloud.io/component_measures/metric/reliability_rating/list?id=Adyen_adyen-ios)\n[![SonarCloud Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=Adyen_adyen-ios\u0026metric=vulnerabilities)](https://sonarcloud.io/component_measures/metric/security_rating/list?id=Adyen_adyen-ios)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Adyen_adyen-ios\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=Adyen_adyen-ios)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Adyen_adyen-ios\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=Adyen_adyen-ios)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Adyen_adyen-ios\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=Adyen_adyen-ios)\n\n\u003cbr/\u003e\n\n![iOS Logo](https://user-images.githubusercontent.com/2648655/198585678-047a1f5c-1463-4837-90b7-01e8094c9830.png)\n\n\n# Adyen iOS\n\nAdyen iOS provides you with the building blocks to create a checkout experience for your shoppers, allowing them to pay using the payment method of their choice.\n\nYou can integrate with Adyen iOS in two ways:\n* [iOS Drop-in](https://docs.adyen.com/online-payments/build-your-integration/?platform=iOS\u0026integration=Drop-in): an all-in-one solution, the quickest way to accept payments on your iOS app.\n* [iOS Components](https://docs.adyen.com/online-payments/build-your-integration/?platform=iOS\u0026integration=Components): one Component per payment method and combine with your own payments flow.\n\n\n## SDK lifecycle\n\n| Major version | State       | Deprecated    | End-of-life   |\n|---------------|-------------|---------------|---------------|\n| 5.x.x         | Active      | ---           | ---           |\n| 4.x.x         | Inactive    | TBA           | TBA           |\n| 3.x.x         | End-of-life | November 2021 | November 2022 |\n\nMore information about our versioning and the Drop-in/Components lifecycle can be found [here](https://docs.adyen.com/online-payments/upgrade-your-integration/).\n\n## Installation\n\nAdyen iOS are available through either [CocoaPods](http://cocoapods.org), [Carthage](https://github.com/Carthage/Carthage) or [Swift Package Manager](https://swift.org/package-manager/).\n\n### Minimum Requirements\n\n- iOS 12.0\n- Xcode 15.0\n- Swift 5.7\n\n### CocoaPods\n\n1. Add `pod 'Adyen'` to your `Podfile`.\n2. Run `pod install`.\n\nYou can install all modules or add individual modules, depending on your needs and integration type.\nThe `Adyen/WeChatPay` module needs to be explicitly added to support WeChat Pay.\nThe `Adyen/SwiftUI` module needs to be explicitly added to use the SwiftUI specific helpers.\n\n```\npod 'Adyen'               // Add DropIn with all modules except WeChat Pay and SwiftUI.\n// Add individual modules\npod 'Adyen/Card'          // Card components.\npod 'Adyen/Session'       // Handler for the simplified checkout flow.\npod 'Adyen/Encryption'    // Encryption module.\npod 'Adyen/Components'    // All other payment components except WeChat Pay.\npod 'Adyen/Actions'       // Action Components.\npod 'Adyen/WeChatPay'     // WeChat Pay Component.\npod 'Adyen/SwiftUI'       // SwiftUI apps specific module.\n```\n\n:warning: _`Adyen/AdyenWeChatPay` and `AdyenWeChatPayInternal` modules doesn't support any simulators and can only be tested on a real device._\n\n### Carthage\n\n1. Add `github \"adyen/adyen-ios\"` to your `Cartfile`.\n2. Run `carthage update`.\n3. Link the framework with your target as described in [Carthage Readme](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application).\n\nYou can add all modules or select individual modules to add to your integration. But make sure to include each module dependency modules.\n\n* `AdyenDropIn`: DropInComponent.\n* `AdyenSession`: handler for the simplified checkout flow.\n* `AdyenCard`: the card components.\n* `AdyenComponents`: all other payment components except WeChat Pay.\n* `AdyenActions`:  action components.\n* `AdyenEncryption`: encryption.\n* `AdyenWeChatPay`: WeChat Pay component.\n* `AdyenWeChatPayInternal`: WeChat Pay component.\n* `AdyenTwint`: Twint component.\n* `AdyenSwiftUI`: SwiftUI apps specific module.\n\n:warning: _`AdyenWeChatPay` and `AdyenWeChatPayInternal` modules doesn't support any simulators and can only be tested on a real device._\n\n### Swift Package Manager\n\n1. Follow Apple's [Adding Package Dependencies to Your App](\nhttps://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app\n) guide on how to add a Swift Package dependency.\n2. Use `https://github.com/Adyen/adyen-ios` as the repository URL.\n3. Specify the version to be at least `4.9.0`.\n\nYou can add all modules or select individual modules to add to your integration.\nThe `AdyenWeChatPay` module needs to be explicitly added to support WeChat Pay.\nThe `AdyenTwint` module needs to be explicitly added to support Twint native flow.\nThe `AdyenSwiftUI` module needs to be explicitly added to use the SwiftUI specific helpers.\n\n* `AdyenDropIn`: all modules except `AdyenWeChatPay`.\n* `AdyenSession`: handler for the simplified checkout flow.\n* `AdyenCard`: the card components.\n* `AdyenComponents`: all other payment components except WeChat Pay.\n* `AdyenActions`:  action components.\n* `AdyenEncryption`: encryption.\n* `AdyenWeChatPay`: WeChat Pay component.\n* `AdyenTwint`: Twint component.\n* `AdyenSwiftUI`: SwiftUI apps specific module.\n\n:warning: _Swift Package Manager for Xcode 12.0 and 12.1 has a [know issue](https://bugs.swift.org/browse/SR-13343) when it comes to importing a dependency that in turn depend on a binary dependencies. A workaround is described [here](https://forums.swift.org/t/swiftpm-binarytarget-dependency-and-code-signing/38953)._\n\n:warning: _`AdyenWeChatPay` and `AdyenWeChatPayInternal` modules doesn't support any simulators and can only be tested on a real device._\n\n## Drop-in\n\nThe [Drop-in](https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/dropincomponent) handles the presentation of available payment methods and the subsequent entry of a customer's payment details. It is initialized with the response of [`/sessions`][apiExplorer.sessions], and handles the entire checkout flow under the hood.\n\n### Usage\n\n#### Setting up the Drop-in\n\nAll Components need an `AdyenContext`. An instance of `AdyenContext` wraps your client key, environment, analytics configuration and so on.\nPlease read more [here](https://docs.adyen.com/development-resources/client-side-authentication) about the client key and how to get one.\nUse **Environment.test** for environment. When you're ready to accept live payments, change the value to one of our [live environments](https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/environment)\n\n```swift\nlet apiContext = try! APIContext(environment: componentsEnvironment, clientKey: clientKey)\nlet context = AdyenContext(apiContext: apiContext,\n                           payment: payment)\nlet configuration = DropInComponent.Configuration()\n```\n\nCreate an instance of `AdyenSession.Configuration` with the response you received from the `/sessions` call and the `AdyenContext` instance.\n\n```swift\nlet configuration = AdyenSession.Configuration(sessionIdentifier: response.sessionId,\n                                               initialSessionData: response.sessionData,\n                                               context: context)\n```\n\nCall the static `initialize` function of the `AdyenSession` by providing the configuration and the delegates, which will asynchronously create and return the session instance.\n\n```swift\nAdyenSession.initialize(with: configuration, delegate: self, presentationDelegate: self) { [weak self] result in\n    switch result {\n    case let .success(session):\n        // store the session object\n        self?.session = session\n    case let .failure(error):\n        // handle the error\n    }\n}\n```\n\nCreate a configuration object for `DropInComponent`. Check specific payment method pages to confirm if you need to include additional required parameters.\n\n```swift\n// Check specific payment method pages to confirm if you need to configure additional required parameters.\nlet dropInConfiguration = DropInComponent.Configuration()\n\n```\n\nSome payment methods need additional configuration. For example `ApplePayComponent`. These payment method specific configuration parameters can be set in an instance of `DropInComponent.Configuration`:\n\n```swift\nlet summaryItems = [\n                      PKPaymentSummaryItem(label: \"Item A\", amount: 75, type: .final),\n                      PKPaymentSummaryItem(label: \"Item B\", amount: 25, type: .final),\n                      PKPaymentSummaryItem(label: \"My Company\", amount: 100, type: .final)\n                   ]\nlet applePayment = try ApplePayPayment(countryCode: \"US\",\n                                       currencyCode: \"USD\",\n                                       summaryItems: summaryItems)\n\ndropInConfiguration.applePay = .init(payment: applePayment,\n                                     merchantIdentifier: \"merchant.com.adyen.MY_MERCHANT_ID\")\n```\n\nAlso for voucher payment methods like Doku variants, in order for the `DokuComponent` to enable the shopper to save the voucher, access to the shopper photos is requested, so a suitable text needs to be added to the `NSPhotoLibraryAddUsageDescription` key in the application `Info.plist`.\n\n#### Presenting the Drop-in\n\nInitialize the `DropInComponent` class and set the `AdyenSession` instance as the `delegate` and `partialPaymentDelegate` (if needed) of the `DropInComponent` instance.\n\n```swift\nlet dropInComponent = DropInComponent(paymentMethods: session.sessionContext.paymentMethods,\n                                      context: context,\n                                      configuration: dropInConfiguration)\n \n// Keep the Drop-in instance to avoid it being destroyed after the function is executed.\nself.dropInComponent = dropInComponent\n \n// Set session as the delegate for Drop-in\ndropInComponent.delegate = session\ndropInComponent.partialPaymentDelegate = session\n \npresent(dropInComponent.viewController, animated: true)\n\n```\n\n#### Implementing `AdyenSessionDelegate`\n\n`AdyenSession` makes the necessary calls to handle the whole flow and notifies your application through its delegate, `AdyenSessionDelegate`. To handle the results of the Drop-in, the following methods of `AdyenSessionDelegate` should be implemented:\n\n---\n\n```swift\nfunc didComplete(with result: AdyenSessionResult, component: Component, session: AdyenSession)\n```\n\nThis method will be invoked when the component finishes without any further steps needed by the application. The application just needs to dismiss the current component, ideally after calling `finalizeIfNeeded` on the component.\n\n---\n\n```swift\nfunc didFail(with error: Error, from component: Component, session: AdyenSession)\n```\n\nThis method is invoked when an error occurred during the use of the Drop-in or the components.\nYou can then call the `finalizeIfNeeded` on the component, dismiss the component's view controller in the completion callback and display an error message.\n\n---\n\n```swift\nfunc didOpenExternalApplication(component: DropInComponent)\n```\n\nThis optional method is invoked after a redirect to an external application has occurred.\n\n---\n\n#### Handling an action\n\nActions are handled by the Drop-in via its delegate `AdyenSession`.\n\n\n##### Receiving redirect\n\nIn case the customer is redirected to an external URL or App, make sure to let the `RedirectComponent` know when the user returns to your app. Do this by implementing the following in your `UIApplicationDelegate`:\n\n```swift\nfunc application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any] = [:]) -\u003e Bool {\n    RedirectComponent.applicationDidOpen(from: url)\n\n    return true\n}\n```\n\n## Components\n\nIn order to have more flexibility over the checkout flow, you can use our Components to present each payment method individually. Implementation details of our Components can be found in our [Components API Reference][reference].\n\n### Available Components\n\n- [Card Component][reference.cardComponent]\n- [3D Secure 2 Component][reference.threeDS2Component]\n- [Apple Pay Component][reference.applePayComponent]\n- [BCMC Component][reference.bcmcComponent]\n- [SEPA Direct Debit Component][reference.sepaDirectDebitComponent]\n- [MOLPay Component][reference.issuerListComponent]\n- [Dotpay Component][reference.issuerListComponent]\n- [EPS Component][reference.issuerListComponent]\n- [Entercash Component][reference.issuerListComponent]\n- [Open Banking Component][reference.issuerListComponent]\n- [WeChat Pay Component][reference.weChatPaySDKActionComponent]\n- [Qiwi Wallet Component][reference.qiwiWalletComponent]\n- [Redirect Component][reference.redirectComponent]\n- [MB Way Component][reference.mbWayComponent]\n- [BLIK Component][reference.BLIKComponent]\n- [Doku Component][reference.DokuComponent]\n- [Boleto Component][reference.BoletoComponent]\n- [ACH Direct Debit Component][reference.ACHDirectDebitComponent]\n- [Affirm Component][reference.AffirmComponent]\n- [Atome Component][reference.AtomeComponent]\n- [BACS Direct Debit Component][reference.BACSDirectDebitComponent]\n- [Online Banking Czech republic Component][reference.OnlineBankingComponent]\n- [Online Banking Slovakia Component][reference.OnlineBankingComponent]\n- [Online Banking Poland Component][reference.issuerListComponent]\n- [UPI Component][reference.UPIComponent]\n- [QRCode Component][reference.QRCodeActionComponent]\n- [Cash App Pay Component][reference.CashAppPayComponent]\n- [Twint Component][reference.TwintComponent]\n- [PayTo Component][reference.PayToComponent]\n\n\n## Customization\n\nBoth the Drop-in and the Components offer a number of customization options to allow you to match the appearance of your app.\nFor example, to change the section header titles and form field titles in the Drop-in to red, and turn the submit button's background to black with white foreground:\n```swift\nvar style = DropInComponent.Style()\nstyle.listComponent.sectionHeader.title.color = .red\nstyle.formComponent.textField.title.color = .red\nstyle.formComponent.mainButtonItem.button.backgroundColor = .black\nstyle.formComponent.mainButtonItem.button.title.color = .white\n\nlet dropInComponent = DropInComponent(paymentMethods: paymentMethods,\n                                      configuration: configuration,\n                                      style: style)\ndropInComponent.delegate = self.session\n```\n\nOr, to create a black Card Component with white text:\n```swift\nvar style = FormComponentStyle()\nstyle.backgroundColor = .black\nstyle.header.title.color = .white\nstyle.textField.title.color = .white\nstyle.textField.text.color = .white\nstyle.switch.title.color = .white\n\nlet component = CardComponent(paymentMethod: paymentMethod,\n                              apiContext: context.apiContext,\n                              style: style)\ncomponent.delegate = self.session\n```\n\nA full list of customization options can be found in the [API Reference][reference.styles].\n\n## See also\n\n* [Complete Documentation](https://docs.adyen.com/online-payments/build-your-integration/?platform=iOS)\n\n* [Components API Reference][reference]\n\n* [Drop-in Integration][reference.dropInComponent]\n\n* [Advanced flow][reference.advancedFlow]\n\n\n## Support\n\nIf you have a feature request, or spotted a bug or a technical problem, create a GitHub issue. For other questions, contact our [support team](https://www.adyen.help/hc/en-us/requests/new?ticket_form_id=360000705420).\n\n## Contributing\nWe strongly encourage you to join us in contributing to this repository so everyone can benefit from:\n* New features and functionality\n* Resolved bug fixes and issues\n* Any general improvements\n\n\nRead our [**contribution guidelines**](CONTRIBUTING.md) to find out how.\n\n## License\n\nThis repository is open source and available under the MIT license. For more information, see the LICENSE file.\n\n[reference]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/\n[reference.dropInComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/dropin\n[reference.installation]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/installation\n[reference.styles]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/customization\n[reference.advancedFlow]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/threeapis\n[reference.cardComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/cardcomponent\n[reference.threeDS2Component]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/threeds2component\n[reference.applePayComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/applepaycomponent\n[reference.bcmcComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/bcmccomponent\n[reference.issuerListComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/issuerlistcomponent\n[reference.weChatPaySDKActionComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/wechatpaysdkactioncomponent\n[reference.qiwiWalletComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/qiwiwalletcomponent\n[reference.sepaDirectDebitComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/sepadirectdebitcomponent\n[reference.redirectComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/redirectcomponent\n[reference.mbWayComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/mbwaycomponent\n[reference.BLIKComponent]: https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/blikcomponent\n[reference.DokuComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/dokucomponent\n[reference.BoletoComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/boletocomponent\n[reference.ACHDirectDebitComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/achdirectdebitcomponent\n[reference.AffirmComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/affirmcomponent\n[reference.BACSDirectDebitComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/bacsdirectdebitcomponent\n[reference.OnlineBankingComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/onlinebankingcomponent\n[reference.AtomeComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/atomecomponent\n[reference.UPIComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/upicomponent\n[reference.QRCodeActionComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/qrcodeactioncomponent\n[reference.CashAppPayComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/cashAppPayComponent\n[reference.TwintComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/TwintComponent\n[reference.PayToComponent]:  https://adyen.github.io/adyen-ios/5.17.0/documentation/adyen/paytocomponent\n\n[apiExplorer.sessions]: https://docs.adyen.com/api-explorer/#/CheckoutService/latest/post/sessions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadyen%2Fadyen-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadyen%2Fadyen-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadyen%2Fadyen-ios/lists"}