iOS Deployment Target (həmçinin iOS Target, Deployment Target) — tətbiqin işlədilə biləcəyi Apple əməliyyat sisteminin minimum versiyası. Parametr Xcode layihəsində təyin edilir və uyğunluq sərhədini müəyyənləşdirir: iOS 16.0 seçildikdə tətbiq yalnız iOS 16.0 və daha yeni cihazlarda quraşdırılır. Apple Developer Documentation-ya görə, düzgün Deployment Target seçimi həm auditoriyanın əhatə dairəsinə, həm də yeni Swift və Objective-C frameworklərinin API-lərinə girişə təsir edir.
Əsas məqamlar
iOS Deployment Target — tətbiqin işləyə biləcəyi ən erkən iOS, iPadOS, tvOS, watchOS və ya visionOS versiyasını göstərən Xcode konfiqurasiya parametri. Hər Xcode layihəsi bu parametri hər platforma üçün ayrıca ehtiva edir. Məsələn, iOS tətbiqi Deployment Target 16.0-a, watchOS uzantısı isə 9.0-a malik ola bilər. İstifadəçinin cihazı iOS 15.0-da işləyirsə, Target 16.0 olan tətbiq App Store-da göstərilməyəcək və birbaşa paylama ilə quraşdırılmayacaq.
Deployment Target-in iş mexanizmi quraşdırma zamanı OS versiyasının yoxlanılmasına əsaslanır. iOS App Store Info.plist-dən (MinimumOSVersion açarı) Deployment Target dəyərini istifadəçinin cihazındakı OS versiyası ilə müqayisə edir. Cihazın versiyası aşağıdırsa — "Yüklə" düyməsi bloklanır və App Store API-si bu cihaz üçün axtarış nəticələrində tətbiqi qaytarmır. Eyni davranış TestFlight, ad-hoc və enterprise paylanmasına da aiddir.
StatCounter məlumatlarına görə, iyun 2025-ci ilə qədər iOS 16 aktiv iPhone cihazlarının təxminən 48%-ni, iOS 17 — 35%-ni, iOS 18 — 12%-ni, köhnə versiyalar isə təxminən 5%-ni təşkil edir. Deployment Target 16.0 seçimi cihazların 83%-ni əhatə edir, Target 17.0 — 35% (yalnız iOS 17+). Bu rəqəmlər qərar qəbul etmək üçün kritikdir: Target nə qədər yüksəkdirsə, auditoriya bir o qədər kiçikdir, lakin ən yeni SwiftUI və UIKit API-ləri bir o qədər əlçatandır.
| Deployment Target | Cihaz payı (iyun 2025) | Mövcud funksiyalar |
|---|---|---|
| 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% | Yeni Apple Intelligence API-ləri, təkmilləşdirilmiş SwiftUI |
Hər yeni iOS buraxılışı təkcə istifadəçi funksiyaları deyil, həm də tərtibatçılar üçün API-lər əlavə edir. Yeni SwiftUI modifier-ləri, UIKit metodları, SwiftData və Observation kimi framework-lər yalnız müəyyən Deployment Target-də mövcuddur. Tərtibatçı auditoriya əhatəsi ilə müasir alətlərin əlçatanlığı arasında balans tapmalıdır.
iOS Deployment Target və Android-in minSdkVersion-u eyni funksiyanı yerinə yetirir — tətbiq üçün minimum OS versiyasını təyin edir. Lakin tətbiq mexanizmləri və müşayiət edən alətlər fərqlənir. Bu fərqləri başa düşmək hər iki platformada işləyən tərtibatçılar üçün faydalıdır və ekosistemlər arasında keçid zamanı çaşqınlığın qarşısını almağa kömək edir.
iOS-da minimum versiya Xcode build settings (IPHONEOS_DEPLOYMENT_TARGET) vasitəsilə təyin edilir və Info.plist-də (MinimumOSVersion) saxlanılır. Android-də — build.gradle (minSdkVersion) və AndroidManifest.xml (<uses-sdk android:minSdkVersion>) vasitəsilə. iOS-da targetSdkVersion və compileSdkVersion analoqu yoxdur — iOS-da davranış dəyişiklikləri tətbiqin kompilyasiya olunduğu SDK (Base SDK) və cihazdakı OS versiyası ilə idarə olunur.
| Parametr | iOS | Android |
|---|---|---|
| Minimum versiya | Deployment Target (IPHONEOS_DEPLOYMENT_TARGET) | minSdkVersion |
| Harada göstərilir | Xcode Build Settings → Info.plist | build.gradle → AndroidManifest.xml |
| Kodda yoxlama | @available / #available / if #available | Build.VERSION.SDK_INT |
| Hədəf versiya | Base SDK (həmişə ən son) | compileSdkVersion + targetSdkVersion |
| Mağazada filtrləmə | App Store: MinimumOSVersion | Google Play: minSdkVersion |
Əsas fərq — iOS-da Base SDK həmişə Xcode-da quraşdırılmış ən son versiyadır. Tərtibatçı Android-də olduğu kimi compileSdkVersion seçə bilməz — tətbiq həmişə mövcud olan ən son SDK-ya qarşı kompilyasiya olunur. iOS-da yeni davranış dəyişiklikləri Deployment Target-dən asılı olmayaraq yeni Base SDK ilə kompilyasiya olunmuş bütün tətbiqlərə tətbiq edilir. Android-də targetSdkVersion davranış dəyişiklikləri üzərində nəzarət verir, iOS-da belə bölgü yoxdur.
Android-dən fərqli olaraq, burada davranış dəyişiklikləri targetSdkVersion ilə bağlıdır, iOS dəyişiklikləri yeni Xcode və Base SDK versiyası ilə kompilyasiya olunmuş bütün tətbiqlərə tətbiq edir. Məsələn, iOS 13 Dark Mode-u təqdim etdi — Xcode 11 və iOS 13 SDK ilə qurulmuş bütün tətbiqlər Deployment Target-dən asılı olmayaraq avtomatik olaraq qaranlıq tema dəstəyi alırdı. Android-də analoji dəyişiklik (Scoped Storage) yalnız targetSdk >= 29 olduqda tətbiq edilir. iOS tərtibatçısı hər yeni Xcode ilə davranış dəyişikliklərinə hazır olmalıdır, təxirə salma imkanı olmadan.
Hər iki platformanı bilmək minimum versiya seçiminin nəticələrini proqnozlaşdırmağa və yeni API-lər üçün kod yeniləmələrini planlaşdırmağa imkan verir. IT Sectr-də 2017-ci ildən hər iki ekosistemdən istifadə edirik — təcrübə göstərir ki, iOS Deployment Target əhatə və funksionallıq balansı üçün cari versiyadan 2–3 versiya aşağı seçilməlidir.
iOS Deployment Target-in konfiqurasiyası layihənin bir neçə yerində aparılır: əsas Target, Pods layihəsi (CocoaPods istifadə olunarsa), Swift Package Manager asılılıqları və Widget/Extension target-ləri. Dəyərlər əsas tətbiq və uzantılar arasında fərqlənirsə, App Store hamısından maksimumu istifadə edir — yəni uzantı əsas tətbiqdən aşağı Target-ə malik ola bilməz.
Xcode layihəsini açın → Target seçin → General vərəqi → Minimum iOS Deployment bölməsi. Açılan siyahı Xcode-da quraşdırılmış bütün mövcud iOS SDK versiyalarını göstərir. Dəyişiklik bütün qurma sxemlərinə tətbiq edilir. Alternativ — Build Settings vərəqi → iOS Deployment Target (IPHONEOS_DEPLOYMENT_TARGET). Layihədə bir neçə Target-uzantısı (Widget, Watch) varsa, hər birinin öz Deployment Target-i var.
SPM vasitəsilə paylanan kitabxanalar üçün Deployment Target Package.swift-də platforms parametrində göstərilir. platforms: [.iOS(.v16)] olan kitabxana yalnız Deployment Target iOS 16.0+ olan tətbiqlər üçün əlçatan olacaq. Belə bir kitabxana Target 15.0 olan layihəyə qoşulduqda Xcode uyğunsuzluq xətası verəcək. CocoaPods-da Deployment Target Podfile-da təyin edilir: platform :ios, '16.0'.
// Package.swift — SPM kitabxanası üçün 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")
]
)
]
)
// Kodda uyğunluğun yoxlanılması
#if swift(>=5.9)
// Swift 5.9+ funksiyaları (Xcode 15+)
#endifNümunədə Package.swift platformaları iOS 16+, macOS 13+, watchOS 9+, tvOS 16+ təyin edilmişdir. Deployment Target-i iOS 16.0-dan aşağı olan hər hansı layihə bu kitabxananı qoşa bilməyəcək. swiftSettings parametri konkret Swift versiyası üçün upcoming features daxildir. SPM asılılıq əlavə edərkən platforms uyğunluğunu avtomatik yoxlayır.
Podfile platform :ios, '16.0' direktivindən istifadə edir. pod install-dan sonra CocoaPods hər pod-kitabxanasının Deployment Target-ni yoxlayır: əgər ən azı birinin Target-i layihədən yüksəkdirsə, quraşdırma "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" xətası ilə başa çatacaq. Həll — problemli pod-un Target-ni endirmək və ya layihənin Target-ni yüksəltmək.
# Podfile — Deployment Target ilə nümunə
platform :ios, '16.0'
# Deployment Target haqqında xəbərdarlıqları göz ardı et
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-da post_install hook bütün pod-kitabxanaları üçün məcburi olaraq Deployment Target 16.0 təyin edir. Bu, pod-lardan biri funksionallığı üçün tələb olunandan daha yüksək Target göstərdikdə faydalıdır. Bundan yalnız pod-un daha yüksək iOS versiyasından API istifadə etmədiyinə əmin olduqda istifadə edin.
@available və #available — Swift və Objective-C-nin yalnız müəyyən OS versiyalarında mövcud olan API-ləri təhlükəsiz çağırmaq üçün direktivləri. Layihənin Deployment Target-i iOS 16.0-dırsa və metod iOS 17.0 tələb edirsə, birbaşa çağırış iOS 16.0-16.x olan cihazlarda runtime crash-ına səbəb olacaq. Mövcudluq yoxlamaları — bir neçə iOS versiyasını dəstəkləmək üçün məcburi alətdir.
@available direktivi siniflərə, metodlara və ya bütün fayllara tətbiq edilir. Əgər @available(iOS 17.0, *) sinifdən əvvəl göstərilibsə, bütün sinif yalnız iOS 17.0+-da mövcuddur. Sinifi iOS 16.0-da çağırmaq cəhdi runtime xətasına səbəb olacaq. @available-dən OS-nin konkret versiyasına aid funksionallığın bütün modullarını təcrid etmək üçün istifadə edin. Sinif daxilində metodlar üçün @available ayrı-ayrı funksiyaları gizlətməyə imkan verir.
#available direktivi (if #available) OS versiyasını runtime-da yoxlayır və kodu yalnız uyğun olduqda icra edir. Funksiyalar daxilində yeni və köhnə tətbiqlər arasında seçim üçün istifadə olunur. Objective-C-də analoq — if daxilində @available(iOS 17.0, *). Daha mürəkkəb yoxlamalar üçün versiya komponentlərini (major, minor, patch) müqayisə etmək üçün ProcessInfo.processInfo.isOperatingSystemAtLeast istifadə edin.
import UIKit
import SwiftUI
// 1. @available — bütün sinif yalnız iOS 17+ üçün
@available(iOS 17.0, *)
class ObservationViewModel: ObservableObject {
@Published var name: String = "User"
// Observation frameworkündən istifadə edir — yalnız iOS 17+ mövcuddur
func updateWithObservation() {
let newName = "Updated via Observation"
name = newName
}
}
// 2. #available — funksiya daxilində şərti çağırış
func configureLiveActivity() {
if #available(iOS 16.1, *) {
// Live Activities API — iOS 16.1-dən mövcuddur
let activity = Activity<MyAttributes>(
attributes: MyAttributes(name: "Live"),
contentState: MyContentState(value: 42)
)
Task {
await activity.activate()
}
} else {
// Fallback: push bildirişi və ya heç nə
print("Live Activities mövcud deyil")
}
}
// 3. ProcessInfo — dəqiq versiya yoxlaması
func checkOSVersion() {
let osVersion = ProcessInfo.processInfo.operatingSystemVersion
print("iOS \(osVersion.majorVersion).\(osVersion.minorVersion).\(osVersion.patchVersion)")
// Komponentlərin müqayisəsi
if osVersion.majorVersion >= 17 {
print("iOS 17+ aşkar edildi")
}
}
// 4. Objective-C @available
// Objective-C-də @available istifadə olunur:
// if (@available(iOS 17.0, *)) { }
// 5. @available unavailable arqumenti ilə
@available(*, unavailable, message: "Use configureWithSwiftUI instead")
func legacyConfigureMethod() { }ObservationViewModel sinfi iOS 17 funksionallığını təcrid etmək üçün @available istifadə edir. configureLiveActivity funksiyası Live Activities (iOS 16.1+) yoxlamaq üçün #available istifadə edir, fallback tətbiqi ilə. ProcessInfo dəqiq OS versiyasını yoxlayır. @available(*, unavailable) metodu bütün versiyalarda əlçatmaz edir — yeni API-yə miqrasiya üçün. Bu yoxlamalar olmadan Deployment Target 16.0 olan tətbiq iOS 17 API-ni çağırdıqda iOS 16.0 cihazlarında çökəcək.
Objective-C Swift #available ilə eyni semantikada @available(iOS 17.0, *) istifadə edir. Fərq: Objective-C runtime-da yoxlayır, Swift #available — həmçinin runtime, lakin budaqlanmanın optimallaşdırılması üçün kompilyatora ipucları ilə. Swift ilə qarşılıqlı əlaqədə olan Objective-C kodunda mövcudluq yoxlamaları Objective-C tərəfində lazımdır — Swift-bridging avtomatik yoxlamalar əlavə etmir.
iOS Deployment Target seçimi — üç aspektə təsir edən strateji qərardır: auditoriya əhatəsi, mövcud API-lər və kodun dəstək mürəkkəbliyi. Vahid düzgün dəyər yoxdur — seçim tətbiqin hədəf auditoriyasından, minimum tələb olunan funksiyalardan və komandanın geriyə uyğunluq dəstəyi üçün resurslarından asılıdır.
Birinci amil — iOS versiyalarının istifadə statistikası. Apple WWDC və Apple Developer Dashboard-da iOS quraşdırma məlumatlarını dərc edir. İyun 2025-ə paylama: iOS 15 — ~7%, iOS 16 — ~48%, iOS 17 — ~35%, iOS 18 — ~10%. Target 16.0 seçimi 83% əhatə verir, Target 17.0 — 35%. Kütləvi tətbiq üçün (sosial media, messencerlər, e-commerce) Target 16.0 tövsiyə olunur. Xüsusi API tələbləri olan niş B2B tətbiqi üçün — Target 17.0.
İkinci amil — tələb olunan API-lər. Tətbiqin əsas funksiyası SwiftData (iOS 17+), Observation (iOS 17+) və ya Live Activities (iOS 16.1+) tələb edirsə, Target tələb olunan versiyadan aşağı ola bilməz. Layihələndirmə mərhələsində tələb olunan API-lərin analizi inkişafın yarısında daha yüksək Target-ə ehtiyac olduğu vəziyyətin qarşısını alır. Availability Checks-dən ehtiyat variant kimi istifadə edin, lakin əsas plan kimi yox.
Üçüncü amil — test üçün resurslar. Köhnə iOS versiyalarının dəstəklənməsi simulyatorlarda və həmin versiyaları olan real cihazlarda sınaq tələb edir. iOS 15 iPhone 6s/7-də, iOS 16 — iPhone 8/X-də, iOS 17 — iPhone XS/XR-də test edilir. Hər əlavə backward compatibility versiyası QA vaxtını artırır. Komanda kiçikdirsə, cari versiyadan 2–3 versiya aşağı Target (16.0) seçmək məqsədəuyğundur — əhatə və əmək xərcləri arasında balans.
| Tətbiq növü | Tövsiyə olunan Target | Əhatə | Əsaslandırma |
|---|---|---|---|
| Kütləvi (sosial media, marketpleys) | iOS 16.0 | ~83% | Maksimum auditoriya |
| Enterprise / B2B | iOS 16.0 | ~83% | Korporativ cihazlar yavaş yenilənir |
| Startap / MVP | iOS 17.0 | ~35% | Yeni API-lərdə sürətli inkişaf |
| Oyunlar (Metal 3+) | iOS 17.0 | ~35% | Yeni qrafik API-ləri tələb edir |
| Kitabxana/SDK | iOS 15.0 | ~90% | Müştərilər üçün maksimum uyğunluq |
Kitabxanalar və SDK mümkün qədər aşağı Deployment Target-ə (15.0 və ya hətta 14.0) malik olmalıdır — kitabxana istehlakçıları sizdən daha yüksək Target-ə malik ola bilər. Kitabxana iOS 17.0 tələb edirsə, layihələrin yarısı onu qoşa bilməyəcək. Tətbiqlər üçün isə əksinə, yeni API-lərə giriş üçün daha yüksək Target ödəyə bilərsiniz.
iOS Deployment Target-in endirilməsi — auditoriyanı genişləndirmək və ya köhnə layihələrlə uyğunluğu olan kitabxana dərc etmək zərurəti yarandıqda ortaya çıxan tapşırıqdır. Yüksəltmədən fərqli olaraq, endirmə kodla aktiv iş tələb edir: yeni (aşağı) Target-də mövcud olmayan bütün birbaşa API çağırışlarını #available yoxlamaları və fallback tətbiqləri ilə əvəz etmək lazımdır.
İlk addım — API inventarlaşdırması. Xcode Target endirilərkən kompilyasiya xətası vermir — yalnız sarı xəbərdarlıqlarla xəbərdar edir. Yeni Target-dən yüksək olan N ilə @available(iOS N+, *) ilə işarələnmiş bütün metod və sinifləri tapmalısınız. Layihə üzrə axtarışdan (Cmd+Shift+F) "available(iOS" nümunəsi ilə istifadə edin. Hər belə çağırış refaktorinq üçün namizəddir.
İkinci addım — #available yoxlamaları ilə əvəz etmə. Daha yüksək versiyadan hər API çağırışı if #available(iOS N+, *) { } else { } ilə bükülür. Bütün siniflər üçün #if os(iOS) ilə @available tip səviyyəsində istifadə edin. API-nin məntiqli fallback-i yoxdursa (məsələn, Live Activities), funksionallıq istifadəçiyə bildirişlə köhnə versiyalarda söndürülür.
import UIKit
import SwiftUI
// Deployment Target-in 17.0-dan 16.0-a endirilməsi
// ƏVVƏL (@available iOS 17.0):
@available(iOS 17.0, *)
func setupObservation() {
// Observation framework — yalnız iOS 17+
let model = ObservationViewModel()
// ...
}
// SONRA (#available yoxlaması):
func setupObservationCompatible() {
if #available(iOS 17.0, *) {
// iOS 17+: Observation framework
let model = ObservationViewModel()
// ...
} else {
// iOS 16.x: @Published ilə ObservableObject
let model = LegacyObservableViewModel()
// ...
}
}
// UIKit iOS 17+ API üçün:
@available(iOS 17.0, *)
class ModernViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// UIKit TraitChanges (iOS 17+) istifadə edir
registerForTraitChanges([UITraitVerticalSizeClass.self]) { _, _ in }
}
}
// iOS 16 üçün Fallback:
class LegacyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// registerForTraitChanges yoxdur — traitCollectionDidChange istifadə edirik
}
override func traitCollectionDidChange(_: UITraitCollection?) {
super.traitCollectionDidChange(nil)
// iOS 16 üçün traits dəyişikliklərinin işlənməsi
}
}
// iOS versiyasına görə tətbiq seçimi üçün fabrik
func makeViewController() -> UIViewController {
if #available(iOS 17.0, *) {
return ModernViewController()
} else {
return LegacyViewController()
}
}Kod Target-in iOS 17.0-dan 16.0-a endirilməsini nümayiş etdirir. setupObservation funksiyası #available yoxlaması ilə setupObservationCompatible ilə əvəz edilmişdir. ViewController Modern (iOS 17+) və Legacy (iOS 16) bölünmüşdür, makeViewController fabriki OS versiyasına görə tətbiqi seçir. Belə arxitektura bütün kod bazasını təkrarlamadan iki Deployment Target-i saxlamağa imkan verir — yalnız versiyalaşdırılmış modullar.
Deployment Target endirildikdən sonra Xcode yeni Target-də mövcud olmayan bütün API çağırışlarını sarı rənglə vurğulayacaq. "In iOS 16.0 and later" xəbərdarlığı metodun daha yüksək versiya tələb etdiyini bildirir. Həll yolları: @available və ya if #available əlavə etmək (tövsiyə olunur), tədricən miqrasiya üçün @available(*, deprecated) ilə basdırmaq və ya çağırışı silmək. Layihədə "Treat Warnings as Errors" parametri bu xəbərdarlıqları kompilyasiya xətalarına çevirəcək — nəzarət üçün bu seçimi aktivləşdirin.
Tez-tez verilən suallar
iOS Deployment Target — tətbiqin işləyə biləcəyi minimum iOS versiyası. Xcode Project → Info → iOS Deployment Target-da göstərilir. Target 16.0 olan tətbiq iOS 15.0 və aşağısında quraşdırılmır. App Store tətbiqləri bu parametrə görə filtrələyir — dəstəklənməyən versiyası olan istifadəçilər tətbiqi görmür. Android-də analoqu — minSdkVersion.
Hər iki parametr tətbiqin quraşdırılması üçün minimum OS versiyasını təyin edir. iOS Deployment Target Info.plist-də (MinimumOSVersion) saxlanılır, minSdkVersion — AndroidManifest.xml-də. iOS-da targetSdkVersion və compileSdkVersion analoqu yoxdur — bütün davranış dəyişiklikləri yeni Base SDK ilə kompilyasiya zamanı tətbiq edilir. Android-də davranış dəyişiklikləri targetSdkVersion vasitəsilə idarə olunur. Kodda yoxlama: Swift-də @available vs Android-də Build.VERSION.SDK_INT.
Kütləvi tətbiqlər üçün iOS 16.0 (cihazların 83%-i) və startaplar və SwiftUI Observation/SwiftData layihələri üçün iOS 17.0 (cihazların 35%-i) tövsiyə olunur. iOS 16.0 iPhone 8 və daha yenisində dəstəklənir, SwiftUI Layout, NavigationStack, Live Activities daxildir. iOS 17.0 Observation, SwiftData, TipKit verir. Kitabxana və SDK-lar üçün — maksimum uyğunluq üçün iOS 15.0.
Swift-də funksiyalar daxilində şərti icra üçün #available(iOS 17.0, *) və ya sinif/metod səviyyəsində deklarativ yoxlama üçün @available(iOS 17.0, *) istifadə edin. Dəqiq versiya üçün — OperatingSystemVersion qaytaran ProcessInfo.processInfo.operatingSystemVersion. Objective-C-də if daxilində @available(iOS 17.0, *) istifadə edin. Yoxlamalar olmadan Deployment Target-dən yuxarı API çağırışı runtime crash-ına səbəb olur.
iOS Deployment Target-i endirmək olar, lakin bu, daha yüksək versiyalardan bütün birbaşa API çağırışlarının fallback tətbiqləri ilə #available yoxlamaları ilə əvəz edilməsini tələb edir. Xcode sarı xəbərdarlıqlarla xəbərdar edəcək, lakin xəta verməyəcək. Məntiqli fallback-i olmayan API-lər (Live Activities, SwiftData) köhnə versiyalarda söndürülür. Mürəkkəb miqrasiyanın qarşısını almaq üçün cari versiyadan 2 versiya aşağı Target ilə başlamaq tövsiyə olunur.
Nəticə
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.
Həm də oxuyun