> ## 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) + "*****MASKED*****";
          }
          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 les détails sur la façon de configurer et de personnaliser Lock afin de l’utiliser comme interface pour vos besoins d’authentification. Toutefois, si vous souhaitez en savoir plus sur ce que vous pouvez faire avec Auth0 et Swift, notamment comment stocker, utiliser 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="/fr-CA/docs/glossary?term=Access+Tokens">jetons d’accès</Tooltip>, obtenir des renseignements sur le profil utilisateur, et plus encore, consultez le [SDK Auth0.swift](/fr-CA/docs/libraries/auth0-swift). Vous pouvez aussi consulter le [guide de démarrage rapide Swift](/fr-CA/docs/quickstart/native/ios-swift) pour parcourir des exemples complets et voir les options offertes, 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">
  ## Exigences
</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'`

Exécutez ensuite `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 en savoir plus 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 l’invite **Choose Package Repository**, saisissez cette URL :

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

Cliquez ensuite sur **Next**, puis 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 Lock à 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">
  ### Importer Lock
</div>

Importez **Lock** là où vous en avez besoin

`import lock`

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

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

Dans le bundle de votre application, vous pouvez ajouter un fichier `plist` nommé `Auth0.plist` qui contiendra vos identifiants au 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">
  ## Implémentation de Lock Classic
</div>

Lock Classic gère l’authentification à l’aide de connexions de base de données, sociales et d’entreprise.

<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 aux anciens points de terminaison. Par défaut, cette valeur est `false`

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

Pour afficher Lock, ajoutez l’extrait suivant à 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 de l’utilisateur
</div>

Pour accéder aux renseignements du profil de l’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](/fr-CA/docs/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 remplacer le comportement par défaut, vous pouvez indiquer manuellement les connexions qu’il doit présenter aux utilisateurs comme options d’authentification. Pour ce faire, appelez la méthode et passez-lui une closure qui permet de préciser la ou les connexions.

Ajout d’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 style pour vous aider à appliquer votre identité de marque à Lock à l’aide de `withStyle`. Par exemple, pour modifier la couleur principale et le texte de l’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 la liste complète des options de style permettant de modifier l’apparence de Lock pour votre application dans le [guide de personnalisation](/fr-CA/docs/libraries/lock-swift/lock-swift-customization).

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

Lock offre de nombreuses options de configuration. Voici un exemple de configuration de Lock qui permet de le fermer, de le limiter aux seuls noms d’utilisateur (et non aux courriels) et d’afficher uniquement les écrans de connexion et de réinitialisation du mot de passe.

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

Vous trouverez l’ensemble des options de configuration du comportement permettant de modifier le fonctionnement de Lock pour votre application dans le [Guide de configuration](/fr-CA/docs/libraries/lock-swift/lock-swift-configuration-options).

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

Par défaut, la prise en charge des gestionnaires de mots de passe via [1Password](https://1password.com/) est activée pour les connexions de base de données. La prise en charge de 1Password exige tout de même que l’utilisateur ait l’application 1Password installée pour que l’option soit visible dans les écrans de connexion et d’inscription. Vous pouvez désactiver la prise en charge de 1Password en utilisant la propriété enabled de passwordManager.

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

Par défaut, `appIdentifier` correspondra à l’identifiant du bundle de l’app, et `displayName` au nom d’affichage de l’app. 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 ce qui suit dans le 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](/fr-CA/docs/libraries/lock-swift/lock-swift-customization)
* [Lock.swift : options de configuration](/fr-CA/docs/libraries/lock-swift/lock-swift-configuration-options)
* [Lock.swift : champs personnalisés à l’inscription](/fr-CA/docs/libraries/lock-swift/lock-swift-custom-fields-at-signup)
* [Internationalisation de Lock.swift](/fr-CA/docs/customize/internationalization-and-localization/lock-swift-internationalization)
* [Déconnexion](/fr-CA/docs/authenticate/login/logout)
