Cómo usar IronWord en iOS
.NET MAUI (Interfaz de Aplicaciones Multiplaforma) te permite construir aplicaciones nativas para Android, iOS, Windows y macOS usando una única base de código .NET. Con IronWord, los desarrolladores de .NET pueden crear, leer, editar y guardar documentos de Microsoft Word (.docx) fácilmente, totalmente multiplataforma y sin requerir Microsoft Office.
IronWord funciona perfectamente en iOS a través de la base de código compartida .NET MAUI usando el paquete NuGet estándar de IronWord — no se necesita una versión específica para la plataforma.
Consideraciones regulatorias para empresas españolas en iOS
Las empresas con sede en España que desplieguen aplicaciones iOS para la generación de documentos deben tener presentes varios marcos normativos que afectan directamente al ciclo de vida del documento. La LOPDGDD (Ley Orgánica de Protección de Datos y Garantía de los Derechos Digitales) exige que cualquier documento Word generado en dispositivos móviles que contenga datos personales de ciudadanos españoles cumpla con los principios de minimización de datos establecidos por la AEPD (Agencia Española de Protección de Datos). Esto implica que los campos de identificación — como el DNI, NIE o TIE del usuario — deben tratarse con especial cuidado: se recomienda enmascarar parcialmente estos identificadores en documentos generados automáticamente antes de su almacenamiento local en el dispositivo.
Adicionalmente, si la aplicación iOS genera documentos en el contexto de operaciones mercantiles sujetas a la normativa Crea y Crece, el canal de distribución del documento debe garantizar la integridad del contenido. En flujos de trabajo que generen facturas o documentos de cobro, la integración futura con el sistema VeriFactu de la AEAT (Agencia Estatal de Administración Tributaria) puede requerir que los documentos Word sirvan de fuente intermedia antes de la emisión del ticket verificable a través de VERI*FACTU.
Instalar el paquete NuGet de IronWord
IronWord está disponible como un paquete NuGet multiplataforma estándar y soporta todos los principales objetivos de .NET MAUI, incluido iOS.
Install-Package IronWord
Crear un proyecto .NET MAUI
En Visual Studio:
- Ve a Archivo > Nuevo > Proyecto.
- Bajo Multiplataforma, selecciona Aplicación .NET MAUI.
- Nombra tu proyecto (por ejemplo, IronWordMauiIOS) y haz clic en Crear.
Añade IronWord a tu proyecto
Puedes añadir el paquete a través del Administrador de Paquetes NuGet o editando tu archivo .csproj:
<ItemGroup>
<PackageReference Include="IronWord" Version="2025.5.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="IronWord" Version="2025.5.0" />
</ItemGroup>
No necesitas condiciones de plataforma — IronWord funciona en todos los objetivos automáticamente.
Crear la interfaz de la aplicación en XAML
Añade una UI sencilla para cargar, editar y guardar documentos de Word. Para hacer esto, comience por agregar este código al código MainPage.xml:
<?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="IronWordMauiIOS.MainPage"
BackgroundColor="White">
<VerticalStackLayout Padding="20"
Spacing="15"
VerticalOptions="Center">
<Label Text="IronWord iOS Demo"
FontSize="24"
FontAttributes="Bold"
HorizontalOptions="Center"
TextColor="#222"/>
<Button Text=" Open Word Document"
Clicked="OpenDocx"
BackgroundColor="#007AFF"
TextColor="White"
CornerRadius="10"
HeightRequest="50"/>
<Editor x:Name="docEditor"
Placeholder="Start editing..."
AutoSize="TextChanges"
HeightRequest="250"
FontSize="16"
TextColor="#333"
BackgroundColor="#F9F9F9"
CornerRadius="10"
Margin="0,10,0,0"/>
<Button Text=" Save as .docx"
Clicked="SaveDocx"
BackgroundColor="#34C759"
TextColor="White"
CornerRadius="10"
HeightRequest="50"/>
<Label x:Name="statusLabel"
FontSize="14"
TextColor="Gray"
HorizontalOptions="Center"/>
</VerticalStackLayout>
</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="IronWordMauiIOS.MainPage"
BackgroundColor="White">
<VerticalStackLayout Padding="20"
Spacing="15"
VerticalOptions="Center">
<Label Text="IronWord iOS Demo"
FontSize="24"
FontAttributes="Bold"
HorizontalOptions="Center"
TextColor="#222"/>
<Button Text=" Open Word Document"
Clicked="OpenDocx"
BackgroundColor="#007AFF"
TextColor="White"
CornerRadius="10"
HeightRequest="50"/>
<Editor x:Name="docEditor"
Placeholder="Start editing..."
AutoSize="TextChanges"
HeightRequest="250"
FontSize="16"
TextColor="#333"
BackgroundColor="#F9F9F9"
CornerRadius="10"
Margin="0,10,0,0"/>
<Button Text=" Save as .docx"
Clicked="SaveDocx"
BackgroundColor="#34C759"
TextColor="White"
CornerRadius="10"
HeightRequest="50"/>
<Label x:Name="statusLabel"
FontSize="14"
TextColor="Gray"
HorizontalOptions="Center"/>
</VerticalStackLayout>
</ContentPage>
Esto crea botones y una interfaz de edición para cargar/guardar contenido de Word.
Utilice IronWord en código compartido
En tu MainPage.xaml.cs, implementa la lectura y escritura de documentos DOCX usando IronWord:
using IronWord;
using IronWord.Models;
using Microsoft.Maui.Storage;
using System.Text;
namespace IronWordMauiIOS;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
License.LicenseKey = "YOUR-LICENSE-KEY";
}
private async void OpenDocx(object sender, EventArgs e)
{
try
{
var file = await FilePicker.PickAsync();
if (file == null) return;
var path = Path.Combine(FileSystem.CacheDirectory, file.FileName);
using (var source = await file.OpenReadAsync())
using (var target = File.Create(path))
await source.CopyToAsync(target);
var doc = new WordDocument(path);
docEditor.Text = ExtractText(doc);
statusLabel.Text = "Document loaded successfully.";
}
catch (Exception ex)
{
statusLabel.Text = $"Error: {ex.Message}";
}
}
private async void SaveDocx(object sender, EventArgs e)
{
try
{
var document = new WordDocument();
var paragraph = new Paragraph();
paragraph.Texts.Add(new TextContent(docEditor.Text));
document.Paragraphs.Add(paragraph);
var fileName = $"ExportedDoc_{DateTime.Now:yyyyMMddHHmmss}.docx";
var path = Path.Combine(FileSystem.AppDataDirectory, fileName);
document.SaveAs(path);
statusLabel.Text = $"Saved to: {fileName}";
}
catch (Exception ex)
{
statusLabel.Text = $"Save error: {ex.Message}";
}
}
private string ExtractText(WordDocument doc)
{
var sb = new StringBuilder();
foreach (var para in doc.Paragraphs)
{
foreach (var element in para.Texts)
{
if (element is TextContent text)
sb.AppendLine(text.Text);
}
}
return sb.ToString();
}
}
using IronWord;
using IronWord.Models;
using Microsoft.Maui.Storage;
using System.Text;
namespace IronWordMauiIOS;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
License.LicenseKey = "YOUR-LICENSE-KEY";
}
private async void OpenDocx(object sender, EventArgs e)
{
try
{
var file = await FilePicker.PickAsync();
if (file == null) return;
var path = Path.Combine(FileSystem.CacheDirectory, file.FileName);
using (var source = await file.OpenReadAsync())
using (var target = File.Create(path))
await source.CopyToAsync(target);
var doc = new WordDocument(path);
docEditor.Text = ExtractText(doc);
statusLabel.Text = "Document loaded successfully.";
}
catch (Exception ex)
{
statusLabel.Text = $"Error: {ex.Message}";
}
}
private async void SaveDocx(object sender, EventArgs e)
{
try
{
var document = new WordDocument();
var paragraph = new Paragraph();
paragraph.Texts.Add(new TextContent(docEditor.Text));
document.Paragraphs.Add(paragraph);
var fileName = $"ExportedDoc_{DateTime.Now:yyyyMMddHHmmss}.docx";
var path = Path.Combine(FileSystem.AppDataDirectory, fileName);
document.SaveAs(path);
statusLabel.Text = $"Saved to: {fileName}";
}
catch (Exception ex)
{
statusLabel.Text = $"Save error: {ex.Message}";
}
}
private string ExtractText(WordDocument doc)
{
var sb = new StringBuilder();
foreach (var para in doc.Paragraphs)
{
foreach (var element in para.Texts)
{
if (element is TextContent text)
sb.AppendLine(text.Text);
}
}
return sb.ToString();
}
}
Imports IronWord
Imports IronWord.Models
Imports Microsoft.Maui.Storage
Imports System.Text
Namespace IronWordMauiIOS
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
License.LicenseKey = "YOUR-LICENSE-KEY"
End Sub
Private Async Sub OpenDocx(ByVal sender As Object, ByVal e As EventArgs)
Try
Dim file = Await FilePicker.PickAsync()
If file Is Nothing Then
Return
End If
Dim path As System.String = System.IO.Path.Combine(FileSystem.CacheDirectory, file.FileName)
Using source = Await file.OpenReadAsync()
Using target = System.IO.File.Create(path)
Await source.CopyToAsync(target)
End Using
End Using
Dim doc = New WordDocument(path)
docEditor.Text = ExtractText(doc)
statusLabel.Text = "Document loaded successfully."
Catch ex As Exception
statusLabel.Text = $"Error: {ex.Message}"
End Try
End Sub
Private Async Sub SaveDocx(ByVal sender As Object, ByVal e As EventArgs)
Try
Dim document = New WordDocument()
Dim paragraph As New Paragraph()
paragraph.Texts.Add(New TextContent(docEditor.Text))
document.Paragraphs.Add(paragraph)
Dim fileName = $"ExportedDoc_{DateTime.Now:yyyyMMddHHmmss}.docx"
Dim path As System.String = System.IO.Path.Combine(FileSystem.AppDataDirectory, fileName)
document.SaveAs(path)
statusLabel.Text = $"Saved to: {fileName}"
Catch ex As Exception
statusLabel.Text = $"Save error: {ex.Message}"
End Try
End Sub
Private Function ExtractText(ByVal doc As WordDocument) As String
Dim sb = New StringBuilder()
For Each para In doc.Paragraphs
For Each element In para.Texts
Dim tempVar As Boolean = TypeOf element Is TextContent
Dim text As TextContent = If(tempVar, CType(element, TextContent), Nothing)
If tempVar Then
sb.AppendLine(text.Text)
End If
Next element
Next para
Return sb.ToString()
End Function
End Class
End Namespace
Descripción general del archivo del proyecto
La estructura de tu proyecto ahora debería incluir:
IronWordMauiIOS/
│
├── MainPage.xaml ← Diseño de la IU
├── MainPage.xaml.cs ← Lógica para la IU (acciones del documento Word)
├── IronWordMauiIOS.csproj ← Referencias al paquete NuGet de IronWord
├── Platforms/ios/ ← Configuración específica de iOS (no se necesitan cambios aquí)
└── ...
Ejecutar el proyecto
- Establece el objetivo en el Simulador de iOS.
- Presiona Ejecutar.
- Prueba la lectura y escritura de documentos .docx directamente en tu dispositivo iOS simulado.
Cumplimiento LOPDGDD en la generación de documentos móviles
Para equipos de desarrollo en empresas mid-market españolas que operan bajo la supervisión de la AEPD, la generación de documentos Word en dispositivos iOS presenta vectores de riesgo específicos en materia de protección de datos. Cuando un documento contiene datos de identificación personal — como el número de DNI o NIE de un cliente, su TIE en caso de residentes extranjeros, o datos de salud con categoría especial según el artículo 9 del RGPD — la aplicación debe implementar un flujo de consentimiento verificable antes de generar el documento.
Un flujo de trabajo conforme con la LOPDGDD para iOS podría estructurarse de la siguiente forma. Antes de que el usuario solicite generar el documento, la aplicación presenta una pantalla de consentimiento granular — separando el consentimiento para el tratamiento del identificador (DNI/NIE) del consentimiento para otros datos del documento. Este registro de consentimiento, junto con su marca de tiempo y el identificador único de la sesión, se almacena de forma cifrada en el sandbox de la app. Cuando se precisa de firma electrónica con nivel de garantía sustancial o elevado conforme a eIDAS, la integración con el sistema Cl@ve de la Administración General del Estado permite vincular la identidad del firmante al documento generado mediante IronWord antes de su envío.
Para aplicaciones que operen en sectores regulados — farmacéutico (bajo la inspección del SEVeM o el SILICIE), financiero (bajo supervisión del Banco de España o la CNMV) o de contratación pública (FACe) — es recomendable que los documentos Word generados en iOS sean convertidos a PDF con perfil PAdES antes de transmitirse a sistemas de backend, dado que este formato garantiza la integridad y no repudio exigidos por el ENS (Esquema Nacional de Seguridad) para documentos electrónicos en la Administración.
Notas finales
- Totalmente multiplataforma (iOS, Android, Windows, macOS)
- No necesita Microsoft Office o Interop
- 100% nativo de C# / .NET MAUI
- Funciona offline
- Excelente para construir editores, constructores de currículum, visores de documentos
- Compatible con flujos de trabajo regulatorios españoles: LOPDGDD, eIDAS, ENS
Preguntas Frecuentes
¿Qué es IronWord y cómo se puede usar en iOS?
IronWord es una poderosa biblioteca diseñada para manejar documentos de Word en aplicaciones .NET, incluyendo iOS. Permite a los desarrolladores crear, manipular y convertir documentos de Word de manera fluida dentro de sus aplicaciones móviles.
¿Cómo integro IronWord en mi proyecto de iOS?
Para integrar IronWord en tu proyecto de iOS, necesitas agregar la biblioteca IronWord a tu solución .NET, configurar tu proyecto para referenciarla y usar las API proporcionadas para gestionar documentos de Word.
¿Cuáles son los requisitos del sistema para usar IronWord en iOS?
IronWord requiere un entorno .NET compatible en tu configuración de desarrollo iOS. Asegúrate de que tu entorno de desarrollo esté actualizado y soporte los marcos necesarios para una integración fluida.
¿Puede IronWord convertir documentos de Word a otros formatos en iOS?
Sí, IronWord puede convertir documentos de Word a varios formatos, como PDF, en tus aplicaciones iOS, permitiendo un manejo y compartición versátil de documentos.
¿Cómo cumple IronWord con la LOPDGDD al generar documentos Word en iOS?
IronWord en sí es una biblioteca de generación de documentos que no accede a datos personales por sí misma. Para cumplir con la LOPDGDD al generar documentos que contengan datos personales (DNI, NIE, TIE), el desarrollador debe implementar flujos de consentimiento antes de la generación del documento y almacenar los registros de consentimiento de forma cifrada en el sandbox de la app iOS, conforme a las recomendaciones de la AEPD.
¿Es posible integrar IronWord en iOS con el sistema Cl@ve para firma electrónica eIDAS?
Sí. IronWord genera el documento Word/DOCX que puede ser posteriormente convertido a PDF y firmado con un certificado de la FNMT u otra autoridad reconocida bajo eIDAS. La integración con Cl@ve se implementa en la capa de la aplicación, no en IronWord directamente. El flujo típico es: generar DOCX con IronWord → convertir a PDF → firmar con PAdES mediante un procesador de firma compatible con eIDAS.
¿Qué debo tener en cuenta al usar IronWord en iOS para sectores regulados como banca o farmacia en España?
Para sectores supervisados por el Banco de España, la CNMV, el SEVeM o bajo el SILICIE, los documentos Word generados en iOS con IronWord deben cumplir con los requisitos de conservación documental específicos del sector. Se recomienda convertir los documentos a PDF con perfil PAdES antes de su archivo o transmisión, y mantener registros de auditoría del proceso de generación que puedan ser presentados ante inspectores del ENS o de la AEPD.
¿Hay proyectos de muestra disponibles para utilizar IronWord en iOS?
Sí, Iron Software proporciona proyectos de muestra y documentación para ayudar a los desarrolladores a comenzar rápidamente con IronWord en iOS, mostrando varias características y casos de uso.
¿Requiere IronWord alguna licencia adicional para el despliegue en iOS?
IronWord requiere una licencia válida para el despliegue en entornos de producción, incluidas las aplicaciones iOS. Asegúrate de revisar los términos de la licencia para cumplir con las pautas de uso.

