iOS Deployment Target (এছাড়াও iOS Target, Deployment Target নামে পরিচিত) হল Apple অপারেটিং সিস্টেমের ন্যূনতম সংস্করণ যার উপর একটি অ্যাপ্লিকেশন চালানো যেতে পারে। এই প্যারামিটারটি Xcode প্রজেক্টে সেট করা হয় এবং সামঞ্জস্যের সীমানা নির্ধারণ করে: iOS 16.0 নির্বাচন করলে, অ্যাপ্লিকেশনটি শুধুমাত্র iOS 16.0 এবং তার উপরের ডিভাইসগুলিতে ইনস্টল হয়। Apple Developer Documentation অনুসারে, সঠিক Deployment Target নির্বাচন অডিয়েন্স রিচ এবং নতুন Swift এবং Objective-C ফ্রেমওয়ার্ক API-তে অ্যাক্সেস উভয়কেই প্রভাবিত করে।
মূল পয়েন্ট
iOS Deployment Target হল একটি Xcode কনফিগারেশন প্যারামিটার যা iOS, iPadOS, tvOS, watchOS বা visionOS-এর সবচেয়ে পুরনো সংস্করণ নির্দিষ্ট করে যার উপর একটি অ্যাপ্লিকেশন চলতে পারে। প্রতিটি Xcode প্রজেক্টে প্রতিটি প্ল্যাটফর্মের জন্য আলাদাভাবে এই সেটিং থাকে। উদাহরণস্বরূপ, একটি iOS অ্যাপের Deployment Target 16.0 হতে পারে, যখন একটি watchOS এক্সটেনশনের — 9.0। যদি ব্যবহারকারীর ডিভাইস iOS 15.0 চালায়, তাহলে Target 16.0 সহ একটি অ্যাপ App Store-এ প্রদর্শিত হবে না এবং সরাসরি বিতরণের মাধ্যমে ইনস্টল করা যাবে না।
Deployment Target প্রক্রিয়াটি ইনস্টলেশনের সময় OS সংস্করণ পরীক্ষার উপর ভিত্তি করে। iOS App Store Info.plist (কী MinimumOSVersion) থেকে Deployment Target মান ব্যবহারকারীর ডিভাইসের OS সংস্করণের সাথে তুলনা করে। যদি ডিভাইস সংস্করণ কম হয় — তাহলে "ডাউনলোড" বাটন ব্লক হয়ে যায়, এবং App Store API সেই ডিভাইসের জন্য অনুসন্ধান ফলাফলে অ্যাপ্লিকেশন ফেরত দেয় না। একই আচরণ TestFlight, ad-hoc এবং এন্টারপ্রাইজ বিতরণের ক্ষেত্রেও প্রযোজ্য।
জুন 2025 পর্যন্ত StatCounter তথ্য অনুসারে, iOS 16 সক্রিয় iPhone ডিভাইসের প্রায় 48%, iOS 17 — 35%, iOS 18 — 12%, পুরনো সংস্করণ — প্রায় 5%। Deployment Target 16.0 নির্বাচন করলে 83% ডিভাইস কভার হয়, Target 17.0 — 35% (শুধুমাত্র iOS 17+)। এই সংখ্যাগুলি সিদ্ধান্ত গ্রহণের জন্য গুরুত্বপূর্ণ: Target যত বেশি, অডিয়েন্স তত ছোট, কিন্তু সর্বশেষ SwiftUI এবং UIKit API-তে অ্যাক্সেস তত বেশি।
| Deployment Target | ডিভাইস অংশ (জুন 2025) | উপলব্ধ বৈশিষ্ট্য |
|---|---|---|
| iOS 15.0 | ~90% | Swift Concurrency, async/await, Focus State |
| iOS 16.0 | ~83% | SwiftUI NavigationStack, Layout, Live Activities |
| iOS 17.0 | ~35% | Observation, SwiftData, TipKit, Reactive Editing |
| iOS 18.0 | ~12% | নতুন Apple Intelligence API, উন্নত SwiftUI |
iOS-এর প্রতিটি নতুন রিলিজ শুধু ব্যবহারকারীর বৈশিষ্ট্যই নয়, ডেভেলপারদের জন্য API-ও যোগ করে। নতুন SwiftUI মডিফায়ার, UIKit পদ্ধতি, SwiftData এবং Observation-এর মতো ফ্রেমওয়ার্ক শুধুমাত্র নির্দিষ্ট Deployment Target-এ উপলব্ধ। ডেভেলপারকে অডিয়েন্স রিচ এবং আধুনিক টুলের প্রাপ্যতার মধ্যে ভারসাম্য রাখতে হবে।
iOS Deployment Target এবং Android-এর minSdkVersion একই কাজ করে — একটি অ্যাপ্লিকেশনের জন্য ন্যূনতম OS সংস্করণ নির্ধারণ করে। তবে, বাস্তবায়ন প্রক্রিয়া এবং সম্পর্কিত টুলগুলি ভিন্ন। উভয় প্ল্যাটফর্মে কাজ করা ডেভেলপারদের জন্য এই পার্থক্যগুলি বোঝা উপযোগী এবং ইকোসিস্টেমের মধ্যে স্যুইচ করার সময় বিভ্রান্তি এড়াতে সাহায্য করে।
iOS-এ, ন্যূনতম সংস্করণ Xcode বিল্ড সেটিংস (IPHONEOS_DEPLOYMENT_TARGET) এর মাধ্যমে সেট করা হয় এবং Info.plist (MinimumOSVersion)-এ সংরক্ষণ করা হয়। Android-এ — build.gradle (minSdkVersion) এবং AndroidManifest.xml (<uses-sdk android:minSdkVersion>) এর মাধ্যমে। iOS-এ targetSdkVersion এবং compileSdkVersion-এর সমতুল্য নেই — iOS-এ আচরণগত পরিবর্তনগুলি যে SDK দিয়ে অ্যাপ্লিকেশন কম্পাইল করা হয়েছে (Base SDK) এবং ডিভাইসের OS সংস্করণ দ্বারা পরিচালিত হয়।
| প্যারামিটার | iOS | Android |
|---|---|---|
| ন্যূনতম সংস্করণ | Deployment Target (IPHONEOS_DEPLOYMENT_TARGET) | minSdkVersion |
| কোথায় নির্দিষ্ট করা হয় | Xcode Build Settings → Info.plist | build.gradle → AndroidManifest.xml |
| কোডে পরীক্ষা | @available / #available / if #available | Build.VERSION.SDK_INT |
| লক্ষ্য সংস্করণ | Base SDK (সর্বদা সর্বশেষ) | compileSdkVersion + targetSdkVersion |
| স্টোর ফিল্টারিং | App Store: MinimumOSVersion | Google Play: minSdkVersion |
মূল পার্থক্য হল iOS-এ Base SDK সর্বদা Xcode-এ ইনস্টল করা সর্বশেষ সংস্করণ। ডেভেলপার Android-এর মতো compileSdkVersion বেছে নিতে পারেন না — অ্যাপ্লিকেশন সর্বদা উপলব্ধ সর্বশেষ SDK-এর বিরুদ্ধে কম্পাইল হয়। iOS-এ নতুন আচরণগত পরিবর্তনগুলি সমস্ত অ্যাপ্লিকেশনে প্রযোজ্য হয় যেগুলি নতুন Base SDK দিয়ে কম্পাইল করা হয়েছে, Deployment Target নির্বিশেষে। Android-এ, targetSdkVersion আচরণগত পরিবর্তনের উপর নিয়ন্ত্রণ প্রদান করে; iOS-এ এরকম কোনো পৃথকীকরণ নেই।
Android-এর বিপরীতে, যেখানে আচরণগত পরিবর্তনগুলি targetSdkVersion-এর সাথে আবদ্ধ, iOS Xcode এবং Base SDK-এর নতুন সংস্করণ দিয়ে কম্পাইল করা সমস্ত অ্যাপ্লিকেশনে আচরণগত পরিবর্তন প্রয়োগ করে। উদাহরণস্বরূপ, iOS 13 ডার্ক মোড চালু করেছিল — Xcode 11 এবং iOS 13 SDK দিয়ে তৈরি সমস্ত অ্যাপ্লিকেশন স্বয়ংক্রিয়ভাবে ডার্ক থিম সমর্থন পেয়েছিল, Deployment Target নির্বিশেষে। Android-এ, অনুরূপ পরিবর্তন (Scoped Storage) শুধুমাত্র targetSdk >= 29 হলে প্রযোজ্য হয়। iOS ডেভেলপারদের স্থগিতের সম্ভাবনা ছাড়াই প্রতিটি নতুন Xcode-এর সাথে আচরণগত পরিবর্তনের জন্য প্রস্তুত থাকতে হবে।
উভয় প্ল্যাটফর্মের জ্ঞান ন্যূনতম সংস্করণ নির্বাচনের পরিণতি পূর্বাভাস করতে এবং নতুন API-র জন্য কোড আপডেট পরিকল্পনা করতে দেয়। IT Sectr-এ, আমরা 2017 সাল থেকে উভয় ইকোসিস্টেম ব্যবহার করছি — অনুশীলন দেখায় যে কভারেজ এবং কার্যকারিতার ভারসাম্যের জন্য iOS Deployment Target বর্তমান থেকে 2–3 সংস্করণ নিচে নির্বাচন করা উচিত।
iOS Deployment Target কনফিগার করা প্রজেক্টের একাধিক জায়গায় করা হয়: মূল Target, Pods প্রজেক্ট (যদি CocoaPods ব্যবহার করা হয়), Swift Package Manager নির্ভরতা এবং Widget/Extension টার্গেট। যদি মূল অ্যাপ্লিকেশন এবং এক্সটেনশনের মধ্যে মান ভিন্ন হয়, তাহলে App Store সকলের মধ্যে সর্বোচ্চ ব্যবহার করে — অর্থাৎ একটি এক্সটেনশনের Target মূল অ্যাপ্লিকেশনের চেয়ে কম হতে পারে না।
Xcode প্রজেক্ট খুলুন → Target নির্বাচন করুন → General ট্যাব → Minimum iOS Deployment বিভাগ। ড্রপডাউন Xcode-এ ইনস্টল করা সমস্ত উপলব্ধ iOS SDK সংস্করণ দেখায়। পরিবর্তনটি সমস্ত বিল্ড স্কিমে প্রযোজ্য। বিকল্পভাবে — Build Settings ট্যাব → iOS Deployment Target (IPHONEOS_DEPLOYMENT_TARGET)। যদি প্রজেক্টে একাধিক Target এক্সটেনশন (Widget, Watch) থাকে, তাহলে প্রতিটির নিজস্ব Deployment Target থাকে।
SPM-এর মাধ্যমে বিতরণ করা লাইব্রেরির জন্য, Deployment Target Package.swift-এ platforms প্যারামিটারে নির্দিষ্ট করা হয়। platforms: [.iOS(.v16)] সহ একটি লাইব্রেরি শুধুমাত্র Deployment Target iOS 16.0+ বিশিষ্ট অ্যাপ্লিকেশনের জন্য উপলব্ধ হবে। Target 15.0 সহ একটি প্রজেক্টে এই ধরনের লাইব্রেরি যোগ করলে, Xcode একটি অসামঞ্জস্য ত্রুটি দেখাবে। CocoaPods-এ, Deployment Target Podfile-এ সেট করা হয়: platform :ios, '16.0'.
// Package.swift — SPM লাইব্রেরির জন্য Deployment Target
import PackageDescription
let package = Package(
name: "MyLibrary",
platforms: [
.iOS(.v16),
.macOS(.v13),
.watchOS(.v9),
.tvOS(.v16)
],
products: [
.library(
name: "MyLibrary",
targets: ["MyLibrary"]
)
],
dependencies: [],
targets: [
.target(
name: "MyLibrary",
swiftSettings: [
.enableUpcomingFeature("ConciseMagicFile")
]
)
]
)
// কোডে সামঞ্জস্য পরীক্ষা
#if swift(>=5.9)
// Swift 5.9+ বৈশিষ্ট্য (Xcode 15+)
#endifউদাহরণে, Package.swift প্ল্যাটফর্ম iOS 16+, macOS 13+, watchOS 9+, tvOS 16+ সেট করে। iOS 16.0-এর নিচে Deployment Target বিশিষ্ট যেকোনো প্রজেক্ট এই লাইব্রেরি যোগ করতে পারবে না। swiftSettings প্যারামিটারে একটি নির্দিষ্ট Swift সংস্করণের জন্য আগামী বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে। SPM নির্ভরতা যোগ করার সময় স্বয়ংক্রিয়ভাবে platforms সামঞ্জস্য পরীক্ষা করে।
Podfile নির্দেশ platform :ios, '16.0' ব্যবহার করে। pod install-এর পরে, CocoaPods প্রতিটি pod লাইব্রেরির Deployment Target পরীক্ষা করে: যদি অন্তত একটির Target প্রজেক্টের চেয়ে বেশি হয়, তাহলে ইনস্টলেশন ত্রুটির সাথে ব্যর্থ হবে "The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 17.0, but the range of supported deployment target versions is 16.0 to 17.0"। সমাধান হল সমস্যাযুক্ত pod-এর Target কমানো বা প্রজেক্টের Target বাড়ানো।
# Podfile — Deployment Target সহ উদাহরণ
platform :ios, '16.0'
# Deployment Target সতর্কতা উপেক্ষা করুন
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.0'
end
end
endPodfile-এ post_install হুক জোর করে সমস্ত pod লাইব্রেরির জন্য Deployment Target 16.0 সেট করে। এটি তখন কার্যকর যখন কোনো pod তার কার্যকারিতার জন্য প্রয়োজনীয়তার চেয়ে বেশি Target নির্দিষ্ট করে। এটি শুধুমাত্র তখন ব্যবহার করুন যদি আপনি নিশ্চিত হন যে pod উচ্চতর iOS সংস্করণের API ব্যবহার করে না।
@available এবং #available হল Swift এবং Objective-C নির্দেশ যা শুধুমাত্র নির্দিষ্ট OS সংস্করণে উপলব্ধ API-গুলিকে নিরাপদে কল করার জন্য। যদি প্রজেক্টের Deployment Target iOS 16.0 হয় এবং একটি পদ্ধতির জন্য iOS 17.0 প্রয়োজন হয়, তাহলে সরাসরি কল iOS 16.0–16.x বিশিষ্ট ডিভাইসে রানটাইম ক্র্যাশের কারণ হবে। উপলব্ধতা পরীক্ষা একাধিক iOS সংস্করণ সমর্থন করার জন্য একটি বাধ্যতামূলক টুল।
@available নির্দেশ ক্লাস, পদ্ধতি বা সম্পূর্ণ ফাইলের ক্ষেত্রে প্রযোজ্য। যদি একটি ক্লাসের আগে @available(iOS 17.0, *) নির্দিষ্ট করা থাকে, তাহলে সম্পূর্ণ ক্লাস শুধুমাত্র iOS 17.0+ এ উপলব্ধ। iOS 16.0-এ ক্লাস কল করার চেষ্টা রানটাইম ত্রুটির কারণ হবে। একটি নির্দিষ্ট OS সংস্করণের জন্য নির্দিষ্ট কার্যকারিতার সম্পূর্ণ মডিউল আলাদা করতে @available ব্যবহার করুন। ক্লাসের ভিতরে পদ্ধতির জন্য, @available পৃথক ফাংশন লুকানোর অনুমতি দেয়।
#available নির্দেশ (if #available) রানটাইমে OS সংস্করণ পরীক্ষা করে এবং শুধুমাত্র ম্যাচ করলে কোড সম্পাদন করে। নতুন এবং পুরানো বাস্তবায়নের মধ্যে নির্বাচন করতে ফাংশনের ভিতরে ব্যবহার করা হয়। Objective-C-এ, সমতুল্য হল if-এর ভিতরে @available(iOS 17.0, *)। আরও জটিল পরীক্ষার জন্য, সংস্করণ উপাদান (major, minor, patch) তুলনা করতে ProcessInfo.processInfo.isOperatingSystemAtLeast ব্যবহার করুন।
import UIKit
import SwiftUI
// 1. @available — সম্পূর্ণ ক্লাস শুধুমাত্র iOS 17+ এর জন্য
@available(iOS 17.0, *)
class ObservationViewModel: ObservableObject {
@Published var name: String = "User"
// Observation framework ব্যবহার করে — শুধুমাত্র iOS 17+ এ উপলব্ধ
func updateWithObservation() {
let newName = "Updated via Observation"
name = newName
}
}
// 2. #available — ফাংশনের ভিতরে শর্তসাপেক্ষ কল
func configureLiveActivity() {
if #available(iOS 16.1, *) {
// Live Activities API — iOS 16.1 থেকে উপলব্ধ
let activity = Activity<MyAttributes>(
attributes: MyAttributes(name: "Live"),
contentState: MyContentState(value: 42)
)
Task {
await activity.activate()
}
} else {
// ফallback: push বিজ্ঞপ্তি বা কিছুই না
print("Live Activities উপলব্ধ নয়")
}
}
// 3. ProcessInfo — সঠিক সংস্করণ পরীক্ষা
func checkOSVersion() {
let osVersion = ProcessInfo.processInfo.operatingSystemVersion
print("iOS \(osVersion.majorVersion).\(osVersion.minorVersion).\(osVersion.patchVersion)")
// উপাদান তুলনা
if osVersion.majorVersion >= 17 {
print("iOS 17+ সনাক্ত করা হয়েছে")
}
}
// 4. Objective-C @available
// Objective-C @available ব্যবহার করে:
// if (@available(iOS 17.0, *)) { }
// 5. @available unavailable আর্গুমেন্ট সহ
@available(*, unavailable, message: "Use configureWithSwiftUI instead")
func legacyConfigureMethod() { }ObservationViewModel ক্লাস iOS 17 কার্যকারিতা আলাদা করতে @available ব্যবহার করে। configureLiveActivity ফাংশন ফallback বাস্তবায়নের সাথে Live Activities (iOS 16.1+) পরীক্ষা করতে #available ব্যবহার করে। ProcessInfo সঠিক OS সংস্করণ পরীক্ষা করে। @available(*, unavailable) একটি পদ্ধতিকে সমস্ত সংস্করণে অনুপলব্ধ হিসাবে চিহ্নিত করে — নতুন API-তে মাইগ্রেশনের জন্য। এই পরীক্ষাগুলি ছাড়া, Deployment Target 16.0 বিশিষ্ট একটি অ্যাপ্লিকেশন iOS 17 API কল করার সময় iOS 16.0 বিশিষ্ট ডিভাইসে ক্র্যাশ হবে।
Objective-C Swift #available-এর মতো একই শব্দার্থে @available(iOS 17.0, *) ব্যবহার করে। পার্থক্য: Objective-C রানটাইমে পরীক্ষা করে, Swift #available-ও রানটাইম কিন্তু শাখা অপ্টিমাইজেশনের জন্য কম্পাইলার ইঙ্গিত সহ। Swift-এর সাথে ইন্টারঅ্যাক্ট করা Objective-C কোডের জন্য, Objective-C পক্ষে উপলব্ধতা পরীক্ষা প্রয়োজন — Swift ব্রিজিং স্বয়ংক্রিয় পরীক্ষা যোগ করে না।
iOS Deployment Target নির্বাচন একটি কৌশলগত সিদ্ধান্ত যা তিনটি দিককে প্রভাবিত করে: অডিয়েন্স রিচ, উপলব্ধ API এবং কোড রক্ষণাবেক্ষণ জটিলতা। কোনো একক সঠিক মান নেই — নির্বাচন অ্যাপ্লিকেশনের লক্ষ্য অডিয়েন্স, ন্যূনতম প্রয়োজনীয় বৈশিষ্ট্য এবং পশ্চাদগামী সামঞ্জস্য সমর্থনের জন্য টিম সম্পদের উপর নির্ভর করে।
প্রথম ফ্যাক্টর — iOS সংস্করণ ব্যবহারের পরিসংখ্যান। Apple WWDC এবং Apple Developer Dashboard-এ iOS ইনস্টলেশন ডেটা প্রকাশ করে। জুন 2025 পর্যন্ত, বিতরণ হল: iOS 15 — ~7%, iOS 16 — ~48%, iOS 17 — ~35%, iOS 18 — ~10%। Target 16.0 নির্বাচন করলে 83% কভারেজ, Target 17.0 — 35% পাওয়া যায়। গণ-বাজার অ্যাপ্লিকেশন (সোশ্যাল নেটওয়ার্ক, মেসেজিং, ই-কমার্স) এর জন্য Target 16.0 সুপারিশ করা হয়। নির্দিষ্ট API প্রয়োজনীয়তা সহ B2B অ্যাপ্লিকেশনের জন্য — Target 17.0।
দ্বিতীয় ফ্যাক্টর — প্রয়োজনীয় API। যদি অ্যাপ্লিকেশনের মূল বৈশিষ্ট্যের জন্য SwiftData (iOS 17+), Observation (iOS 17+) বা Live Activities (iOS 16.1+) প্রয়োজন হয়, তাহলে Target প্রয়োজনীয় সংস্করণের চেয়ে কম হতে পারে না। ডিজাইন পর্যায়ে প্রয়োজনীয় API বিশ্লেষণ সেই পরিস্থিতি প্রতিরোধ করে যেখানে ডেভেলপমেন্টের মাঝপথে আবিষ্কৃত হয় যে উচ্চতর Target প্রয়োজন। ব্যাকআপ পরিকল্পনা হিসাবে উপলব্ধতা পরীক্ষা ব্যবহার করুন, প্রাথমিক কৌশল হিসাবে নয়।
তৃতীয় ফ্যাক্টর — পরীক্ষার সম্পদ। পুরানো iOS সংস্করণ সমর্থনের জন্য সেই সংস্করণগুলির সিমুলেটর এবং বাস্তব ডিভাইসে পরীক্ষা প্রয়োজন। iOS 15 iPhone 6s/7-এ, iOS 16 — iPhone 8/X-এ, iOS 17 — iPhone XS/XR-এ পরীক্ষা করা হয়। পশ্চাদগামী সামঞ্জস্যের প্রতিটি অতিরিক্ত সংস্করণ QA সময় বাড়ায়। যদি টিম ছোট হয়, তাহলে বর্তমান থেকে 2–3 সংস্করণ নিচে Target নির্বাচন করা যুক্তিসঙ্গত (16.0) — কভারেজ এবং প্রচেষ্টার মধ্যে ভারসাম্য।
| অ্যাপের ধরন | প্রস্তাবিত Target | কভারেজ | যুক্তি |
|---|---|---|---|
| গণ-বাজার (সামাজিক, বাজার) | iOS 16.0 | ~83% | সর্বোচ্চ অডিয়েন্স |
| এন্টারপ্রাইজ / B2B | iOS 16.0 | ~83% | কর্পোরেট ডিভাইস ধীরে আপডেট হয় |
| স্টার্টআপ / MVP | iOS 17.0 | ~35% | নতুন API-তে দ্রুত ডেভেলপমেন্ট |
| গেম (Metal 3+) | iOS 17.0 | ~35% | নতুন গ্রাফিক্স API প্রয়োজন |
| লাইব্রেরি/SDK | iOS 15.0 | ~90% | ক্লায়েন্টদের জন্য সর্বোচ্চ সামঞ্জস্য |
লাইব্রেরি এবং SDK-এর যতটা সম্ভব কম Deployment Target থাকা উচিত (15.0 বা এমনকি 14.0) — লাইব্রেরি ভোক্তাদের আপনার চেয়ে যেকোনো উচ্চ Target থাকতে পারে। যদি একটি লাইব্রেরির iOS 17.0 প্রয়োজন হয়, তাহলে অর্ধেক প্রজেক্ট এটি ব্যবহার করতে পারবে না। অ্যাপ্লিকেশনের জন্য, অন্যদিকে, নতুন API-তে অ্যাক্সেসের জন্য আপনি উচ্চ Target বহন করতে পারেন।
iOS Deployment Target কমানো একটি কাজ যা অডিয়েন্স প্রসারিত করার প্রয়োজন হলে বা পুরানো প্রজেক্টের সাথে সামঞ্জস্যপূর্ণ লাইব্রেরি প্রকাশ করার সময় উদ্ভূত হয়। বাড়ানোর বিপরীতে, কমানোর জন্য কোডের সাথে সক্রিয় কাজ প্রয়োজন: আপনাকে নতুন (কম) Target-এ অনুপলব্ধ সমস্ত API-র সরাসরি কল #available পরীক্ষা এবং ফallback বাস্তবায়ন দিয়ে প্রতিস্থাপন করতে হবে।
প্রথম ধাপ — API তালিকা। Target কমানোর সময় Xcode কম্পাইলেশন ত্রুটি দেখায় না — এটি শুধুমাত্র হলুদ সতর্কতা দিয়ে সতর্ক করে। আপনাকে @available(iOS N+, *) দিয়ে চিহ্নিত সমস্ত পদ্ধতি এবং ক্লাস খুঁজে বের করতে হবে যেখানে N নতুন Target-এর চেয়ে বেশি। প্যাটার্ন "available(iOS" সহ প্রজেক্ট অনুসন্ধান (Cmd+Shift+F) ব্যবহার করুন। এই ধরনের প্রতিটি কল রিফ্যাক্টরিংয়ের জন্য প্রার্থী।
দ্বিতীয় ধাপ — #available পরীক্ষা দিয়ে প্রতিস্থাপন। উচ্চ সংস্করণ থেকে প্রতিটি API কল if #available(iOS N+, *) { } else { }-এ মোড়ানো হয়। সম্পূর্ণ ক্লাসের জন্য, টাইপ স্তরে @available সহ #if os(iOS) ব্যবহার করুন। যদি কোনো API-র যুক্তিসঙ্গত ফallback না থাকে (যেমন, Live Activities), তাহলে ব্যবহারকারীর বিজ্ঞপ্তি সহ পুরানো সংস্করণের জন্য কার্যকারিতা নিষ্ক্রিয় করা হয়।
import UIKit
import SwiftUI
// Deployment Target 17.0 থেকে 16.0 এ কমানো
// আগে (@available iOS 17.0):
@available(iOS 17.0, *)
func setupObservation() {
// Observation framework — শুধুমাত্র iOS 17+
let model = ObservationViewModel()
// ...
}
// পরে (#available পরীক্ষা):
func setupObservationCompatible() {
if #available(iOS 17.0, *) {
// iOS 17+: Observation framework
let model = ObservationViewModel()
// ...
} else {
// iOS 16.x: @Published সহ ObservableObject
let model = LegacyObservableViewModel()
// ...
}
}
// UIKit iOS 17+ API এর জন্য:
@available(iOS 17.0, *)
class ModernViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// UIKit TraitChanges (iOS 17+) ব্যবহার করে
registerForTraitChanges([UITraitVerticalSizeClass.self]) { _, _ in }
}
}
// iOS 16 এর জন্য ফallback:
class LegacyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// কোনো registerForTraitChanges নেই — traitCollectionDidChange ব্যবহার করুন
}
override func traitCollectionDidChange(_: UITraitCollection?) {
super.traitCollectionDidChange(nil)
// iOS 16 এর জন্য traits পরিবর্তন পরিচালনা
}
}
// iOS সংস্করণ অনুসারে বাস্তবায়ন নির্বাচনের জন্য ফ্যাক্টরি
func makeViewController() -> UIViewController {
if #available(iOS 17.0, *) {
return ModernViewController()
} else {
return LegacyViewController()
}
}কোডটি Target iOS 17.0 থেকে 16.0-এ কমানোর প্রদর্শন করে। setupObservation ফাংশনটি #available পরীক্ষা সহ setupObservationCompatible দিয়ে প্রতিস্থাপিত হয়েছে। ViewController-কে Modern (iOS 17+) এবং Legacy (iOS 16) এ বিভক্ত করা হয়েছে OS সংস্করণ অনুসারে বাস্তবায়ন নির্বাচনকারী makeViewController ফ্যাক্টরি সহ। এই আর্কিটেকচার সম্পূর্ণ কোডবেস নকল না করে দুটি Deployment Target সমর্থন করার অনুমতি দেয় — শুধুমাত্র সংস্করণযুক্ত মডিউল।
Deployment Target কমানোর পরে, Xcode নতুন Target-এ অনুপলব্ধ সমস্ত API কল হলুদে হাইলাইট করবে। সতর্কতা "In iOS 16.0 and later" মানে পদ্ধতিটির উচ্চ সংস্করণ প্রয়োজন। সমাধান: @available বা if #available যোগ করুন (সুপারিশকৃত), ক্রমিক মাইগ্রেশনের জন্য @available(*, deprecated) দিয়ে দমন করুন, বা কল মুছে ফেলুন। প্রজেক্টে "Treat Warnings as Errors" সক্রিয় করলে এই সতর্কতাগুলি কম্পাইলেশন ত্রুটিতে পরিণত হবে — নিয়ন্ত্রণের জন্য এই অপশনটি সক্রিয় করুন।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
iOS Deployment Target হল ন্যূনতম iOS সংস্করণ যার উপর একটি অ্যাপ্লিকেশন চলতে পারে। এটি Xcode Project → Info → iOS Deployment Target-এ নির্দিষ্ট করা হয়। Target 16.0 বিশিষ্ট একটি অ্যাপ iOS 15.0 এবং নিচে ইনস্টল করা যাবে না। App Store এই প্যারামিটার অনুসারে অ্যাপ্লিকেশন ফিল্টার করে — অসমর্থিত সংস্করণের ব্যবহারকারীরা অ্যাপ দেখতে পায় না। Android-এর সমতুল্য হল minSdkVersion।
উভয় প্যারামিটার অ্যাপ্লিকেশন ইনস্টলের জন্য ন্যূনতম OS সংস্করণ নির্ধারণ করে। iOS Deployment Target Info.plist (MinimumOSVersion)-এ সংরক্ষণ করা হয়, minSdkVersion — AndroidManifest.xml-এ। iOS-এ targetSdkVersion এবং compileSdkVersion-এর সমতুল্য নেই — সমস্ত আচরণগত পরিবর্তন নতুন Base SDK দিয়ে কম্পাইল করার সময় প্রযোজ্য হয়। Android-এ, আচরণগত পরিবর্তন targetSdkVersion-এর মাধ্যমে নিয়ন্ত্রিত হয়। কোড পরীক্ষা: Swift-এ @available বনাম Android-এ Build.VERSION.SDK_INT।
গণ-বাজার অ্যাপ্লিকেশনের জন্য iOS 16.0 (83% ডিভাইস) এবং SwiftUI Observation/SwiftData ব্যবহারকারী স্টার্টআপগুলির জন্য iOS 17.0 (35% ডিভাইস) সুপারিশ করা হয়। iOS 16.0 iPhone 8 এবং নতুন মডেলে সমর্থিত, এতে SwiftUI Layout, NavigationStack, Live Activities অন্তর্ভুক্ত। iOS 17.0 Observation, SwiftData, TipKit প্রদান করে। লাইব্রেরি এবং SDK-এর জন্য — সর্বোচ্চ সামঞ্জস্যের জন্য iOS 15.0।
Swift-এ, শর্তসাপেক্ষ কোড সম্পাদনের জন্য ফাংশনের ভিতরে #available(iOS 17.0, *) বা ঘোষণামূলক পরীক্ষার জন্য ক্লাস/পদ্ধতি স্তরে @available(iOS 17.0, *) ব্যবহার করুন। সঠিক সংস্করণের জন্য — ProcessInfo.processInfo.operatingSystemVersion, যা OperatingSystemVersion ফেরত দেয়। Objective-C-এ, if-এর ভিতরে @available(iOS 17.0, *) ব্যবহার করুন। পরীক্ষা ছাড়া, Deployment Target-এর উপরের API কল করলে রানটাইম ক্র্যাশ হয়।
আপনি iOS Deployment Target কমাতে পারেন, কিন্তু এর জন্য উচ্চ সংস্করণের সমস্ত সরাসরি API কলকে #available পরীক্ষা এবং ফallback বাস্তবায়ন দিয়ে প্রতিস্থাপন করা প্রয়োজন। Xcode হলুদ সতর্কতা দিয়ে সতর্ক করবে কিন্তু ত্রুটি দেখাবে না। যুক্তিসঙ্গত ফallback ছাড়া API (Live Activities, SwiftData) পুরানো সংস্করণে নিষ্ক্রিয় করা হয়। জটিল মাইগ্রেশন এড়াতে বর্তমান থেকে 2 সংস্করণ নিচে Target দিয়ে শুরু করার সুপারিশ করা হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন