Cómo realizar OCR en iOS en .NET MAUI
.NET MAUI (Interfaz de Usuario de Aplicación Multiplataforma) es una evolución del marco Xamarin.Forms, diseñado para crear aplicaciones multiplataforma para Android, iOS, macOS y Windows utilizando .NET. MAUI tiene como objetivo simplificar el proceso de construir interfaces de usuario nativas que se puedan ejecutar en múltiples plataformas.
Para los desarrolladores que crean aplicaciones iOS destinadas al mercado español, IronOCR iOS habilita casos de uso con alta relevancia regulatoria. La capacidad de Apple para ejecutar modelos de machine learning mediante CoreML en el propio dispositivo (on-device inference) se alinea perfectamente con los principios de la LOPDGDD: al procesar las imágenes de documentos con IronOCR iOS directamente en el iPhone o iPad, los datos —incluyendo imágenes de DNI, NIE y TIE (Tarjeta de Identidad de Extranjero)— nunca abandonan el dispositivo del usuario. La AEPD considera el procesamiento local como la opción preferible para datos especialmente sensibles como los documentos de identidad. Además, IronOCR iOS soporta el escaneo de facturas Facturae y tickets TicketBAI en aplicaciones de gestión empresarial para iPhone. Los certificados digitales de la FNMT utilizados para firmar documentos bajo eIDAS pueden verificarse en el pipeline OCR-to-signature sin necesidad de enviar datos a servidores externos. Esta guía detalla la configuración de IronOCR iOS en .NET MAUI para implementar estos casos de uso en cumplimiento con el marco legal español.
¡El paquete IronOcr.iOS trae soporte OCR a iOS!
Cómo usar IronOCR en iOS en .NET MAUI
- Descargue la biblioteca C# para realizar OCR en iOS
- Crear un proyecto de aplicación .NET MAUI
- Edita el archivo XAML para mostrar un botón de activación y texto de salida
- Edita el archivo C# correspondiente para realizar el OCR
- Descarga el proyecto de ejemplo para un inicio rápido.
Paquete IronOCR para iOS
El paquete IronOcr.iOS habilita funciones de OCR en dispositivos iOS vía proyectos multiplataforma de .NET. No se necesita el paquete IronOCR estándar.
Paquete de instalación IronOcr.iOS
Instalar con NuGet
Paquete de instalación IronOcr.iOS
Crear un proyecto .NET MAUI
En la sección Multiplataforma, selecciona .NET MAUI App y continúa.

Incluir la biblioteca IronOCR.iOS
La biblioteca se puede agregar de varias maneras. La más fácil es quizás usando NuGet.
- Dentro de Visual Studio, haz clic derecho en "Dependencies > NuGet" y selecciona "Manage NuGet Packages ...".
- Seleccione la pestaña "Examinar" y busque "IronOCR.iOS".
- Seleccione el paquete "IronOCR.iOS" y haga clic en "Agregar Paquete".

Para evitar problemas con otras plataformas, modifica el archivo csproj para incluir el paquete solo cuando se dirija a la plataforma iOS. Para hacerlo:
- Haz clic derecho en el archivo *.csproj de tu proyecto y selecciona "Editar archivo del proyecto".
-
Crea un nuevo elemento
ItemGroupde esta manera:<ItemGroup Condition="$(TargetFramework.Contains('ios')) == true"> <PackageReference Include="IronOcr.iOS" Version="YOUR_PACKAGE_VERSION" /> </ItemGroup><ItemGroup Condition="$(TargetFramework.Contains('ios')) == true"> <PackageReference Include="IronOcr.iOS" Version="YOUR_PACKAGE_VERSION" /> </ItemGroup>XML - Mueve la referencia del paquete "IronOcr.iOS" dentro del
ItemGroupque acabamos de crear.
Los pasos anteriores evitarán que el paquete "IronOCR.iOS" se use en, por ejemplo, plataformas Android (para ese propósito, instale IronOcr.Android en su lugar).
Editar "MainPage.xaml"
Edite el archivo XAML para mostrar un botón y una etiqueta para mostrar el resultado del OCR. Por ejemplo:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MAUIIronOCRiOSSample.MainPage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button
Text="Import File"
Clicked="ReadFileOnImport"
Grid.Row="0"
HorizontalOptions="Center"
Margin="20, 20, 20, 10"/>
<ScrollView
Grid.Row="1"
BackgroundColor="LightGray"
Padding="10"
Margin="10, 10, 10, 30">
<Label x:Name="OutputText"/>
</ScrollView>
</Grid>
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MAUIIronOCRiOSSample.MainPage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button
Text="Import File"
Clicked="ReadFileOnImport"
Grid.Row="0"
HorizontalOptions="Center"
Margin="20, 20, 20, 10"/>
<ScrollView
Grid.Row="1"
BackgroundColor="LightGray"
Padding="10"
Margin="10, 10, 10, 30">
<Label x:Name="OutputText"/>
</ScrollView>
</Grid>
</ContentPage>
Editar "MainPage.xaml.cs"
Comienza instanciando el objeto IronTesseract. Asegúrate de inicializar IronTesseract una vez en una clase, como se muestra en el código a continuación. Instanciarlo directamente en un método no es efectivo y podría llevar a errores inesperados. Luego, utiliza el método FilePicker.PickAsync para seleccionar un archivo. Desde el FileResult, abre un flujo para leer. Crea un nuevo objeto OcrInput y usa este objeto para cargar la imagen. Use la instancia de Tesseract para realizar OCR en la imagen y devolver el texto. Finalmente, muestre el texto resultante en una etiqueta.
La implementación actual está limitada solo a archivos de imagen. El paquete aún no funciona con documentos PDF. Con esto en mente, cualquier configuración relacionada con documentos PDF debería permanecer desactivada.
using System;
using IronOcr;
using Microsoft.Maui.Controls;
namespace MAUIIronOCRiOSSample;
public partial class MainPage : ContentPage
{
// Initialize IronTesseract once in a class
private IronTesseract ocrTesseract = new IronTesseract();
public MainPage()
{
InitializeComponent();
// Apply license key
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
}
private async void ReadFileOnImport(object sender, EventArgs e)
{
try
{
var options = new PickOptions
{
PickerTitle = "Please select a file"
};
var result = await FilePicker.PickAsync(options);
if (result != null)
{
using var stream = await result.OpenReadAsync();
// Instantiate OcrInput
using var ocrInput = new OcrInput();
// Load image stream
ocrInput.LoadImage(stream);
// Perform OCR
var ocrResult = ocrTesseract.Read(ocrInput);
OutputText.Text = ocrResult.Text;
}
}
catch (Exception ex)
{
// Handle exceptions
System.Diagnostics.Debug.WriteLine(ex);
}
}
}
using System;
using IronOcr;
using Microsoft.Maui.Controls;
namespace MAUIIronOCRiOSSample;
public partial class MainPage : ContentPage
{
// Initialize IronTesseract once in a class
private IronTesseract ocrTesseract = new IronTesseract();
public MainPage()
{
InitializeComponent();
// Apply license key
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
}
private async void ReadFileOnImport(object sender, EventArgs e)
{
try
{
var options = new PickOptions
{
PickerTitle = "Please select a file"
};
var result = await FilePicker.PickAsync(options);
if (result != null)
{
using var stream = await result.OpenReadAsync();
// Instantiate OcrInput
using var ocrInput = new OcrInput();
// Load image stream
ocrInput.LoadImage(stream);
// Perform OCR
var ocrResult = ocrTesseract.Read(ocrInput);
OutputText.Text = ocrResult.Text;
}
}
catch (Exception ex)
{
// Handle exceptions
System.Diagnostics.Debug.WriteLine(ex);
}
}
}
Imports System
Imports IronOcr
Imports Microsoft.Maui.Controls
Namespace MAUIIronOCRiOSSample
Partial Public Class MainPage
Inherits ContentPage
' Initialize IronTesseract once in a class
Private ocrTesseract As New IronTesseract()
Public Sub New()
InitializeComponent()
' Apply license key
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"
End Sub
Private Async Sub ReadFileOnImport(ByVal sender As Object, ByVal e As EventArgs)
Try
Dim options = New PickOptions With {.PickerTitle = "Please select a file"}
Dim result = Await FilePicker.PickAsync(options)
If result IsNot Nothing Then
Dim stream = Await result.OpenReadAsync()
' Instantiate OcrInput
Dim ocrInput As New OcrInput()
' Load image stream
ocrInput.LoadImage(stream)
' Perform OCR
Dim ocrResult = ocrTesseract.Read(ocrInput)
OutputText.Text = ocrResult.Text
End If
Catch ex As Exception
' Handle exceptions
System.Diagnostics.Debug.WriteLine(ex)
End Try
End Sub
End Class
End Namespace
Por último, cambia el objetivo de compilación a iOS Simulator y ejecuta el proyecto.
Ejecutar el proyecto
Esto le mostrará cómo ejecutar el proyecto y realizar OCR.
Descargar proyecto de aplicación .NET MAUI
Puede descargar el código completo de esta guía. Viene como un archivo comprimido que puede abrir en Visual Studio como un proyecto de aplicación .NET MAUI.
Casos de uso regulatorios españoles en iOS
Una vez configurado IronOCR iOS en tu aplicación .NET MAUI, puedes implementar los siguientes casos de uso para el mercado español:
Verificación DNI/NIE/TIE on-device: usa ocrInput.LoadImage(stream) para cargar la imagen del documento capturada con la cámara del iPhone. IronOCR extraerá los campos de texto de la MRZ (Zona de Lectura Mecánica) del documento. Dado que el procesamiento se realiza en el dispositivo, la imagen del DNI o NIE no se transmite a ningún servidor, cumpliendo con la LOPDGDD y las directrices de la AEPD para el tratamiento de documentos de identidad.
Facturae en aplicaciones empresariales iOS: los ejecutivos y comerciales que necesitan capturar facturas de proveedor con su iPhone pueden utilizar IronOCR para extraer NIF del proveedor, base imponible y cuota de IVA directamente en la aplicación, sincronizando los datos con el sistema ERP de la empresa sin intermediarios de nube que tengan acceso a los documentos fiscales.
TicketBAI en iPhone: las aplicaciones de TPV para iOS en el País Vasco pueden leer el código QR de TicketBAI de tickets impresos. Activa ocrTesseract.Configuration.ReadBarCodes = true y el identificador único del ticket se capturará automáticamente para su almacenamiento y trazabilidad.
Nota sobre limitaciones del paquete iOS: el paquete IronOcr.iOS actual no soporta el procesamiento de documentos PDF. Si necesitas procesar facturas Facturae en formato PDF desde iOS, considera una arquitectura híbrida donde la captura se realiza en iOS y el procesamiento PDF se delega a un servicio backend en Azure Spain Central.
Uso de IronOcr.iOS en Avalonia
Configurar IronOCR.iOS en Avalonia es similar a MAUI, con una diferencia crucial: además de la última versión del SDK de .NET, también necesita .NET SDK 8.0.101 instalado para ejecutar IronOCR.iOS exitosamente. Después, IronOcr.iOS se puede usar en un proyecto Avalonia con la misma configuración descrita anteriormente.
Si desea realizar OCR en Android, navegue al siguiente artículo para obtener más información: "Cómo realizar OCR en Android en .NET MAUI"
Preguntas Frecuentes
¿Cómo integro la funcionalidad de OCR en una aplicación .NET MAUI para iOS?
Puedes integrar la funcionalidad de OCR en una aplicación .NET MAUI para iOS utilizando el paquete IronOCR.iOS. Instálalo mediante NuGet en Visual Studio y luego modifica tu archivo de proyecto para incluir el paquete condicionalmente para la plataforma iOS. Usa IronTesseract para procesar imágenes y extraer texto.
¿Puedo usar el paquete IronOCR.iOS para el procesamiento de documentos PDF?
No, el paquete IronOCR.iOS actualmente está limitado a procesar solo archivos de imagen y no soporta documentos PDF. Asegúrate de deshabilitar cualquier configuración relacionada con PDF en tu proyecto.
¿Qué pasos están involucrados en la configuración de OCR para una aplicación iOS usando .NET MAUI?
Configurar OCR para una aplicación iOS usando .NET MAUI implica descargar el paquete IronOcr.iOS vía NuGet, modificar tu archivo de proyecto para incluir condicionalmente el paquete para iOS, y editar tus archivos MainPage.xaml y MainPage.xaml.cs para crear la interfaz de usuario y manejar el procesamiento de OCR.
¿Qué requisitos adicionales hay para usar IronOCR en proyectos Avalonia?
Al usar IronOCR en proyectos Avalonia, necesitas asegurarte de tener la última versión del SDK de .NET y también .NET SDK 8.0.101 instalado. Esta configuración es similar a MAUI pero requiere este SDK adicional.
¿Cómo puedo realizar OCR en una imagen usando IronOCR en un proyecto .NET MAUI?
En un proyecto .NET MAUI, usa el objeto IronTesseract para realizar OCR en una imagen. Usa FilePicker.PickAsync para seleccionar un archivo de imagen, cárgalo en un objeto OcrInput, y luego usa IronTesseract para leer la imagen y extraer texto.
¿Existe un proyecto de ejemplo para implementar OCR en iOS usando .NET MAUI?
Sí, puedes descargar un proyecto de ejemplo .NET MAUI usando IronOCR.iOS desde el sitio web de Iron Software. Este proyecto de ejemplo está disponible como un archivo comprimido que puedes abrir en Visual Studio para acelerar tu proceso de desarrollo.
¿Cómo cumplir con la LOPDGDD al escanear DNI o NIE con IronOCR en iOS?
IronOCR iOS procesa las imágenes directamente en el dispositivo mediante el motor de inferencia on-device, sin transmitir la imagen a ningún servidor. Para cumplir con la LOPDGDD: (1) informa al usuario de la finalidad del tratamiento antes de solicitar acceso a la cámara; (2) extrae únicamente los campos necesarios (número de documento, fecha de caducidad, nombre); (3) no persistas la imagen del documento en el almacenamiento del dispositivo más allá del tiempo de procesamiento; (4) implementa el borrado seguro de los datos en memoria tras completar el proceso de verificación. Esta arquitectura on-device es la opción preferida según las directrices de la AEPD para el tratamiento de documentos de identidad.
¿Puede IronOCR iOS leer facturas Facturae y tickets TicketBAI?
IronOCR iOS puede leer las imágenes escaneadas de facturas Facturae y extraer los campos fiscales clave (NIF del emisor, base imponible, tipo y cuota de IVA, fecha de operación). Para tickets TicketBAI, activa ocrTesseract.Configuration.ReadBarCodes = true para que IronOCR detecte y decodifique automáticamente el código QR de TicketBAI. Nota: el paquete IronOcr.iOS no soporta actualmente el procesamiento de documentos PDF; para facturas Facturae en formato PDF, considera una arquitectura híbrida con un servicio backend en Azure Spain Central.
¿Se puede usar IronOCR en aplicaciones en la nube?
En efecto, IronOCR puede desplegarse en entornos de nube, haciéndolo adecuado para aplicaciones y servicios web que requieran capacidades de OCR.
¿Cómo puedo mejorar la exactitud de los resultados de OCR con IronOCR?
Para mejorar la precisión del OCR con IronOCR, asegúrate de tener imágenes de entrada de alta calidad, usa paquetes de idiomas apropiados y aprovecha las características de preprocesamiento de imágenes de la biblioteca.

