iOS — мобільна операційна система Apple, що забезпечує роботу iPhone та iPod touch. Розробка під iOS ведеться мовою Swift у середовищі Xcode. Розглянемо архітектуру платформи, ключові фреймворки та процес публікації в App Store.
Головне
iOS — мобільна операційна система компанії Apple, вперше випущена в 2007 році разом з першим iPhone. Система побудована на мікроядрі XNU, гібридному ядрі, що поєднує компоненти Mach та FreeBSD. На відміну від Android, iOS є закритою платформою: встановлення додатків можливе лише через App Store, а вихідний код системи недоступний.
Apple контролює як апаратне, так і програмне забезпечення, що забезпечує високий рівень оптимізації. За даними StatCounter (2026), частка iOS на ринку мобільних ОС становить близько 28% у глобальному масштабі та перевищує 50% у США та Японії.
Система використовує модель пісочниці (App Sandbox) — кожен додаток працює в ізольованому середовищі та не має доступу до даних інших додатків без явного дозволу користувача через системні діалоги.
Перша версія iPhone OS 1.0 не підтримувала сторонні додатки. App Store з'явився в iOS 2.0 у 2008 році. Ключові віхи: iOS 4 (багатозадачність), iOS 7 (плоский дизайн), iOS 10 (iMessage додатки), iOS 14 (віджети на робочому столі), iOS 17 (режим StandBy). Кожен великий реліз приносить нові API та фреймворки.
| Версія iOS | Рік | Ключове нововведення |
|---|---|---|
| iPhone OS 1 | 2007 | Перша версія, без App Store |
| iOS 2 | 2008 | App Store, сторонні додатки |
| iOS 4 | 2010 | Багатозадачність, FaceTime |
| iOS 7 | 2013 | Повний редизайн інтерфейсу |
| iOS 10 | 2016 | iMessage додатки, SiriKit |
| iOS 14 | 2020 | Віджети, App Library, Picture in Picture |
| iOS 17 | 2023 | 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 у 2014 році як заміна Objective-C. Розроблена Крісом Латтнером в Apple. Swift поєднує синтаксис сучасних мов (Rust, Kotlin, C#) з продуктивністю на рівні C. За даними TIOBE (2026), Swift входить до топ-15 мов програмування.
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 запобігає циклам сильних посилань у замиканні.
Починаючи з 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
}
}Актор UserRepository гарантує, що доступ до кешу відбувається в одному потоці, виключаючи стани гонки. Компілятор перевіряє ізоляцію на етапі збірки — звернення до mutable-властивості actor можливе лише через await.
Xcode — інтегроване середовище розробки (IDE) від Apple, доступне виключно на macOS. Включає редактор коду, Interface Builder для візуального верстання, симулятор пристроїв, Instruments для профілювання та дебагер LLDB. Xcode 15 підтримує Swift 5.9 з макросами.
Interface Builder дозволяє створювати інтерфейс через drag-and-drop з автоматичною генерацією XML-опису (XIB/Storyboard). Storyboards описують потоки екранів. З 2023 року 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 | Машинне навчання на пристрої з on-device inference |
| PushKit / UserNotifications | Push-сповіщення, VoIP, оновлення контенту |
Core Data — фреймворк для керування об'єктною моделлю даних. Дозволяє зберігати, завантажувати та синхронізувати об'єкти між потоком UI та фоновими контекстами. В iOS 17 додано SwiftData — сучасна обгортка над Core Data з підтримкою Swift Macros.
Вибір між UIKit та SwiftUI — ключове архітектурне рішення при старті розробки під iOS. UIKit існує з 2007 року і підтримує всі версії iOS. SwiftUI представлений у 2019 році і потребує 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, і очікується, що до 2028 року він стане основним фреймворком.
Кожен iOS-додаток проходить через п'ять станів, керованих UIApplication та AppDelegate. В SwiftUI цю роль бере на себе App Protocol з @main-атрибутом.
Not running — додаток не запущено або завершено системою. Inactive — додаток на передньому плані, але не отримує події (наприклад, при вхідному дзвінку). Active — нормальний стан, додаток отримує touch-події. 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. Середній час модерації — 24–48 годин. App Review перевіряє відповідність guideline: безпека даних, продуктивність, дизайн HIG, відсутність прихованого функціоналу.
Особлива увага приділяється приватності: всі типи збору даних мають бути декларовані в Privacy Manifest. З 2025 року Apple вимагає вказувати причини використання API (NSPrivacyAccessedAPITypes). Додаткам, що використовують трекери без згоди користувача, відмовляють у публікації.
| Вимога | Опис |
|---|---|
| Privacy Manifest | Декларація всіх зібраних даних та цілей збору |
| HIG Compliance | Відповідність Human Interface Guidelines Apple |
| Stability | Відсутність крашів на етапі модерації |
| Sandbox Rules | Доступ лише до дозволених ресурсів |
| iCloud Entitlements | Правильне налаштування iCloud Container |
Часті запитання
Основна мова — Swift. Objective-C також підтримується, але використовується переважно в легасі-проектах. Swift — сучасна типобезпечна мова, представлена Apple у 2014 році. З 2020 року Apple рекомендує Swift як єдину мову для нових проектів.
UIKit — зрілий фреймворк з максимальною кастомізацією, підходить для складних інтерфейсів. SwiftUI — декларативний фреймворк для iOS 13+, що прискорює розробку в 2–3 рази. Більшість проектів використовують обидва підходи через UIViewRepresentable та UIHostingController.
Річна підписка Apple Developer Program коштує $99 для індивідуальних розробників та $299 для організацій. Без підписки публікація неможлива. Комісія App Store становить 15–30% від продажів залежно від річного доходу розробника.
SwiftUI доступний з iOS 13 (2019). Однак для використання всіх можливостей, включаючи NavigationStack, Observable Macro та SwiftData, потрібні iOS 17 та Xcode 15. Підтримка старих версій обмежує функціонал SwiftUI.
App Sandbox — модель безпеки, що обмежує доступ додатку до файлової системи, даних інших додатків та системних ресурсів. Кожен додаток працює в ізольованому контейнері. Доступ до контактів, фото, мікрофону потребує явного дозволу через системний діалог.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також