En Popüler 30 iOS Mülakat Soruları ve Cevapları (2026)
Bir iOS pozisyonuna hazırlanmak, mülakata girenlerin temel bilgileri, problem çözme yeteneğini ve muhakeme becerisini nasıl değerlendireceğini önceden tahmin etmeyi gerektirir. Bu iOS mülakat soruları, hazırlıklılığı, derinliği ve baskı altında düşünme yeteneğini ortaya koymaktadır.
iOS geliştirme alanındaki kariyer yolları, yeni kurulan şirketlerden büyük işletmelere kadar uzanır ve trendleri gerçek ürünlerle uyumlu hale getirir. Adaylar, sahada çalışırken teknik deneyimlerini, alan uzmanlıklarını, analiz alışkanlıklarını ve pratik becerilerini sergilerler; bu da ekiplerin, yöneticilerin ve kıdemlilerin, ileri düzey teknik rollerde sıkça sorulan sorular ve cevaplar aracılığıyla yeni mezunları, orta düzey ve deneyimli profesyonelleri değerlendirmelerine yardımcı olur. Daha fazla oku…
👉 Ücretsiz PDF İndir: iOS Mülakat Soruları ve Cevapları
En Sık Sorulan iOS Mülakat Soruları ve Cevapları
1) Nedir? Swift İsteğe Bağlı Malzemeler ve Bunları Güvenli Bir Şekilde Nasıl Açarsınız?
Swift seçenekler Bir değişken, bir değer veya nil içerebilir. Eksik değerler nedeniyle beklenmedik çökmeleri önlemeye yardımcı olurlar. Bir değişkenin hiçbir değeri olmayabileceği durumlarda, Swift Bu durum sizi söz konusu vakayı açıkça ele almaya zorlar.
Güvenli açma yöntemleri:
- İsteğe Bağlı Bağlama (
if let,guard let) — Mülakatlarda tercih edilen özellik. - İsteğe Bağlı Zincirleme (
?.) — Özelliklere güvenli bir şekilde erişin veya metotları güvenli bir şekilde çağırın. - Sıfır Birleşme (
??) — Varsayılan değeri belirtin.
Örnek:
var name: String? = "Alice"
// if let
if let unwrappedName = name {
print("Hello, \(unwrappedName)")
}
// guard let
func greet() {
guard let unwrappedName = name else { return }
print("Hello, \(unwrappedName)")
}
Kullanım guard let Erken çıkış fonksiyonlarına ve iç içe geçmeyi azaltmaya yönelik yaygın bir en iyi uygulama yöntemi.
2) iOS'te Uygulama Yaşam Döngüsünü ve Başlıca Durumlarını Açıklayın
iOS uygulama yaşam döngüsü, sistemin bir uygulamayı farklı yürütme durumlarından nasıl geçirdiğini açıklar. Bunu anlamak çok önemlidir çünkü mülakatlarda sıklıkla yaşam döngüsü bilgisi test edilir. turing.com+1
Devletler:
- Koşmak yok — Uygulama başlatılmadı/sonlandırılmadı.
- pasif — Uygulama ön planda ancak olayları almıyor.
- Aktif — Uygulama çalışıyor ve olayları alıyor.
- Olayın Arka Planı — Uygulama çalışıyor ancak ön planda değil.
- Asma — Uygulama bellekte mevcut ancak kod çalıştırmıyor.
Örnek Kullanım Durumu: Bir uygulama arka plana geçtiğinde, kullanıcı arayüzü gizliyken arka planda veri çekme veya yükleme işlemleri başlatabilirsiniz.
3) UIView'da frame ve bounds arasındaki fark nedir?
Geometri ve yerleşim kavramlarını anlamak, kullanıcı arayüzü tabanlı görevler için çok önemlidir.
Çerçeve ve Sınırlar:
| Varlığınızı | anlam | Koordinat Alanı |
|---|---|---|
| çerçeve | Görünümün üst görünümüne göre konumu ve boyutu. | Superview'in koordinat sistemi |
| sınırlar | Görünümün boyutu ve kendisine göre konumu | Kendi koordinat sistemi |
Örnek: Bir görünüm döndürülürse, onun sınırlar aynı kalır ama çerçeve Dönüşümden kaynaklanan değişiklikler.
4) iOS'te Bellek Yönetimi ve ARC'yi Açıklayın
Bellek sızıntıları ve tekrarlayan bilgi döngüleri, mülakatlarda sıkça karşılaşılan tuzaklardır. ARC (Otomatik Referans Sayımı) gösteririm Swift Belleği yönetir; güçlü referansları sayar ve sayı sıfıra ulaştığında belleği serbest bırakır.
anahtar Concepts:
- Güçlü — Referans sayısını artırır.
- Zayıf - Yapmak değil Referans sayısını artırır; nesne serbest bırakıldığında nil olur.
- Sahipsiz — Zayıfa benzer ancak asla sıfır olması beklenmez.
Örnek:
class ViewController {
var closure: (() -> Void)?
func setupClosure() {
closure = { [weak self] in
print(self?.description ?? "No self")
}
}
}
kullanma [weak self] Kapanış fonksiyonları ve görünüm denetleyicileri arasındaki tutma döngülerini önler.
5) iOS'te Statik ve Dinamik Çerçeveler Arasındaki Fark Nedir?
Bu, orta düzey pozisyonlar için sıklıkla sorulan, mimari seviyesinde bir mülakat sorusudur.
| Özellikler | Statik Çerçeve | Dinamik Çerçeve |
|---|---|---|
| Yükleme zamanı | Uygulama derleme zamanında | Çalışma zamanında |
| Uygulama boyutu | büyük | Daha küçük |
| Güncellemeler | Yeniden yapılandırma gerektiriyor | Bağımsız olarak güncellenebilir. |
Örnek: Küçük yardımcı programlar için statik çerçeveler, büyük SDK'lar (örneğin Firebase) gibi dinamik çerçeveler ise uygulamanın başlangıç boyutunu küçültmek için kullanılır.
6) MVVM ve MVC Tasarım Desenlerini Karşılaştırın
Mimariyi anlamak sizi daha güçlü bir aday yapar.
MVC (Model-View-Controller):
- Artıları: Basit, yaygın olarak kullanılır.
- Dezavantajları: Denetleyici genellikle çok büyük hale gelir ("Devasa Görünüm Denetleyicisi").
MVVM (Model-View-ViewModel):
- Artıları: Daha iyi test edilebilirlik, daha temiz ayrım.
- Dezavantajları: Daha fazla kurulum kodu gerektiriyor.
Örnek: Karmaşık veri bağlama senaryolarında MVVM kullanın (örneğin, ile SwiftUI) ve basit formlar veya eski UIKit kodları için MVC.
7) Güçlü, zayıf ve sahiplenilmemiş referanslar arasındaki farkı açıklayın.
Bu, hafıza yönetimi konusunda temel bir bilgidir.
- Güçlü — Referans sayısı sıfıra inene kadar tahsisin kaldırılmasını engeller.
- Zayıf - Yapmak değil Sayıyı artırır; otomatik olarak sıfır olur.
- Sahipsiz — Sayıyı artırmaz; varsayar Referans verilen nesne, bu referans var olduğu sürece varlığını sürdürür.
Örnek: Kullanım unowned İki nesne birbirine atıfta bulunduğunda, mantıksal olarak biri diğerinden her zaman daha uzun süre varlığını sürdürür.
8) Temel Veri Nedir ve Ne Zaman Kullanılmalıdır?
Core Data, Apple'ın nesne grafiği ve kalıcılık çerçevesidir ve orta düzey mülakatlarda sıklıkla sorulan bir sorudur.
Kullanım Durumları:
- Karmaşık yapılandırılmış verilerin depolanması.
- İlişkiler ve geri alma/yeniden yapma desteği.
- Koşullar kullanarak verimli veri çekme.
Örnek: Uygulama başlatmaları arasında görevleri kalıcı hale getirmek ve bunları verimli bir şekilde sorgulamak için Core Data kullanarak bir yapılacaklar listesi uygulayın.
9) Delegasyon Kalıbını ve iOS'te Nasıl Çalıştığını Açıklayın
Temsilci deseni, bir nesnenin diğerine sıkı bir bağlantı olmadan mesaj göndermesini sağlar; bu özellik hem yeni mezunlar hem de deneyimli kişiler için sıklıkla talep edilmektedir.
Nasıl Çalışır:
- Bir protokol tanımlayın.
- Bir nesne (temsilci), protokol yöntemlerini uygular.
- Yetki devreden nesne, yetki devreden nesne üzerindeki yöntemleri çağırır.
Örnek: UITableViewDelegate Bir satıra dokunulduğunda bilgi verir.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Row selected at \(indexPath.row)")
}
10) Otomatik Yerleşim Nedir ve Neden Önemlidir?
Otomatik Yerleşim, ekran boyutlarına ve yönlendirmelerine göre yerleşimleri uyarlar; bu da UI mülakatlarında önemli bir konudur.
Nasıl Çalışır:
- Kullanımlar kısıtlamaları İlişkileri tanımlamak (önde, arkada, genişlik, yükseklik).
- iPhone/iPad boyutlarına uyarlanabilir kullanıcı arayüzlerini destekler.
Örnek: Ekran boyutundan bağımsız olarak düğmelerin ortalanmış kalması için kısıtlamalar kullanın.
11) Grand Central Dispatch (GCD) Nedir ve Eşzamanlılığa Nasıl Yardımcı Olur?
Büyük Merkezi Gönderim (GCD) Apple'ın eşzamanlı işlemleri yönetmek için kullandığı düşük seviyeli API'dir. Ana iş parçacığını engellemeden birden fazla görevi aynı anda çalıştırmaya yardımcı olarak performansı artırır.
çekirdek Concepts:
- Seri Kuyruk: İşlemleri tek seferde gerçekleştirir (veri tutarlılığı için faydalıdır).
- Eşzamanlı Kuyruk: Birden fazla görevi eş zamanlı olarak yürütür (paralel işlemler için).
- Ana Sıra: Kullanıcı arayüzü güncellemeleri için kullanılır (kullanıcı arayüzü kodunu her zaman burada çalıştırın).
Örnek:
DispatchQueue.global(qos: .background).async {
let data = fetchData()
DispatchQueue.main.async {
self.updateUI(with: data)
}
}
Bu sayede veri alma işlemi arka planda gerçekleşirken, kullanıcı arayüzü güncellemeleri sorunsuz bir şekilde devam eder.
12) Aşağıdakiler Arasındaki Farkı Açıklayın SyncZamansal ve Asenkron Görevler
| Menşei | Yürütme Davranışı | Örnek Kullanım |
|---|---|---|
| Syncküstah | Görev tamamlanana kadar mevcut iş parçacığını bloke eder. | Dosya hemen kaydediliyor. |
| eşzamanlı olmayan | Arka planda çalışır, mevcut iş parçacığını engellemez. | Ağ istekleri, animasyonlar |
Örnek:
DispatchQueue.global().async {
// Asynchronous
}
DispatchQueue.main.sync {
// Synchronous
}
En iyi pratik: Kullanıcı arayüzü performansının duyarlılığını korumak için ağır işlemleri her zaman eşzamansız olarak gerçekleştirin.
13) Nasıl SwiftKullanıcı Arayüzü ile Durum ve Veri Akışını Yönetme?
SwiftKullanıcı arayüzü kullanımları durum odaklı işlemeVeriler değiştiğinde kullanıcı arayüzünün otomatik olarak güncellendiği bir sistem.
Bu, 2025'te en çok sorulan iOS mülakat sorularından biri.
Temel Özellik Sarmalayıcıları:
| Wrapper | Amaç |
|---|---|
@State |
Yerel devleti bir bakış açısı içinde tutar. |
@Binding |
Ebeveyn ve çocuk görünümleri arasında çift yönlü bağlantı oluşturur. |
@ObservedObject |
Referans türündeki değişiklikleri gözlemler. ObservableObject |
@EnvironmentObject |
Paylaşılan verileri birden fazla görünüm arasında iletir. |
Örnek:
struct CounterView: View {
@State private var count = 0
var body: some View {
Button("Count: \(count)") {
count += 1
}
}
}
Ne zaman count değişiklikleri, SwiftKullanıcı arayüzü görünümü otomatik olarak yeniden oluşturur.
14) Kapanışlar Nelerdir? SwiftPeki bunlar nasıl kullanılır?
A kapatma Diğer dillerdeki lambda ifadelerine benzer şekilde, kod içinde geçirilebilen ve yürütülebilen, kendi başına çalışan bir işlev bloğudur.
Örnek:
let greet = { (name: String) -> String in
return "Hello, \(name)"
}
print(greet("John"))
Kapanışlar, bağlamlarından değerleri yakalar; bu bağlamlar şu şekilde bilinir: yakalama.
Bunlar yaygın olarak kullanılır tamamlama işleyicileri, animasyonlar ve eşzamansız işlemler.
Yaygın Kullanım Örneği:
UIView.animate(withDuration: 0.3) {
self.view.alpha = 0
}
Burada, kapanış animasyon sırasında ne olacağını tanımlar.
15) Anahtar-Değer Gözlemi (KVO) ve Birleştirme Çerçevesini Açıklayın
KVO (Anahtar-Değer Gözlemi) Nesneler üzerindeki özellik değişikliklerini gözlemlemeyi sağlayan bir mekanizmadır.
BirleştirmekDaha sonra tanıtılan bu model, modern bir reaktif programlama modeli sunmaktadır.
| Özellikler | K.V.O. | Birleştirmek |
|---|---|---|
| Sözdizimi | Objective-C tabanlı | Swift-tabanlı bildirimsel |
| Tip Güvenliği | Zayıf | Güçlü |
| 2025'te tercih edilen | ❌ | ✅ |
Birleştirme Örneği:
import Combine
class ViewModel: ObservableObject {
@Published var name: String = ""
}
@Published Mülk değiştiğinde aboneleri otomatik olarak bilgilendirir.
16) URLSession ve Alamofire Arasındaki Fark Nedir?
| Görünüş | URLOturumu | Alamofire |
|---|---|---|
| Menşei | Yerel çerçeve | Üçüncü taraf kütüphanesi |
| Kullanım kolaylığı | gereksiz sözlerle dolu | Basitleştirilmiş |
| Özelleştirme | Yüksek | ılımlı |
| Bağımlılık | Hayır | Dışsal bağımlılık |
Örnek (URLSession):
let task = URLSession.shared.dataTask(with: url) { data, _, _ in
if let data = data {
print(String(data: data, encoding: .utf8)!)
}
}
task.resume()
En iyi pratik: Kullanım URLSession Kontrol ve hafif uygulamalar için; kullanın Alamofire Karmaşık istek zincirleme işlemleri veya büyük ölçekli uygulamalar için.
17) Kullanmanın Avantajları ve Dezavantajları Nelerdir? SwiftUIKit yerine UI mi?
| faktör | SwiftUI | UIKit |
|---|---|---|
| Geliştirme Hızı | Daha hızlı | yavaş |
| uygunluk | iOS 13 ve üstü | iOS 9 ve üstü |
| Kodun Yeniden Kullanımı | Yüksek | ılımlı |
| Öğrenme eğrisi | Steep | Eski nesil geliştiriciler için daha kolay |
Avantajları SwiftKullanıcı arayüzü:
- Bildirimsel sözdizimi, tekrarlayan kod miktarını azaltır.
- Reaktif güncellemeler, manuel yenileme mantığını ortadan kaldırır.
Dezavantajları:
- Eski iOS sürümlerinde sınırlı destek.
- Bazı gelişmiş kullanıcı arayüzü bileşenleri hala UIKit köprüleme işlemine ihtiyaç duymaktadır.
18) iOS'te Uygulama Performansını Nasıl Optimize Edersiniz?
Performans optimizasyonu, deneyimli yazılım geliştiriciler için kritik bir mülakat alanıdır.
Anahtar Stratejiler:
- Aletleri Kullanın Bellek sızıntılarını tespit etmek ve zaman profillemesi yapmak için.
- Ağır işleri erteleyin. arka plan kuyruklarına (GCD).
- Hücreleri yeniden kullanın Tablo/koleksiyon görünümlerinde.
- Ağ yanıtlarını önbelleğe alın ve görüntüler.
- Tembel yükleme görüntüleri gibi çerçeveleri kullanarak
Kingfisher.
Örnek:
imageView.kf.setImage(with: URL(string: imageUrl))
Kullanıcı arayüzünün daha akıcı çalışması için eşzamansız, önbelleğe alınmış görüntü yükleme özelliğini gösterir.
19) iOS'ta Farklı Bildirim Türleri Nelerdir?
| Menşei | Tanım | Örnek E-posta |
|---|---|---|
| Yerel Bildirimler | Uygulama tarafından tetiklendi | Hatırlatıcılar, takvim etkinlikleri |
| Uzaktan (Anlık) Bildirimler | Bir sunucudan APNs aracılığıyla gönderildi. | Sohbet mesajları |
| Uygulama İçi Bildirimler | Kullanıcı aktifken gösterilir. | tost mesajları |
Örnek:
UNUserNotificationCenter.current().add(request)
Mülakat İpucu: iOS 15 ve üzeri sürümlerin, kullanıcı deneyimini iyileştirmek için Bildirim Kesintisi Seviyeleri (örneğin, aktif, pasif, zamana duyarlı) içerdiğini belirtin.
20) Yapılar (Structs) ve Sınıflar (Classes) Arasındaki Farklar Nelerdir? Swift?
| Özellikler | yapı | Sınıf |
|---|---|---|
| Menşei | Değer türü | Referans türü |
| miras | Desteklenmez | destekli |
| Bellek Ayırma | Yığın | yığın |
| mutability | Kullanılmalı var |
Özellikleri serbestçe değiştirebilir. |
| Kullanım çantası | Hafif modeller | Paylaşılan duruma sahip karmaşık nesneler |
Örnek:
struct Point { var x: Int; var y: Int }
class Shape { var color: String = "Red" }
Kullanım yapılar Değişmezlik ve performans için; kullanın sınıflar Ortak devlet ve miras için.
21) iOS Uygulamalarında Verimli Hata Ayıklama Yöntemleri Nelerdir?
iOS'ta hata ayıklama, her ikisini de birleştirir. Xcode araçlar ve tanısal çerçeveler.
Teknikler:
- kesme noktaları: Hassas hata ayıklama için koşullu veya sembolik kesme noktaları kullanın.
- LLDB Komutları: Değişkenleri incele (
po,p,bt). - Xcode Araçlar: Bellek sızıntılarını, işlemci kullanımını veya performans darboğazlarını teşhis edin.
- OSLog / Birleşik Günlük Kaydı: Kullanım
LoggerAPI yerineprint()Daha iyi performans ve filtreleme için.
Örnek:
import OSLog
let logger = Logger(subsystem: "com.app.debug", category: "network")
logger.info("Network call started")
Pro İpucu: Mülakatlarda kullandığınız yöntemlerden bahsedin. Enstrümanlar + Zaman Profilleyici Optimizasyon için fonksiyon düzeyinde performansı ölçmek — kıdemli bir geliştiricinin ayırt edici özelliği.
22) Bağımlılık Enjeksiyonu Nedir ve Nerelerde Faydalıdır? Swift?
Bağımlılık Ekleme (DI) Kodun modülerliğini, test edilebilirliğini ve sürdürülebilirliğini iyileştirmek için kullanılan bir tasarım desenidir.
Bağımlılıkları dahili olarak oluşturmak yerine, dışarıdan enjekte edersiniz.
DI türleri:
| Menşei | Örnek E-posta |
|---|---|
| Yapıcı Enjeksiyon | Başlatıcı aracılığıyla enjekte et |
| Mülk Enjeksiyonu | Oluşturulduktan sonra bağımlılık atayın. |
| Enjeksiyon Yöntemi | Bağımlılığı metot parametresi olarak iletin. |
Örnek:
class NetworkManager {
func fetchData() {}
}
class ViewModel {
let manager: NetworkManager
init(manager: NetworkManager) {
self.manager = manager
}
}
Bu yaklaşım basitleştirir birim testi Sahte bağımlılıkların enjekte edilmesine izin vererek.
23) Protokol Odaklı Programlama (POP) Nedir ve Faydaları Nelerdir?
Swift teşvik Protokol Odaklı Programlama (POP) — vurgulayan bir paradigma kalıtım üzerindeki protokoller.
Faydaları:
- Tekrar Kullanılabilirlik: Protokol uzantıları aracılığıyla paylaşılan davranış.
- Bileşim: Birden fazla davranışı esnek bir şekilde birleştirin.
- Test edilebilirlik: Birim testlerinde daha kolay sahte nesne oluşturma.
- Kalıtım karmaşıklığının azaltılması.
Örnek:
protocol Flyable { func fly() }
extension Flyable { func fly() { print("Flying") } }
struct Bird: Flyable {}
Bird().fly()
Bu yaklaşım, sınıf hiyerarşileri yerine protokol bileşimini kullanarak ölçeklenebilirliği artırır.
24) Nasıl Swift Hata Yönetimini Nasıl Ele Alırsınız?
Swift kullanan bir do-try-catch Hata yönetimi mekanizması, kodu daha güvenli ve açık hale getirir.
Örnek:
enum NetworkError: Error {
case badURL, requestFailed
}
func fetchData() throws {
throw NetworkError.badURL
}
do {
try fetchData()
} catch {
print("Error occurred: \(error)")
}
Hata fırlatma (flash) ve isteğe bağlı hata (optional errors) arasındaki temel farklar:
| Yöntem | Geri dönüşler | En İyi Kullanım Örneği |
|---|---|---|
throws |
Hatayı yayar | Kritik görevler |
try? |
İsteğe bağlı iade seçenekleri | Kritik olmayan |
try! |
Zorla açar | Sadece güvenliği garanti edildiğinde |
En iyi pratik: Önlemek try! Prototip kodlama sırasında hariç; güvenilirlik için yapılandırılmış hata işlemeyi tercih edin.
25) Sunulan başlıca özelliklerden bazıları nelerdir? Swift 6 (2025'te bekleniyor)?
Swift 6 vurgular güvenlik, eşzamanlılık ve platformlar arası performans.
| Kategoriler | Özellikler | Tanım |
|---|---|---|
| eşzamanlılık | Yazılan Task iptal |
Görev yaşam döngüleri üzerinde daha fazla kontrol |
| Tip Sistem | Genelleştirilmiş varoluşsal tipler | Daha temiz jenerikler |
| Bellek Güvenliği | Sahiplik modeli | Veri yarışlarını önler |
| Kalıp | Swift Makrolar | Derleme zamanı metaprogramlama |
Örnek:
@freestanding(expression) macro log(_ message: String) = #externalMacro(module: "LoggerMacros", type: "LoggerMacro")
Bu makro özelliği, kayıt ve doğrulama için gereken tekrarlayan kod miktarını azaltır; bu da mülakatçıların inceleyebileceği önemli bir gelişmedir.
26) iOS Projelerinde Bağımlılıkları Yönetmenin Yaygın Yolları Nelerdir?
| araç | Tanım | notlar |
|---|---|---|
| CocoaPod'lar | Podfile kullanan popüler bağımlılık yöneticisi | Kullanımı kolay ama yavaş |
| Kartaca | Projenin dışında çerçeveler oluşturur. | Hafif ve esnek |
| Swift Paket Yöneticisi (SPM) | Entegre Xcode | 2025'te resmi ve tercih edilen seçenek. |
Örnek (SPM):
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.0")
]
Pro İpucu: Mülakatlarda tercih ettiğinizi belirtin. SPM modern için Swift Yerel entegrasyonu ve minimum ek yükü nedeniyle projelerde tercih edilmektedir.
27) iOS'te Birim Testleri ve Kullanıcı Arayüzü Testleri Nasıl Uygulanır?
Test etme, kodun güvenilirliğini ve sürdürülebilirliğini sağlar; bu da üst düzey iOS mülakatları için olmazsa olmaz bir şarttır.
Test Türleri:
| Menşei | iskelet | Amaç |
|---|---|---|
| Birim Testi | XCTest | Mantığın küçük birimlerini test edin |
| Kullanıcı Arayüzü Testi | XCTest Kullanıcı Arayüzü | Kullanıcı arayüzü etkileşimlerini test edin. |
Örnek:
func testAddNumbers() {
XCTAssertEqual(add(2, 3), 5)
}
Kullanıcı Arayüzü Test Örneği:
let app = XCUIApplication() app.buttons["Login"].tap() XCTAssertTrue(app.staticTexts["Welcome"].exists)
En iyi pratik: Takip Edin AAA (Düzenle-Hareket Et-İddia Et) Testlerde netlik ve öngörülebilirlik için kullanılan kalıp.
28) Anahtarlık Nedir ve Güvenli Veri Depolama İçin Nasıl Kullanılır?
Anahtarlık iOS tarafından sağlanan, belirteçler, parolalar veya sertifikalar gibi küçük hassas bilgileri saklamak için kullanılan güvenli bir depolama sistemidir.
Avantajları:
- Sistem tarafından yönetilen şifreleme.
- Otomatik senkronizasyon ile iCloud Anahtarlık (isteğe bağlı).
- (Yapılandırılmışsa) Uygulama yeniden yüklendiğinde de geçerliliğini korur.
Örnek:
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "userToken",
kSecValueData as String: token.data(using: .utf8)!
]
SecItemAdd(query as CFDictionary, nil)
En iyi pratik: Kullanım Anahtarlık Erişimi Basitlik ve güvenli kodlama uyumluluğu için bir sarmalayıcı.
29) SceneDelegate'in rolünü ve AppDelegate'ten farkını açıklayın.
iOS 13'ten bu yana Apple, Sahne Temsilcisi Çoklu pencere ve durum yönetimi için.
| Bileşen | Amaç |
|---|---|
| Uygulama Temsilcisi | Uygulama düzeyindeki yaşam döngüsünü (başlatma, arka planda çalışma, sonlandırma) yönetir. |
| Sahne Temsilcisi | Kullanıcı arayüzü sahnesinin yaşam döngüsünü yönetir (kullanıcı pencereler/sahneler arasında geçiş yaptığında). |
Örnek Sorumluluklar:
AppDelegate: Anlık bildirimler için kaydolun, SDK'ları başlatın.SceneDelegateKullanıcı arayüzünün geri yüklenmesini ve durumun kaydedilmesini yönetin.
Kod Örneği:
func sceneDidEnterBackground(_ scene: UIScene) {
saveContext()
}
Pro İpucu: Röportajlarda SceneDelegate'in iPad'deki çok sahneli uygulamalar için çok önemli olduğundan bahsedin ve macOS Katalizör.
30) iOS Uygulamaları İçin Yaygın Güvenlik En İyi Uygulamaları Nelerdir?
Güvenlik, mülakatın son turunda mutlaka sorulması gereken bir konudur.
Temel Uygulamalar:
- Hassas veriler için Anahtar Zinciri'ni kullanın.
- Uygulama Taşıma Güvenliğini (ATS) Etkinleştirin — HTTP isteklerini kısıtlayın.
- Kod Gizleme Kullanın Mantıksal mantığı tersine mühendislikten korumak için.
- SSL Pinlemeyi Uygula Ortadaki adam saldırılarını önlemek için.
- Ekran Görüntüsü Almayı ve Ekran Kaydını Kısıtla hassas bölgelerde.
Örnek:
UIApplication.shared.isProtectedDataAvailable
Bonus İpucu: Tartışmak Güvenlik.çerçevesi ve KriptoKit — Modern şifreleme API'lerine dair farkındalıklarını gösteriyorlar.
🔍 Gerçek Dünya Senaryoları ve Stratejik Yanıtlarla En Sık Sorulan iOS Mülakat Soruları
1) iOS'te MVC tasarım modelini nasıl açıklarsınız ve neden önemlidir?
Adaydan beklenenler: Mülakatçı, temel iOS mimari kalıplarını anlama ve bunları net bir şekilde açıklama yeteneğinizi değerlendirmek istiyor.
Örnek cevap: Model-View-Controller (MVC) deseni, veri mantığını, kullanıcı arayüzünü ve kontrol akışını birbirinden ayırır. iOS'ta bu, kodun düzenli kalmasına ve bakımının kolaylaşmasına yardımcı olur. Model veriyi yönetir, görünüm sunumu ele alır ve denetleyici bunlar arasında koordinasyonu sağlar; bu da test edilebilirliği ve ölçeklenebilirliği artırır.
2) Güçlü, zayıf ve sahiplenilmemiş referanslar arasındaki fark nedir? Swift?
Adaydan beklenenler: Mülakatçı, hafıza yönetimi konusundaki bilginizi ve tekrarlayan öğrenme döngülerini ne kadar iyi önlediğinizi test ediyor.
Örnek cevap: Güçlü referanslar referans sayısını artırır ve nesneyi canlı tutar. Zayıf referanslar referans sayısını artırmaz ve nesne serbest bırakıldığında otomatik olarak nil olur. Sahipsiz referanslar da sayıyı artırmaz, ancak nesnenin her zaman var olacağını varsayar; bu da yanlış kullanıldığında çökmelere neden olabilir.
3) Bir iOS uygulamasında karmaşık bir çökme sorununu gidermek zorunda kaldığınız bir durumu açıklayın.
Adaydan beklenenler: Mülakatçı, problem çözme yaklaşımınız ve hata ayıklama becerileriniz hakkında bilgi edinmek istiyor.
Örnek cevap: Önceki görevimde, çoklu iş parçacığıyla ilgili bir çökme sorunuyla karşılaştım. Çökme günlüklerini şu yöntemle analiz ettim: Xcode Instruments adlı araç, bir yarış durumu tespit etti ve paylaşılan kaynakları senkronize ederek bu sorunu çözdü. Bu yaklaşım, çökmeleri azalttı ve uygulama istikrarını artırdı.
4) iOS uygulamalarında API entegrasyonunu ve hata yönetimini nasıl ele alıyorsunuz?
Adaydan beklenenler: Mülakatçı, ağ oluşturma ve dayanıklı uygulama tasarımı konusundaki deneyiminizi değerlendiriyor.
Örnek cevap: Genellikle API çağrıları için URLSession kullanıyorum ve Codable kullanarak net veri modelleri tanımlıyorum. Önceki görevimde, ağ hatalarını, geçersiz yanıtları ve zaman aşımı sorunlarını yönetmek için merkezi hata işleme uyguladım ve kullanıcının her zaman anlamlı geri bildirim almasını sağladım.
5) iOS uygulama performansını optimize etmek için hangi adımları atıyorsunuz?
Adaydan beklenenler: Mülakatçı, performans darboğazlarını nasıl tespit edip çözdüğünüzü öğrenmek istiyor.
Örnek cevap: Gereksiz görünüm güncellemelerini azaltmaya, tablo ve koleksiyon görünümlerini optimize etmeye ve bellek kullanımını en aza indirmeye odaklanıyorum. Önceki işimde, bellek sızıntılarını ve aşırı CPU kullanımını tespit etmek için Instruments kullandım ve bu da gözle görülür performans iyileştirmelerine yol açtı.
6) iOS uygulamalarınızın erişilebilirliğini nasıl sağlıyorsunuz?
Adaydan beklenenler: Mülakatçı, kapsayıcı tasarım ve platform yönergeleri konusundaki farkındalığınızı değerlendiriyor.
Örnek cevap: Dinamik yazı tipi, uygun erişilebilirlik etiketleri ve VoiceOver desteği kullanarak erişilebilirlik en iyi uygulamalarını takip ediyorum. Ayrıca, Apple'ın yönergelerine uygunluğu sağlamak için Apple tarafından sağlanan erişilebilirlik araçlarını kullanarak uygulamaları test ediyorum.
7) Geliştirme sürecinin son aşamalarında gereksinimlerin değiştiği bir durumu anlatın.
Adaydan beklenenler: Mülakatçı, uyum sağlama ve iletişim becerilerini değerlendirmek istiyor.
Örnek cevap: Son görevimde, bir özellik gereksinimi yayınlanmadan kısa bir süre önce değişti. Öncelikleri yeniden değerlendirdim, paydaşlarla olası ödünleri görüştüm ve yalnızca gerekli bileşenleri yeniden düzenledim; bu da kaliteyi tehlikeye atmadan son teslim tarihine yetişmemizi sağladı.
8) Karmaşık bir iOS uygulamasında durum yönetimini nasıl yaparsınız?
Adaydan beklenenler: Mülakatı yapan kişi, mimari düşünme yeteneği ve ölçeklenebilir uygulamalar konusunda deneyim arıyor.
Örnek cevap: Veri akışını net bir şekilde tanımlayarak ve uygun olduğunda yetkilendirme, bildirimler veya reaktif çerçeveler gibi kalıpları kullanarak durumu yönetiyorum. Bu, uygulamanın büyümesiyle birlikte öngörülebilir davranış ve daha kolay hata ayıklama sağlar.
9) iOS geliştirme için hangi test stratejilerini kullanıyorsunuz?
Adaydan beklenenler: Mülakatı yapan kişi, kaliteye ve güvenilirliğe olan bağlılığınızı anlamak istiyor.
Örnek cevap: İş mantığı için birim testleri, kritik kullanıcı akışları için kullanıcı arayüzü testleri ve testleri otomatik olarak çalıştırmak için sürekli entegrasyon kullanıyorum. Bu kombinasyon, sorunları erken yakalamaya ve uzun vadeli kod kalitesini korumaya yardımcı oluyor.
10) iOS geliştirme trendleri ve güncellemeleriyle ilgili olarak nasıl güncel kalıyorsunuz?
Adaydan beklenenler: Mülakatçı, sürekli öğrenmeye olan bağlılığınızı değerlendiriyor.
Örnek cevap: Resmi dokümanları, geliştirici konferanslarını ve saygın blogları düzenli olarak takip ediyorum. Ayrıca yan projelerde yeni API'lerle denemeler yapıyorum; bu da platform değişikliklerine hızlı bir şekilde uyum sağlamama ve modern çözümleri üretim uygulamalarına entegre etmeme yardımcı oluyor.

