Envío de SMS en Swift (iOS/macOS): biblioteca MessageUI y alternativas

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): descripción general de bibliotecas y API



En el desarrollo móvil moderno, la capacidad de enviar mensajes SMS sigue siendo una función demandada: desde la verificación del número de teléfono hasta notificaciones masivas. En el ecosistema de Apple (iOS/macOS) con el lenguaje Swift, existen varios enfoques, desde el integrado MessageUI hasta la integración con proveedores de SMS en la nube. En este artículo, analizaremos las principales bibliotecas y API, sus ventajas y limitaciones, y proporcionaremos ejemplos prácticos de código.



1. Biblioteca integrada MessageUI



La forma más sencilla es utilizar el framework MessageUI, disponible en iOS y macOS. Permite invocar la interfaz estándar de envío de SMS (a través de MFMessageComposeViewController) sin necesidad de conectar SDK de terceros.



Capacidades:

  • Envío de SMS a través de la aplicación del sistema «Mensajes».
  • Soporte para archivos adjuntos (imágenes, videos, contactos).
  • No requiere registro en un proveedor.


Limitaciones:

  • Solo funciona en dispositivos físicos (no en el simulador).
  • El usuario ve la interfaz y confirma el envío.
  • No es adecuado para envío automático (del lado del servidor).


Ejemplo de código en Swift (iOS):

import MessageUIimport UIKit

class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {

@IBAction func sendSMSTapped(_ sender: UIButton) { guard MFMessageComposeViewController.canSendText() else { print("El dispositivo no soporta el envío de SMS") return } let messageVC = MFMessageComposeViewController() messageVC.body = "¡Hola! Este es un SMS de prueba desde Swift." messageVC.recipients = ["+59123456789"] messageVC.messageComposeDelegate = self present(messageVC, animated: true, completion: nil) }

func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { switch result { case .sent: print("SMS enviado") case .cancelled: print("Cancelado por el usuario") case .failed: print("Error al enviar") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}


Para macOS se utiliza NSSharingService con el tipo .composeMessage, pero su funcionalidad es limitada.



2. Twilio — API en la nube para SMS



Twilio es uno de los servicios más populares para el envío programático de SMS. La integración en una aplicación Swift se realiza a través de la API REST o el cliente oficial de Swift twilio-swift.



Ventajas:

  • Alta velocidad de entrega, soporte en más de 100 países.
  • Posibilidad de envío sin intervención del usuario (lógica del lado del servidor).
  • Configuración flexible: remitente, plantillas, webhooks.


Ejemplo de envío mediante URLSession:

import Foundation

func sendSMSviaTwilio(to phoneNumber: String, message: String) { let accountSID = "YOUR_ACCOUNT_SID" let authToken = "YOUR_AUTH_TOKEN" let fromNumber = "+1234567890" // su número de Twilio let urlString = "https://api.twilio.com/2010-04-01/Accounts/\\(accountSID)/Messages.json" guard let url = URL(string: urlString) else { return } var request = URLRequest(url: url) request.httpMethod = "POST" let loginString = "\\(accountSID):\\(authToken)" guard let loginData = loginString.data(using: .utf8) else { return } let base64Login = loginData.base64EncodedString() request.setValue("Basic \\(base64Login)", forHTTPHeaderField: "Authorization") let bodyParams = "To=\\(phoneNumber)&From=\\(fromNumber)&Body=\\(message)"

Recommendations