Xcode Simulator Apple کا ایک بلٹ ان ٹول ہے جو جسمانی آلہ کے بغیر Mac پر iOS ایپلیکیشنز چلاتا ہے۔ سیمولیٹر کوڈ کو میزبان کی x86_64 آرکیٹیکچر کے لیے کمپائل کرتا ہے، جو جانچ کی تیز رفتار فراہم کرتا ہے۔ Apple دستاویزات iPhone، iPad، Apple Watch اور Apple TV کے لیے سیمولیٹر استعمال کرتے ہوئے مکمل ڈیبگنگ سائیکل بیان کرتی ہیں۔
اہم نکات
Xcode Simulator Mac پر براہ راست iOS ایپلیکیشنز چلانے اور ڈیبگ کرنے کا ایک ٹول ہے۔ Android ایمولیٹر کے برعکس، Apple کا سیمولیٹر آلہ کے ARM پروسیسر کو ایمولیٹ نہیں کرتا۔ اس کے بجائے، کوڈ میزبان آرکیٹیکچر (Intel Mac پر x86_64 یا Apple Silicon پر arm64) کی مشین کوڈ میں کمپائل ہوتا ہے۔
سیمولیٹر SDK سے براہ راست iOS فریم ورکس استعمال کرتا ہے، UIKit، SwiftUI، Foundation اور Core Data تک رسائی فراہم کرتا ہے۔ Apple (WWDC 2024) کے مطابق، 90% سے زیادہ ڈویلپرز ترقی کے مرحلے میں سیمولیٹر استعمال کرتے ہیں، صرف حتمی جانچ کے لیے جسمانی آلات جوڑتے ہیں۔
Xcode کا ہر ورژن مختلف آلہ ماڈلز اور iOS ورژنز کے لیے سیمولیٹرز کا ایک سیٹ شامل کرتا ہے۔ مثال کے طور پر، Xcode 16 میں iOS 18 کے ساتھ iPhone 16 Pro، iPadOS 18 کے ساتھ iPad Pro M4، Apple Watch Series 10 اور Apple TV 4K کے لیے سیمولیٹرز شامل ہیں۔
سیمولیٹر Mac App Store سے Xcode کے ساتھ انسٹال ہوتا ہے۔ اضافی iOS ورژن شامل کرنے کے لیے مینو Settings → Platforms استعمال کریں۔ بلڈ اسکیم میں ایک سیمولیٹر منتخب کریں اور Run دبائیں۔ متبادل طور پر، Xcode → Open Developer Tool → Simulator مینو کے ذریعے سیمولیٹر شروع کریں۔
// سیمولیٹر کے لیے کم از کم iOS ورژن کی جانچ
if #available(iOS 18.0, *) {
print("iOS 18 API دستیاب")
}سیمولیٹر اور اصلی آلہ کے درمیان فرق کو سمجھنا معیاری جانچ کے لیے انتہائی اہم ہے۔ بنیادی فرق پروسیسر آرکیٹیکچر، ہارڈویئر صلاحیتوں اور گرافکس کارکردگی میں ہیں۔
| خصوصیت | سیمولیٹر | اصلی آلہ |
|---|---|---|
| CPU آرکیٹیکچر | x86_64 / arm64 (Mac) | ARM64 (Apple Silicon) |
| GPU Metal | Mac GPU کے ذریعے سمولیشن | اصلی Apple GPU |
| کیمرہ | دستیاب نہیں | مکمل |
| ایکسلرومیٹر/جائروسکوپ | دستیاب نہیں | ہارڈویئر سینسرز |
| Touch ID / Face ID | مینو کے ذریعے سمولیشن | ہارڈویئر بائیو میٹرکس |
| پش نوٹیفکیشنز | Xcode 11.4 سے (.apns فائل) | APNs سرور |
| Bluetooth LE | تعاون یافتہ نہیں | مکمل اسٹیک |
سیمولیٹر میں کارکردگی عام طور پر اصلی آلہ سے زیادہ ہوتی ہے کیونکہ یہ Mac کے طاقتور پروسیسر کا استعمال کرتا ہے۔ یہ رفتار کا غلط تاثر پیدا کرتا ہے۔ اصلی آلہ پر اینیمیشنز، Core Data آپریشنز اور نیٹ ورک درخواستیں سست چل سکتی ہیں۔
ریلیز سے پہلے ایپلیکیشن کو اصلی آلہ پر ضرور چلائیں۔ اہم منظرنامے: کیمرہ اور AVFoundation، Bluetooth اور CoreBluetooth، APNs کے ذریعے پش نوٹیفکیشنز، App Sandbox میں فائل سسٹم آپریشنز، Metal میں گرافکس کارکردگی اور بیٹری پاور کھپت۔
سیمولیٹر کے لیے کوڈ کی مشروط کمپائلیشن کے لیے، Apple Objective-C میں TARGET_OS_SIMULATOR اور Swift میں targetEnvironment(simulator) فراہم کرتا ہے۔ یہ جانچ آپ کو ڈیبگ لاگز، جعلی آبجیکٹ شامل کرنے یا ہارڈویئر پر منحصر کوڈ کو غیر فعال کرنے کی اجازت دیتی ہے۔
import UIKit
class CameraViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
#if targetEnvironment(simulator)
showMockCameraPreview()
print("سیمولیٹر: جعلی کیمرہ استعمال کرنا")
#else
setupRealCameraSession()
#endif
}
}Objective-C میں #if TARGET_OS_SIMULATOR ہدایت اسی طرح کام کرتی ہے۔ اسے ہارڈویئر سینسرز یا کیمرہ کی ضرورت والے کوڈ کو غیر فعال کرنے کے لیے استعمال کریں۔ سیمولیٹر کے لیے کمپائلیشن کے وقت، یہ کوڈ بائنری فائل میں شامل نہیں ہوتا۔
#if TARGET_OS_SIMULATOR
NSLog(@"سیمولیٹر میں چل رہا ہے — کیمرہ دستیاب نہیں");
self.cameraButton.hidden = YES;
#else
self.cameraButton.hidden = NO;
#endifTARGET_OS_SIMULATOR جانچ تین صورتوں میں استعمال ہوتی ہے: UI ٹیسٹ کے دوران کیمرہ کو جعلی آبجیکٹ سے تبدیل کرنا، ترقی کو تیز کرنے کے لیے Core Bluetooth کو غیر فعال کرنا، اور ڈیبگ معلومات لاگ کرنا جو ریلیز بلڈ میں نہیں جانی چاہیے۔ کاروباری منطق کو تبدیل کرنے کے لیے جانچ کے استعمال سے گریز کریں — یہ اصلی آلہ پر بگز کا سبب بن سکتا ہے۔
Xcode Simulator مکمل XCTest ٹیسٹ سوٹ کو سپورٹ کرتا ہے: یونٹ ٹیسٹ (XCTestCase)، UI ٹیسٹ (XCUITestCase) اور کارکردگی ٹیسٹ۔ سیمولیٹر پر جانچ کے لیے دستخط شدہ ڈویلپر سرٹیفکیٹ کی ضرورت نہیں، جو CI/CD سیٹ اپ کو آسان بناتا ہے۔
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)
}
}کمانڈ لائن سے ٹیسٹ چلانے کے لیے، اسکیم اور سیمولیٹر بتاتے ہوئے xcodebuild test استعمال کریں۔ -destination پیرامیٹر مخصوص سیمولیٹر کی وضاحت کرتا ہے جس پر ٹیسٹ چلائے جائیں گے۔
# iPhone 16 سیمولیٹر، iOS 18 پر یونٹ ٹیسٹ چلانا
xcodebuild test \
-scheme "MyApp" \
-destination "platform=iOS Simulator,name=iPhone 16,OS=18.0" \
-testPlan "AllTests"سہولت کے باوجود، Xcode Simulator میں کئی حدود ہیں جو اصلی آلہ پر بگز کا سبب بن سکتی ہیں۔ سب سے اہم ARM ایمولیشن کی کمی ہے: کوڈ میزبان آرکیٹیکچر کے لیے کمپائل ہوتا ہے اور کچھ آپریشنز کا رویہ مختلف ہو سکتا ہے۔
Core Data اور فائل سسٹم Mac کے SSD کی وجہ سے سیمولیٹر پر تیزی سے کام کرتے ہیں۔ NAND میموری والے اصلی آلہ پر پڑھنے/لکھنے کی رفتار کم ہوتی ہے۔ ریلیز سے پہلے آلہ پر Core Data کارکردگی کو جانچیں، خاص طور پر بڑے ڈیٹا سیٹس کے لیے۔
سیمولیٹر پر بجلی کی کھپت کی جانچ ناممکن ہے — سیمولیٹر Mac سے چلتا ہے۔ پس منظر کے موڈز، بشمول مواد لوڈ کرنا اور fetch آپریشنز، بیٹری کی حدود اور Background Task Scheduler کی وجہ سے اصلی آلہ پر مختلف طریقے سے کام کرتے ہیں۔
سیمولیٹر کے پاس iPhone کے ہارڈویئر سینسرز تک رسائی نہیں ہے۔ Face ID اور Touch ID کو سیمولیٹر مینو کے ذریعے نقلی کیا جا سکتا ہے: Features → Face ID → Matching Face۔ ایکسلرومیٹر، جائروسکوپ اور بیرومیٹر دستیاب نہیں — CMDeviceMotion پر انحصار کرنے والے کوڈ کو آلہ پر جانچنا ضروری ہے۔ Core Location کے لیے، آپ GPX فائل منتخب کرکے Debug → Simulate Location کے ذریعے کوآرڈینیٹ سیٹ کر سکتے ہیں۔
سیمولیٹر پر iCloud اور StoreKit کی جانچ بھی محدود ہے۔ StoreKit Test حقیقی App Store Connect کے بغیر خریداریوں کو نقلی کرنے کی اجازت دیتا ہے، لیکن Sandbox ماحول اور پروڈکشن خریداریوں کی جانچ کے لیے جسمانی آلہ درکار ہے۔ سیمولیٹر پر iCloud Drive اور CloudKit سنکرونائزیشن غلط طریقے سے کام کرتی ہے — Apple ان منظرناموں کو صرف اصلی آلات پر جانچنے کی سفارش کرتا ہے۔
M سیریز پروسیسر والے Mac پر، سیمولیٹر بنیادی طور پر مختلف کام کرتا ہے: کوڈ x86_64 کے بجائے مقامی ARM64 میں کمپائل ہوتا ہے (جیسے اصلی iPhone میں)۔ یہ سیمولیٹر اور آلہ کے درمیان فرق کو نمایاں طور پر کم کرتا ہے۔ Apple Silicon سیمولیٹر پر چلنے والی ایپلیکیشنز فزیکل iPhone کی طرح ARM ہدایات استعمال کرتی ہیں، جو کارکردگی ٹیسٹ کو زیادہ نمائندہ بناتی ہیں۔ Intel سیمولیٹر کے مقابلے M سیریز سیمولیٹر اور اصلی iPhone کے درمیان Metal اور Core Animation کارکردگی میں فرق کم سے کم ہے۔
CI کے لیے سیمولیٹر ترتیب دینے کے لیے مطلوبہ آلہ اور iOS ورژن پہلے سے بنانا ضروری ہے۔ مسلسل انضمام سرورز پر، سیمولیٹر خود بخود نہیں بنتے — ٹیسٹ چلانے سے پہلے انہیں xcrun simctl create کے ذریعے شامل کرنا ضروری ہے۔
# CI کے لیے سیمولیٹر بنانا
xcrun simctl create \
"iPhone 16 CI" \
"com.apple.CoreSimulator.SimDeviceType.iPhone-16" \
"com.apple.CoreSimulator.SimRuntime.iOS-18-0"
# بنائے گئے سیمولیٹر پر ٹیسٹ چلانا
xcodebuild test \
-workspace MyApp.xcworkspace \
-scheme MyApp \
-destination "id=$(xcrun simctl list devices | grep 'iPhone 16 CI' | awk -F'[][]' '{print }')"CI پر متوازی جانچ کے لیے، مختلف iOS ورژن والے متعدد سیمولیٹر ترتیب دیں۔ Xcode Cloud، GitHub Actions اور Bitrise متوازی ٹیسٹ پر عملدرآمد کو سپورٹ کرتے ہیں، جس سے رن ٹائم 2-3 گنا کم ہوتا ہے۔ یقینی بنائیں کہ CI سرور پر جانچ کے لیے تمام ضروری iOS سیمولیٹر انسٹال ہیں۔
اکثر پوچھے گئے سوالات
سیمولیٹر x86_64 آرکیٹیکچر پر چلتا ہے اور Mac CPU استعمال کرتا ہے، جبکہ اصلی آلہ ARM64 Apple Silicon پر چلتا ہے۔ سیمولیٹر کیمرہ، سینسرز، GPU Metal، Bluetooth LE اور بیٹری کو ایمولیٹ نہیں کرتا۔ کوڈ میزبان آرکیٹیکچر کے لیے کمپائل ہوتا ہے، لہذا سیمولیٹر پر کارکردگی ٹیسٹ نمائندہ نہیں ہوتے۔
Swift میں #if targetEnvironment(simulator) یا Objective-C میں #if TARGET_OS_SIMULATOR استعمال کریں۔ یہ مشروط کمپائلیشن ہدایات ہیں: بلاک میں کوڈ صرف سیمولیٹر پر عمل کرتا ہے۔ کیمرہ جعلی آبجیکٹس اور ڈیبگ لاگز کے لیے مفید جو اصلی آلہ پر دستیاب نہیں ہیں۔
ہاں، Xcode 11.4 سے شروع کرتے ہوئے، سیمولیٹر JSON ساخت کے ساتھ .apns فائل کے ذریعے پش نوٹیفکیشن سمولیشن کو سپورٹ کرتا ہے۔ فائل کو چلنے والے سیمولیٹر پر گھسیٹیں یا xcrun simctl push کمانڈ استعمال کریں۔ نوٹیفکیشنز اصلی آلہ کی طرح مکمل طور پر ظاہر ہوتی ہیں۔
سیمولیٹر کیمرہ، مائیکروفون، ایکسلرومیٹر، جائروسکوپ، TrueDepth، Touch ID (سمولیشن کے علاوہ)، Face ID (سمولیشن کے علاوہ)، Bluetooth LE اور NFC کو سپورٹ نہیں کرتا۔ Metal کارکردگی Mac GPU پر نقلی کی جاتی ہے، جو اصلی iPhone کارکردگی کو ظاہر نہیں کرتی۔ بجلی کی کھپت ناپی نہیں جا سکتی۔
xcrun simctl create کے ذریعے سیمولیٹر بنائیں، پھر platform=iOS Simulator اور آلہ کا نام بتاتے ہوئے -destination پیرامیٹر کے ساتھ xcodebuild test چلائیں۔ متوازی جانچ کے لیے، CI ترتیب میں مختلف iOS ورژن والے متعدد سیمولیٹر بنائیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔