Published on

Keychain-Swift: Parol va maxfiy ma'lumotlarni xavfsiz saqlash

Authors

Keychain va UserDefaults: Farqi nima?

UserDefaults (yoki SwiftUI'dagi @AppStorage) ilovada kichik ma'lumotlarni saqlash uchun ishlatiladi. Lekin unda saqlangan ma'lumotlar ochiq holatda (shifrlanmagan) bo'ladi.

Keychain'ning afzalliklari:

  1. Shifrlangan (Encrypted): Parollar, kredit kartalar va boshqa nozik ma'lumotlarni saqlash uchun xavfsiz.
  2. Ilova o'chirilganda ham saqlanadi: Agar foydalanuvchi ilovani o'chirib, qayta yuklab olsa ham, Keychain'dagi ma'lumotlar yo'qolmaydi.
  3. Qurilmalararo sinxronizatsiya: Agar foydalanuvchi bitta iCloud hisobidan foydalansa, iPhone'da saqlangan parol iPad yoki Mac'da ham avtomatik ochilishi mumkin.

1. Paketni o'rnatish

  • Package Dependencies -> + orqali https://GitHub.com/evgenyneu/keychain-Swift havolasini qidirib toping va loyihaga qo'shing.

2. Oddiy foydalanish

Foydalanish xuddi UserDefaults yoki oddiy Dictionary kabi sodda:

import SwiftUI
import KeychainSwift

struct KeychainBootcamp: View {
    @State private var password = ""
    let keychain = KeychainSwift()

    var body: some View {
        VStack {
            Text(password.isEmpty ? "Parol yo'q" : password)

            Button("Saqlash") {
                keychain.set("Yangi_Parol123!", forKey: "user_password")
                // Saqlangandan so'ng o'qib olamiz
                password = keychain.get("user_password") ?? ""
            }

            Button("O'chirish") {
                keychain.delete("user_password")
                password = ""
            }
        }
        .onAppear {
            // Ilova ishga tushganda o'qiymiz
            password = keychain.get("user_password") ?? ""
        }
    }
}

NOTE

KeychainSwift bizga boolealar (set(true, forKey: "...")) va Data formatlari bilan ishlash imkonini ham beradi.

3. Eng yaxshi amaliyotlar (Best Practices)

Butun loyiha bo'ylab KeychainSwift() ni har bir faylda ishlatavermaslik uchun, biz maxsus menejer (KeychainManager) yaratishimiz tavsiya etiladi.

1-usul: Environment yordamida (View uchun)

Menejer yaratib uni Environment ichiga kiritib qo'yishimiz mumkin:

class KeychainManager {
    private let keychain = KeychainSwift()

    func save(password: String, key: String) {
        keychain.set(password, forKey: key)
    }

    func get(key: String) -> String? {
        return keychain.get(key)
    }
}

Uni View'da Environment orqali oson chaqirish mumkin bo'ladi.

2-usul: Custom Property Wrapper (Eng zo'r usul)

Siz SwiftUI dagi @AppStorage ga o'xshagan o'zingizning maxsus @KeychainStorage deb nomlangan attributtingizni yaratishingiz mumkin (bu haqida Swift Advanced darslarida batafsil gaplashamiz).

Bu orqali View ichida bir qator kod bilan xavfsiz saqlash va o'qish jarayoni amalga oshadi:

// Ajoyib ko'rinish emasmi?
@KeychainStorage("user_password") var password = ""

Har qanday holatda ham, loyihangizdagi parollar uchun albatta Keychain ishlatishni odat qiling!

Buy mea coffee