> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/docs.facephi-pt-br/produtos/idv-suite/flujos-and-integraciones/configuracion-tecnica-del-cliente/sdk-mobile/ios-sdk/modulos/captura-facial.md).

# Captura Facial

Este componente requer uma versão mínima do iOS13

## Introdução

A Captura Facial é realizada por meio do **Selphi Component**.

Este componente é responsável por capturar uma selfie do usuário e extrair suas principais características faciais. Inclui os seguintes processos:

* Gerenciamento interno de câmeras e permissões.
* Assistência durante a captura do rosto.
* Geração de templates faciais e da imagem do usuário.

***

## Dependências

Para evitar conflitos e problemas de compatibilidade, se o projeto contiver versões antigas de bibliotecas Facephi (Widgets), elas devem ser removidas completamente antes de instalar os componentes de **SDKMobile**.

### CocoaPods

As bibliotecas Facephi são distribuídas remotamente por meio de gerenciadores de dependências. No iOS, utiliza-se **CocoaPods**. As dependências **obrigatórias** que deverão ter sido instaladas previamente (adicionando-as no arquivo Podfile do projeto) são:

```swift
  pod 'FPHISDKMainComponent', '~> $VERSION'
```

Para instalar o componente **Selphi**, adicione a dependência correspondente no `Podfile` do projeto, junto com as dependências obrigatórias do SDK.

```swift
  pod 'FPHISDKSelphiComponent', '~> $VERSION'
```

### Swift Package Manager (SPM)

Se você usar **SPM**, certifique-se de que as dependências obrigatórias do SDK já estejam instaladas.

```sh
//HTTPS
https://github.com/facephi-clienters/SDK-SdkPackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-SdkPackage-SPM.git
```

Para instalar o componente **Selphi**, inclua-o nos módulos do projeto.

```swift
//HTTPS
https://github.com/facephi-clienters/SDK-Selphi_component-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-Selphi_component-SPM.git
```

***

## Permissões

No aplicativo cliente onde os componentes serão integrados, é necessário incorporar o seguinte item no arquivo **Info.plist**:

```
É necessário permitir o uso da câmera (Privacy - Camera Usage Description)
```

## Controladores disponíveis

| **Controlador**  | **Descrição**                                  |
| ---------------- | ---------------------------------------------- |
| SelphiController | Controlador principal de Reconhecimento Facial |

***

## Recebimento de erros

*finishStatus*: Indica se a operação foi concluída corretamente. Valores possíveis:

<pre class="language-swift"><code class="lang-swift"><strong>FinishStatus.STATUS_OK
</strong>FinishStatus.STATUS_ERROR
</code></pre>

*errorType*: Erros próprios do Widget.

No iOS, `errorType` é um `ErrorType` do SDK. Em um Timeout, o enum Swift pode ser `.SELPHI_TIMEOUT(LivenessDiagnostic?)` ou, se for interpolado diretamente, `SELPHI_TIMEOUT`. No iOS não existe um caso `TIMEOUT` sem prefixo.

Para serializar o erro deve ser utilizado:

```swift
sdkResult.errorType.toString(addComponentPrefix: "SPI_")
```

Isso retorna `SPI_TIMEOUT` tanto se o enum for `SDK_TIMEOUT` quanto `SELPHI_TIMEOUT`.

#### Comportamento em Timeout

Em um Timeout, o resultado tem:

* `finishStatus`: `STATUS_ERROR`
* `data`: `nil` (não é retornado um `SelphiResult`)
* `errorType`: `.SELPHI_TIMEOUT(LivenessDiagnostic?)`

O caso `SELPHI_TIMEOUT` mantém, quando disponível, o diagnóstico de liveness do Widget. Essas informações **não** fazem parte de `data`; só podem ser lidas no iOS por meio de pattern matching sobre `errorType`:

```swift
if case .SELPHI_TIMEOUT(let diagnostic) = sdkResult.errorType {
    // diagnostic: LivenessDiagnostic? (pode ser nil)
}
```

Se chegar como `SELPHI_TIMEOUT`, o diagnóstico associado pode ser `nil` quando o Timeout ocorre pelo caminho de erro do Widget (`FWETimeout`) em vez do delegate `extractionTimeout()`.

Para integrações nativas em iOS, o valor serializado deve ser tratado como `SPI_TIMEOUT` (inclui `SELPHI_TIMEOUT` do enum).

Se `showDiagnostic` estiver ativo, o callback `output` não é invocado no instante do Timeout: primeiro é exibida a tela de diagnóstico e o resultado é entregue ao pressionar fechar. Com `showDiagnostic` desativado, o callback é executado imediatamente.

A lista a seguir inclui erros do contrato multiplataforma; alguns não ocorrem no iOS.

* SPI\_APPLICATION\_CONTEXT\_ERROR: O contexto de aplicativo necessário é nulo.
* SPI\_BAD\_EXTRACTOR\_CONFIGURATION\_ERROR: Widget: Configuração do extrator incorreta.
* SPI\_CAMERA\_PERMISSION\_DENIED: O usuário negou as permissões.
* SPI\_CANCEL\_BY\_USER: O usuário cancelou o processo.
* SPI\_COMPONENT\_LICENSE\_ERROR: A licença do componente não é correta.
* SPI\_EMPTY\_LICENSE: O String de licença está vazio.
* SPI\_EXTRACTION\_LICENSE\_ERROR: Widget: Erro de licença.
* SPI\_ACTIVE\_LIVENESS\_ERROR: Widget: Erro no processo de Liveness Ativo.
* SPI\_HARDWARE\_ERROR: Widget: Erro de hardware.
* SPI\_INITIALIZATION\_ERROR: Erro de Inicialização.
* SPI\_MANAGER\_NOT\_INITIALIZED: Os managers estão nulos.
* SPI\_NO\_DATA\_ERROR: Os dados de entrada estão nulos.
* SPI\_OPERATION\_NOT\_CREATED: Não há nenhuma operação em andamento.
* SPI\_RESOURCES\_FILE\_NOT\_FOUND: Não foi encontrado o zip de recursos.
* SPI\_SETTINGS\_PERMISSION\_ERROR: Widget: Erro de permissões.
* SPI\_TEMPLATE\_ERROR:
* SPI\_TIMEOUT: Timeout no processo (`SELPHI_TIMEOUT` do enum).
* SPI\_UNEXPECTED\_CAPTURE\_ERROR: Widget: Erro na captura.
* SPI\_UNKNOWN\_ERROR: Erro desconhecido.
* SPI\_WIDGET\_RESULT\_DATA\_ERROR: Erro nos dados de saída do Widget.
