iOS Simulator: bu nədir və Xcode-da necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-02-09 Oxuma vaxtı: 8 dəq

Xcode Simulator — fiziki cihaz olmadan Mac-da iOS tətbiqlərini işə salan Apple-ın daxili aləti. Simulyator kodu x86_64 host arxitekturası altında kompilyasiya edir, bu da yüksək test sürətini təmin edir. Apple Sənədləri iPhone, iPad, Apple Watch və Apple TV üçün simulyatordan istifadə edərək tam debug dövrünü təsvir edir.

Əsas məqamlar

  • Xcode Simulator — ARM arxitekturasının tam emulyasiyası olmadan tətbiq səviyyəsində iOS cihazının emulyasiyası
  • Real cihazdan fərqi — simulyator kameranı, GPU Metal-ı, sensorları və push bildirişlərini dəstəkləmir (Xcode 11.4-dən əvvəl)
  • TARGET_OS_SIMULATOR — Objective-C və Swift kodunda icra mühitini yoxlamaq üçün direktiv
  • Unit-testlər və UI-testlər — simulyator CI serverlərində işə salma imkanı ilə tam XCTest dəstini dəstəkləyir
  • Çoxsaylı platformalar — simulyator iPhone, iPad, Apple Watch, Apple TV və Vision Pro-nu dəstəkləyir

Xcode-da Simulator nədir?

Xcode Simulator — iOS tətbiqlərini birbaşa Mac-da işə salmaq və debug etmək üçün alət. Android emulyatorundan fərqli olaraq, Apple simulyatoru cihazın ARM prosessorunu emulyasiya etmir. Bunun əvəzinə kod host arxitekturasının maşın koduna kompilyasiya olunur (Intel Mac-da x86_64 və ya Apple Silicon-da arm64).

Simulyator iOS framework-lərini birbaşa SDK-dan istifadə edir, UIKit, SwiftUI, Foundation və Core Data-ya girişi təmin edir. Apple-ın məlumatına görə (WWDC 2024), tərtibatçıların 90%-dən çoxu inkişaf mərhələsində simulyatordan istifadə edir, fiziki cihazları yalnız son test üçün qoşur.

Hər Xcode versiyası müxtəlif cihaz modelləri və iOS versiyaları üçün simulyatorlar dəsti daxildir. Məsələn, Xcode 16 iOS 18 ilə iPhone 16 Pro, iPadOS 18 ilə iPad Pro M4, Apple Watch Series 10 və Apple TV 4K simulyatorlarını ehtiva edir.

Simulyatorun quraşdırılması və işə salınması

Simulyator Xcode ilə birlikdə Mac App Store-dan quraşdırılır. Əlavə iOS versiyaları əlavə etmək üçün Settings → Platforms menyusundan istifadə edin. Quraşdırma sxemində (Scheme) simulyatoru seçin və Run düyməsini basın. Alternativ olaraq simulyatoru Xcode → Open Developer Tool → Simulator menyusu vasitəsilə işə salın.

swift
// Simulyator üçün minimum iOS versiyasının yoxlanılması
if #available(iOS 18.0, *) {
    print("iOS 18 API mövcuddur")
}

Simulyatorun real cihazdan fərqləri

Simulyator və real cihaz arasındakı fərqləri başa düşmək keyfiyyətli test üçün kritik əhəmiyyət daşıyır. Əsas fərqlər prosessor arxitekturası, aparat imkanları və qrafik performansındadır.

XüsusiyyətSimulyatorReal cihaz
CPU arxitekturasıx86_64 / arm64 (Mac)ARM64 (Apple Silicon)
GPU MetalMac GPU vasitəsilə simulyasiyaYerli Apple GPU
KameraMövcud deyilTam funksiyalı
Akselerometr/GiroskopMövcud deyilAparat sensorları
Touch ID / Face IDMenyu vasitəsilə simulyasiyaAparat biometriyası
Push bildirişləriXcode 11.4-dən (.apns faylı)APNs server
Bluetooth LEDəstəklənmirTam stack

Performans simulyatorda adətən real cihazdan yüksəkdir, çünki Mac-ın güclü prosessoru istifadə olunur. Bu, sürət haqqında yanlış təəssürat yaradır. Animasiyalar, Core Data ilə iş və şəbəkə sorğuları real cihazda daha yavaş işləyə bilər.

Nə vaxt cihazda test etmək məcburidir

Buraxılışdan əvvəl tətbiqi mütləq real cihazda işə salın. Kritik ssenarilər: kamera və AVFoundation, Bluetooth və CoreBluetooth, APNs vasitəsilə push bildirişləri, App Sandbox-da fayl sistemi ilə iş, Metal-da qrafik performansı və batareya enerji sərfiyyatı.

Kodda TARGET_OS_SIMULATOR-un yoxlanılması

Simulyator üçün kodun şərti kompilyasiyası üçün Apple Objective-C-də TARGET_OS_SIMULATOR və Swift-də targetEnvironment(simulator) təqdim edir. Bu yoxlama debug loqları, mok-obyektlər əlavə etməyə və ya aparatdan asılı kodu söndürməyə imkan verir.

swift
import UIKit

class CameraViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        #if targetEnvironment(simulator)
        showMockCameraPreview()
        print("Simulyator: mok-kameradan istifadə edirik")
        #else
        setupRealCameraSession()
        #endif
    }
}

Objective-C-də #if TARGET_OS_SIMULATOR direktivi eyni şəkildə işləyir. Onu aparat sensorları və ya kamera tələb edən kodu söndürmək üçün istifadə edin. Simulyator üçün kompilyasiya mərhələsində bu kod binar fayla daxil olmur.

objective-c
#if TARGET_OS_SIMULATOR
NSLog(@"Simulyatorda işə salma — kamera mövcud deyil");
self.cameraButton.hidden = YES;
#else
self.cameraButton.hidden = NO;
#endif

Yoxlamanın tipik istifadə ssenariləri

TARGET_OS_SIMULATOR yoxlaması üç halda tətbiq olunur: UI testləri zamanı kameranın mok-obyektlə əvəz edilməsi, inkişafı sürətləndirmək üçün Core Bluetooth-un söndürülməsi və buraxılış versiyasına daxil olmamalı olan debug məlumatlarının loglanması. Biznes məntiqini dəyişmək üçün yoxlamadan istifadə etməkdən çəkinin — bu, real cihazda xətalara səbəb ola bilər.

Simulyatorda testlərin işə salınması

Xcode Simulator XCTest testlərinin tam dəstini dəstəkləyir: Unit-testlər (XCTestCase), UI-testlər (XCUITestCase) və performans testləri. Simulyatorda test etmək üçün imzalanmış tərtibatçı sertifikatı tələb olunmur, bu da CI/CD konfiqurasiyasını sadələşdirir.

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

Testləri komanda sətrindən işə salmaq üçün sxem və simulyatoru göstərməklə xcodebuild test istifadə edin. -destination parametri testlərin işə salınacağı konkret simulyatoru müəyyən edir.

bash
# iPhone 16, iOS 18 simulyatorunda Unit-testlərin işə salınması
xcodebuild test \
  -scheme "MyApp" \
  -destination "platform=iOS Simulator,name=iPhone 16,OS=18.0" \
  -testPlan "AllTests"

Məhdudiyyətlər və tələlər

Rahatlığa baxmayaraq, Xcode Simulator real cihazda xətalara səbəb ola biləcək bir sıra məhdudiyyətlərə malikdir. Ən kritik — ARM emulyasiyasının olmaması: kod host arxitekturası altında kompilyasiya olunur və bəzi əməliyyatların davranışı fərqlənə bilər.

Core Data və fayl sistemi Mac SSD səbəbindən simulyatorda daha sürətli işləyir. NAND yaddaşlı real cihazda oxu/yazma sürəti aşağıdır. Core Data performansını buraxılışdan əvvəl cihazda test edin, xüsusilə böyük məlumat dəstləri üçün.

Enerji sərfiyyatının simulyatorda yoxlanılması mümkün deyil — simulyator Mac-dan qidalanır. Fon rejimləri, o cümlədən məzmun yükləmə və fetch əməliyyatları, batareya və Background Task Scheduler məhdudiyyətləri səbəbindən real cihazda fərqli davranır.

Aparat sensorları və biometriya

Simulyator iPhone-un aparat sensorlarına girişə malik deyil. Face IDTouch ID simulyator menyusu vasitəsilə simulyasiya edilə bilər: Features → Face ID → Matching Face. Akselerometr, giroskop və barometr mövcud deyil — CMDeviceMotion-a əsaslanan kod cihazda test edilməlidir. Core Location üçün Debug → Simulate Location vasitəsilə GPX faylı seçərək koordinatlar təyin edilə bilər.

iCloud və StoreKit yoxlanılması simulyatorda da məhduddur. StoreKit Test real App Store Connect olmadan alış-verişi simulyasiya etməyə imkan verir, lakin Sandbox mühiti və istehsal alışlarının yoxlanılması fiziki cihaz tələb edir. Simulyatorda iCloud Drive və CloudKit sinxronizasiyası düzgün işləmir — Apple bu ssenariləri yalnız real cihazlarda test etməyi tövsiyə edir.

Apple Silicon Mac-da simulyator

M seriyalı prosessorlu Mac-da simulyator prinsipial olaraq fərqli işləyir: kod yerli ARM64-ə kompilyasiya olunur, real iPhone-da olduğu kimi, x86_64-ə deyil. Bu, simulyator və cihaz arasındakı fərqi əhəmiyyətli dərəcədə azaldır. Apple Silicon simulyatorunda işə salınan tətbiqlər fiziki iPhone-da olduğu kimi eyni ARM təlimatlarından istifadə edir ki, bu da performans testlərini daha reprezentativ edir. M seriyalı simulyator və real iPhone arasında Metal və Core Animation performans fərqi Intel simulyatoru ilə müqayisədə minimaldır.

CI üçün simulyatorun konfiqurasiyası

CI üçün simulyatorun konfiqurasiyası lazımi cihazın və iOS versiyasının əvvəlcədən yaradılmasını tələb edir. Continuous Integration serverlərində simulyatorlar avtomatik yaradılmır — onları testləri işə salmazdan əvvəl xcrun simctl create vasitəsilə əlavə etmək lazımdır.

bash
# CI üçün simulyatorun yaradılması
xcrun simctl create \
  "iPhone 16 CI" \
  "com.apple.CoreSimulator.SimDeviceType.iPhone-16" \
  "com.apple.CoreSimulator.SimRuntime.iOS-18-0"

# Yaradılmış simulyatorda testlərin işə salınması
xcodebuild test \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -destination "id=$(xcrun simctl list devices | grep 'iPhone 16 CI' | awk -F'[][]' '{print }')"

CI-da paralel test üçün müxtəlif iOS versiyaları olan bir neçə simulyator konfiqurasiya edin. Xcode Cloud, GitHub Actions və Bitrise paralel test işə salmanı dəstəkləyir ki, bu da icra müddətini 2-3 dəfə azaldır. CI serverində test üçün bütün lazımi iOS simulyatorlarının quraşdırıldığından əmin olun.

Tez-tez verilən suallar

Xcode simulyatoru real cihazdan nə ilə fərqlənir?

Simulyator x86_64 arxitekturasında işləyir və Mac CPU-sudan istifadə edir, real cihaz isə ARM64 Apple Silicon-da işləyir. Simulyator kameranı, sensorları, GPU Metal, Bluetooth LE və batareyanı emulyasiya etmir. Kod host arxitekturası altında kompilyasiya olunur, buna görə simulyatordakı performans testləri reprezentativ deyil.

Kodda tətbiqin simulyatorda işə salınıb-salınmadığını necə yoxlamaq olar?

Swift-də #if targetEnvironment(simulator) və ya Objective-C-də #if TARGET_OS_SIMULATOR istifadə edin. Bunlar şərti kompilyasiya direktivləridir: blokdakı kod yalnız simulyatorda icra olunur. Kamera mok-obyektləri və real cihazda mövcud olmayan debug loqları üçün əlverişlidir.

Simulyatorda push bildirişlərini test etmək olarmı?

Bəli, Xcode 11.4-dən etibarən simulyator JSON strukturlu .apns faylı vasitəsilə push bildirişlərinin simulyasiyasını dəstəkləyir. Faylı işləyən simulyatorun üzərinə sürükləyin və ya xcrun simctl push əmrindən istifadə edin. Bildirişlər real cihazda olduğu kimi tam göstərilir.

Xcode Simulator-un hansı məhdudiyyətləri var?

Simulyator kameranı, mikrofonu, akselerometri, giroskopu, TrueDepth, Touch ID (simulyasiyadan başqa), Face ID (simulyasiyadan başqa), Bluetooth LE və NFC-ni dəstəkləmir. Metal performansı Mac GPU-da simulyasiya olunur ki, bu da real iPhone performansını əks etdirmir. Enerji sərfiyyatını ölçmək mümkün deyil.

CI-da simulyatordan istifadə edərək testləri necə işə salmaq olar?

xcrun simctl create vasitəsilə simulyator yaradın, sonra platform=iOS Simulator və cihaz adını göstərən -destination parametri ilə xcodebuild test işə salın. Paralel test üçün CI konfiqurasiyasında müxtəlif iOS versiyaları olan bir neçə simulyator yaradın.

Nəticə

  • Xcode Simulator — ARM emulyasiyası olmadan kodu host arxitekturası altında kompilyasiya edərək iOS tətbiqlərini Mac-da işə salmaq üçün alət
  • Cihazdan fərqlər — simulyator kameranı, GPU Metal, sensorları, Bluetooth, NFC-ni dəstəkləmir və reprezentativ performans vermir
  • Şərti kompilyasiya — TARGET_OS_SIMULATOR və targetEnvironment(simulator) mok-obyektlər və debug loqları əlavə etməyə imkan verir
  • Test — XCTest tərtibatçı sertifikatı olmadan simulyatorda Unit, UI və performans testlərini dəstəkləyir
  • CI konfiqurasiyası — xcrun simctl vasitəsilə simulyatorlar yaradın və bir neçə iOS versiyasında paralel testlər işə salın
  • Kritik ssenarilər — kamera, Bluetooth, push bildirişləri və Metal performansı real cihazda test tələb edir
  • Apple Silicon Mac — M seriyalı simulyator iOS tətbiqlərini minimal arxitektura fərqləri ilə işə salır

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun