Xcode Simulator ist ein integriertes Apple-Tool, das iOS-Apps auf einem Mac ohne physisches Gerät ausführt. Der Simulator kompiliert den Code für die x86_64-Architektur des Hosts, was eine hohe Testgeschwindigkeit ermöglicht. Apple-Dokumentation beschreibt den vollständigen Debugging-Zyklus mit dem Simulator für iPhone, iPad, Apple Watch und Apple TV.
Wichtige Punkte
Xcode Simulator ist ein Tool zum Ausführen und Debuggen von iOS-Anwendungen direkt auf dem Mac. Anders als der Android-Emulator emuliert der Apple-Simulator nicht den ARM-Prozessor des Geräts. Stattdessen wird der Code in den Maschinencode der Host-Architektur (x86_64 auf Intel Mac oder arm64 auf Apple Silicon) kompiliert.
Der Simulator verwendet iOS-Frameworks direkt aus dem SDK und bietet Zugriff auf UIKit, SwiftUI, Foundation und Core Data. Laut Apple (WWDC 2024) verwenden über 90 % der Entwickler den Simulator in der Entwicklungsphase und schließen physische Geräte nur für abschließende Tests an.
Jede Version von Xcode enthält eine Reihe von Simulatoren für verschiedene Gerätemodelle und iOS-Versionen. Beispielsweise enthält Xcode 16 Simulatoren für iPhone 16 Pro mit iOS 18, iPad Pro M4 mit iPadOS 18, Apple Watch Series 10 und Apple TV 4K.
Der Simulator wird zusammen mit Xcode aus dem Mac App Store installiert. Um zusätzliche iOS-Versionen hinzuzufügen, verwenden Sie das Menü Settings → Platforms. Wählen Sie einen Simulator im Build-Schema (Scheme) aus und drücken Sie Run. Alternativ starten Sie den Simulator über das Menü Xcode → Open Developer Tool → Simulator.
// Überprüfung der Mindest-iOS-Version für den Simulator
if #available(iOS 18.0, *) {
print("iOS 18 APIs verfügbar")
}Das Verständnis der Unterschiede zwischen Simulator und realem Gerät ist für qualitativ hochwertige Tests von entscheidender Bedeutung. Die Hauptunterschiede liegen in der Prozessorarchitektur, den Hardware-Fähigkeiten und der Grafikleistung.
| Eigenschaft | Simulator | Reales Gerät |
|---|---|---|
| CPU-Architektur | x86_64 / arm64 (Mac) | ARM64 (Apple Silicon) |
| GPU Metal | Simulation über Mac GPU | Native Apple GPU |
| Kamera | Nicht verfügbar | Vollständig |
| Beschleunigungssensor/Gyroskop | Nicht verfügbar | Hardware-Sensoren |
| Touch ID / Face ID | Simulation über Menü | Hardware-Biometrie |
| Push-Benachrichtigungen | Seit Xcode 11.4 (.apns-Datei) | APNs-Server |
| Bluetooth LE | Nicht unterstützt | Vollständiger Stack |
Die Leistung im Simulator ist in der Regel höher als auf einem realen Gerät, da der leistungsstarke Prozessor des Macs genutzt wird. Dies erzeugt einen falschen Eindruck von Geschwindigkeit. Animationen, Core Data-Operationen und Netzwerkanfragen können auf einem realen Gerät langsamer sein.
Stellen Sie sicher, dass Sie die Anwendung vor der Veröffentlichung auf einem realen Gerät ausführen. Kritische Szenarien: Kamera und AVFoundation, Bluetooth und CoreBluetooth, Push-Benachrichtigungen über APNs, Dateisystemoperationen in App Sandbox, Grafikleistung in Metal und Batteriestromverbrauch.
Für die bedingte Kompilierung von Code für den Simulator bietet Apple TARGET_OS_SIMULATOR in Objective-C und targetEnvironment(simulator) in Swift an. Diese Überprüfung ermöglicht das Hinzufügen von Debug-Logs, Mock-Objekten oder das Deaktivieren von hardwareabhängigem Code.
import UIKit
class CameraViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
#if targetEnvironment(simulator)
showMockCameraPreview()
print("Simulator: Mock-Kamera verwenden")
#else
setupRealCameraSession()
#endif
}
}In Objective-C funktioniert die #if TARGET_OS_SIMULATOR-Direktive ähnlich. Verwenden Sie sie, um Code zu deaktivieren, der Hardware-Sensoren oder eine Kamera benötigt. Zur Kompilierungszeit für den Simulator gelangt dieser Code nicht in die Binärdatei.
#if TARGET_OS_SIMULATOR
NSLog(@"Ausführung im Simulator — Kamera nicht verfügbar");
self.cameraButton.hidden = YES;
#else
self.cameraButton.hidden = NO;
#endifDie TARGET_OS_SIMULATOR-Überprüfung wird in drei Fällen verwendet: Ersetzen der Kamera durch ein Mock-Objekt bei UI-Tests, Deaktivieren von Core Bluetooth zur Beschleunigung der Entwicklung und Protokollieren von Debug-Informationen, die nicht in den Release-Build gelangen sollen. Vermeiden Sie die Verwendung der Überprüfung zur Änderung der Geschäftslogik — dies kann zu Fehlern auf einem realen Gerät führen.
Xcode Simulator unterstützt die vollständige XCTest-Testsuite: Unit-Tests (XCTestCase), UI-Tests (XCUITestCase) und Leistungstests. Tests auf dem Simulator erfordern kein signiertes Entwicklerzertifikat, was die CI/CD-Einrichtung vereinfacht.
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)
}
}Um Tests über die Befehlszeile auszuführen, verwenden Sie xcodebuild test mit Angabe des Schemas und Simulators. Der Parameter -destination definiert den spezifischen Simulator, auf dem die Tests ausgeführt werden.
# Unit-Tests auf iPhone 16 Simulator, iOS 18 ausführen
xcodebuild test \
-scheme "MyApp" \
-destination "platform=iOS Simulator,name=iPhone 16,OS=18.0" \
-testPlan "AllTests"Trotz seiner Bequemlichkeit hat Xcode Simulator eine Reihe von Einschränkungen, die zu Fehlern auf einem realen Gerät führen können. Das Kritischste ist das Fehlen einer ARM-Emulation: Der Code wird für die Host-Architektur kompiliert, und das Verhalten einiger Operationen kann abweichen.
Core Data und das Dateisystem arbeiten aufgrund der Mac-SSD schneller auf dem Simulator. Auf einem realen Gerät mit NAND-Speicher ist die Lese-/Schreibgeschwindigkeit geringer. Testen Sie die Core Data-Leistung vor der Veröffentlichung auf einem Gerät, insbesondere bei großen Datensätzen.
Die Überprüfung des Stromverbrauchs auf dem Simulator ist unmöglich — der Simulator wird vom Mac mit Strom versorgt. Hintergrundmodi, einschließlich Inhaltsladung und Fetch-Operationen, verhalten sich auf einem realen Gerät aufgrund von Batterieeinschränkungen und dem Background Task Scheduler anders.
Der Simulator hat keinen Zugriff auf die Hardware-Sensoren des iPhones. Face ID und Touch ID können über das Simulator-Menü simuliert werden: Features → Face ID → Matching Face. Beschleunigungssensor, Gyroskop und Barometer sind nicht verfügbar — Code, der auf CMDeviceMotion angewiesen ist, muss auf einem Gerät getestet werden. Für Core Location können Sie Koordinaten über Debug → Simulate Location durch Auswahl einer GPX-Datei festlegen.
Die Überprüfung von iCloud und StoreKit auf dem Simulator ist ebenfalls eingeschränkt. StoreKit Test ermöglicht die Simulation von Käufen ohne eine echte App Store Connect, aber die Überprüfung der Sandbox-Umgebung und von Produktionskäufen erfordert ein physisches Gerät. Die Synchronisierung von iCloud Drive und CloudKit funktioniert auf dem Simulator nicht korrekt — Apple empfiehlt, diese Szenarien nur auf echten Geräten zu testen.
Auf Macs mit M-Serie-Prozessoren arbeitet der Simulator grundlegend anders: Der Code wird in natives ARM64 kompiliert, wie auf einem echten iPhone, und nicht in x86_64. Dies verringert die Lücke zwischen Simulator und Gerät erheblich. Anwendungen, die auf dem Apple Silicon-Simulator ausgeführt werden, verwenden dieselben ARM-Befehle wie auf einem physischen iPhone, was Leistungstests repräsentativer macht. Der Unterschied in der Metal- und Core Animation-Leistung zwischen dem M-Serie-Simulator und einem echten iPhone ist im Vergleich zum Intel-Simulator minimal.
Die Einrichtung eines Simulators für CI erfordert die vorherige Erstellung des benötigten Geräts und der iOS-Version. Auf CI-Servern werden Simulatoren nicht automatisch erstellt — sie müssen vor dem Ausführen von Tests über xcrun simctl create hinzugefügt werden.
# Simulator für CI erstellen
xcrun simctl create \
"iPhone 16 CI" \
"com.apple.CoreSimulator.SimDeviceType.iPhone-16" \
"com.apple.CoreSimulator.SimRuntime.iOS-18-0"
# Tests auf dem erstellten Simulator ausführen
xcodebuild test \
-workspace MyApp.xcworkspace \
-scheme MyApp \
-destination "id=$(xcrun simctl list devices | grep 'iPhone 16 CI' | awk -F'[][]' '{print }')"Für parallele Tests auf CI konfigurieren Sie mehrere Simulatoren mit verschiedenen iOS-Versionen. Xcode Cloud, GitHub Actions und Bitrise unterstützen die parallele Testausführung, was die Laufzeit um das 2- bis 3-fache verkürzt. Stellen Sie sicher, dass alle erforderlichen iOS-Simulatoren für Tests auf dem CI-Server installiert sind.
Häufig gestellte Fragen
Der Simulator läuft auf der x86_64-Architektur und verwendet die Mac-CPU, während ein echtes Gerät auf ARM64 Apple Silicon läuft. Der Simulator emuliert keine Kamera, Sensoren, GPU Metal, Bluetooth LE oder Akku. Der Code wird für die Host-Architektur kompiliert, daher sind Leistungstests auf dem Simulator nicht repräsentativ.
Verwenden Sie #if targetEnvironment(simulator) in Swift oder #if TARGET_OS_SIMULATOR in Objective-C. Dies sind bedingte Kompilierungsdirektiven: Der Code im Block wird nur auf dem Simulator ausgeführt. Nützlich für Kamera-Mock-Objekte und Debug-Logs, die auf einem echten Gerät nicht verfügbar sind.
Ja, ab Xcode 11.4 unterstützt der Simulator die Simulation von Push-Benachrichtigungen über eine .apns-Datei mit JSON-Struktur. Ziehen Sie die Datei auf den laufenden Simulator oder verwenden Sie den Befehl xcrun simctl push. Benachrichtigungen werden vollständig wie auf einem echten Gerät angezeigt.
Der Simulator unterstützt keine Kamera, Mikrofon, Beschleunigungssensor, Gyroskop, TrueDepth, Touch ID (außer Simulation), Face ID (außer Simulation), Bluetooth LE und NFC. Die Metal-Leistung wird auf der Mac-GPU simuliert, was nicht die tatsächliche iPhone-Leistung widerspiegelt. Der Stromverbrauch kann nicht gemessen werden.
Erstellen Sie einen Simulator über xcrun simctl create, führen Sie dann xcodebuild test mit dem Parameter -destination aus, der platform=iOS Simulator und den Gerätenamen angibt. Für parallele Tests erstellen Sie mehrere Simulatoren mit verschiedenen iOS-Versionen in der CI-Konfiguration.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch