> 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/productos/idv-suite/flujos-and-integraciones/configuracion-tecnica-del-cliente/sdk-mobile/ios-sdk/modulos/captura-de-documentos.md).

# Captura de documentos

Este componente necesita una versión mínima de iOS9

## Introducción

Este componente se encarga de la **captura y análisis de documentos de identidad**, permitiendo extraer información estructurada y obtener imágenes procesadas del documento.

Sus principales funcionalidades son:

* Gestión interna de cámara y permisos.
* Asistencia guiada para la captura del **anverso y reverso** del documento.
* Extracción automática de datos mediante OCR.
* Obtención de imágenes procesadas del documento y de elementos asociados (rostro, firma, etc.).
* Alto nivel de configuración: países, idiomas, tipos y modelos de documentos.

***

## Dependencias

Para evitar conflictos y problemas de compatibilidad, si el proyecto contiene versiones antiguas de librerías de Facephi (Widgets), estas deben eliminarse **por completo** antes de instalar los componentes de **SDK Mobile**.

### **Cocoapods**

* Las librerías de Facephi se distribuyen de forma remota mediante gestores de dependencias. Las dependencias **obligatorias** que deberán haberse instalado previamente (añadiéndolas en el fichero Podfile del proyecto) son:

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

* Para instalar el componente **SelphID**, añade la dependencia correspondiente en el `Podfile` del proyecto.

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

### Swift Package Manager (SPM)

Si utilizas **SPM**, asegúrate de que las dependencias obligatorias del SDK estén previamente instaladas.

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

Para instalar el componente **SelphID**, inclúyelo en los módulos del proyecto.

<pre class="language-swift"><code class="lang-swift"><strong>//HTTPS
</strong>https://github.com/facephi-clienters/SDK-SelphidComponentLight.git
//SSH
git@github.com:facephi-clienters/SDK-SelphidComponentLight.git
</code></pre>

***

## Permisos

En la aplicación cliente donde se vayan a integrar los componentes es necesario incorporar el siguiente elemento en el fichero **Info.plist**:

```
Es necesario permitir el uso de la cámara (Privacy - Camera Usage Description)
```

## Controladores disponibles

| **Controlador**   | **Descripción**                                       |
| ----------------- | ----------------------------------------------------- |
| SelphIDController | Controlador principal de reconocimiento de documentos |

***

## Recepción de errores <a href="#recepcion-del-resultado" id="recepcion-del-resultado"></a>

*finishStatus*: Que nos indicará si la operación ha finalizado correctamente. Posibles valores:

```swift
FinishStatus.STATUS_OK
FinishStatus.STATUS_ERROR
```

*errorType*: Errores propios del widget.

En iOS si se interpola directamente, mostrarará `SELPHID_TIMEOUT`. En iOS no existe un caso `TIMEOUT` sin prefijo.

Para serializar el error debe utilizarse:

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

Esto devuelve `SPD_TIMEOUT` tanto si el enum es `SDK_TIMEOUT` como `SELPHID_TIMEOUT`.

#### Comportamiento en timeout

En un timeout, el resultado tiene:

* `finishStatus`: `STATUS_ERROR`
* `data`: `nil` (no se devuelve un `SelphIDResult`)
* `errorType`: `.SELPHID_TIMEOUT(UIImage?, UIImage?)`

El caso `SELPHID_TIMEOUT` conserva, cuando están disponibles, las imágenes crudas del documento capturadas antes del timeout (`rawFrontDocument` y `rawBackDocument` del widget). Esa información **no** forma parte de `data` ni se devuelve como `rawFrontDocument` / `rawBackDocument` del resultado de éxito; solo puede leerse en iOS mediante pattern matching sobre `errorType`:

```swift
if case .SELPHID_TIMEOUT(let frontRaw, let backRaw) = sdkResult.errorType {
    // frontRaw, backRaw: UIImage? (pueden ser nil)
}
```

Si llega como `SELPHID_TIMEOUT`, las imágenes asociadas pueden ser `nil` cuando el timeout se produce por la vía de error del widget (`FWMETimeout`) en lugar del delegate `captureTimeout()`.

En iOS, propiedades como `timeoutDiagnostic` o `captureProgress` **no** se incluyen en el `SdkResult` de error. El componente usa `captureProgress` internamente para mostrar el mensaje de la pantalla de diagnóstico cuando `showDiagnostic` está activo.

Si `showDiagnostic` está activo, el callback `output` no se invoca en el instante del timeout: se muestra primero la pantalla de diagnóstico y el resultado se entrega al pulsar cerrar. Con `showDiagnostic` desactivado, el callback se ejecuta de forma inmediata.

La lista siguiente incluye errores del contrato multiplataforma; algunos no se producen en iOS (por ejemplo, `SPD_MOVE_FAIL`).

* SPD\_APPLICATION\_CONTEXT\_ERROR: El contexto de aplicación necesario es nulo.
* SPD\_BAD\_EXTRACTOR\_CONFIGURATION\_ERROR: Widget: Configuración del extractor incorrecta
* SPD\_CAMERA\_PERMISSION\_DENIED: El usuario ha rechazado los permisos.
* SPD\_CANCEL\_BY\_USER: El usuario ha cancelado el proceso.
* SPD\_CANCEL\_LAUNCH: Se ha hecho una cancelación general del SDK.
* SPD\_COMPONENT\_LICENSE\_ERROR: La licencia del componente no es correcta.
* SPD\_CONTROL\_NOT\_INITIALIZATED\_ERROR: Widget: Error de inicialización
* SPD\_EMPTY\_LICENSE: El String de licencia está vacío.
* SPD\_EXTRACTION\_LICENSE\_ERROR: Widget: Error de licencia
* SPD\_HARDWARE\_ERROR: Widget: Error de hardware
* SPD\_INITIALIZATION\_ERROR: Error de inicialización.
* SPD\_MOVE\_FAIL: El usuario no se ha movido como se le ha especificado en el proceso.
* SPD\_NO\_DATA\_ERROR: Los datos de entrada son nulos.
* SPD\_OPERATION\_NOT\_CREATED: No hay ninguna operación en curso.
* SPD\_RESOURCES\_NOT\_FOUND: No se ha encontrado el zip de recursos
* SPD\_SETTINGS\_PERMISSION\_ERROR: Widget: Error de permisos
* SPD\_TIMEOUT: Timeout en el proceso `SELPHID_TIMEOUT` del enum).
* SPD\_UNEXPECTED\_CAPTURE\_ERROR: Widget: Error en la captura
* SPD\_UNKNOWN\_ERROR: Error desconocido
* SPD\_WIDGET\_RESULT\_DATA\_ERROR: Error en los datos de salida del widget
