En Popüler 30 iOS Mülakat Soruları ve Cevapları (2026)

En Sık Sorulan iOS Mülakat Soruları ve Cevapları

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:

  1. Aletleri Kullanın Bellek sızıntılarını tespit etmek ve zaman profillemesi yapmak için.
  2. Ağır işleri erteleyin. arka plan kuyruklarına (GCD).
  3. Hücreleri yeniden kullanın Tablo/koleksiyon görünümlerinde.
  4. Ağ yanıtlarını önbelleğe alın ve görüntüler.
  5. 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:

  1. kesme noktaları: Hassas hata ayıklama için koşullu veya sembolik kesme noktaları kullanın.
  2. LLDB Komutları: Değişkenleri incele (po, p, bt).
  3. Xcode Araçlar: Bellek sızıntılarını, işlemci kullanımını veya performans darboğazlarını teşhis edin.
  4. OSLog / Birleşik Günlük Kaydı: Kullanım Logger API yerine print() 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ı:

  1. Tekrar Kullanılabilirlik: Protokol uzantıları aracılığıyla paylaşılan davranış.
  2. Bileşim: Birden fazla davranışı esnek bir şekilde birleştirin.
  3. Test edilebilirlik: Birim testlerinde daha kolay sahte nesne oluşturma.
  4. 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:

  1. Hassas veriler için Anahtar Zinciri'ni kullanın.
  2. Uygulama Taşıma Güvenliğini (ATS) Etkinleştirin — HTTP isteklerini kısıtlayın.
  3. Kod Gizleme Kullanın Mantıksal mantığı tersine mühendislikten korumak için.
  4. SSL Pinlemeyi Uygula Ortadaki adam saldırılarını önlemek için.
  5. 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.

Bu yazıyı şu şekilde özetleyin: