iOS, iPhone ve iPod touch'ı çalıştıran Apple'ın mobil işletim sistemidir. iOS geliştirme, Xcode ortamında Swift dili ile yapılır. Platform mimarisini, temel framework'leri ve App Store yayınlama sürecini inceleyelim.
Önemli Noktalar
iOS, Apple'ın mobil işletim sistemidir ve ilk olarak 2007'de ilk iPhone ile birlikte piyasaya sürülmüştür. Sistem, Mach ve FreeBSD bileşenlerini birleştiren hibrit bir çekirdek olan XNU mikro çekirdeği üzerine inşa edilmiştir. Android'in aksine iOS kapalı bir platformdur: uygulama kurulumu yalnızca App Store üzerinden mümkündür ve sistem kaynak kodu mevcut değildir.
Apple hem donanımı hem de yazılımı kontrol ederek yüksek düzeyde optimizasyon sağlar. StatCounter'a (2026) göre iOS'un küresel mobil işletim sistemi pazarındaki payı yaklaşık %28'dir ve ABD ile Japonya'da %50'yi aşmaktadır.
Sistem App Sandbox modelini kullanır — her uygulama izole bir ortamda çalışır ve sistem diyalogları aracılığıyla açık kullanıcı izni olmadan diğer uygulamaların verilerine erişemez.
İlk sürüm olan iPhone OS 1.0, üçüncü taraf uygulamaları desteklemiyordu. App Store, 2008'de iOS 2.0 ile geldi. Önemli dönüm noktaları: iOS 4 (çoklu görev), iOS 7 (düz tasarım), iOS 10 (iMessage uygulamaları), iOS 14 (masaüstü widget'ları), iOS 17 (StandBy modu). Her büyük sürüm, yeni API'ler ve framework'ler getirir.
| iOS Sürümü | Yıl | Önemli Yenilik |
|---|---|---|
| iPhone OS 1 | 2007 | İlk sürüm, App Store yok |
| iOS 2 | 2008 | App Store, üçüncü taraf uygulamalar |
| iOS 4 | 2010 | Çoklu görev, FaceTime |
| iOS 7 | 2013 | Tam arayüz yeniden tasarımı |
| iOS 10 | 2016 | iMessage uygulamaları, SiriKit |
| iOS 14 | 2020 | Widget'lar, App Library, Picture in Picture |
| iOS 17 | 2023 | StandBy, NameDrop, Live Voicemail |
iOS mimarisi, her biri üst katmana API sağlayan dört soyut katmandan oluşur. Alt katmanlar çekirdek ve sistem hizmetleri, üst katmanlar ise kullanıcı framework'leridir.
Cocoa Touch, kullanıcı arayüzü oluşturmak için framework katmanıdır. Geliştiricinin doğrudan çalıştığı UIKit, SwiftUI, Foundation, MapKit, NotificationCenter ve diğer API'leri içerir. UIKit, UIViewController, UIView, UIWindow ve tüm görsel bileşenleri sağlar.
Media katmanı Core Graphics, Core Animation, Core Image, AVFoundation ve Metal'i içerir. Metal, oyunlarda ve artırılmış gerçeklik uygulamalarında yüksek grafik performansı sağlayan düşük seviyeli bir GPU API'sidir. Core Animation, donanım hızlandırmalı olarak katman düzeyinde animasyonları yönetir.
Core Services, Core Data, CloudKit, Core Location, HealthKit, Core Motion ve Network'ü içerir. CFNetwork, ağ protokolleriyle çalışmak için düşük seviyeli bir C arayüzüdür. Foundation, NSString, NSArray, NSDictionary sınıflarıyla Core Foundation üzerinde nesne yönelimli bir sarmalayıcıdır.
En alt katman XNU çekirdeğini, APFS dosya sistemini, kriptografik modülleri (CommonCrypto, Security.framework), güç yönetimini ve aygıt sürücülerini içerir. Bu seviyede Secure Enclave çalışır — biyometrik verileri ve şifreleme anahtarlarını depolamak için bir yardımcı işlemci.
// Security framework aracılığıyla Secure Enclave bütünlük kontrolü
#import <LocalAuthentication/LocalAuthentication.h>
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
error:&error]) {
NSLog(@"Secure Enclave biyometri için kullanılabilir");
} else {
NSLog(@"Secure Enclave kullanılamıyor: %@", error.localizedDescription);
}Swift, Apple tarafından 2014 yılında Objective-C'nin yerine geçmek üzere tanıtılan bir programlama dilidir. Apple'da Chris Lattner tarafından geliştirilmiştir. Swift, modern dillerin (Rust, Kotlin, C#) sözdizimini C düzeyinde performansla birleştirir. TIOBE'ye (2026) göre Swift, ilk 15 programlama dili arasındadır.
Swift, çöp toplayıcı olmadan bellek yönetimi için Automatic Reference Counting (ARC) kullanır. Protokol odaklı programlama (POP), protokol uzantıları aracılığıyla türlerin genişletilmesine olanak tanır. Optional'lar, nil'in tür güvenli bir şekilde işlenmesini sağlar ve pattern matching, dallanma mantığını basitleştirir.
import UIKit
/// Veri yükleme hizmeti için protokol
protocol DataServiceProtocol {
associatedtype T
func fetch(completion: @escaping (Result<[T], Error>) -> Void)
}
/// Kullanıcıları yüklemek için hizmet uygulaması
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
}Örnek, Swift Concurrency (async/await), associatedtype içeren bir protokol ve JSON kod çözme için Codable kullanan bir veri yükleme hizmeti uygulamasını gösterir. ARC belleği otomatik olarak yönetir ve weak self, closure'lardaki güçlü referans döngülerini önler.
iOS 13'ten itibaren Swift, async/await ve Actors aracılığıyla yerleşik eşzamansızlığı destekler — veri yarışlarına karşı durumu koruyan iş parçacığı güvenli türler. Çoklu iş parçacığı için DispatchQueue, kademeli olarak async/await ve Task yapılarıyla değiştirilmektedir.
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 aktörü, önbellek erişiminin tek bir iş parçacığında gerçekleşmesini sağlayarak yarış durumlarını ortadan kaldırır. Derleyici, derleme zamanında yalıtımı kontrol eder — bir aktörün değiştirilebilir özelliğine erişim yalnızca await aracılığıyla mümkündür.
Xcode, Apple'ın yalnızca macOS'ta bulunan entegre geliştirme ortamıdır (IDE). Kod düzenleyici, görsel düzen için Interface Builder, aygıt simülatörü, profilleme için Instruments ve LLDB hata ayıklayıcıyı içerir. Xcode 15, makrolarla Swift 5.9'u destekler.
Interface Builder, otomatik XML tanımı (XIB/Storyboard) oluşturma ile sürükle-bırak yoluyla arayüzler oluşturmayı sağlar. Storyboard'lar ekran akışlarını tanımlar. 2023'ten itibaren Apple, SwiftUI Preview'yi ana görsel geliştirme aracı olarak önermektedir, ancak Interface Builder UIKit projelerinde kullanılmaya devam etmektedir.
Xcode Instruments, düzinelerce şablon içerir: Time Profiler (CPU analizi), Allocations (bellek), Leaks (sızıntılar), Core Animation (FPS), Network ve Energy Log. Metal Debugger, GPU çağrılarını ve gölgelendiricileri incelemeye olanak tanır. LLDB, Swift ifade desteği ve koşullu kesme noktalarına sahip bir konsol hata ayıklayıcısıdır.
iOS SDK yüzlerce framework içerir. Aşağıda, her iOS geliştiricisinin günlük olarak çalıştığı temel framework'ler bulunmaktadır.
| Framework | Amaç |
|---|---|
| UIKit | Arayüz: UIView, UIViewController, animasyonlar, jestler |
| SwiftUI | Tepkisel güncellemelerle bildirimsel arayüz |
| Foundation | Temel türler: String, Data, URLSession, JSONEncoder |
| Core Data | SQLite'da yerel veri depolama için ORM |
| CloudKit | iCloud senkronizasyonu ve backend olmadan sunucu tarafı mantığı |
| Core Location | Coğrafi konum: GPS, geofencing, iBeacon |
| MapKit | Apple Haritalar görüntüleme, açıklamalar, rotalar |
| AVFoundation | Ses/video yakalama ve oynatma |
| Metal | Düşük seviyeli grafikler ve GPGPU hesaplama |
| Core ML | Cihaz üzerinde çıkarım ile makine öğrenimi |
| PushKit / UserNotifications | Push bildirimleri, VoIP, içerik güncellemeleri |
Core Data, nesne veri modelini yönetmek için bir framework'tür. UI iş parçacığı ve arka plan bağlamları arasında nesneleri kaydetmeye, yüklemeye ve senkronize etmeye olanak tanır. iOS 17, SwiftData'yı tanıttı — Swift Macros desteğiyle Core Data üzerinde modern bir sarmalayıcı.
UIKit ve SwiftUI arasındaki seçim, iOS geliştirmeye başlarken önemli bir mimari karardır. UIKit 2007'den beri vardır ve tüm iOS sürümlerini destekler. SwiftUI 2019'da tanıtılmıştır ve iOS 13+ gerektirir.
| Kriter | UIKit | SwiftUI |
|---|---|---|
| Paradigma | Emir kipi (MVC, MVVM) | Bildirimsel (durum tabanlı) |
| Minimum iOS | iOS 2.0+ | iOS 13.0+ |
| Düzen | Kodda veya Interface Builder'da Auto Layout | Değiştirici zinciri, HStack/VStack/ZStack |
| Özelleştirme | Tam (CALayer, drawRect) | Değiştiricilerle sınırlı |
| Performans | Yüksek (manuel optimizasyon) | Otomatik geçersiz kılma |
| Önizleme | Desteklenmez | Gerçek zamanlı Xcode Preview |
| Test | XCTest + Snapshot testleri | XCTest + Preview testleri |
Pratikte, çoğu ticari proje hibrit bir yaklaşım kullanır: yeni ekranlar ve basit formlar için SwiftUI, ince işleme kontrolü gerektiren karmaşık özel bileşenler için UIKit. Apple, SwiftUI'ye aktif olarak yatırım yapmaktadır ve 2028'e kadar ana framework haline gelmesi beklenmektedir.
Her iOS uygulaması, UIApplication ve AppDelegate tarafından yönetilen beş durumdan geçer. SwiftUI'de, @main özniteliğine sahip App Protocol bu rolü üstlenir.
Not running — uygulama başlatılmamış veya sistem tarafından sonlandırılmıştır. Inactive — uygulama ön plandadır ancak olay almaz (örneğin, gelen bir arama sırasında). Active — normal durum, uygulama dokunma olaylarını alır. Background — uygulama simge durumuna küçültülmüş, arka plan görevlerini yürütür. Suspended — uygulama bellekte ancak kod çalıştırmıyor.
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("Uygulama etkin hale geldi")
case .inactive:
print("Uygulama etkin değil")
case .background:
print("Uygulama arka plana geçti")
@unknown default:
break
}
}
}
}Sistem, bellek yetersiz olduğunda uygulamayı arka planda sonlandırabilir. Geliştirici, kullanıcının uygulamalar arasında geçiş yaparken veri kaybetmemesi için durumu onDisappear veya ScenePhase.background aracılığıyla kaydetmelidir.
App Store, iOS için tek resmi uygulama mağazasıdır. Yayınlamak için Apple Developer Program aboneliği ($99/yıl) gerekir. Her uygulama denetimden geçer — otomatik (ikili kodun statik analizi) ve manuel (arayüz ve içerik incelemesi).
Geliştirici, Xcode'da bir arşiv oluşturur ve Transporter veya Xcode Organizer aracılığıyla App Store Connect'e yükler. Ortalama denetim süresi 24–48 saattir. App Review, yönergelere uygunluğu kontrol eder: veri güvenliği, performans, HIG tasarımı, gizli işlevsellik olmaması.
Gizliliğe özel önem verilir: tüm veri toplama türleri Privacy Manifest'te beyan edilmelidir. 2025'ten itibaren Apple, API kullanım nedenlerinin (NSPrivacyAccessedAPITypes) belirtilmesini zorunlu kılmaktadır. Kullanıcı izni olmadan izleyici kullanan uygulamalar reddedilir.
| Gereksinim | Açıklama |
|---|---|
| Privacy Manifest | Toplanan tüm verilerin ve toplama amaçlarının beyanı |
| HIG Uyumluluğu | Apple Human Interface Guidelines'a uygunluk |
| Kararlılık | Denetim sırasında çökme olmaması |
| Sandbox Kuralları | Yalnızca izin verilen kaynaklara erişim |
| iCloud Yetkilendirmeleri | Doğru iCloud kapsayıcı yapılandırması |
Sıkça sorulan sorular
Ana dil Swift'tir. Objective-C de desteklenmektedir ancak çoğunlukla eski projelerde kullanılır. Swift, Apple tarafından 2014'te tanıtılan modern, tür güvenli bir dildir. 2020'den bu yana Apple, yeni projeler için tek dil olarak Swift'i önermektedir.
UIKit, maksimum özelleştirme ile olgun bir framework'tür, karmaşık arayüzler için uygundur. SwiftUI, iOS 13+ için bildirimsel bir framework'tür, geliştirmeyi 2–3 kat hızlandırır. Çoğu proje, UIViewRepresentable ve UIHostingController aracılığıyla her iki yaklaşımı da kullanır.
Apple Developer Program yıllık aboneliği bireysel geliştiriciler için $99, kuruluşlar için $299'dur. Abonelik olmadan yayınlama mümkün değildir. App Store komisyonu, geliştiricinin yıllık gelirine bağlı olarak satışların %15–30'udur.
SwiftUI, iOS 13'ten (2019) itibaren kullanılabilir. Ancak NavigationStack, Observable Macro ve SwiftData dahil tüm özellikleri kullanmak için iOS 17 ve Xcode 15 gereklidir. Eski sürümlerin desteği SwiftUI işlevselliğini sınırlar.
App Sandbox, bir uygulamanın dosya sistemine, diğer uygulamaların verilerine ve sistem kaynaklarına erişimini kısıtlayan bir güvenlik modelidir. Her uygulama izole bir kapsayıcıda çalışır. Kişilere, fotoğraflara, mikrofona erişim, sistem diyalogu aracılığıyla açık izin gerektirir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun