iOS — سیستمعامل موبایل Apple که عملکرد iPhone و iPod touch را تضمین میکند. توسعه اپلیکیشن برای iOS به زبان Swift در محیط Xcode انجام میشود. معماری پلتفرم، فریمورکهای کلیدی و فرآیند انتشار در App Store را بررسی میکنیم.
نکات کلیدی
iOS — سیستمعامل موبایل شرکت Apple که اولین بار در سال ۲۰۰۷ همراه با اولین iPhone منتشر شد. این سیستم بر پایه ریزهسته XNU ساخته شده است، هستهای ترکیبی که اجزای Mach و FreeBSD را در خود دارد. برخلاف Android، iOS یک پلتفرم بسته است: نصب اپلیکیشنها فقط از طریق App Store امکانپذیر است و کد منبع سیستم در دسترس نیست.
Apple هم سختافزار و هم نرمافزار را کنترل میکند که سطح بالایی از بهینهسازی را تضمین میکند. طبق StatCounter (۲۰۲۶)، سهم iOS در بازار سیستمعاملهای موبایل حدود ۲۸٪ در مقیاس جهانی است و در ایالات متحده و ژاپن از ۵۰٪ فراتر میرود.
سیستم از مدل سندباکس (App Sandbox) استفاده میکند — هر اپلیکیشن در یک محیط ایزوله کار میکند و بدون اجازه صریح کاربر از طریق دیالوگهای سیستمی به دادههای سایر اپلیکیشنها دسترسی ندارد.
نسخه اول iPhone OS 1.0 از اپلیکیشنهای شخص ثالث پشتیبانی نمیکرد. App Store در iOS 2.0 در سال ۲۰۰۸ ظاهر شد. نقاط عطف کلیدی: iOS 4 (چندوظیفگی)، iOS 7 (طراحی تخت)، iOS 10 (iMessage Apps)، iOS 14 (ویجتها در دسکتاپ)، iOS 17 (حالت StandBy). هر نسخه اصلی APIها و فریمورکهای جدیدی به همراه دارد.
| نسخه iOS | سال | نوآوری کلیدی |
|---|---|---|
| iPhone OS 1 | ۲۰۰۷ | نسخه اول، بدون App Store |
| iOS 2 | ۲۰۰۸ | App Store، اپلیکیشنهای شخص ثالث |
| iOS 4 | ۲۰۱۰ | چندوظیفگی، FaceTime |
| iOS 7 | ۲۰۱۳ | بازطراحی کامل رابط کاربری |
| iOS 10 | ۲۰۱۶ | iMessage Apps، SiriKit |
| iOS 14 | ۲۰۲۰ | ویجتها، App Library، Picture in Picture |
| iOS 17 | ۲۰۲۳ | StandBy، NameDrop، Live Voicemail |
معماری iOS از چهار لایه انتزاعی تشکیل شده است که هر کدام API را برای لایه بالایی فراهم میکند. لایههای پایینی هسته و خدمات سیستمی هستند، لایههای بالایی فریمورکهای کاربری هستند.
Cocoa Touch — لایه فریمورکها برای ساخت رابط کاربری. شامل UIKit، SwiftUI، Foundation، MapKit، NotificationCenter و سایر APIهایی است که توسعهدهنده مستقیماً با آنها کار میکند. UIKit UIViewController، UIView، UIWindow و تمام اجزای بصری را فراهم میکند.
لایه Media شامل Core Graphics، Core Animation، Core Image، AVFoundation و Metal است. Metal — API سطح پایین برای کار با GPU که عملکرد بالای گرافیک را در بازیها و اپلیکیشنهای واقعیت افزوده تضمین میکند. Core Animation انیمیشنها را در سطح لایه با شتاب سختافزاری مدیریت میکند.
Core Services شامل Core Data، CloudKit، Core Location، HealthKit، Core Motion و Network است. CFNetwork — رابط C سطح پایین برای کار با پروتکلهای شبکه. Foundation — پوشش شیگرا بر روی Core Foundation با کلاسهای NSString، NSArray، NSDictionary.
لایه پایینی شامل هسته XNU، سیستم فایل APFS، ماژولهای رمزنگاری (CommonCrypto، Security.framework)، مدیریت انرژی و درایورهای دستگاه است. در این سطح Secure Enclave کار میکند — پردازنده کمکی برای ذخیره دادههای بیومتریک و کلیدهای رمزنگاری.
// بررسی یکپارچگی Secure Enclave از طریق Security framework
#import <LocalAuthentication/LocalAuthentication.h>
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
error:&error]) {
NSLog(@"Secure Enclave برای بیومتریک در دسترس است");
} else {
NSLog(@"Secure Enclave در دسترس نیست: %@", error.localizedDescription);
}Swift — زبان برنامهنویسی معرفیشده توسط Apple در سال ۲۰۱۴ به عنوان جایگزین Objective-C. توسط کریس لتنر در Apple توسعه یافته است. Swift ترکیبی از نحو زبانهای مدرن (Rust، Kotlin، C#) با عملکرد در سطح C است. طبق TIOBE (۲۰۲۶)، Swift در بین ۱۵ زبان برنامهنویسی برتر قرار دارد.
Swift از Automatic Reference Counting (ARC) — شمارش خودکار مراجع برای مدیریت حافظه بدون زبالهروب استفاده میکند. برنامهنویسی پروتکلمحور (POP) امکان گسترش انواع را از طریق protocol extension فراهم میکند. Optionals کار با nil را به صورت نوعامن تضمین میکند و pattern matching پردازش شاخهها را ساده میکند.
import UIKit
/// پروتکل برای سرویس بارگذاری داده
protocol DataServiceProtocol {
associatedtype T
func fetch(completion: @escaping (Result<[T], Error>) -> Void)
}
/// پیادهسازی سرویس برای بارگذاری کاربران
final class UserService: DataServiceProtocol {
typealias T = User
private let session: URLSession
private let decoder: JSONDecoder
init(session: URLSession = .shared, decoder: JSONDecoder = JSONDecoder()) {
self.session = session
self.decoder = decoder
}
func fetch(completion: @escaping (Result<[User], Error>) -> Void) {
guard let url = URL(string: "https://api.example.com/users") else {
completion(.failure(URLError(.badURL)))
return
}
session.dataTask(with: url) { [weak self] data, response, error in
guard let self, let data = data else {
completion(.failure(error ?? URLError(.badServerResponse)))
return
}
do {
let users = try self.decoder.decode([User].self, from: data)
completion(.success(users))
} catch {
completion(.failure(error))
}
}.resume()
}
}
struct User: Codable, Identifiable {
let id: Int
let name: String
let email: String
}مثال پیادهسازی سرویس بارگذاری داده با استفاده از Swift Concurrency (async/await)، پروتکل با associatedtype و Codable برای رمزگشایی JSON را نشان میدهد. ARC به صورت خودکار حافظه را مدیریت میکند و weak self از چرخههای ارجاع قوی در بسته (closure) جلوگیری میکند.
از iOS 13، Swift از ناهمزمانی داخلی از طریق async/await و Actors پشتیبانی میکند — انواع امن از نظر نخ که وضعیت را از data races محافظت میکنند. DispatchQueue برای چندنخی به تدریج با ساختارهای async/await و Task جایگزین میشود.
actor UserRepository {
private var cache: [Int: User] = [:]
private let service = UserService()
func getUser(id: Int) async throws -> User {
if let cached = cache[id] {
return cached
}
let users = try await service.fetchAsync()
guard let user = users.first(where: { $0.id == id }) else {
throw UserError.notFound
}
cache[id] = user
return user
}
}actor UserRepository تضمین میکند که دسترسی به حافظه پنهان در یک نخ انجام میشود و شرایط رقابت (race conditions) را حذف میکند. کامپایلر ایزوله بودن را در مرحله ساخت بررسی میکند — دسترسی به ویژگی mutable یک actor فقط از طریق await امکانپذیر است.
Xcode — محیط توسعه یکپارچه (IDE) از Apple که منحصراً در macOS در دسترس است. شامل ویرایشگر کد، Interface Builder برای طراحی بصری، شبیهساز دستگاه، Instruments برای پروفایلینگ و دیباگر LLDB است. Xcode 15 از Swift 5.9 با ماکروها پشتیبانی میکند.
Interface Builder امکان ایجاد رابط کاربری به روش کشیدن و رها کردن با تولید خودکار توصیف XML (XIB/Storyboard) را فراهم میکند. Storyboards جریان صفحات را توصیف میکنند. از سال ۲۰۲۳، Apple SwiftUI Preview را به عنوان ابزار اصلی برای توسعه بصری توصیه میکند، اگرچه Interface Builder در پروژههای UIKit باقی میماند.
Xcode Instruments شامل دهها قالب: Time Profiler (تحلیل CPU)، Allocations (حافظه)، Leaks (نشت حافظه)، Core Animation (FPS)، Network و Energy Log است. Metal Debugger امکان بازرسی فراخوانیهای GPU و شیدرها را فراهم میکند. LLDB — دیباگر کنسولی با پشتیبانی از عبارات Swift و نقاط توقف شرطی.
iOS SDK شامل صدها فریمورک است. در زیر فریمورکهای کلیدی که هر توسعهدهنده iOS روزانه با آنها کار میکند آورده شده است.
| فریمورک | کاربرد |
|---|---|
| UIKit | رابط کاربری: UIView، UIViewController، انیمیشنها، ژستها |
| SwiftUI | رابط کاربری اعلامی با بهروزرسانی واکنشگرا |
| Foundation | انواع پایه: String، Data، URLSession، JSONEncoder |
| Core Data | ORM برای ذخیرهسازی محلی داده در SQLite |
| CloudKit | همگامسازی با iCloud و منطق سرور بدون بکاند |
| Core Location | مکانیابی: GPS، geofencing، iBeacon |
| MapKit | نمایش نقشههای Apple، حاشیهنویسی، مسیرها |
| AVFoundation | ضبط و پخش صوت/ویدئو |
| Metal | گرافیک سطح پایین و محاسبات GPGPU |
| Core ML | یادگیری ماشین روی دستگاه با استنتاج محلی |
| PushKit / UserNotifications | اعلانهای Push، VoIP، بهروزرسانی محتوا |
Core Data — فریمورک مدیریت مدل داده شیگرا. امکان ذخیره، بارگذاری و همگامسازی اشیاء بین نخ UI و زمینههای پسزمینه را فراهم میکند. در iOS 17، SwiftData اضافه شده است — پوشش مدرن بر روی Core Data با پشتیبانی از Swift Macros.
انتخاب بین UIKit و SwiftUI — تصمیم معماری کلیدی در شروع توسعه اپلیکیشن iOS است. UIKit از سال ۲۰۰۷ وجود دارد و از تمام نسخههای iOS پشتیبانی میکند. SwiftUI در سال ۲۰۱۹ معرفی شد و به iOS 13+ نیاز دارد.
| معیار | UIKit | SwiftUI |
|---|---|---|
| پارادایم | امری (MVC، MVVM) | اعلامی (State-driven) |
| حداقل iOS | iOS 2.0+ | iOS 13.0+ |
| طراحی | Auto Layout در کد یا Interface Builder | Modifier chain، HStack/VStack/ZStack |
| شخصیسازی | کامل (CALayer، drawRect) | محدود با اصلاحکنندهها |
| عملکرد | بالا (بهینهسازی دستی) | باطلسازی خودکار |
| Preview | پشتیبانی نمیکند | Xcode Preview در زمان واقعی |
| تست | XCTest + تستهای Snapshot | XCTest + تستهای Preview |
در عمل، اکثر پروژههای تجاری از رویکرد ترکیبی استفاده میکنند: SwiftUI برای صفحات جدید و فرمهای ساده، UIKit برای کامپوننتهای سفارشی پیچیده که نیاز به کنترل دقیق رندر دارند. Apple به طور فعال در SwiftUI سرمایهگذاری میکند و انتظار میرود تا سال ۲۰۲۸ به فریمورک اصلی تبدیل شود.
هر اپلیکیشن iOS پنج حالت را طی میکند که توسط UIApplication و AppDelegate مدیریت میشوند. در SwiftUI این نقش توسط App Protocol با ویژگی @main انجام میشود.
Not running — اپلیکیشن اجرا نشده یا توسط سیستم خاتمه یافته است. Inactive — اپلیکیشن در پیشزمینه است اما رویدادها را دریافت نمیکند (مثلاً هنگام تماس ورودی). Active — حالت عادی، اپلیکیشن رویدادهای لمسی را دریافت میکند. Background — اپلیکیشن کوچک شده و وظایف پسزمینه را انجام میدهد. Suspended — اپلیکیشن در حافظه است اما کد اجرا نمیکند.
import SwiftUI
@main
struct MyApp: App {
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { oldPhase, newPhase in
switch newPhase {
case .active:
print("برنامه فعال شد")
case .inactive:
print("برنامه غیرفعال است")
case .background:
print("برنامه به پسزمینه رفت")
@unknown default:
break
}
}
}
}سیستم ممکن است اپلیکیشن را در پسزمینه در صورت کمبود حافظه خاتمه دهد. توسعهدهنده باید وضعیت را در onDisappear یا از طریق ScenePhase.background ذخیره کند تا کاربر هنگام جابجایی بین اپلیکیشنها دادههای خود را از دست ندهد.
App Store — تنها فروشگاه رسمی اپلیکیشن برای iOS. انتشار نیاز به اشتراک Apple Developer Program دارد ($99/سال). هر اپلیکیشن بررسی میشود — خودکار (تحلیل استاتیک کد باینری) و دستی (بررسی رابط کاربری و محتوا).
توسعهدهنده بایگانی را در Xcode میسازد، از طریق Transporter یا Xcode Organizer به App Store Connect آپلود میکند. میانگین زمان بررسی ۲۴–۴۸ ساعت است. App Review مطابقت با دستورالعملها را بررسی میکند: امنیت داده، عملکرد، طراحی HIG، عدم وجود عملکرد پنهان.
توجه ویژه به حریم خصوصی: همه انواع جمعآوری داده باید در Privacy Manifest اعلام شوند. از سال ۲۰۲۵، Apple نیاز به ذکر دلایل استفاده از API دارد (NSPrivacyAccessedAPITypes). اپلیکیشنهایی که بدون رضایت کاربر از ردیابها استفاده میکنند رد میشوند.
| الزام | توضیح |
|---|---|
| Privacy Manifest | اعلامیه تمام دادههای جمعآوریشده و اهداف جمعآوری |
| HIG Compliance | مطابقت با Human Interface Guidelines اپل |
| Stability | عدم کرش در مرحله بررسی |
| Sandbox Rules | دسترسی فقط به منابع مجاز |
| iCloud Entitlements | پیکربندی صحیح iCloud Container |
سوالات متداول
زبان اصلی — Swift. Objective-C نیز پشتیبانی میشود، اما عمدتاً در پروژههای قدیمی استفاده میشود. Swift یک زبان مدرن با امنیت نوع است که توسط Apple در سال ۲۰۱۴ معرفی شد. از سال ۲۰۲۰، Apple Swift را به عنوان تنها زبان برای پروژههای جدید توصیه میکند.
UIKit — فریمورک بالغ با حداکثر شخصیسازی، مناسب برای رابطهای پیچیده. SwiftUI — فریمورک اعلامی برای iOS 13+ که توسعه را ۲–۳ برابر加速 میبخشد. اکثر پروژهها از هر دو رویکرد از طریق UIViewRepresentable و UIHostingController استفاده میکنند.
اشتراک سالانه Apple Developer Program برای توسعهدهندگان فردی ۹۹ دلار و برای سازمانها ۲۹۹ دلار است. بدون اشتراک انتشار امکانپذیر نیست. کمیسیون App Store ۱۵–۳۰٪ از فروش بسته به درآمد سالانه توسعهدهنده است.
SwiftUI از iOS 13 (۲۰۱۹) در دسترس است. با این حال، برای استفاده از تمام قابلیتها از جمله NavigationStack، Observable Macro و SwiftData، iOS 17 و Xcode 15 مورد نیاز است. پشتیبانی از نسخههای قدیمی عملکرد SwiftUI را محدود میکند.
App Sandbox — مدل امنیتی که دسترسی اپلیکیشن به سیستم فایل، دادههای سایر اپلیکیشنها و منابع سیستمی را محدود میکند. هر اپلیکیشن در یک کانتینر ایزوله کار میکند. دسترسی به مخاطبان، عکسها، میکروفون نیاز به مجوز صریح از طریق دیالوگ سیستمی دارد.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.