- Published on
CloudKit 1: SwiftUI loyihasiga ulanish va foydalanuvchini aniqlash
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
CloudKit haqida nimalarni bilish muhim?
CloudKit – bu Apple'ning o'z ma'lumotlar bazasi (Database). U orqali siz ilovangizdagi ma'lumotlarni bevosita foydalanuvchilarning shaxsiy iCloud xotirasiga (Private Database) yoki hamma ko'ra oladigan ommaviy xotiraga (Public Database) saqlashingiz mumkin. Eslatma: CloudKit'dan foydalanish uchun sizda Pullik Apple Developer Account bo'lishi shart.
1. CloudKit'ni loyihaga ulash
- Xcode loyihangizning Signing & Capabilities bo'limiga kiring.
+ Capabilitytugmasini bosib, iCloud ni qo'shing.- iCloud xizmatlari ichidan Key-value storage va CloudKit ga belgi (galochka) qo'ying.
- Containers qismida
+tugmasini bosib, yangi konteyner (baza) yarating. Odatda, u Bundle Identifier nomi bilan bir xil nomlanadi (Masalan:iCloud.com.sizningkompaniyangiz.ilovangiz).
Agar konteyner muvaffaqiyatli yaratilsa, yozuv qizil emas, oddiy qora (yoki oq) rangda ko'rinadi. Shuningdek, "CloudKit Console" tugmasi paydo bo'ladi. U orqali to'g'ridan-to'g'ri brauzerda ma'lumotlar bazangizni ko'rishingiz mumkin.
2. Foydalanuvchi iCloud'ga ulanganini tekshirish
Ilovaga CloudKit ulanganidan so'ng, foydalanuvchining shaxsiy iCloud (Apple ID) si ulanib turganiga ishonch hosil qilishimiz kerak.
Buning uchun CKContainer.default().accountStatus tekshiriladi:
import SwiftUI
import CloudKit
class CloudKitUserViewModel: ObservableObject {
@Published var isSignedIntoiCloud: Bool = false
@Published var error: String = ""
@Published var userName: String = ""
init() {
getiCloudStatus()
}
func getiCloudStatus() {
CKContainer.default().accountStatus { [weak self] status, error in
DispatchQueue.main.async {
switch status {
case .available:
self?.isSignedIntoiCloud = true
self?.requestPermission()
case .noAccount:
self?.error = "Sizda iCloud akkaunt yo'q. Dasturdan foydalanish uchun sozlamalar orqali Apple ID ga kiring."
default:
self?.error = "Noma'lum xatolik yuz berdi."
}
}
}
}
// ... boshqa funksiyalar
}
3. Foydalanuvchi ismini olishga ruxsat so'rash
Agar status .available bo'lsa, demak iCloud ochiq. Endi CloudKit yordamida foydalanuvchining o'z ismi, sharifini bilib olishimiz mumkin. Lekin buning uchun avval uning o'zidan "Ismingizni ko'rsam bo'ladimi?" deb ruxsat so'rash kerak.
func requestPermission() {
CKContainer.default().requestApplicationPermission([.userDiscoverability]) { [weak self] status, error in
DispatchQueue.main.async {
if status == .granted {
// Ruxsat berildi
self?.fetchiCloudUserRecordID()
}
}
}
}
4. Foydalanuvchi ismini yuklab olish
Foydalanuvchi ismini olish ikki bosqichda bo'ladi:
- Avval User Record ID (foydalanuvchining bazadagi unikal IDsi) topiladi.
- Keyin o'sha ID orqali User Identity (ismlar, emaillar) chaqiriladi.
func fetchiCloudUserRecordID() {
CKContainer.default().fetchUserRecordID { [weak self] returnedID, returnedError in
if let id = returnedID {
self?.discoveriCloudUser(id: id)
}
}
}
func discoveriCloudUser(id: CKRecord.ID) {
CKContainer.default().discoverUserIdentity(withUserRecordID: id) { [weak self] returnedIdentity, returnedError in
DispatchQueue.main.async {
if let name = returnedIdentity?.nameComponents?.givenName {
self?.userName = name
}
}
}
}
Agar barchasi to'g'ri ishlagan bo'lsa, endi u UI dagi Text da "Tizimga kirgan ism: Sardor" deb chiqishi mumkin. Hech qanday qo'shimcha ro'yxatdan o'tish (Sign Up) oynalarisiz biz foydalanuvchini aniqlay oldik!