36 lines
142 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-faq-generators">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v2.3.1">
<title data-rh="true">FAQ: Generators | OpenAPI Generator</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://openapi-generator.tech/img/docusaurus.png"><meta data-rh="true" name="twitter:image" content="https://openapi-generator.tech/img/docusaurus.png"><meta data-rh="true" property="og:url" content="https://openapi-generator.tech/docs/faq-generators"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FAQ: Generators | OpenAPI Generator"><meta data-rh="true" name="description" content="What are some server generator use cases?"><meta data-rh="true" property="og:description" content="What are some server generator use cases?"><link data-rh="true" rel="icon" href="/img/favicon.png"><link data-rh="true" rel="canonical" href="https://openapi-generator.tech/docs/faq-generators"><link data-rh="true" rel="alternate" href="https://openapi-generator.tech/docs/faq-generators" hreflang="en"><link data-rh="true" rel="alternate" href="https://openapi-generator.tech/docs/faq-generators" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://51ITDG8FYN-dsn.algolia.net" crossorigin="anonymous"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="OpenAPI Generator RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="OpenAPI Generator Atom Feed">
<link rel="preconnect" href="https://www.google-analytics.com">
<script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-132927057-1","auto"),ga("send","pageview")</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
<link rel="search" type="application/opensearchdescription+xml" title="OpenAPI Generator" href="/opensearch.xml">
<script src="https://buttons.github.io/buttons.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>
<script src="/js/code-block-buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.fcd3a3ce.css">
<link rel="preload" href="/assets/js/runtime~main.27a6ef31.js" as="script">
<link rel="preload" href="/assets/js/main.7f449d5a.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/mono-logo.svg" alt="OpenAPI Tools logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/mono-logo.svg" alt="OpenAPI Tools logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">OpenAPI Generator</b></a><a class="navbar__item navbar__link" href="/docs/installation">Getting Started</a><a class="navbar__item navbar__link" href="/docs/generators">Generators</a><a class="navbar__item navbar__link" href="/docs/roadmap">Roadmap</a><a class="navbar__item navbar__link" href="/docs/faq">FAQ</a><a class="navbar__item navbar__link" href="/team">Team</a><a class="navbar__item navbar__link" href="/blog">Blog</a><a href="https://api.openapi-generator.tech" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">API</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/faq">FAQ</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/faq">FAQ: General</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/faq-extending">FAQ: Extending</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/faq-contributing">FAQ: Contributing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/faq-generators">FAQ: Generators</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">FAQ</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FAQ: Generators</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FAQ: Generators</h1></header><h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-are-some-server-generator-use-cases">What are some server generator use cases?<a href="#what-are-some-server-generator-use-cases" class="hash-link" aria-label="Direct link to What are some server generator use cases?" title="Direct link to What are some server generator use cases?"></a></h3><p>We have around 40+ server generators, with more added regularly. Some of these include Spring in your choice of Java or Kotlin, the Finch and Scalatra frameworks using Scala, and C# generators for ASP.NET and Azure Functions (to name only a few).</p><p>Besides generating the server code as a starting point to implement the API backend, here are some use cases of the server generators:</p><ul><li><strong>prototyping</strong> - one can generate the server code and have a functional API backend very quickly to try different things or features.</li><li><strong>mocking</strong> - easily provide an API backend for mocking based on the examples field defined in the response object.</li><li><strong>migration</strong> - let&#x27;s say one wants to migrate an API backend from Ruby on Rails to Java Spring. The server generator can save a lot of time in implementing and verify each endpoint in the new API backend.</li><li><strong>evaluating</strong> - when you want to try a new language or framework, and a typical &quot;Hello, World&quot; is too trivial.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="java">Java<a href="#java" class="hash-link" aria-label="Direct link to Java" title="Direct link to Java"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-api-client-has-ssl-errors-due-to-an-invalid-certificate-is-there-a-way-to-bypass-that">The API client has SSL errors due to an invalid certificate. Is there a way to bypass that?<a href="#the-api-client-has-ssl-errors-due-to-an-invalid-certificate-is-there-a-way-to-bypass-that" class="hash-link" aria-label="Direct link to The API client has SSL errors due to an invalid certificate. Is there a way to bypass that?" title="Direct link to The API client has SSL errors due to an invalid certificate. Is there a way to bypass that?"></a></h3><p>Yes, please refer to <a href="http://stackoverflow.com/a/6055903/677735" target="_blank" rel="noopener noreferrer">http://stackoverflow.com/a/6055903/677735</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-can-i-customize-the-feign-client-templates">How can I customize the Feign client templates?<a href="#how-can-i-customize-the-feign-client-templates" class="hash-link" aria-label="Direct link to How can I customize the Feign client templates?" title="Direct link to How can I customize the Feign client templates?"></a></h3><p>You will need to provide customized files in <code>Java/libraries/feign</code> under the resources folder and pass the location via the <code>-t</code> option.</p><p>In your Gradle build script, please add the following (example):</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">config.templateDir </span><span class="token operator">=</span><span class="token plain"> &#x27;src/openapi-generator-templates/Java/libraries/feign</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="android">Android<a href="#android" class="hash-link" aria-label="Direct link to Android" title="Direct link to Android"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-can-i-generate-an-android-sdk">How can I generate an Android SDK?<a href="#how-can-i-generate-an-android-sdk" class="hash-link" aria-label="Direct link to How can I generate an Android SDK?" title="Direct link to How can I generate an Android SDK?"></a></h3><p><strong>The Java SDK is also compatible with Android.</strong></p><p>[RECOMMENDED]<!-- --> To generate the Java SDK with <code>okhttp</code> and <code>gson</code> libraries, run the following:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn clean package</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -i https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.json </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -l java --library</span><span class="token operator">=</span><span class="token plain">okhttp-gson </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> --additional-properties </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">hideGenerationTimestamp</span><span class="token operator">=</span><span class="token plain">true </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -o /var/tmp/java/okhttp-gson/ </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can also generate the Java SDK with other HTTP libraries by replacing <code>okhttp-gson</code> with <code>retrofit</code> for example. For a list of support libraries, please run</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar config-help -l java</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To generate the Android SDK with <a href="https://github.com/mcxiaoke/android-volley" target="_blank" rel="noopener noreferrer"><code>volley</code></a>, please run</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn clean package</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -i https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.json </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -l android --library</span><span class="token operator">=</span><span class="token plain">volley </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -o /var/tmp/android/volley/ </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>We do <strong>not</strong> recommend using the default HTTP library (Apache HttpClient) with <code>android</code> as it&#x27;s not actively maintained.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="c-sharp">C-Sharp<a href="#c-sharp" class="hash-link" aria-label="Direct link to C-Sharp" title="Direct link to C-Sharp"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-fix-csc--warning-cs2002-in-xamarin">How do I fix <code>CSC: warning CS2002</code> in Xamarin?<a href="#how-do-i-fix-csc--warning-cs2002-in-xamarin" class="hash-link" aria-label="Direct link to how-do-i-fix-csc--warning-cs2002-in-xamarin" title="Direct link to how-do-i-fix-csc--warning-cs2002-in-xamarin"></a></h3><p>The full warning might look like this: <code>CSC: warning CS2002: Source file &#x27;Api/FakeApi.cs&#x27; specified multiple times</code></p><p>The warning has no impact on the build process so you should be able to build the solution without issue. The warning should be addressed in the upcoming stable release of Xamarin. </p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="objective-c">Objective-C<a href="#objective-c" class="hash-link" aria-label="Direct link to Objective-C" title="Direct link to Objective-C"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-run-integration-test-with-petstore-objc-api-client">How do I run integration test with Petstore ObjC API client?<a href="#how-do-i-run-integration-test-with-petstore-objc-api-client" class="hash-link" aria-label="Direct link to How do I run integration test with Petstore ObjC API client?" title="Direct link to How do I run integration test with Petstore ObjC API client?"></a></h3><p>Here are the steps:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> clone https://github.com/openapitools/openapi-generator.git</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> openapi-generator/samples/client/petstore/objc/default/OpenAPIClientTests</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn integration-test</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Besides <code>default</code> (folder) ObjC API client, there&#x27;s also <code>core-data</code> for another ObjC API client with <a href="https://en.wikipedia.org/wiki/Core_Data" target="_blank" rel="noopener noreferrer">Core Data support</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="swift">Swift<a href="#swift" class="hash-link" aria-label="Direct link to Swift" title="Direct link to Swift"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-run-integration-test-with-petstore-swift-api-client">How do I run integration test with Petstore Swift API client?<a href="#how-do-i-run-integration-test-with-petstore-swift-api-client" class="hash-link" aria-label="Direct link to How do I run integration test with Petstore Swift API client?" title="Direct link to How do I run integration test with Petstore Swift API client?"></a></h3><p>Here are the steps:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> clone https://github.com/openapitools/openapi-generator.git</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> openapi-generator/samples/client/petstore/swift/default/OpenAPIClientTests</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn integration-test</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="which-swift-generator-is-still-actively-maintained">Which Swift generator is still actively maintained?<a href="#which-swift-generator-is-still-actively-maintained" class="hash-link" aria-label="Direct link to Which Swift generator is still actively maintained?" title="Direct link to Which Swift generator is still actively maintained?"></a></h3><p>Please use <code>swift5</code> generator because Swift 4.x is deprecated.
There is a new <code>swift6</code> generator, that is currently in beta, try it and give us your feedback.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-5-api-client">How do I implement bearer token authentication with URLSession on the Swift 5 API client?<a href="#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-5-api-client" class="hash-link" aria-label="Direct link to How do I implement bearer token authentication with URLSession on the Swift 5 API client?" title="Direct link to How do I implement bearer token authentication with URLSession on the Swift 5 API client?"></a></h3><p>First you subclass RequestBuilderFactory</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> class BearerRequestBuilderFactory: RequestBuilderFactory </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func getNonDecodableBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> RequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.Type </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> BearerRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.self</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func getBuilder</span><span class="token operator">&lt;</span><span class="token plain">T: Decodable</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> RequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.Type </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> BearerDecodableRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.self</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then you subclass URLSessionRequestBuilder and URLSessionDecodableRequestBuilder</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> class BearerRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">: URLSessionRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> @discardableResult</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> override func execute</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_ apiResponseQueue: DispatchQueue </span><span class="token operator">=</span><span class="token plain"> PetstoreClientAPI.apiResponseQueue, _ completion: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Result</span><span class="token operator">&lt;</span><span class="token plain">Response</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">, ErrorResponse</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> RequestTask </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Before making the request, we can validate </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> we have a bearer token to be able to </span><span class="token function" style="color:rgb(80, 250, 123)">make</span><span class="token plain"> a request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> BearerTokenHandler.refreshTokenIfDoesntExist </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Here we </span><span class="token function" style="color:rgb(80, 250, 123)">make</span><span class="token plain"> the request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> super.execute</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">apiResponseQueue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> result </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> switch result </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> .success:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // If we got a successful response, we send the response to the completion block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> .failure</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // If we got a failure response, we will analyse the error to see what we should </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">do</span><span class="token plain"> with it</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> ErrorResponse.error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_, data, response, error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> error </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // If the error is an ErrorResponse.error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> we will analyse it to see </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> it</span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;s a 401, and if it&#x27;</span><span class="token plain">s a </span><span class="token number">401</span><span class="token plain">, we will refresh the token and retry the request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> BearerTokenHandler.refreshTokenIfUnauthorizedRequestResponse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> data: data,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> response: response,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> error: error</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> wasTokenRefreshed </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> wasTokenRefreshed </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // If the token was refreshed, it</span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;s because it was a 401 error, so we refreshed the token, and we are going to retry the request by calling self.execute()</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> self.execute(apiResponseQueue, completion)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // If the token was not refreshed, it&#x27;</span><span class="token plain">s because it was not a </span><span class="token number">401</span><span class="token plain"> error, so we send the response to the completion block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // If it</span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;s an unknown error, we send the response to the completion block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> completion(result)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> return requestTask</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> class BearerDecodableRequestBuilder&lt;T: Decodable&gt;: URLSessionDecodableRequestBuilder&lt;T&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> @discardableResult</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> override func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (Result&lt;Response&lt;T&gt;, ErrorResponse&gt;) -&gt; Void) -&gt; RequestTask {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // Before making the request, we can validate if we have a bearer token to be able to make a request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> BearerTokenHandler.refreshTokenIfDoesntExist {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // Here we make the request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> super.execute(apiResponseQueue) { result in</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> switch result {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> case .success:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // If we got a successful response, we send the response to the completion block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> completion(result)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> case let .failure(error):</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // If we got a failure response, we will analyse the error to see what we should do with it</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> if case let ErrorResponse.error(_, data, response, error) = error {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // If the error is an ErrorResponse.error() we will analyse it to see if it&#x27;</span><span class="token plain">s a </span><span class="token number">401</span><span class="token plain">, and </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> it</span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;s a 401, we will refresh the token and retry the request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> BearerTokenHandler.refreshTokenIfUnauthorizedRequestResponse(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> data: data,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> response: response,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> error: error</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> ) { wasTokenRefreshed in</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> if wasTokenRefreshed {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // If the token was refreshed, it&#x27;</span><span class="token plain">s because it was a </span><span class="token number">401</span><span class="token plain"> error, so we refreshed the token, and we are going to retry the request by calling self.execute</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> self.execute</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">apiResponseQueue, completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // If the token was not refreshed, it</span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;s because it was not a 401 error, so we send the response to the completion block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> completion(result)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)"> // If it&#x27;</span><span class="token plain">s an unknown error, we send the response to the completion block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">return</span><span class="token plain"> requestTask</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> class BearerTokenHandler </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private static var bearerToken: String? </span><span class="token operator">=</span><span class="token plain"> nil</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> static func refreshTokenIfDoesntExist</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> bearerToken </span><span class="token operator">!=</span><span class="token plain"> nil </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startRefreshingToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> static func refreshTokenIfUnauthorizedRequestResponse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data: Data?, response: URLResponse?, error: Error?, completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Bool</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> response as? HTTPURLResponse, response.statusCode </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">401</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startRefreshingToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private static func startRefreshingToken</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Get a bearer token</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> dummyBearerToken </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;...&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> bearerToken </span><span class="token operator">=</span><span class="token plain"> dummyBearerToken</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> PetstoreClientAPI.customHeaders</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(dummyBearerToken)&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then you assign the <code>BearerRequestBuilderFactory</code> to the property <code>requestBuilderFactory</code>.</p><p><code>PetstoreClientAPI.requestBuilderFactory = BearerRequestBuilderFactory()</code></p><p>The name <code>PetstoreClientAPI.requestBuilderFactory</code> will change depending on your project name.</p><p>Here is a working sample that put&#x27;s together all of this.
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient/AppDelegate.swift" target="_blank" rel="noopener noreferrer">AppDelegate.swift</a>
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient/BearerDecodableRequestBuilder.swift" target="_blank" rel="noopener noreferrer">BearerDecodableRequestBuilder.swift</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-implement-bearer-token-authentication-with-alamofire-on-the-swift-5-api-client">How do I implement bearer token authentication with Alamofire on the Swift 5 API client?<a href="#how-do-i-implement-bearer-token-authentication-with-alamofire-on-the-swift-5-api-client" class="hash-link" aria-label="Direct link to How do I implement bearer token authentication with Alamofire on the Swift 5 API client?" title="Direct link to How do I implement bearer token authentication with Alamofire on the Swift 5 API client?"></a></h3><p>First you subclass RequestBuilderFactory</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> class BearerRequestBuilderFactory: RequestBuilderFactory </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func getNonDecodableBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> RequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.Type </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> BearerRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.self</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func getBuilder</span><span class="token operator">&lt;</span><span class="token plain">T: Decodable</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> RequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.Type </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> BearerDecodableRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">.self</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then you subclass AlamofireRequestBuilder and AlamofireDecodableRequestBuilder</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> class BearerRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">: AlamofireRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> override func createSessionManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> SessionManager </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> sessionManager </span><span class="token operator">=</span><span class="token plain"> super.createSessionManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> bearerTokenHandler </span><span class="token operator">=</span><span class="token plain"> BearerTokenHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> sessionManager.adapter </span><span class="token operator">=</span><span class="token plain"> bearerTokenHandler</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> sessionManager.retrier </span><span class="token operator">=</span><span class="token plain"> bearerTokenHandler</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">return</span><span class="token plain"> sessionManager</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> class BearerDecodableRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T: Decodable</span><span class="token operator">&gt;</span><span class="token plain">: AlamofireDecodableRequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> override func createSessionManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> SessionManager </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> sessionManager </span><span class="token operator">=</span><span class="token plain"> super.createSessionManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> bearerTokenHandler </span><span class="token operator">=</span><span class="token plain"> BearerTokenHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> sessionManager.adapter </span><span class="token operator">=</span><span class="token plain"> bearerTokenHandler</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> sessionManager.retrier </span><span class="token operator">=</span><span class="token plain"> bearerTokenHandler</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">return</span><span class="token plain"> sessionManager</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> class BearerTokenHandler: RequestAdapter, RequestRetrier </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private static var bearerToken: String? </span><span class="token operator">=</span><span class="token plain"> nil</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func adapt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_ urlRequest: URLRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> throws -</span><span class="token operator">&gt;</span><span class="token plain"> URLRequest </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> bearerToken </span><span class="token operator">=</span><span class="token plain"> Self.bearerToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> var urlRequest </span><span class="token operator">=</span><span class="token plain"> urlRequest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> urlRequest.setValue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(bearerToken)&quot;</span><span class="token plain">, forHTTPHeaderField: </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">return</span><span class="token plain"> urlRequest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">return</span><span class="token plain"> urlRequest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func should</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_: SessionManager, retry request: Request, with _: Error, completion: @escaping RequestRetryCompletion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> request.task?.response as? HTTPURLResponse, response.statusCode </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">401</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> Self.startRefreshingToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> isTokenRefreshed </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">isTokenRefreshed, </span><span class="token number">0.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">false, </span><span class="token number">0.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private static func startRefreshingToken</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Bool</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Get a bearer token</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> dummyBearerToken </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;...&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> bearerToken </span><span class="token operator">=</span><span class="token plain"> dummyBearerToken</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> PetstoreClientAPI.customHeaders</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(dummyBearerToken)&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then you assign the <code>BearerRequestBuilderFactory</code> to the property <code>requestBuilderFactory</code>.</p><p><code>PetstoreClientAPI.requestBuilderFactory = BearerRequestBuilderFactory()</code></p><p>The name <code>PetstoreClientAPI.requestBuilderFactory</code> will change depending on your project name.</p><p>Here is a working sample that put&#x27;s together all of this.
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient/AppDelegate.swift" target="_blank" rel="noopener noreferrer">AppDelegate.swift</a>
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient/BearerDecodableRequestBuilder.swift" target="_blank" rel="noopener noreferrer">BearerTokenHandler.swift</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-6-api-client">How do I implement bearer token authentication with URLSession on the Swift 6 API client?<a href="#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-6-api-client" class="hash-link" aria-label="Direct link to How do I implement bearer token authentication with URLSession on the Swift 6 API client?" title="Direct link to How do I implement bearer token authentication with URLSession on the Swift 6 API client?"></a></h3><p>First you implement the <code>OpenAPIInterceptor</code> protocol.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">public class BearerOpenAPIInterceptor: OpenAPIInterceptor </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> public </span><span class="token function-name function" style="color:rgb(80, 250, 123)">init</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> public func intercept</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">, completion: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Result</span><span class="token operator">&lt;</span><span class="token plain">URLRequest, any Error</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> guard requestBuilder.requiresAuthentication </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // no authentication required</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">urlRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> refreshTokenIfDoesntExist </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> token </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Change the current url request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> var newUrlRequest </span><span class="token operator">=</span><span class="token plain"> urlRequest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> newUrlRequest.setValue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(token)&quot;</span><span class="token plain">, forHTTPHeaderField: </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Change the global headers</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> requestBuilder.openAPIClient.customHeaders</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(token)&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">newUrlRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> public func retry</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder</span><span class="token operator">&lt;</span><span class="token plain">T</span><span class="token operator">&gt;</span><span class="token plain">, data: Data?, response: URLResponse?, error: Error, completion: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">OpenAPIInterceptorRetry</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // We will analyse the response to see </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> it</span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;s a 401, and if it&#x27;</span><span class="token plain">s a </span><span class="token number">401</span><span class="token plain">, we will refresh the token and retry the request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> refreshTokenIfUnauthorizedRequestResponse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> data: data,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> response: response,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> error: error</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">wasTokenRefreshed, newToken</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> wasTokenRefreshed, </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> newToken </span><span class="token operator">=</span><span class="token plain"> newToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Change the global headers</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> requestBuilder.openAPIClient.customHeaders</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(newToken)&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.retry</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // If the token was not refreshed, it&#x27;s because it was not a </span><span class="token number">401</span><span class="token plain"> error, so we send the response to the completion block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.dontRetry</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private var bearerToken: String? </span><span class="token operator">=</span><span class="token plain"> nil</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func refreshTokenIfDoesntExist</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">String</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> bearerToken </span><span class="token operator">=</span><span class="token plain"> bearerToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">bearerToken</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startRefreshingToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> token </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">token</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func refreshTokenIfUnauthorizedRequestResponse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data: Data?, response: URLResponse?, error: Error, completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Bool, String?</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> response as? HTTPURLResponse, response.statusCode </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">401</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startRefreshingToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> token </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">true, token</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">false, nil</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private func startRefreshingToken</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">String</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Get a bearer token</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> dummyBearerToken </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;...&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> bearerToken </span><span class="token operator">=</span><span class="token plain"> dummyBearerToken</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">dummyBearerToken</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then you assign the <code>BearerOpenAPIInterceptor</code> to the property <code>OpenAPIClient.shared.interceptor</code>.</p><p><code>OpenAPIClient.shared.interceptor = BearerOpenAPIInterceptor()</code></p><p>Here is a working sample that put&#x27;s together all of this.
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift6/urlsessionLibrary/SwaggerClientTests/SwaggerClient/AppDelegate.swift" target="_blank" rel="noopener noreferrer">AppDelegate.swift</a>
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient/BearerDecodableRequestBuilder.swift" target="_blank" rel="noopener noreferrer">BearerTokenHandler.swift</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-implement-bearer-token-authentication-with-alamofire-on-the-swift-6-api-client">How do I implement bearer token authentication with Alamofire on the Swift 6 API client?<a href="#how-do-i-implement-bearer-token-authentication-with-alamofire-on-the-swift-6-api-client" class="hash-link" aria-label="Direct link to How do I implement bearer token authentication with Alamofire on the Swift 6 API client?" title="Direct link to How do I implement bearer token authentication with Alamofire on the Swift 6 API client?"></a></h3><p>First implement the <code>Alamofire</code> <code>RequestInterceptor</code> protocol.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">class BearerTokenHandler: RequestInterceptor, @unchecked Sendable </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private var bearerToken: String? </span><span class="token operator">=</span><span class="token plain"> nil</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func adapt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_ urlRequest: URLRequest, </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> session: Session, completion: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Result</span><span class="token operator">&lt;</span><span class="token plain">URLRequest, Error</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> bearerToken </span><span class="token operator">=</span><span class="token plain"> bearerToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> var urlRequest </span><span class="token operator">=</span><span class="token plain"> urlRequest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> urlRequest.setValue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(bearerToken)&quot;</span><span class="token plain">, forHTTPHeaderField: </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">urlRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">urlRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> func retry</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_ request: Request, </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> session: Session, dueTo error: Error, completion: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">RetryResult</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> request.task?.response as? HTTPURLResponse, response.statusCode </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">401</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startRefreshingToken </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> isTokenRefreshed </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.retry</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">.doNotRetryWithError</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private func startRefreshingToken</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">completionHandler: @escaping </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Bool</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> -</span><span class="token operator">&gt;</span><span class="token plain"> Void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Get a bearer token</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> dummyBearerToken </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;...&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> bearerToken </span><span class="token operator">=</span><span class="token plain"> dummyBearerToken</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> OpenAPIClient.shared.customHeaders</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Authorization&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;Bearer \(dummyBearerToken)&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> completionHandler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then you assign the <code>BearerTokenHandler</code> to the property <code>OpenAPIClient.shared.interceptor</code>.</p><p><code>OpenAPIClient.shared.interceptor = BearerTokenHandler()</code></p><p>Here is a working sample that put&#x27;s together all of this.
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift6/alamofireLibrary/SwaggerClientTests/SwaggerClient/AppDelegate.swift" target="_blank" rel="noopener noreferrer">AppDelegate.swift</a>
<a href="https://github.com/OpenAPITools/openapi-generator/blob/master/samples/client/petstore/swift6/alamofireLibrary/SwaggerClientTests/SwaggerClient/BearerTokenHandler.swift" target="_blank" rel="noopener noreferrer">BearerTokenHandler.swift</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-migrate-from-the-swift-5-generator-to-the-swift-6-generator">How do I migrate from the Swift 5 generator to the swift 6 generator?<a href="#how-do-i-migrate-from-the-swift-5-generator-to-the-swift-6-generator" class="hash-link" aria-label="Direct link to How do I migrate from the Swift 5 generator to the swift 6 generator?" title="Direct link to How do I migrate from the Swift 5 generator to the swift 6 generator?"></a></h3><ul><li>Change the generator to the new <code>swift6</code> generator, e.g. <code>openapi-generator generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g swift6 -o /tmp/test/</code></li><li>Check the <code>swift6</code> <a href="https://github.com/OpenAPITools/openapi-generator/tree/master/samples/client/petstore/swift6/urlsessionLibrary" target="_blank" rel="noopener noreferrer">URLSession</a> and <a href="https://github.com/OpenAPITools/openapi-generator/tree/master/samples/client/petstore/swift6/alamofireLibrary" target="_blank" rel="noopener noreferrer">Alamofire</a> samples.</li><li>The infrastructure files have been moved to a new directory called <code>Infrastructure</code>. Please delete the old ones.</li><li>The <code>AnyCodable</code> dependency has been removed and replaced with a new enum called <code>JSONValue</code>, allowing you to use this generator without external dependencies.</li><li>The <code>Combine</code> response is now deferred by default, meaning the request will only start when you begin listening to it. To restore the previous behavior, set the <code>combineDeferred</code> flag to <code>false</code>.</li><li>A new configuration, <code>apiStaticMethod</code>, allows you to use instance methods instead of class methods for API calls. For more information, check the sample project <a href="https://github.com/OpenAPITools/openapi-generator/tree/master/samples/client/petstore/swift6/apiNonStaticMethod" target="_blank" rel="noopener noreferrer">apiNonStaticMethod</a>.</li><li>The new default response is based on async/await. To revert to the previous behavior, set the <code>responseAs</code> flag to <code>ObjcBlock</code>.</li><li>The default project structure now follows the SPM (Swift Package Manager) structure. To revert to the old structure, set the <code>useSPMFileStructure</code> flag to <code>false</code>.</li><li>The former <code>{{projectName}}API</code> is now called <code>{{projectName}}APIConfiguration</code>.</li><li>You can now set a request interceptor and retrier by configuring <code>OpenAPIClient.shared.interceptor</code>, making authenticated requests easier to manage.</li><li>The protocol <code>JSONEncodable</code> was renamed to <code>ParameterConvertible</code>.</li><li>The flag <code>useJSONEncodable</code> was renamed to <code>useParameterConvertible</code>.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="typescript">TypeScript<a href="#typescript" class="hash-link" aria-label="Direct link to TypeScript" title="Direct link to TypeScript"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-json-response-fails-to-deserialize-due-to-change-in-variable-naming-snake_case-to-camelcase-is-there-any-way-to-keep-the-original-naming">The JSON response fails to deserialize due to change in variable naming (snake_case to camelCase). Is there any way to keep the original naming?<a href="#the-json-response-fails-to-deserialize-due-to-change-in-variable-naming-snake_case-to-camelcase-is-there-any-way-to-keep-the-original-naming" class="hash-link" aria-label="Direct link to The JSON response fails to deserialize due to change in variable naming (snake_case to camelCase). Is there any way to keep the original naming?" title="Direct link to The JSON response fails to deserialize due to change in variable naming (snake_case to camelCase). Is there any way to keep the original naming?"></a></h3><p>Yes, please use the following option when generating TypeScript clients:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> modelPropertyNaming</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> Naming convention </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> the property: </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;camelCase&#x27;</span><span class="token plain">, </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;PascalCase&#x27;</span><span class="token plain">, </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;snake_case&#x27;</span><span class="token plain"> and </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;original&#x27;</span><span class="token plain">, </span><span class="token function" style="color:rgb(80, 250, 123)">which</span><span class="token plain"> keeps the original name </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Default: camelCase</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/OpenAPITools/openapi-generator/edit/master/website/../docs/faq-generators.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"><span class="theme-last-updated">Last updated<!-- --> on <b><time datetime="2025-04-26T14:14:37.000Z">Apr 26, 2025</time></b> by <b>Bruno Coelho</b></span></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/faq-contributing"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FAQ: Contributing</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#what-are-some-server-generator-use-cases" class="table-of-contents__link toc-highlight">What are some server generator use cases?</a></li><li><a href="#java" class="table-of-contents__link toc-highlight">Java</a><ul><li><a href="#the-api-client-has-ssl-errors-due-to-an-invalid-certificate-is-there-a-way-to-bypass-that" class="table-of-contents__link toc-highlight">The API client has SSL errors due to an invalid certificate. Is there a way to bypass that?</a></li><li><a href="#how-can-i-customize-the-feign-client-templates" class="table-of-contents__link toc-highlight">How can I customize the Feign client templates?</a></li></ul></li><li><a href="#android" class="table-of-contents__link toc-highlight">Android</a><ul><li><a href="#how-can-i-generate-an-android-sdk" class="table-of-contents__link toc-highlight">How can I generate an Android SDK?</a></li></ul></li><li><a href="#c-sharp" class="table-of-contents__link toc-highlight">C-Sharp</a><ul><li><a href="#how-do-i-fix-csc--warning-cs2002-in-xamarin" class="table-of-contents__link toc-highlight">How do I fix <code>CSC: warning CS2002</code> in Xamarin?</a></li></ul></li><li><a href="#objective-c" class="table-of-contents__link toc-highlight">Objective-C</a><ul><li><a href="#how-do-i-run-integration-test-with-petstore-objc-api-client" class="table-of-contents__link toc-highlight">How do I run integration test with Petstore ObjC API client?</a></li></ul></li><li><a href="#swift" class="table-of-contents__link toc-highlight">Swift</a><ul><li><a href="#how-do-i-run-integration-test-with-petstore-swift-api-client" class="table-of-contents__link toc-highlight">How do I run integration test with Petstore Swift API client?</a></li><li><a href="#which-swift-generator-is-still-actively-maintained" class="table-of-contents__link toc-highlight">Which Swift generator is still actively maintained?</a></li><li><a href="#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-5-api-client" class="table-of-contents__link toc-highlight">How do I implement bearer token authentication with URLSession on the Swift 5 API client?</a></li><li><a href="#how-do-i-implement-bearer-token-authentication-with-alamofire-on-the-swift-5-api-client" class="table-of-contents__link toc-highlight">How do I implement bearer token authentication with Alamofire on the Swift 5 API client?</a></li><li><a href="#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-6-api-client" class="table-of-contents__link toc-highlight">How do I implement bearer token authentication with URLSession on the Swift 6 API client?</a></li><li><a href="#how-do-i-implement-bearer-token-authentication-with-alamofire-on-the-swift-6-api-client" class="table-of-contents__link toc-highlight">How do I implement bearer token authentication with Alamofire on the Swift 6 API client?</a></li><li><a href="#how-do-i-migrate-from-the-swift-5-generator-to-the-swift-6-generator" class="table-of-contents__link toc-highlight">How do I migrate from the Swift 5 generator to the swift 6 generator?</a></li></ul></li><li><a href="#typescript" class="table-of-contents__link toc-highlight">TypeScript</a><ul><li><a href="#the-json-response-fails-to-deserialize-due-to-change-in-variable-naming-snake_case-to-camelcase-is-there-any-way-to-keep-the-original-naming" class="table-of-contents__link toc-highlight">The JSON response fails to deserialize due to change in variable naming (snake_case to camelCase). Is there any way to keep the original naming?</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/customization">Customizing Generators</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/installation">Installation</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/integrations">Workflow Integrations</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/users">User Showcase</a></li><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/openapi-generator" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://join.slack.com/t/openapi-generator/shared_invite/zt-12jxxd7p2-XUeQM~4pzsU9x~eGLQqX2g" target="_blank" rel="noopener noreferrer" class="footer__link-item">Chat Room<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/oas_generator" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/blog">Blog</a></li><li class="footer__item"><a href="https://github.com/OpenAPITools/openapi-generator" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://openapi-generator.tech/" rel="noopener noreferrer" class="footerLogoLink_BH7S"><img src="/img/mono-logo.svg" alt="OpenAPI Tools" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/mono-logo.svg" alt="OpenAPI Tools" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></a></div><div class="footer__copyright">Copyright © 2025 OpenAPI-Generator Contributors (https://openapi-generator.tech)</div></div></div></footer></div>
<script src="/assets/js/runtime~main.27a6ef31.js"></script>
<script src="/assets/js/main.7f449d5a.js"></script>
</body>
</html>