Keychain asoslari
Keychain asoslari
Kichik maxfiy ma’lumotlarni (tokenlar, parollar) to‘g‘ri kirish nazorati bilan Keychain API’lari yordamida xavfsiz saqlang.
Maxfiy ma’lumotni saqlash (qo‘shish)
SecItemAdd ni elementni tavsiflovchi dictionary bilan birga ishlating.
Sintaksis:
SecItemAdd(attrs as CFDictionary, nil)- class
kSecClassGenericPassword - account/service kalitlari.
Misol
import Security
func saveToken(_ token: String) {
let data = token.data(using: .utf8)!
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: "com.example.auth",
kSecAttrAccount as String: "session",
kSecValueData as String: data,
kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock
]
SecItemDelete(query as CFDictionary) // replace if exists
let status = SecItemAdd(query as CFDictionary, nil)
assert(status == errSecSuccess)
}
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Keychain Add Example")
.padding()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol tokenni generic password sifatida yozadi va xuddi shu service/account uchun mavjud qiymatni almashtiradi.
Maxfiy ma’lumotni o‘qish (so‘rov)
Saqlangan baytlarni olish uchun SecItemCopyMatching ni kSecReturnData bilan birga ishlating.
Sintaksis: SecItemCopyMatching(query as CFDictionary, &item)
Misol
import Security
func loadToken() -> String? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: "com.example.auth",
kSecAttrAccount as String: "session",
kSecReturnData as String: true,
kSecMatchLimit as String: kSecMatchLimitOne
]
var item: CFTypeRef?
let status = SecItemCopyMatching(query as CFDictionary, &item)
guard status == errSecSuccess, let data = item as? Data else { return nil }
return String(data: data, encoding: .utf8)
}
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Keychain Query Example")
.padding()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol avval saqlangan tokenni service/account bo‘yicha moslab o‘qiydi va ma’lumotlarni qaytaradi.
Yangilash yoki o‘chirish
Yangilanadigan atributlar dictionary’sini uzatib SecItemUpdate bilan yangilang; SecItemDelete bilan o‘chiring.
Sintaksis:
SecItemUpdate(query, updates)SecItemDelete(query)
Misol
import Security
func deleteToken() {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: "com.example.auth",
kSecAttrAccount as String: "session",
]
SecItemDelete(query as CFDictionary)
}
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Keychain Delete Example")
.padding()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol saqlangan maxfiy ma’lumotni o‘chiradi. Qiymat yoki atributlarni o‘zgartirish kerak bo‘lganda update’dan foydalaning.
Maslahat: Hisob ma’lumotlari (credentials) uchun Keychain’ni afzal ko‘ring; maxfiy ma’lumotlarni UserDefaults da saqlamang.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
