XCUITest: یہ کیا ہے، یہ کیسے کام کرتا ہے اور iOS UI ٹیسٹنگ

مصنف: IT Sectr اشاعت: 2026-04-09 مطالعے کا وقت: 8 منٹ

XCUITest iOS، iPadOS اور macOS ایپلی کیشنز کے UI ٹیسٹنگ کے لیے Apple کا فریم ورک ہے، جو براہ راست XCTest اور Xcode میں شامل ہے۔ یہ صارف کے اعمال کی simulation کی اجازت دیتا ہے: ٹیپ، ٹیکسٹ ان پٹ، سوائپ، اسکرول اور جیسچر — انٹرفیس عناصر کی داخلی حالت تک رسائی کے ساتھ۔ Apple Developer Documentation, 2025 کے مطابق، XCUIApplication تمام UI ٹیسٹوں کا داخلہ نقطہ ہے اور اسکرین عناصر کے درجہ بندی تک رسائی فراہم کرتا ہے۔

اہم نکات

  • XCUITest Xcode میں شامل Apple کا مقامی UI ٹیسٹنگ فریم ورک ہے
  • وائٹ باکس نقطہ نظر accessibility خصوصیات اور عناصر کے درجہ بندی تک رسائی فراہم کرتا ہے
  • ٹیسٹ XCTest کے ساتھ مربوط Swift یا Objective-C میں لکھے جاتے ہیں
  • ٹیسٹ ریکارڈنگ Xcode میں موجود بلٹ ان ریکارڈر کے ذریعے دستیاب ہے
  • عملدرآمد اضافی سرورز کے بغیر iOS simulator یا حقیقی ڈیوائس پر ہوتا ہے

XCUITest کیا ہے

XCUITest Apple کی طرف سے Xcode 7 (2015) میں جاری کردہ ایک UI ٹیسٹنگ فریم ورک ہے۔ اس نے UI Automation (UIA) کی جگہ لی اور Apple پلیٹ فارمز پر خودکار انٹرفیس ٹیسٹنگ کا معیاری ٹول بن گیا۔ XCUITest مکمل طور پر XCTest — Apple کے متحد ٹیسٹنگ فریم ورک میں مربوط ہے۔

XCTest یونٹ ٹیسٹ سے فرق

یونٹ ٹیسٹوں کے برعکس، جو کلاسز اور طریقوں کی سطح پر منطق کی جانچ کرتے ہیں، XCUITest عمل کی simulation کے ذریعے صارف انٹرفیس کی جانچ کرتا ہے۔ ٹیسٹ ایپلیکیشن سے الگ عمل میں چلتے ہیں اور accessibility API کے ذریعے اس کے ساتھ تعامل کرتے ہیں — یہ علیحدگی اور اعتبار کو یقینی بناتا ہے۔

مقامی نقطہ نظر کے فوائد

XCUITest کو تیسرے فریق کے سرورز (Appium کے برعکس) یا ڈیوائس کے تعامل کے لیے اضافی لائبریریوں کی تنصیب کی ضرورت نہیں ہے۔ ضروری ہر چیز پہلے سے Xcode میں شامل ہے۔ یہ iOS کے نئے ورژنز کے ساتھ بہترین مطابقت اور نئے جیسچرز اور کنٹرولز تک فوری رسائی کو یقینی بناتا ہے۔

XCUITest اور XCTest کا فن تعمیر

XCUITest کا فن تعمیر دو اہم کلاسز پر مبنی ہے: XCUIApplication — لانچ کردہ قابل ٹیسٹ ایپلیکیشن، اور XCUIElement — انٹرفیس عنصر۔ XCTest ٹیسٹ رنر ٹیسٹ لائف سائیکل کا انتظام کرتا ہے: setUp، ٹیسٹ طریقے، tearDown۔ XCUITest ایک علیحدہ عمل کے طور پر چلتا ہے جو accessibility پل کے ذریعے ایپلیکیشن کو کنٹرول کرتا ہے۔

عناصر کا درجہ بندی

ہر UI عنصر کو XCUIElement آبجیکٹ سے ظاہر کیا جاتا ہے، جس میں حالت (exists, isHittable, label, value) اور اعمال (tap, pressForDuration, swipeUp, typeText) کے لیے طریقے ہوتے ہیں۔ عناصر query chains کے ذریعے درجہ بندی میں منظم ہوتے ہیں: app.buttons[].staticTexts[].tables[]۔ یہ اسکرین پر کسی بھی عنصر کو لچکدار طریقے سے تلاش کرنے کی اجازت دیتا ہے۔

accessibility اور لوکیٹر

XCUITest عناصر کی شناخت کے لیے accessibility خصوصیات کا استعمال کرتا ہے: accessibilityIdentifier — ایک پروگرامیٹک شناخت کنندہ، اور accessibilityLabel — VoiceOver کے لیے تفصیل۔ ایپلیکیشن کوڈ میں accessibilityIdentifier سیٹ کرنے کی سفارش کی جاتی ہے — یہ لوکلائزیشن اور لے آؤٹ سے آزاد طور پر ٹیسٹوں کو مستحکم بناتا ہے۔

XCUITest کے ساتھ UI ٹیسٹ لکھنا

XCUITest ٹیسٹ XCTest نحو کا استعمال کرتے ہوئے Swift میں لکھے جاتے ہیں۔ ہر ٹیسٹ کلاس XCTestCase سے وراثت پاتی ہے اور test سے شروع ہونے والے طریقے رکھتی ہے۔ setUp طریقے میں مطلوبہ ترتیب کے ساتھ ایپلیکیشن لانچ کی جاتی ہے، اور tearDown میں صفائی اور سیشن کا خاتمہ کیا جاتا ہے۔

بنیادی ٹیسٹ منظر نامہ

ایک عام ٹیسٹ: عنصر تلاش کریں → عمل کریں → نتیجہ تصدیق کریں۔ عناصر کی تلاش XCUIElementQuery child queries کے ذریعے کی جاتی ہے: app.buttons["loginButton"]، app.textFields["email"]۔ اعمال: .tap()، .typeText("text")، .swipeUp()۔ تصدیقات: XCTAssertTrue(element.exists) یا XCTAssertEqual(element.label, "expected")۔

swift
import XCTest

class LoginTests: XCTestCase {
    let app = XCUIApplication()

    override func setUp() {
        continueAfterFailure = false
        app.launch()
    }

    func testLoginWithValidCredentials() {
        let emailField = app.textFields["emailInput"]
        emailField.tap()
        emailField.typeText("user@test.com")

        let passwordField = app.secureTextFields["passwordInput"]
        passwordField.tap()
        passwordField.typeText("password123")

        app.buttons["loginButton"].tap()

        let homeLabel = app.staticTexts["homeTitle"]
        XCTAssertTrue(homeLabel.exists)
    }
}

انتظار اور ہم آہنگی

XCUITest XCTWaiter اور NSPredicate predicates کے ذریعے واضح انتظار کو سپورٹ کرتا ہے۔ مثال کے طور پر، 5 سیکنڈ کے اندر عنصر کے ظاہر ہونے کا انتظار: XCTWaiter().wait(for: [expectation], timeout: 5)۔ Detox کے برعکس، XCUITest میں نیٹ ورک کی درخواستوں کے ساتھ خودکار ہم آہنگی نہیں ہے۔

swift
// ٹائم آؤٹ کے ساتھ عنصر کے ظاہر ہونے کا انتظار
let expectedElement = app.staticTexts["welcomeMessage"]
let existsPredicate = NSPredicate(format: "exists == true")
let expectation = XCTNSNotificationExpectation(object: expectedElement)
let result = XCTWaiter().wait(
    for: [expectation], timeout: 5
)
XCTAssertEqual(result, .completed)

XCUITest کی جدید خصوصیات

XCUITest پیچیدہ منظرناموں کی جانچ کو سپورٹ کرتا ہے: ملٹی ٹچ جیسچر، push notifications، Deep Links، SFSafariViewController اور ایپلیکیشنز کے درمیان تعامل۔ Siri Intents کو بھی Siri Remote simulation کا استعمال کرتے ہوئے XCUITest کے ذریعے جانچا جا سکتا ہے۔

جیسچر ٹیسٹنگ

XCUITest تمام مشہور جیسچرز کو سپورٹ کرتا ہے: tap، doubleTap، pressForDuration، swipeUp/Down/Left/Right، pinch، rotate، twoFingerTap۔ پیچیدہ منظرناموں کے لیے، حسب ضرورت کوآرڈینیٹ اور مدت کے ساتھ XCUIGesture استعمال کیا جاتا ہے۔ یہ ڈرائنگ یا drag-and-drop جیسے حسب ضرورت جیسچرز کی جانچ کی اجازت دیتا ہے۔

نیٹ ورک کی درخواستوں کی拦截

Xcode 12 سے شروع کرتے ہوئے، XCUITest XCTestExpectation اور URLProtocol کے ذریعے نیٹ ورک کی درخواستوں کی拦截 کو سپورٹ کرتا ہے۔ یہ ایپلیکیشن کوڈ میں ترمیم کیے بغیر آف لائن موڈ میں یا نقلی سرور کے جوابات کے ساتھ ایپلیکیشن کی جانچ کی اجازت دیتا ہے۔

CI/CD میں XCUITest

XCUITest CI ماحول میں test فلیگ کے ساتھ xcodebuild کے ذریعے چلتا ہے۔ متعدد simulators پر متوازی عملدرآمد کے لیے، Xcode سکیما میں متوازی عملدرآمد کی ترتیب کے ساتھ xcodebuild -testPlan استعمال کیا جاتا ہے۔ GitHub Actions، Bitrise اور Jenkins میں XCUITest کے لیے بلٹ ان سپورٹ ہے۔

CI کے لیے ترتیب

CI کے لیے، کوڈ سائننگ، provisioning profiles اور منزل (simulator یا ڈیوائس) کو ترتیب دینے کی ضرورت ہے۔ simulator پر iOS ٹیسٹوں کے لیے سرٹیفکیٹ کی ضرورت نہیں ہے۔ حقیقی ڈیوائسز کے لیے، Xcode Cloud یا Fastlane کے ذریعے خودکار دستخط ضروری ہے۔

bash
# xcodebuild کے ذریعے simulator پر XCUITest چلانا
xcodebuild test \
  -project MyApp.xcodeproj \
  -scheme MyApp \
  -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' \
  -resultBundlePath ./TestResults \
  -parallel-testing-enabled YES \
  -parallel-testing-worker-count 4

XCUITest کے ساتھ accessibility ٹیسٹنگ

XCUITest Apple کی accessibility API سے قریب سے جڑا ہوا ہے، کیونکہ عناصر کی تلاش accessibility خصوصیات پر مبنی ہے۔ accessibility ٹیسٹنگ نہ صرف عناصر کو تلاش کرنے کا ایک طریقہ ہے بلکہ معذور افراد کے لیے ایپلیکیشن کی رسائی کی تصدیق کرنے کا بھی ایک طریقہ ہے۔ XCUITest accessibilityLabel، traits اور hints کو چیک کر سکتا ہے۔

VoiceOver کی تصدیق

VoiceOver بصارت سے محروم صارفین کے لیے Apple کا اسکرین ریڈر ہے۔ XCUITest جانچنے کی اجازت دیتا ہے: accessibilityLabel — کیا عنصر واضح متن میں بیان کیا گیا ہے، accessibilityTraits — کیا عنصر کی قسم مماثل ہے (بٹن، سرخی، تصویر)، اور accessibilityHint — کیا یہ عمل کے نتیجے کے بارے میں اشارہ فراہم کرتا ہے۔ App Store کی اشاعت کے لیے یہ جانچیں لازمی ہیں، اور XCUITest انہیں regression runs کے حصے کے طور پر خودکار کرتا ہے۔

خودکار accessibility جانچ

Xcode 15 سے شروع کرتے ہوئے، XCUITest accessibilityAudit قسم کے ساتھ XCTAttachment کے ذریعے بلٹ ان accessibility جانچ کو سپورٹ کرتا ہے۔ ٹیسٹ خود بخود ناکافی کنٹراسٹ والے عناصر، بغیر لیبل والی تصاویر اور غلط traits کے بارے میں رپورٹ کرتا ہے۔ یہ دستی accessibility انسپکٹر کی جگہ لے لیتا ہے۔

swift
// XCUITest میں accessibility آڈٹ
func testAccessibilityAudit() {
    let app = XCUIApplication()
    app.launch()

    let audit = XCTAttachment(accessibilityAudit: app)
    add(audit)

    // کسی مخصوص عنصر کی جانچ کرنا
    let button = app.buttons["submitButton"]
    XCTAssertTrue(button.label.count > 0)
    XCTAssertTrue(button.isAccessibilityElement)
}

XCUITest میں کارکردگی کے ٹیسٹ

XCUITest XCTOSSignpostMetric اور XCUIApplication.metrics کے ذریعے UI کارکردگی کی پیمائش کو سپورٹ کرتا ہے۔ ایپلیکیشن لانچ کا وقت، نیویگیشن کی رفتار اور جیسچر کے جواب کا وقت ناپا جا سکتا ہے۔ کارکردگی کے ٹیسٹ baseline پیمائش کے ساتھ چلتے ہیں اور حد سے تجاوز کرنے پر خود بخود ناکام ہو جاتے ہیں۔ یہ کارکردگی میں کمی کو ریلیز بلڈ میں صارفین تک پہنچنے سے روکنے میں مدد کرتا ہے۔

baseline کی ترتیب

baseline ایک ٹیسٹ کا حوالہ عملدرآمد وقت ہے۔ Xcode ایک مخصوص ڈیوائس ماڈل اور iOS ورژن پر ہر ٹیسٹ کے لیے baseline یاد رکھتا ہے۔ اگر کوئی نیا run ایک مخصوص فیصد (پہلے سے طے شدہ 10%) سے baseline سے تجاوز کرتا ہے، تو ٹیسٹ ناکام سمجھا جاتا ہے۔ baseline کو اپ ڈیٹ کرنے کے لیے، ٹیسٹ رپورٹ میں Edit Baseline کمانڈ استعمال کریں۔ iOS ورژن کو اپ ڈیٹ کرتے وقت یا CI فارم کے لیے ڈیوائس ماڈل تبدیل کرتے وقت baseline کا دوبارہ حساب لگانا ضروری ہے۔

ٹیسٹ استحکام کی نگرانی

XCUITest ٹیسٹوں کے استحکام کی نگرانی کے لیے، فلیگ استعمال کیے جاتے ہیں: continueAfterFailure (کیا پہلی ناکامی کے بعد ٹیسٹ جاری رکھنا ہے) اور دوبارہ کوشش کی ترتیبات کے ساتھ Xcode ٹیسٹ پلانز۔ ناکام ٹیسٹوں (retry) کے خودکار دوبارہ آغاز کو ترتیب دینے کی سفارش کی جاتی ہے — اینیمیشن ٹائمنگ یا نیٹ ورک تاخیر سے متعلق غیر مستحکم ٹیسٹوں کے لیے 3 کوششوں تک۔

push notifications اور Deep Links کی جانچ

XCUITest springboard اور launchArguments کے ذریعے push notifications اور Deep Links کی جانچ کو سپورٹ کرتا ہے۔ push notifications کے لیے، -UNUserNotificationCenter پیرامیٹر کے ساتھ XCUIApplication().launchArguments اور XCTest کے ذریعے بھیجنا استعمال کیا جاتا ہے۔ Deep Links کو حسب ضرورت اسکیما کے ساتھ open URL کے ذریعے جانچا جاتا ہے — XCUITest سسٹم ڈائیلاگ کو intercept کرتا ہے اور چیک کرتا ہے کہ آیا ایپلیکیشن صحیح اسکرین کے ساتھ کھلی ہے۔ اطلاع کے جوابی منظر نامے کی جانچ کے لیے، XCUIApplication().springboard استعمال کیا جاتا ہے، جو iOS نوٹیفکیشن سینٹر میں نوٹیفکیشن بینر کو ٹیپ کرنے کی simulation کرتا ہے۔ یہ منظر نامے ڈیپ لنکس اور پش مہمات والی ایپلیکیشنز کے لیے اہم ہیں، جہاں بیرنی کالوں کی درست ہینڈلنگ کی تصدیق کرنا ضروری ہے۔

Instruments کے ساتھ انضمام

تفصیلی کارکردگی profiling کے لیے، XCUITest Instruments کے ساتھ ضم ہوتا ہے۔ ٹیسٹ کے دوران، XCTMetric کے ذریعے Time Profiler، Core Animation یا Leaks کی profiling شروع کی جا سکتی ہے۔ profiling کے نتائج رپورٹ میں محفوظ ہوتے ہیں اور Xcode میں تجزیہ کے لیے دستیاب ہوتے ہیں۔ یہ خاص طور پر ایپلیکیشن لانچ ٹائم، اسکرینوں کے درمیان نیویگیشن اور اینیمیشن کی کارکردگی — iOS ایپلیکیشنز میں عام رکاوٹوں کو بہتر بنانے کے لیے مفید ہے۔

اکثر پوچھے گئے سوالات

XCUITest اور XCTest میں کیا فرق ہے؟

XCTest تمام اقسام کے Apple ٹیسٹوں کے لیے عمومی فریم ورک ہے، جس میں یونٹ ٹیسٹ اور کارکردگی کے ٹیسٹ شامل ہیں۔ XCUITest UI ٹیسٹنگ کے لیے XCTest کے اوپر ایک توسیع ہے جو انٹرفیس کے ساتھ تعامل کے لیے XCUIApplication، XCUIElement اور XCUIElementQuery کلاسز کو شامل کرتا ہے۔

کیا XCUITest کو Objective-C کے ساتھ استعمال کیا جا سکتا ہے؟

جی ہاں، XCUITest Swift اور Objective-C دونوں کو سپورٹ کرتا ہے۔ تاہم، Apple کی زیادہ تر مثالیں اور دستاویزات Swift میں لکھی گئی ہیں۔ Objective-C پروجیکٹس اضافی ترتیب کے بغیر XCUITest استعمال کر سکتے ہیں — فریم ورک @import XCTest کے ذریعے دستیاب ہے۔

XCUITest اسکرین پر عناصر کیسے ڈھونڈتا ہے؟

XCUITest Apple کی accessibility API استعمال کرتا ہے۔ عناصر کو accessibilityIdentifier، accessibilityLabel، قسم (button, textField, staticText) یا درجہ بندی میں پوزیشن کے ذریعے ڈھونڈا جاتا ہے۔ ایپلیکیشن کوڈ میں accessibility خصوصیات جتنی درست ہوں گی، ٹیسٹ اتنے ہی مستحکم ہوں گے۔

کیا XCUITest ٹیسٹ ریکارڈنگ کو سپورٹ کرتا ہے؟

جی ہاں، Xcode میں UI ٹیسٹوں کا بلٹ ان ریکارڈر شامل ہے۔ ریکارڈنگ موڈ میں ٹیسٹ چلاتے وقت، Xcode انٹرفیس کے ساتھ تمام تعاملات کو کیپچر کرتا ہے اور Swift کوڈ تیار کرتا ہے۔ ریکارڈ شدہ کوڈ کو بہتر بنایا جا سکتا ہے: تصدیقات شامل کریں، Page Objects میں نکالیں اور پیرامیٹرائز کریں۔

حقیقی ڈیوائس پر XCUITest کیسے چلایا جائے؟

حقیقی ڈیوائس پر چلانے کے لیے ضروری ہے: ڈیوائس کو Mac سے منسلک کریں، اسے Apple Developer Program میں شامل کریں، provisioning profile ترتیب دیں، ڈیولپمنٹ سرٹیفکیٹ کے ساتھ ایپلیکیشن پر دستخط کریں اور xcodebuild میں ڈیوائس کو منزل کے طور پر منتخب کریں۔

خلاصہ

  • XCUITest iOS، iPadOS اور macOS ایپلیکیشنز کے لیے Apple کا مقامی UI ٹیسٹنگ فریم ورک ہے
  • Xcode انضمام ٹیسٹ ریکارڈنگ، متوازی عملدرآمد اور بلٹ ان رپورٹس فراہم کرتا ہے
  • XCUIApplication اور XCUIElement ایپلیکیشن کے ساتھ تعامل کے لیے اہم کلاسز ہیں
  • accessibility خصوصیات قابل اعتماد لوکیٹر کے طور پر استعمال ہوتی ہیں، لے آؤٹ تبدیلیوں پر مستحکم
  • انتظار XCTWaiter اور NSPredicate کے ذریعے لاگو کیا جاتا ہے — کوئی خودکار ہم آہنگی نہیں
  • CI/CD simulators پر متوازی عملدرآمد کے ساتھ xcodebuild کے ذریعے سپورٹ کیا جاتا ہے
  • جدید منظرنامے میں ملٹی ٹچ، Siri Intents، نیٹ ورک کی درخواستوں کی拦截 اور Deep Links شامل ہیں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں