Envío de SMS en Swift (iOS/macOS): API de la biblioteca MessageUI

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de SMS en Swift (iOS/macOS): API de la biblioteca MessageUI



En el desarrollo móvil moderno, la capacidad de enviar SMS directamente desde la aplicación sigue siendo una función solicitada. En las plataformas de Apple (iOS y macOS), esta tarea la resuelve la biblioteca integrada MessageUI.framework. Proporciona una interfaz conveniente para crear y enviar mensajes de texto, sin necesidad de conectar servicios de terceros. En este artículo, analizaremos en detalle cómo usar la API de MessageUI para enviar SMS en Swift, veremos ejemplos de código, manejo de errores y particularidades de funcionamiento en diferentes dispositivos.



¿Qué es MessageUI.framework?

MessageUI es un framework de sistema de Apple que permite a las aplicaciones integrarse con la aplicación integrada «Mensajes». La clase principal para trabajar con SMS es MFMessageComposeViewController. Proporciona un controlador de UI listo para redactar y enviar mensajes. Es importante señalar que esta API solo funciona en dispositivos reales con una tarjeta SIM activa (para iOS) o en Mac con iMessage configurado (macOS 10.15+). En el simulador, la funcionalidad no está disponible.



Preparación del proyecto

Para usar MessageUI es necesario:

  • Conectar el framework MessageUI al proyecto (normalmente ya está en la biblioteca estándar).
  • Añadir la importación en el archivo donde se llamará al envío: import MessageUI.
  • Asegurarse de que el dispositivo puede enviar SMS — verificar mediante MFMessageComposeViewController.canSendText().


Ejemplo básico de envío de SMS

Veamos un ejemplo muy simple: crear un controlador, establecer el destinatario y el texto, y luego mostrarlo.



import UIKitimport MessageUI

class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {

@IBAction func sendSMSTapped(_ sender: UIButton) { // Verificamos si el dispositivo puede enviar SMS guard MFMessageComposeViewController.canSendText() else { print("El dispositivo no soporta el envío de SMS") return }

// Creamos una instancia del controlador let messageVC = MFMessageComposeViewController() messageVC.messageComposeDelegate = self

// Establecemos el destinatario messageVC.recipients = ["+79991234567"]

// Establecemos el texto del mensaje messageVC.body = "¡Hola! Este es un mensaje de prueba desde mi aplicación."

// Mostramos el controlador present(messageVC, animated: true, completion: nil) }

// MARK: - MFMessageComposeViewControllerDelegate func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { // Cerramos el controlador después de enviar/cancelar dismiss(animated: true, completion: nil)

// Procesamos el resultado switch result { case .sent: print("Mensaje enviado exitosamente") case .cancelled: print("Envío cancelado por el usuario") case .failed: print("Error al enviar el mensaje") @unknown default: print("Resultado desconocido") } }}


En este código:

  • Verificamos la posibilidad de envío con canSendText().
  • Creamos un MFMessageComposeViewController y configuramos los destinatarios y el cuerpo del mensaje.
  • Establecemos el delegado (messageComposeDelegate) para manejar el resultado.
  • En el método del delegado manejamos cuatro posibles resultados: enviado, cancelado, error, estado desconocido.


Funcionalidades adicionales

MessageUI no solo soporta texto simple, sino también archivos adjuntos:



// Añadir un archivo adjunto (por ejemplo, una imagen)if let imageData = UIImage(named: "photo")?.pngData() {    messageVC.addAttachmentD                    

Recommendations