- Published on
Keychain-Swift: Parol va maxfiy ma'lumotlarni xavfsiz saqlash
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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:
- Shifrlangan (Encrypted): Parollar, kredit kartalar va boshqa nozik ma'lumotlarni saqlash uchun xavfsiz.
- Ilova o'chirilganda ham saqlanadi: Agar foydalanuvchi ilovani o'chirib, qayta yuklab olsa ham, Keychain'dagi ma'lumotlar yo'qolmaydi.
- 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->+orqalihttps://GitHub.com/evgenyneu/keychain-Swifthavolasini 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!