iOS Simulator: qué es y cómo funciona en Xcode

Autor: IT Sectr Publicado: 2026-02-09 Tiempo de lectura: 8 min

Xcode Simulator es una herramienta integrada de Apple que ejecuta aplicaciones iOS en un Mac sin necesidad de un dispositivo físico. El simulador compila el código para la arquitectura x86_64 del host, lo que proporciona una alta velocidad de prueba. Documentación de Apple describe el ciclo completo de depuración usando el simulador para iPhone, iPad, Apple Watch y Apple TV.

Puntos clave

  • Xcode Simulator — emulación de un dispositivo iOS a nivel de aplicación sin emulación completa de la arquitectura ARM
  • Diferencia con un dispositivo real — el simulador no admite cámara, GPU Metal, sensores ni notificaciones push (antes de Xcode 11.4)
  • TARGET_OS_SIMULATOR — directiva para verificar el entorno de ejecución en código Objective-C y Swift
  • Pruebas unitarias y de UI — el simulador admite el conjunto completo de XCTest con capacidad de ejecución en servidores CI
  • Múltiples plataformas — el simulador admite iPhone, iPad, Apple Watch, Apple TV y Vision Pro

¿Qué es Simulator en Xcode?

Xcode Simulator es una herramienta para ejecutar y depurar aplicaciones iOS directamente en un Mac. A diferencia del emulador de Android, el simulador de Apple no emula el procesador ARM del dispositivo. En su lugar, el código se compila en código máquina de la arquitectura del host (x86_64 en Intel Mac o arm64 en Apple Silicon).

El simulador utiliza los frameworks de iOS directamente desde el SDK, proporcionando acceso a UIKit, SwiftUI, Foundation y Core Data. Según Apple (WWDC 2024), más del 90% de los desarrolladores usan el simulador durante la etapa de desarrollo, conectando dispositivos físicos solo para las pruebas finales.

Cada versión de Xcode incluye un conjunto de simuladores para diferentes modelos de dispositivos y versiones de iOS. Por ejemplo, Xcode 16 incluye simuladores para iPhone 16 Pro con iOS 18, iPad Pro M4 con iPadOS 18, Apple Watch Series 10 y Apple TV 4K.

Instalación y ejecución del simulador

El simulador se instala junto con Xcode desde Mac App Store. Para agregar versiones adicionales de iOS, use el menú Settings → Platforms. Seleccione un simulador en el esquema de compilación (Scheme) y presione Run. Alternativamente, ejecute el simulador a través del menú Xcode → Open Developer Tool → Simulator.

swift
// Verificación de la versión mínima de iOS para el simulador
if #available(iOS 18.0, *) {
    print("API de iOS 18 disponibles")
}

Diferencias entre el simulador y el dispositivo real

Comprender las diferencias entre el simulador y un dispositivo real es fundamental para realizar pruebas de calidad. Las principales diferencias radican en la arquitectura del procesador, las capacidades del hardware y el rendimiento gráfico.

CaracterísticaSimuladorDispositivo real
Arquitectura de CPUx86_64 / arm64 (Mac)ARM64 (Apple Silicon)
GPU MetalSimulación a través de GPU MacGPU Apple nativa
CámaraNo disponibleCompleta
Acelerómetro/GiroscopioNo disponibleSensores de hardware
Touch ID / Face IDSimulación a través del menúBiometría de hardware
Notificaciones pushDesde Xcode 11.4 (archivo .apns)Servidor APNs
Bluetooth LENo compatiblePila completa

El rendimiento en el simulador suele ser superior al de un dispositivo real, ya que utiliza el potente procesador del Mac. Esto crea una falsa impresión de velocidad. Las animaciones, las operaciones con Core Data y las solicitudes de red en un dispositivo real pueden funcionar más lentamente.

Cuándo es obligatorio probar en un dispositivo

Asegúrese de ejecutar la aplicación en un dispositivo real antes del lanzamiento. Escenarios críticos: cámara y AVFoundation, Bluetooth y CoreBluetooth, notificaciones push a través de APNs, operaciones del sistema de archivos en App Sandbox, rendimiento de gráficos en Metal y consumo de energía de la batería.

Verificación de TARGET_OS_SIMULATOR en el código

Para la compilación condicional de código para el simulador, Apple proporciona TARGET_OS_SIMULATOR en Objective-C y targetEnvironment(simulator) en Swift. Esta verificación permite agregar registros de depuración, objetos simulados o deshabilitar código dependiente del hardware.

swift
import UIKit

class CameraViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        #if targetEnvironment(simulator)
        showMockCameraPreview()
        print("Simulador: usando cámara simulada")
        #else
        setupRealCameraSession()
        #endif
    }
}

En Objective-C, la directiva #if TARGET_OS_SIMULATOR funciona de manera similar. Úsela para deshabilitar el código que requiere sensores de hardware o cámara. En el momento de la compilación para el simulador, este código no se incluye en el archivo binario.

objective-c
#if TARGET_OS_SIMULATOR
NSLog(@"Ejecución en simulador — cámara no disponible");
self.cameraButton.hidden = YES;
#else
self.cameraButton.hidden = NO;
#endif

Casos de uso típicos de la verificación

La verificación TARGET_OS_SIMULATOR se utiliza en tres casos: sustituir la cámara por un objeto simulado durante las pruebas de UI, deshabilitar Core Bluetooth para acelerar el desarrollo y registrar información de depuración que no debe llegar a la compilación de publicación. Evite usar la verificación para cambiar la lógica de negocio, ya que esto puede provocar errores en un dispositivo real.

Ejecución de pruebas en el simulador

Xcode Simulator admite el conjunto completo de pruebas XCTest: pruebas unitarias (XCTestCase), pruebas de UI (XCUITestCase) y pruebas de rendimiento. Las pruebas en el simulador no requieren un certificado de desarrollador firmado, lo que simplifica la configuración de CI/CD.

swift
import XCTest

final class LoginTests: XCTestCase {
    var app: XCUIApplication!
    
    override func setUp() {
        continueAfterFailure = false
        app = XCUIApplication()
        app.launch()
    }
    
    func testLoginButtonExists() {
        XCTAssertTrue(app.buttons["loginButton"].exists)
    }
    
    func testEmptyEmailValidation() {
        app.textFields["emailField"].tap()
        app.buttons["loginButton"].tap()
        let errorLabel = app.staticTexts["errorMessage"]
        XCTAssertTrue(errorLabel.exists)
    }
}

Para ejecutar pruebas desde la línea de comandos, use xcodebuild test especificando el esquema y el simulador. El parámetro -destination define el simulador específico en el que se ejecutarán las pruebas.

bash
# Ejecución de pruebas unitarias en simulador iPhone 16, iOS 18
xcodebuild test \
  -scheme "MyApp" \
  -destination "platform=iOS Simulator,name=iPhone 16,OS=18.0" \
  -testPlan "AllTests"

Limitaciones y problemas comunes

A pesar de su comodidad, Xcode Simulator tiene una serie de limitaciones que pueden provocar errores en un dispositivo real. La más crítica es la falta de emulación ARM: el código se compila para la arquitectura del host y el comportamiento de algunas operaciones puede diferir.

Core Data y el sistema de archivos funcionan más rápido en el simulador debido al SSD del Mac. En un dispositivo real con memoria NAND, la velocidad de lectura/escritura es menor. Pruebe el rendimiento de Core Data en un dispositivo antes del lanzamiento, especialmente para conjuntos de datos grandes.

La verificación del consumo de energía en el simulador es imposible: el simulador se alimenta del Mac. Los modos en segundo plano, incluida la carga de contenido y las operaciones de fetch, se comportan de manera diferente en un dispositivo real debido a las limitaciones de la batería y al Background Task Scheduler.

Sensores de hardware y biometría

El simulador no tiene acceso a los sensores de hardware del iPhone. Face ID y Touch ID se pueden simular a través del menú del simulador: Features → Face ID → Matching Face. El acelerómetro, el giroscopio y el barómetro no están disponibles; el código que depende de CMDeviceMotion debe probarse en un dispositivo. Para Core Location, puede establecer coordenadas mediante Debug → Simulate Location seleccionando un archivo GPX.

La verificación de iCloud y StoreKit en el simulador también es limitada. StoreKit Test permite simular compras sin un App Store Connect real, pero la verificación del entorno Sandbox y las compras de producción requiere un dispositivo físico. La sincronización de iCloud Drive y CloudKit en el simulador funciona incorrectamente; Apple recomienda probar estos escenarios solo en dispositivos reales.

Simulador en Apple Silicon Mac

En Mac con procesadores de la serie M, el simulador funciona de manera fundamentalmente diferente: el código se compila en ARM64 nativo, como en un iPhone real, en lugar de x86_64. Esto reduce significativamente la brecha entre el simulador y el dispositivo. Las aplicaciones que se ejecutan en el simulador Apple Silicon usan las mismas instrucciones ARM que en un iPhone físico, lo que hace que las pruebas de rendimiento sean más representativas. La diferencia en el rendimiento de Metal y Core Animation entre el simulador de la serie M y un iPhone real es mínima en comparación con el simulador Intel.

Configuración del simulador para CI

La configuración de un simulador para CI requiere crear previamente el dispositivo y la versión de iOS necesarios. En los servidores de integración continua, los simuladores no se crean automáticamente; deben agregarse mediante xcrun simctl create antes de ejecutar las pruebas.

bash
# Crear simulador para CI
xcrun simctl create \
  "iPhone 16 CI" \
  "com.apple.CoreSimulator.SimDeviceType.iPhone-16" \
  "com.apple.CoreSimulator.SimRuntime.iOS-18-0"

# Ejecutar pruebas en el simulador creado
xcodebuild test \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -destination "id=$(xcrun simctl list devices | grep 'iPhone 16 CI' | awk -F'[][]' '{print }')"

Para pruebas en paralelo en CI, configure varios simuladores con diferentes versiones de iOS. Xcode Cloud, GitHub Actions y Bitrise admiten la ejecución paralela de pruebas, lo que reduce el tiempo de ejecución entre 2 y 3 veces. Asegúrese de que todos los simuladores de iOS necesarios para las pruebas estén instalados en el servidor CI.

Preguntas frecuentes

¿En qué se diferencia Xcode Simulator de un dispositivo real?

El simulador funciona en la arquitectura x86_64 y usa la CPU del Mac, mientras que un dispositivo real funciona en ARM64 Apple Silicon. El simulador no emula la cámara, los sensores, la GPU Metal, Bluetooth LE ni la batería. El código se compila para la arquitectura del host, por lo que las pruebas de rendimiento en el simulador no son representativas.

¿Cómo verificar en el código si la aplicación se ejecuta en el simulador?

Use #if targetEnvironment(simulator) en Swift o #if TARGET_OS_SIMULATOR en Objective-C. Estas son directivas de compilación condicional: el código en el bloque se ejecuta solo en el simulador. Es útil para objetos simulados de cámara y registros de depuración no disponibles en un dispositivo real.

¿Se pueden probar las notificaciones push en el simulador?

Sí, a partir de Xcode 11.4, el simulador admite la simulación de notificaciones push a través de un archivo .apns con estructura JSON. Arrastre el archivo al simulador en ejecución o use el comando xcrun simctl push. Las notificaciones se muestran completamente como en un dispositivo real.

¿Cuáles son las limitaciones de Xcode Simulator?

El simulador no admite cámara, micrófono, acelerómetro, giroscopio, TrueDepth, Touch ID (excepto simulación), Face ID (excepto simulación), Bluetooth LE ni NFC. El rendimiento de Metal se simula en la GPU del Mac, lo que no refleja el rendimiento real del iPhone. El consumo de energía no se puede medir.

¿Cómo ejecutar pruebas en CI usando el simulador?

Cree un simulador mediante xcrun simctl create, luego ejecute xcodebuild test con el parámetro -destination especificando platform=iOS Simulator y el nombre del dispositivo. Para pruebas en paralelo, cree varios simuladores con diferentes versiones de iOS en la configuración de CI.

Resumen

  • Xcode Simulator — herramienta para ejecutar aplicaciones iOS en un Mac, compilando código para la arquitectura del host sin emulación ARM
  • Diferencias con el dispositivo — el simulador no admite cámara, GPU Metal, sensores, Bluetooth, NFC ni proporciona un rendimiento representativo
  • Compilación condicional — TARGET_OS_SIMULATOR y targetEnvironment(simulator) permiten agregar objetos simulados y registros de depuración
  • Pruebas — XCTest admite pruebas unitarias, de UI y de rendimiento en el simulador sin certificado de desarrollador
  • Configuración de CI — cree simuladores mediante xcrun simctl y ejecute pruebas paralelas en múltiples versiones de iOS
  • Escenarios críticos — cámara, Bluetooth, notificaciones push y rendimiento de Metal requieren pruebas en un dispositivo real
  • Apple Silicon Mac — el simulador en la serie M ejecuta aplicaciones iOS con diferencias arquitectónicas mínimas

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también