> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Un widget qui offre une expérience de connexion et d’inscription fluide pour vos applications iOS natives.

# Lock.swift

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****MASQUÉ*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

Ce guide de référence vous montrera comment mettre en œuvre l’interface utilisateur de Lock et vous donnera des détails sur la façon de configurer et de personnaliser Lock afin de l’utiliser comme interface utilisateur pour vos besoins d’authentification. Cependant, si vous souhaitez en apprendre davantage sur ce que vous pouvez faire avec Auth0 et Swift, notamment comment enregistrer, utiliser dans des requêtes et actualiser des <Tooltip tip="Jeton d’accès : justificatif d’autorisation, sous la forme d’une chaîne opaque ou d’un JWT, utilisé pour accéder à une API." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=Access+Tokens">jetons d’accès</Tooltip>, obtenir des renseignements sur le profil de l’utilisateur, et plus encore, consultez le [Auth0.swift SDK](/docs/fr-ca/libraries/auth0-swift). Ou jetez un coup d’œil au [Quickstart Swift](/docs/fr-ca/quickstart/native/ios-swift) pour suivre des exemples complets et voir les options, autant pour utiliser Lock comme interface que pour utiliser une interface personnalisée.

Consultez le [dépôt Lock.swift](https://github.com/auth0/Lock.swift) sur GitHub.

<div id="requirements">
  ## Configuration requise
</div>

* iOS 9+
* Xcode 11.4+ / 12.x
* Swift 4.x / 5.x

<div id="install">
  ## Installation
</div>

<div id="cocoapods">
  ### Cocoapods
</div>

Si vous utilisez [Cocoapods](https://cocoapods.org), ajoutez cette ligne à votre `Podfile` :

`pod 'Lock', '~> 2.0'`

Ensuite, exécutez `pod install`.
Pour en savoir plus sur Cocoapods, consultez [la documentation officielle](https://guides.cocoapods.org/using/getting-started.html).

<div id="carthage">
  ### Carthage
</div>

Si vous utilisez [Carthage](https://github.com/Carthage/Carthage), ajoutez la ligne suivante à votre `Cartfile` :

`github "auth0/Lock.swift" ~> 2.0`
Exécutez ensuite `carthage bootstrap`.
Pour plus d’information sur l’utilisation de Carthage, consultez [la documentation officielle](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos).

<div id="spm">
  ### SPM
</div>

Si vous utilisez Swift Package Manager, ouvrez l’élément de menu suivant dans Xcode :

**File > Swift Packages > Add Package Dependency...**

Dans la fenêtre **Choose Package Repository**, ajoutez cette URL :

`https://github.com/auth0/Lock.swift.git`

Ensuite, cliquez sur **Next** et suivez les étapes restantes.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Pour en savoir plus sur SPM, consultez la [documentation officielle](https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).
</Callout>

<div id="set-up">
  ## Configuration
</div>

<div id="integrate-with-your-application">
  ### Intégrer votre application
</div>

Lock doit être informé lorsqu’on demande à l’application d’ouvrir une URL. Vous pouvez le faire dans le fichier `AppDelegate`.

```swift lines theme={null}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
  return Lock.resumeAuth(url, options: options)
}
```

<div id="import-lock">
  ### Importation de Lock
</div>

Importez **Lock** partout où vous en avez besoin

`import lock`

<div id="auth0-credentials">
  ### Identifiants Auth0
</div>

Pour utiliser Lock, vous devez fournir votre Auth0 <Tooltip tip="Client ID : valeur d’identification fournie par Auth0 à votre ressource enregistrée." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=Client+Id">Client ID</Tooltip> et votre Domaine, que vous trouverez dans l’[Auth0 Dashboard](https://manage.auth0.com/#), dans les paramètres de votre application.

Dans le bundle de votre application, vous pouvez ajouter un fichier `plist` nommé `Auth0.plist` contenant vos identifiants, selon le format suivant.

export const codeExample = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>ClientId</key>
  <string>{yourClientId}</string>
  <key>Domain</key>
  <string>{yourDomain}</string>
</dict>
</plist>`;

<AuthCodeBlock children={codeExample} language="xml" />

<div id="implementation-of-lock-classic">
  ## Mise en œuvre de Lock Classic
</div>

Lock Classic gère l’authentification au moyen de connexions Database, Social et Enterprise.

<div id="oidc-conformant-mode">
  ### Mode conforme à OIDC
</div>

Il est fortement recommandé d’utiliser ce SDK en mode conforme à OIDC. Lorsque ce mode est activé, il oblige le SDK à utiliser le pipeline d’authentification actuel d’Auth0 et l’empêche d’accéder à des points de terminaison hérités. Par défaut, cette valeur est `false`

```swift lines theme={null}
.withOptions {
    $0.oidcConformant = true
}
```

Pour afficher Lock, ajoutez l’extrait de code suivant dans votre UIViewController.

```swift lines theme={null}
Lock
    .classic()
    // withConnections, withOptions, withStyle, et ainsi de suite
    .withOptions {
      $0.oidcConformant = true
      $0.scope = "openid profile"
    }
    .onAuth { credentials in
      // Sauvegardons la valeur de credentials.accessToken
    }
    .present(from: self)
```

<div id="use-auth0swift-library-to-access-user-profile">
  ## Utiliser la bibliothèque Auth0.Swift pour accéder au profil utilisateur
</div>

Pour accéder aux renseignements du profil utilisateur, vous devrez utiliser la bibliothèque `Auth0.Swift` :

```swift lines theme={null}
Auth0
   .authentication()
   .userInfo(withAccessToken: accessToken)
   .start { result in
       switch result {
       case .success(let profile):
           print("User Profile: \(profile)")
       case .failure(let error):
           print("Failed with \(error)")
       }
   }
```

Consultez la [documentation de la bibliothèque Auth0.Swift](/docs/fr-ca/libraries/auth0-swift) pour en savoir plus sur son utilisation.

<div id="specify-connections">
  ## Spécifier les connexions
</div>

Lock chargera automatiquement les connexions configurées pour votre application. Si vous souhaitez modifier le comportement par défaut, vous pouvez préciser manuellement quelles connexions il doit présenter aux utilisateurs comme options d’authentification. Pour ce faire, appelez la méthode et fournissez une fonction de fermeture permettant de préciser la ou les connexions.

Ajouter une connexion de base de données :

```swift lines theme={null}
.withConnections {
    connections.database(name: "Username-Password-Authentication", requiresUsername: true)
}
```

Ajout de plusieurs connexions sociales :

```swift lines theme={null}
.withConnections {
    connections.social(name: "facebook", style: .Facebook)
    connections.social(name: "google-oauth2", style: .Google)
}
```

<div id="styling-and-customization">
  ## Style et personnalisation
</div>

Lock offre de nombreuses options de personnalisation visuelle pour vous aider à appliquer votre propre image de marque à Lock avec `withStyle`. Par exemple, vous pouvez modifier la couleur principale et le texte d’en-tête de votre widget Lock :

<div id="customize-your-title-logo-and-primary-color">
  ### Personnalisez le titre, le logo et la couleur principale
</div>

```swift lines theme={null}
.withStyle {
  $0.title = "Company LLC"
  $0.logo = LazyImage(named: "company_logo")
  $0.primaryColor = UIColor(red: 0.6784, green: 0.5412, blue: 0.7333, alpha: 1.0)
}
```

Vous pouvez consulter l’ensemble des options de style permettant de modifier l’apparence de Lock pour votre application dans le [Guide de personnalisation](/docs/fr-ca/libraries/lock-swift/lock-swift-customization).

<div id="configuration-options">
  ## Options de configuration
</div>

Il existe de nombreuses options pour configurer le comportement de Lock. Voici un exemple de Lock configuré de façon à pouvoir être fermé, à être limité aux seuls noms d’utilisateur (et non aux adresses courriel), et à n’afficher que les écrans Connexion et Réinitialiser le mot de passe.

```swift lines theme={null}
Lock
  .classic()
  .withOptions {
    $0.closable = true
    $0.usernameStyle = [.Username]
    $0.allow = [.Login, .ResetPassword]
  }
```

Vous pouvez consulter l’ensemble des options de configuration du comportement qui permettent de modifier le fonctionnement de Lock pour votre application dans le [guide de configuration](/docs/fr-ca/libraries/lock-swift/lock-swift-configuration-options).

<div id="password-manager-support">
  ## Prise en charge du gestionnaire de mots de passe
</div>

Par défaut, la prise en charge de [1Password](https://1password.com/) est activée pour les connexions de base de données. Pour que l’option s’affiche dans les écrans de connexion et d’inscription, l’utilisateur doit tout de même avoir installé l’application 1Password. Vous pouvez désactiver la prise en charge de 1Password à l’aide de la propriété enabled de passwordManager.

```swift lines theme={null}
.withOptions {
    $0.passwordManager.enabled = false
}
```

Par défaut, `appIdentifier` correspondra au Bundle Identifier de l’application et `displayName` à son nom d’affichage. Vous pouvez les personnaliser comme suit :

```swift lines theme={null}
.withOptions {
    $0.passwordManager.appIdentifier = "www.myapp.com"
    $0.passwordManager.displayName = "My App"
}
```

Vous devrez ajouter les éléments suivants au fichier `info.plist` de votre application :

```xml lines theme={null}
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>org-appextension-feature-password-management</string>
</array>
```

<div id="learn-more">
  ## En savoir plus
</div>

* [Lock.swift : options de personnalisation du style](/docs/fr-ca/libraries/lock-swift/lock-swift-customization)
* [Lock.swift : options de configuration](/docs/fr-ca/libraries/lock-swift/lock-swift-configuration-options)
* [Lock.swift : champs personnalisés à l’inscription](/docs/fr-ca/libraries/lock-swift/lock-swift-custom-fields-at-signup)
* [Internationalisation de Lock.swift](/docs/fr-ca/customize/internationalization-and-localization/lock-swift-internationalization)
* [Déconnexion](/docs/fr-ca/authenticate/login/logout)
