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 | মেনুর মাধ্যমে সিমুলেশন | হার্ডওয়্যার বায়োমেট্রিক্স |
| Push নোটিফিকেশন | Xcode 11.4 থেকে (.apns ফাইল) | APNs সার্ভার |
| Bluetooth LE | সমর্থিত নয় | সম্পূর্ণ স্ট্যাক |
সিমুলেটরে পারফরম্যান্স সাধারণত রিয়েল ডিভাইসের চেয়ে বেশি, কারণ এটি Mac-এর শক্তিশালী প্রসেসর ব্যবহার করে। এটি গতির একটি মিথ্যা ধারণা তৈরি করে। রিয়েল ডিভাইসে অ্যানিমেশন, Core Data অপারেশন এবং নেটওয়ার্ক অনুরোধ ধীরে চলতে পারে।
রিলিজের আগে অ্যাপ্লিকেশনটি রিয়েল ডিভাইসে চালানো নিশ্চিত করুন। গুরুত্বপূর্ণ পরিস্থিতি: ক্যামেরা এবং AVFoundation, Bluetooth এবং CoreBluetooth, APNs-এর মাধ্যমে push নোটিফিকেশন, 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 থেকে চালিত হয়। ব্যাকগ্রাউন্ড মোড, যার মধ্যে কন্টেন্ট লোডিং এবং ফেচ অপারেশন অন্তর্ভুক্ত, ব্যাটারি সীমাবদ্ধতা এবং ব্যাকগ্রাউন্ড টাস্ক শিডিউলারের কারণে রিয়েল ডিভাইসে ভিন্নভাবে আচরণ করে।
সিমুলেটরের 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 ফাইলের মাধ্যমে push নোটিফিকেশন সিমুলেশন সমর্থন করে। চলমান সিমুলেটরে ফাইলটি ড্র্যাগ করুন বা 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।