iOS là hệ điều hành di động của Apple, cung cấp năng lượng cho iPhone và iPod touch. Phát triển iOS được thực hiện bằng ngôn ngữ Swift trong môi trường Xcode. Hãy cùng khám phá kiến trúc nền tảng, các framework chính và quy trình xuất bản lên App Store.
Những điểm chính
iOS là hệ điều hành di động của Apple, được phát hành lần đầu vào năm 2007 cùng với chiếc iPhone đầu tiên. Hệ thống được xây dựng trên vi nhân XNU, một nhân lai kết hợp các thành phần của Mach và FreeBSD. Không giống như Android, iOS là nền tảng đóng: việc cài đặt ứng dụng chỉ có thể thực hiện qua App Store và mã nguồn hệ thống không có sẵn.
Apple kiểm soát cả phần cứng và phần mềm, đảm bảo mức độ tối ưu hóa cao. Theo StatCounter (2026), thị phần của iOS trên thị trường hệ điều hành di động toàn cầu là khoảng 28% và vượt quá 50% tại Mỹ và Nhật Bản.
Hệ thống sử dụng mô hình App Sandbox — mỗi ứng dụng chạy trong một môi trường biệt lập và không thể truy cập dữ liệu của ứng dụng khác nếu không có sự cho phép rõ ràng từ người dùng thông qua hộp thoại hệ thống.
Phiên bản đầu tiên iPhone OS 1.0 không hỗ trợ ứng dụng bên thứ ba. App Store ra mắt với iOS 2.0 vào năm 2008. Các mốc quan trọng: iOS 4 (đa nhiệm), iOS 7 (thiết kế phẳng), iOS 10 (iMessage Apps), iOS 14 (widget trên màn hình chính), iOS 17 (chế độ StandBy). Mỗi bản phát hành lớn đều mang đến API và framework mới.
| Phiên bản iOS | Năm | Cải tiến chính |
|---|---|---|
| iPhone OS 1 | 2007 | Phiên bản đầu tiên, không có App Store |
| iOS 2 | 2008 | App Store, ứng dụng bên thứ ba |
| iOS 4 | 2010 | Đa nhiệm, FaceTime |
| iOS 7 | 2013 | Thiết kế lại toàn bộ giao diện |
| iOS 10 | 2016 | iMessage Apps, SiriKit |
| iOS 14 | 2020 | Widget, App Library, Picture in Picture |
| iOS 17 | 2023 | StandBy, NameDrop, Live Voicemail |
Kiến trúc của iOS bao gồm bốn lớp trừu tượng, mỗi lớp cung cấp API cho lớp bên trên. Các lớp dưới cùng là nhân và dịch vụ hệ thống, các lớp trên là framework người dùng.
Cocoa Touch là lớp framework để xây dựng giao diện người dùng. Nó bao gồm UIKit, SwiftUI, Foundation, MapKit, NotificationCenter và các API khác mà nhà phát triển làm việc trực tiếp. UIKit cung cấp UIViewController, UIView, UIWindow và tất cả các thành phần trực quan.
Lớp Media bao gồm Core Graphics, Core Animation, Core Image, AVFoundation và Metal. Metal là API GPU cấp thấp mang lại hiệu suất đồ họa cao trong game và ứng dụng thực tế tăng cường. Core Animation quản lý hoạt ảnh ở cấp lớp với tăng tốc phần cứng.
Core Services bao gồm Core Data, CloudKit, Core Location, HealthKit, Core Motion và Network. CFNetwork là giao diện C cấp thấp để làm việc với các giao thức mạng. Foundation là một wrapper hướng đối tượng trên Core Foundation với các lớp NSString, NSArray, NSDictionary.
Lớp dưới cùng bao gồm nhân XNU, hệ thống tệp APFS, mô-đun mật mã (CommonCrypto, Security.framework), quản lý nguồn điện và trình điều khiển thiết bị. Secure Enclave hoạt động ở cấp này — một bộ đồng xử lý để lưu trữ dữ liệu sinh trắc học và khóa mã hóa.
// Kiểm tra tính toàn vẹn của Secure Enclave qua Security framework
#import <LocalAuthentication/LocalAuthentication.h>
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
error:&error]) {
NSLog(@"Secure Enclave khả dụng cho sinh trắc học");
} else {
NSLog(@"Secure Enclave không khả dụng: %@", error.localizedDescription);
}Swift là ngôn ngữ lập trình được Apple giới thiệu vào năm 2014 để thay thế Objective-C. Nó được Chris Lattner phát triển tại Apple. Swift kết hợp cú pháp của các ngôn ngữ hiện đại (Rust, Kotlin, C#) với hiệu suất ngang C. Theo TIOBE (2026), Swift nằm trong top 15 ngôn ngữ lập trình.
Swift sử dụng Automatic Reference Counting (ARC) để quản lý bộ nhớ mà không cần bộ thu gom rác. Lập trình hướng giao thức (POP) cho phép mở rộng kiểu thông qua mở rộng giao thức. Optionals cung cấp xử lý nil an toàn về kiểu, và pattern matching đơn giản hóa logic rẽ nhánh.
import UIKit
/// Giao thức cho dịch vụ tải dữ liệu
protocol DataServiceProtocol {
associatedtype T
func fetch(completion: @escaping (Result<[T], Error>) -> Void)
}
/// Triển khai dịch vụ tải người dùng
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
}Ví dụ cho thấy triển khai dịch vụ tải dữ liệu sử dụng Swift Concurrency (async/await), giao thức với associatedtype và Codable để giải mã JSON. ARC tự động quản lý bộ nhớ và weak self ngăn chặn vòng tham chiếu mạnh trong closure.
Từ iOS 13, Swift hỗ trợ bất đồng bộ tích hợp thông qua async/await và Actors — các kiểu an toàn luồng bảo vệ trạng thái khỏi điều kiện tranh đua. DispatchQueue cho đa luồng đang dần được thay thế bởi async/await và cấu trúc 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 đảm bảo rằng việc truy cập bộ nhớ đệm diễn ra trên một luồng duy nhất, loại bỏ điều kiện tranh đua. Trình biên dịch kiểm tra sự cô lập tại thời điểm xây dựng — truy cập thuộc tính có thể thay đổi của actor chỉ có thể thực hiện qua await.
Xcode là môi trường phát triển tích hợp (IDE) của Apple, chỉ có sẵn trên macOS. Nó bao gồm trình soạn thảo mã, Interface Builder cho thiết kế trực quan, trình mô phỏng thiết bị, Instruments để phân tích và trình gỡ lỗi LLDB. Xcode 15 hỗ trợ Swift 5.9 với macro.
Interface Builder cho phép tạo giao diện bằng cách kéo và thả với tự động tạo mô tả XML (XIB/Storyboard). Storyboards mô tả luồng màn hình. Từ năm 2023, Apple khuyến nghị SwiftUI Preview làm công cụ phát triển trực quan chính, mặc dù Interface Builder vẫn được sử dụng trong các dự án UIKit.
Xcode Instruments bao gồm hàng chục mẫu: Time Profiler (phân tích CPU), Allocations (bộ nhớ), Leaks (rò rỉ), Core Animation (FPS), Network và Energy Log. Metal Debugger cho phép kiểm tra các lệnh gọi GPU và shader. LLDB là trình gỡ lỗi bảng điều khiển với hỗ trợ biểu thức Swift và điểm dừng có điều kiện.
iOS SDK bao gồm hàng trăm framework. Dưới đây là các framework chính mà mọi nhà phát triển iOS làm việc hàng ngày.
| Framework | Mục đích |
|---|---|
| UIKit | Giao diện: UIView, UIViewController, hoạt ảnh, cử chỉ |
| SwiftUI | Giao diện khai báo với cập nhật phản ứng |
| Foundation | Kiểu cơ bản: String, Data, URLSession, JSONEncoder |
| Core Data | ORM để lưu trữ dữ liệu cục bộ trong SQLite |
| CloudKit | Đồng bộ iCloud và logic máy chủ không cần backend |
| Core Location | Định vị địa lý: GPS, geofencing, iBeacon |
| MapKit | Hiển thị bản đồ Apple, chú thích, tuyến đường |
| AVFoundation | Chụp và phát lại âm thanh/video |
| Metal | Đồ họa cấp thấp và tính toán GPGPU |
| Core ML | Học máy trên thiết bị với suy luận cục bộ |
| PushKit / UserNotifications | Thông báo push, VoIP, cập nhật nội dung |
Core Data là framework để quản lý mô hình dữ liệu đối tượng. Nó cho phép lưu, tải và đồng bộ hóa các đối tượng giữa luồng UI và ngữ cảnh nền. iOS 17 đã giới thiệu SwiftData — một wrapper hiện đại trên Core Data với hỗ trợ Swift Macros.
Sự lựa chọn giữa UIKit và SwiftUI là một quyết định kiến trúc quan trọng khi bắt đầu phát triển iOS. UIKit đã tồn tại từ năm 2007 và hỗ trợ tất cả các phiên bản iOS. SwiftUI được giới thiệu vào năm 2019 và yêu cầu iOS 13+.
| Tiêu chí | UIKit | SwiftUI |
|---|---|---|
| Mô hình | Mệnh lệnh (MVC, MVVM) | Khai báo (dựa trên trạng thái) |
| iOS tối thiểu | iOS 2.0+ | iOS 13.0+ |
| Bố cục | Auto Layout trong mã hoặc Interface Builder | Chuỗi bổ nghĩa, HStack/VStack/ZStack |
| Tùy chỉnh | Hoàn toàn (CALayer, drawRect) | Giới hạn bởi bổ nghĩa |
| Hiệu suất | Cao (tối ưu thủ công) | Tự động vô hiệu hóa |
| Xem trước | Không hỗ trợ | Xcode Preview thời gian thực |
| Kiểm thử | XCTest + kiểm thử Snapshot | XCTest + kiểm thử Preview |
Trong thực tế, hầu hết các dự án thương mại sử dụng cách tiếp cận kết hợp: SwiftUI cho màn hình mới và biểu mẫu đơn giản, UIKit cho các thành phần tùy chỉnh phức tạp yêu cầu kiểm soát kết xuất chi tiết. Apple đang đầu tư mạnh vào SwiftUI và dự kiến nó sẽ trở thành framework chính vào năm 2028.
Mỗi ứng dụng iOS trải qua năm trạng thái được quản lý bởi UIApplication và AppDelegate. Trong SwiftUI, App Protocol với thuộc tính @main đảm nhận vai trò này.
Not running — ứng dụng chưa được khởi chạy hoặc đã bị hệ thống kết thúc. Inactive — ứng dụng ở tiền cảnh nhưng không nhận sự kiện (ví dụ: khi có cuộc gọi đến). Active — trạng thái bình thường, ứng dụng nhận sự kiện chạm. Background — ứng dụng được thu nhỏ, thực hiện tác vụ nền. Suspended — ứng dụng trong bộ nhớ nhưng không thực thi mã.
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("Ứng dụng đã hoạt động")
case .inactive:
print("Ứng dụng không hoạt động")
case .background:
print("Ứng dụng đã chuyển sang nền")
@unknown default:
break
}
}
}
}Hệ thống có thể kết thúc ứng dụng ở chế độ nền khi thiếu bộ nhớ. Nhà phát triển nên lưu trạng thái trong onDisappear hoặc qua ScenePhase.background để người dùng không mất dữ liệu khi chuyển đổi giữa các ứng dụng.
App Store là cửa hàng ứng dụng chính thức duy nhất cho iOS. Xuất bản yêu cầu đăng ký Apple Developer Program ($99/năm). Mỗi ứng dụng đều trải qua kiểm duyệt — tự động (phân tích tĩnh mã nhị phân) và thủ công (kiểm tra giao diện và nội dung).
Nhà phát triển tạo kho lưu trữ trong Xcode và tải lên qua Transporter hoặc Xcode Organizer lên App Store Connect. Thời gian kiểm duyệt trung bình là 24–48 giờ. App Review kiểm tra tuân thủ hướng dẫn: bảo mật dữ liệu, hiệu suất, thiết kế HIG, không có chức năng ẩn.
Đặc biệt chú trọng đến quyền riêng tư: tất cả các loại thu thập dữ liệu phải được khai báo trong Privacy Manifest. Từ năm 2025, Apple yêu cầu chỉ rõ lý do sử dụng API (NSPrivacyAccessedAPITypes). Ứng dụng sử dụng trình theo dõi mà không có sự đồng ý của người dùng sẽ bị từ chối xuất bản.
| Yêu cầu | Mô tả |
|---|---|
| Privacy Manifest | Khai báo tất cả dữ liệu được thu thập và mục đích thu thập |
| Tuân thủ HIG | Tuân thủ Human Interface Guidelines của Apple |
| Ổn định | Không có sự cố trong quá trình kiểm duyệt |
| Quy tắc Sandbox | Chỉ truy cập tài nguyên được phép |
| Quyền iCloud | Cấu hình vùng chứa iCloud chính xác |
Câu hỏi thường gặp
Ngôn ngữ chính là Swift. Objective-C cũng được hỗ trợ nhưng chủ yếu được sử dụng trong các dự án cũ. Swift là ngôn ngữ hiện đại, an toàn về kiểu được Apple giới thiệu vào năm 2014. Từ năm 2020, Apple khuyến nghị Swift là ngôn ngữ duy nhất cho các dự án mới.
UIKit là framework trưởng thành với khả năng tùy chỉnh tối đa, phù hợp cho giao diện phức tạp. SwiftUI là framework khai báo cho iOS 13+, tăng tốc phát triển 2–3 lần. Hầu hết các dự án sử dụng cả hai cách tiếp cận thông qua UIViewRepresentable và UIHostingController.
Đăng ký Apple Developer Program hàng năm có giá $99 cho nhà phát triển cá nhân và $299 cho tổ chức. Không có đăng ký thì không thể xuất bản. Hoa hồng App Store là 15–30% doanh số tùy thuộc vào thu nhập hàng năm của nhà phát triển.
SwiftUI có sẵn từ iOS 13 (2019). Tuy nhiên, để sử dụng tất cả các tính năng bao gồm NavigationStack, Observable Macro và SwiftData, cần có iOS 17 và Xcode 15. Hỗ trợ các phiên bản cũ hơn sẽ hạn chế chức năng của SwiftUI.
App Sandbox là mô hình bảo mật hạn chế quyền truy cập của ứng dụng vào hệ thống tệp, dữ liệu của ứng dụng khác và tài nguyên hệ thống. Mỗi ứng dụng chạy trong một vùng chứa biệt lập. Truy cập vào danh bạ, ảnh, micrô cần có sự cho phép rõ ràng thông qua hộp thoại hệ thống.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm