iOS Simulator: nedir ve Xcode'da nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-02-09 Okuma süresi: 8 dk

Xcode Simulator, fiziksel bir cihaz olmadan Mac'te iOS uygulamalarını çalıştıran yerleşik bir Apple aracıdır. Simülatör, kodu ana bilgisayarın x86_64 mimarisi için derleyerek yüksek test hızı sağlar. Apple Belgeleri, iPhone, iPad, Apple Watch ve Apple TV için simülatör kullanarak tam hata ayıklama döngüsünü açıklar.

Önemli Noktalar

  • Xcode Simulator — tam ARM mimarisi öykünmesi olmadan uygulama düzeyinde iOS cihaz öykünmesi
  • Gerçek cihazdan farkı — simülatör kamera, GPU Metal, sensörler ve push bildirimlerini desteklemez (Xcode 11.4'ten önce)
  • TARGET_OS_SIMULATOR — Objective-C ve Swift kodunda çalışma zamanı ortamını kontrol etmek için yönerge
  • Birim testleri ve UI testleri — simülatör, CI sunucularında çalıştırma olanağıyla tam XCTest paketini destekler
  • Birden çok platform — simülatör iPhone, iPad, Apple Watch, Apple TV ve Vision Pro'yu destekler

Xcode'ta Simulator Nedir?

Xcode Simulator, Mac'te doğrudan iOS uygulamalarını çalıştırmak ve hata ayıklamak için bir araçtır. Android öykünücüsünden farklı olarak, Apple simülatörü cihazın ARM işlemcisini öykünmez. Bunun yerine, kod ana bilgisayar mimarisinin (Intel Mac'te x86_64 veya Apple Silicon'da arm64) makine koduna derlenir.

Simülatör, SDK'dan doğrudan iOS çerçevelerini kullanarak UIKit, SwiftUI, Foundation ve Core Data'ya erişim sağlar. Apple'a (WWDC 2024) göre, geliştiricilerin %90'ından fazlası geliştirme aşamasında simülatörü kullanır ve fiziksel cihazları yalnızca son testler için bağlar.

Xcode'un her sürümü, farklı cihaz modelleri ve iOS sürümleri için bir dizi simülatör içerir. Örneğin, Xcode 16, iOS 18 ile iPhone 16 Pro, iPadOS 18 ile iPad Pro M4, Apple Watch Series 10 ve Apple TV 4K için simülatörler içerir.

Simülatörü kurma ve başlatma

Simülatör, Mac App Store'dan Xcode ile birlikte kurulur. Ek iOS sürümleri eklemek için Settings → Platforms menüsünü kullanın. Derleme şemasında (Scheme) bir simülatör seçin ve Run'a basın. Alternatif olarak, Xcode → Open Developer Tool → Simulator menüsü aracılığıyla simülatörü başlatın.

swift
// Simülatör için minimum iOS sürümü kontrolü
if #available(iOS 18.0, *) {
    print("iOS 18 API'leri mevcut")
}

Simülatör ve gerçek cihaz arasındaki farklar

Simülatör ve gerçek cihaz arasındaki farkları anlamak, kaliteli test için son derece önemlidir. Temel farklılıklar işlemci mimarisi, donanım yetenekleri ve grafik performansında yatmaktadır.

ÖzellikSimülatörGerçek cihaz
CPU Mimarisix86_64 / arm64 (Mac)ARM64 (Apple Silicon)
GPU MetalMac GPU üzerinden simülasyonYerel Apple GPU
KameraKullanılamazTam
İvmeölçer/JiroskopKullanılamazDonanım sensörleri
Touch ID / Face IDMenü üzerinden simülasyonDonanım biyometrisi
Push bildirimleriXcode 11.4'ten itibaren (.apns dosyası)APNs sunucusu
Bluetooth LEDesteklenmezTam yığın

Simülatördeki performans genellikle gerçek bir cihazdan daha yüksektir çünkü Mac'in güçlü işlemcisini kullanır. Bu, hız konusunda yanlış bir izlenim yaratır. Gerçek bir cihazda animasyonlar, Core Data işlemleri ve ağ istekleri daha yavaş çalışabilir.

Bir cihazda test etmenin zorunlu olduğu durumlar

Sürümden önce uygulamayı gerçek bir cihazda çalıştırdığınızdan emin olun. Kritik senaryolar: kamera ve AVFoundation, Bluetooth ve CoreBluetooth, APNs aracılığıyla push bildirimleri, App Sandbox'ta dosya sistemi işlemleri, Metal'de grafik performansı ve pil gücü tüketimi.

Kodda TARGET_OS_SIMULATOR kontrolü

Simülatör için kodun koşullu derlemesi amacıyla Apple, Objective-C'de TARGET_OS_SIMULATOR ve Swift'te targetEnvironment(simulator) sağlar. Bu kontrol, hata ayıklama günlükleri, sahte nesneler eklemenize veya donanıma bağımlı kodu devre dışı bırakmanıza olanak tanır.

swift
import UIKit

class CameraViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        #if targetEnvironment(simulator)
        showMockCameraPreview()
        print("Simülatör: sahte kamera kullanma")
        #else
        setupRealCameraSession()
        #endif
    }
}

Objective-C'de #if TARGET_OS_SIMULATOR yönergesi benzer şekilde çalışır. Donanım sensörleri veya kamera gerektiren kodu devre dışı bırakmak için kullanın. Simülatör için derleme aşamasında bu kod ikili dosyaya girmez.

objective-c
#if TARGET_OS_SIMULATOR
NSLog(@"Simülatörde çalışıyor — kamera kullanılamaz");
self.cameraButton.hidden = YES;
#else
self.cameraButton.hidden = NO;
#endif

Kontrolün tipik kullanım durumları

TARGET_OS_SIMULATOR kontrolü üç durumda kullanılır: UI testleri sırasında kamerayı sahte bir nesneyle değiştirmek, geliştirmeyi hızlandırmak için Core Bluetooth'u devre dışı bırakmak ve sürüm yapısına girmemesi gereken hata ayıklama bilgilerini günlüğe kaydetmek. İş mantığını değiştirmek için kontrolü kullanmaktan kaçının — bu, gerçek bir cihazda hatalara yol açabilir.

Simülatörde test çalıştırma

Xcode Simulator, tam XCTest test paketini destekler: birim testleri (XCTestCase), UI testleri (XCUITestCase) ve performans testleri. Simülatörde test yapmak, imzalı bir geliştirici sertifikası gerektirmez ve bu da CI/CD kurulumunu basitleştirir.

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)
    }
}

Komut satırından test çalıştırmak için, şema ve simülatörü belirterek xcodebuild test kullanın. -destination parametresi, testlerin üzerinde çalıştırılacağı belirli simülatörü tanımlar.

bash
# iPhone 16 Simülatörü, iOS 18'de birim testleri çalıştırma
xcodebuild test \
  -scheme "MyApp" \
  -destination "platform=iOS Simulator,name=iPhone 16,OS=18.0" \
  -testPlan "AllTests"

Sınırlamalar ve tuzaklar

Kolaylığına rağmen, Xcode Simulator gerçek bir cihazda hatalara yol açabilecek bir dizi sınırlamaya sahiptir. En kritik olanı ARM öykünmesinin olmamasıdır: kod ana bilgisayar mimarisi için derlenir ve bazı işlemlerin davranışı farklılık gösterebilir.

Core Data ve dosya sistemi, Mac'in SSD'si sayesinde simülatörde daha hızlı çalışır. NAND belleğe sahip gerçek bir cihazda okuma/yazma hızı daha düşüktür. Sürümden önce, özellikle büyük veri kümeleri için cihazda Core Data performansını test edin.

Simülatörde güç tüketimini kontrol etmek imkansızdır — simülatör Mac'ten güç alır. İçerik yükleme ve getirme işlemleri dahil arka plan modları, pil sınırlamaları ve Background Task Scheduler nedeniyle gerçek bir cihazda farklı davranır.

Donanım sensörleri ve biyometri

Simülatörün iPhone'un donanım sensörlerine erişimi yoktur. Face ID ve Touch ID, simülatör menüsü aracılığıyla simüle edilebilir: Features → Face ID → Matching Face. İvmeölçer, jiroskop ve barometre kullanılamaz — CMDeviceMotion'a bağlı kodun bir cihazda test edilmesi gerekir. Core Location için, bir GPX dosyası seçerek Debug → Simulate Location aracılığıyla koordinatlar ayarlayabilirsiniz.

Simülatörde iCloud ve StoreKit kontrolü de sınırlıdır. StoreKit Test, gerçek App Store Connect olmadan satın almaları simüle etmeye izin verir, ancak Sandbox ortamı ve üretim satın almalarının kontrolü fiziksel bir cihaz gerektirir. Simülatörde iCloud Drive ve CloudKit senkronizasyonu hatalı çalışır — Apple bu senaryoların yalnızca gerçek cihazlarda test edilmesini önerir.

Apple Silicon Mac'te simülatör

M serisi işlemcili Mac'lerde simülatör temelde farklı çalışır: kod, x86_64 yerine yerel ARM64 olarak derlenir (gerçek iPhone'da olduğu gibi). Bu, simülatör ve cihaz arasındaki boşluğu önemli ölçüde azaltır. Apple Silicon simülatöründe çalışan uygulamalar, fiziksel bir iPhone ile aynı ARM talimatlarını kullanır ve bu da performans testlerini daha temsil edici hale getirir. M serisi simülatör ile gerçek iPhone arasındaki Metal ve Core Animation performansı farkı, Intel simülatörüne kıyasla minimumdur.

CI için simülatör yapılandırması

CI için simülatör kurulumu, gerekli cihazın ve iOS sürümünün önceden oluşturulmasını gerektirir. Sürekli entegrasyon sunucularında simülatörler otomatik olarak oluşturulmaz — testleri çalıştırmadan önce xcrun simctl create aracılığıyla eklenmeleri gerekir.

bash
# CI için simülatör oluşturma
xcrun simctl create \
  "iPhone 16 CI" \
  "com.apple.CoreSimulator.SimDeviceType.iPhone-16" \
  "com.apple.CoreSimulator.SimRuntime.iOS-18-0"

# Oluşturulan simülatörde test çalıştırma
xcodebuild test \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -destination "id=$(xcrun simctl list devices | grep 'iPhone 16 CI' | awk -F'[][]' '{print }')"

CI'da paralel test için, farklı iOS sürümlerine sahip birden çok simülatör yapılandırın. Xcode Cloud, GitHub Actions ve Bitrise paralel test yürütmeyi destekleyerek çalışma süresini 2-3 kat azaltır. CI sunucusunda test için gerekli tüm iOS simülatörlerinin kurulu olduğundan emin olun.

Sıkça Sorulan Sorular

Xcode Simulator gerçek bir cihazdan nasıl farklıdır?

Simülatör x86_64 mimarisinde çalışır ve Mac CPUsunu kullanır, gerçek cihaz ise ARM64 Apple Silicon'da çalışır. Simülatör kamera, sensörler, GPU Metal, Bluetooth LE ve pili öykünmez. Kod ana bilgisayar mimarisi için derlenir, bu nedenle simülatördeki performans testleri temsil edici değildir.

Kodda uygulamanın simülatörde çalışıp çalışmadığını nasıl kontrol edebilirim?

Swift'te #if targetEnvironment(simulator) veya Objective-C'de #if TARGET_OS_SIMULATOR kullanın. Bunlar koşullu derleme yönergeleridir: bloktaki kod yalnızca simülatörde yürütülür. Gerçek bir cihazda bulunmayan kamera sahte nesneleri ve hata ayıklama günlükleri için kullanışlıdır.

Simülatörde push bildirimleri test edilebilir mi?

Evet, Xcode 11.4 itibarıyla simülatör, JSON yapısına sahip bir .apns dosyası aracılığıyla push bildirimi simülasyonunu destekler. Dosyayı çalışan simülatöre sürükleyin veya xcrun simctl push komutunu kullanın. Bildirimler gerçek bir cihazdaki gibi tamamen görüntülenir.

Xcode Simulator'ın sınırlamaları nelerdir?

Simülatör kamera, mikrofon, ivmeölçer, jiroskop, TrueDepth, Touch ID (simülasyon hariç), Face ID (simülasyon hariç), Bluetooth LE ve NFC'yi desteklemez. Metal performansı Mac GPU'sunda simüle edilir, bu gerçek iPhone performansını yansıtmaz. Güç tüketimi ölçülemez.

CI'da simülatör kullanarak test nasıl çalıştırılır?

xcrun simctl create ile bir simülatör oluşturun, ardından platform=iOS Simulator ve cihaz adını belirten -destination parametresiyle xcodebuild test çalıştırın. Paralel test için, CI yapılandırmasında farklı iOS sürümlerine sahip birden çok simülatör oluşturun.

Özet

  • Xcode Simulator — Mac'te iOS uygulamalarını çalıştırmak için araç, ARM öykünmesi olmadan ana bilgisayar mimarisi için kod derler
  • Cihazdan farkları — simülatör kamera, GPU Metal, sensörler, Bluetooth, NFC'yi desteklemez ve temsili performans sağlamaz
  • Koşullu derleme — TARGET_OS_SIMULATOR ve targetEnvironment(simulator) sahte nesneler ve hata ayıklama günlükleri eklemeye olanak tanır
  • Test — XCTest, geliştirici sertifikası olmadan simülatörde birim, UI ve performans testlerini destekler
  • CI kurulumu — xcrun simctl ile simülatörler oluşturun ve birden çok iOS sürümünde paralel testler çalıştırın
  • Kritik senaryolar — kamera, Bluetooth, push bildirimleri ve Metal performansı gerçek cihazda test gerektirir
  • Apple Silicon Mac — M serisinde simülatör, minimum mimari farklılıklarla iOS uygulamalarını çalıştırır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun