iOS Simulator: o que é e como funciona no Xcode

Autor: IT Sectr Publicado: 2026-02-09 Tempo de leitura: 8 min

Xcode Simulator é uma ferramenta integrada da Apple que executa aplicativos iOS em um Mac sem um dispositivo físico. O simulador compila o código para a arquitetura x86_64 do host, proporcionando alta velocidade de teste. Documentação da Apple descreve o ciclo completo de depuração usando o simulador para iPhone, iPad, Apple Watch e Apple TV.

Principais pontos

  • Xcode Simulator — emulação de dispositivo iOS ao nível de aplicação sem emulação completa da arquitetura ARM
  • Diferença do dispositivo real — o simulador não suporta câmara, GPU Metal, sensores e notificações push (antes do Xcode 11.4)
  • TARGET_OS_SIMULATOR — diretiva para verificar o ambiente de execução em código Objective-C e Swift
  • Testes unitários e de UI — o simulador suporta o conjunto completo XCTest com capacidade de execução em servidores CI
  • Múltiplas plataformas — o simulador suporta iPhone, iPad, Apple Watch, Apple TV e Vision Pro

O que é o Simulator no Xcode?

Xcode Simulator é uma ferramenta para executar e depurar aplicações iOS diretamente no Mac. Ao contrário do emulador Android, o simulador da Apple não emula o processador ARM do dispositivo. Em vez disso, o código é compilado para código de máquina da arquitetura do host (x86_64 no Intel Mac ou arm64 no Apple Silicon).

O simulador usa as frameworks iOS diretamente do SDK, fornecendo acesso a UIKit, SwiftUI, Foundation e Core Data. De acordo com a Apple (WWDC 2024), mais de 90% dos desenvolvedores usam o simulador durante a fase de desenvolvimento, conectando dispositivos físicos apenas para testes finais.

Cada versão do Xcode inclui um conjunto de simuladores para diferentes modelos de dispositivos e versões iOS. Por exemplo, o Xcode 16 contém simuladores para iPhone 16 Pro com iOS 18, iPad Pro M4 com iPadOS 18, Apple Watch Series 10 e Apple TV 4K.

Instalação e execução do simulador

O simulador é instalado juntamente com o Xcode a partir da Mac App Store. Para adicionar versões iOS adicionais, use o menu Settings → Platforms. Selecione um simulador no esquema de compilação (Scheme) e pressione Run. Alternativamente, execute o simulador através do menu Xcode → Open Developer Tool → Simulator.

swift
// Verificar versão mínima do iOS para o simulador
if #available(iOS 18.0, *) {
    print("APIs iOS 18 disponíveis")
}

Diferenças entre o simulador e o dispositivo real

Compreender as diferenças entre o simulador e um dispositivo real é criticamente importante para testes de qualidade. As principais diferenças residem na arquitetura do processador, capacidades de hardware e desempenho gráfico.

CaracterísticaSimuladorDispositivo real
Arquitetura CPUx86_64 / arm64 (Mac)ARM64 (Apple Silicon)
GPU MetalSimulação através da GPU do MacGPU Apple nativa
CâmaraIndisponívelCompleta
Acelerómetro/GiroscópioIndisponívelSensores de hardware
Touch ID / Face IDSimulação através do menuBiometria de hardware
Notificações pushDesde o Xcode 11.4 (ficheiro .apns)Servidor APNs
Bluetooth LENão suportadoStack completo

O desempenho no simulador é geralmente superior ao de um dispositivo real, pois utiliza o processador potente do Mac. Isto cria uma falsa impressão de velocidade. As animações, operações Core Data e pedidos de rede num dispositivo real podem funcionar mais lentamente.

Quando é obrigatório testar num dispositivo

Certifique-se de executar a aplicação num dispositivo real antes do lançamento. Cenários críticos: câmara e AVFoundation, Bluetooth e CoreBluetooth, notificações push através de APNs, operações do sistema de ficheiros em App Sandbox, desempenho gráfico em Metal e consumo de energia da bateria.

Verificação de TARGET_OS_SIMULATOR no código

Para compilação condicional de código para o simulador, a Apple fornece TARGET_OS_SIMULATOR em Objective-C e targetEnvironment(simulator) em Swift. Esta verificação permite adicionar registos de depuração, objetos simulados ou desativar código dependente de 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
    }
}

Em Objective-C, a diretiva #if TARGET_OS_SIMULATOR funciona de forma semelhante. Use-a para desativar código que requer sensores de hardware ou câmara. No momento da compilação para o simulador, este código não entra no ficheiro binário.

objective-c
#if TARGET_OS_SIMULATOR
NSLog(@"Execução no simulador — câmara indisponível");
self.cameraButton.hidden = YES;
#else
self.cameraButton.hidden = NO;
#endif

Casos de uso típicos da verificação

A verificação TARGET_OS_SIMULATOR é utilizada em três casos: substituir a câmara por um objeto simulado durante testes de UI, desativar Core Bluetooth para acelerar o desenvolvimento e registar informações de depuração que não devem chegar à versão de lançamento. Evite usar a verificação para alterar a lógica de negócio — isto pode causar erros num dispositivo real.

Execução de testes no simulador

Xcode Simulator suporta o conjunto completo de testes XCTest: testes unitários (XCTestCase), testes de UI (XCUITestCase) e testes de desempenho. Testar no simulador não requer um certificado de programador assinado, o que simplifica a configuração 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 executar testes a partir da linha de comandos, use xcodebuild test com o esquema e simulador especificados. O parâmetro -destination define o simulador específico no qual os testes serão executados.

bash
# Executar testes unitários no simulador iPhone 16, iOS 18
xcodebuild test \
  -scheme "MyApp" \
  -destination "platform=iOS Simulator,name=iPhone 16,OS=18.0" \
  -testPlan "AllTests"

Limitações e armadilhas

Apesar da sua conveniência, o Xcode Simulator tem várias limitações que podem levar a erros num dispositivo real. A mais crítica é a falta de emulação ARM: o código é compilado para a arquitetura do host e o comportamento de algumas operações pode diferir.

Core Data e sistema de ficheiros funcionam mais rapidamente no simulador devido ao SSD do Mac. Num dispositivo real com memória NAND, a velocidade de leitura/escrita é menor. Teste o desempenho do Core Data num dispositivo antes do lançamento, especialmente para grandes conjuntos de dados.

Verificar o consumo de energia no simulador é impossível — o simulador é alimentado pelo Mac. Os modos em segundo plano, incluindo carregamento de conteúdo e operações fetch, comportam-se de forma diferente num dispositivo real devido às limitações da bateria e ao Background Task Scheduler.

Sensores de hardware e biometria

O simulador não tem acesso aos sensores de hardware do iPhone. Face ID e Touch ID podem ser simulados através do menu do simulador: Features → Face ID → Matching Face. Acelerómetro, giroscópio e barómetro não estão disponíveis — o código que depende de CMDeviceMotion precisa ser testado num dispositivo. Para Core Location, pode definir coordenadas através de Debug → Simulate Location selecionando um ficheiro GPX.

A verificação de iCloud e StoreKit no simulador também é limitada. O StoreKit Test permite simular compras sem um App Store Connect real, mas a verificação do ambiente Sandbox e das compras de produção requer um dispositivo físico. A sincronização do iCloud Drive e CloudKit no simulador funciona incorretamente — a Apple recomenda testar estes cenários apenas em dispositivos reais.

Simulador no Apple Silicon Mac

Em Macs com processadores da série M, o simulador funciona de forma fundamentalmente diferente: o código é compilado em ARM64 nativo, como num iPhone real, em vez de x86_64. Isto reduz significativamente a lacuna entre o simulador e o dispositivo. As aplicações executadas no simulador Apple Silicon usam as mesmas instruções ARM que num iPhone físico, tornando os testes de desempenho mais representativos. A diferença no desempenho de Metal e Core Animation entre o simulador da série M e um iPhone real é mínima em comparação com o simulador Intel.

Configuração do simulador para CI

Configurar um simulador para CI requer a criação prévia do dispositivo e versão iOS necessários. Em servidores de Integração Contínua, os simuladores não são criados automaticamente — precisam de ser adicionados através de xcrun simctl create antes de executar os testes.

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

# Executar testes no simulador criado
xcodebuild test \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -destination "id=$(xcrun simctl list devices | grep 'iPhone 16 CI' | awk -F'[][]' '{print }')"

Para testes paralelos em CI, configure vários simuladores com diferentes versões iOS. O Xcode Cloud, GitHub Actions e Bitrise suportam execução paralela de testes, reduzindo o tempo de execução em 2-3 vezes. Certifique-se de que todos os simuladores iOS necessários para teste estão instalados no servidor CI.

Perguntas frequentes

Como o Xcode Simulator difere de um dispositivo real?

O simulador funciona na arquitetura x86_64 e usa a CPU do Mac, enquanto um dispositivo real funciona em ARM64 Apple Silicon. O simulador não emula a câmara, sensores, GPU Metal, Bluetooth LE ou bateria. O código é compilado para a arquitetura do host, pelo que os testes de desempenho no simulador não são representativos.

Como verificar no código se a aplicação está a executar no simulador?

Use #if targetEnvironment(simulator) em Swift ou #if TARGET_OS_SIMULATOR em Objective-C. Estas são diretivas de compilação condicional: o código no bloco executa apenas no simulador. Útil para objetos simulados de câmara e registos de depuração indisponíveis num dispositivo real.

É possível testar notificações push no simulador?

Sim, a partir do Xcode 11.4, o simulador suporta simulação de notificações push através de um ficheiro .apns com estrutura JSON. Arraste o ficheiro para o simulador em execução ou use o comando xcrun simctl push. As notificações aparecem completamente como num dispositivo real.

Quais são as limitações do Xcode Simulator?

O simulador não suporta câmara, microfone, acelerómetro, giroscópio, TrueDepth, Touch ID (exceto simulação), Face ID (exceto simulação), Bluetooth LE e NFC. O desempenho Metal é simulado na GPU do Mac, o que não reflete o desempenho real do iPhone. O consumo de energia não pode ser medido.

Como executar testes em CI usando o simulador?

Crie um simulador através de xcrun simctl create, depois execute xcodebuild test com o parâmetro -destination especificando platform=iOS Simulator e o nome do dispositivo. Para testes paralelos, crie vários simuladores com diferentes versões iOS na configuração CI.

Resumo

  • Xcode Simulator — ferramenta para executar aplicações iOS num Mac, compilando código para a arquitetura do host sem emulação ARM
  • Diferenças do dispositivo — o simulador não suporta câmara, GPU Metal, sensores, Bluetooth, NFC e não fornece desempenho representativo
  • Compilação condicional — TARGET_OS_SIMULATOR e targetEnvironment(simulator) permitem adicionar objetos simulados e registos de depuração
  • Testes — XCTest suporta testes unitários, de UI e de desempenho no simulador sem certificado de programador
  • Configuração CI — crie simuladores através de xcrun simctl e execute testes paralelos em várias versões iOS
  • Cenários críticos — câmara, Bluetooth, notificações push e desempenho Metal requerem teste num dispositivo real
  • Apple Silicon Mac — o simulador na série M executa aplicações iOS com diferenças arquiteturais mínimas

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também