آموزش 35: استفاده از CloudKit برای ذخیره داده های مبتنی بر ابر

ویژگی ها: DreamCatcher – یک برنامه خاطرات رویایی در ابر ☁
خوش آمدید ، توسعه دهنده بینایی! 🧙♀ امروز ما در حال غواصی به دنیای عرفانی هستیم ابری، پورتال جادویی اپل برای ذخیره داده های مبتنی بر ابربشر
و ما فقط نظریه پردازی نخواهیم کرد – ما در حال ساخت برنامه ای به نام هستیم DreamCatcher: مکانی برای کاربران برای ورود به رویاهای خود و دسترسی به آنها در تمام دستگاه های خود – iPhone ، iPad و Macبشر 📱💻🎯
📚 آنچه یاد خواهید گرفت
- Cloudkit چیست و چرا عالی است
- تنظیم یک برنامه تحت حمایت Cloudkit
- صرفه جویی ، واکشی و حذف سوابق در iCloud
- ساختن یک دفتر خاطرات رویایی با Swiftui
☁ چرا از cloudkit استفاده می کنید؟
- ردیف های رایگان به اندازه کافی سخاوتمندانه برای برنامه های کوچک
- همگام سازی به طور خودکار در سراسر دستگاه ها
- ساخته شده در iOS – هیچ حساب اضافی لازم نیست
- امن و خصوصی – با تشکر از اپل
در اصل: این مانند این است که به صورت رایگان برنامه خود را به ابرقدرت ها بدهید. 🦸♀
🛠 راه اندازی پروژه
- جدید ایجاد کنید برنامه پروژه در Xcode.
- بررسی کنید “از داده های اصلی استفاده کنید” (بعداً Magic CloudKit را به آن اضافه خواهیم کرد).
-
رفتن به امضای و قابلیت ها:
- قابلیت اضافه کردن: دارای صدای بلند
- فعال کردن ابری
- تضمین کردن حالت های پس زمینه ➡ اعلان های از راه دور بررسی می شود (اختیاری برای به روزرسانی های فشار).
-
در تنظیمات پروژه خود در زیر دارای صدای بلند، اطمینان حاصل کنید که ظروف شما به درستی پیکربندی شده است. (
iCloud.com.yourapp.identifier
)
✨ مدل سازی رویاها با داده های اصلی + CloudKit
در شما .xcdatamodeld
پرونده:
- یک موجود را اضافه کنید:
Dream
- ویژگی ها را اضافه کنید:
title: String
details: String
timestamp: Date
روی Entity ➡ بررسی کنید “از cloudkit استفاده کن”بشر
CloudKit اکنون به طور خودکار این موجودیت را در پشت صحنه همگام می کند! 🛸
🖥 Swiftui UI برای DreamCatcher
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Dream.timestamp, ascending: false)],
animation: .default)
private var dreams: FetchedResults<Dream>
@State private var dreamTitle = ""
@State private var dreamDetails = ""
var body: some View {
NavigationView {
VStack {
TextField("Dream Title", text: $dreamTitle)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
TextEditor(text: $dreamDetails)
.frame(height: 150)
.overlay(RoundedRectangle(cornerRadius: 10).stroke(Color.gray))
Button(action: saveDream) {
Text("Save Dream ✨")
.padding()
.frame(maxWidth: .infinity)
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
.padding()
List {
ForEach(dreams) { dream in
VStack(alignment: .leading) {
Text(dream.title ?? "Untitled Dream")
.font(.headline)
Text(dream.details ?? "")
.font(.subheadline)
.foregroundColor(.secondary)
Text("\(dream.timestamp ?? Date(), formatter: dateFormatter)")
.font(.caption)
.foregroundColor(.gray)
}
}
.onDelete(perform: deleteDreams)
}
}
.navigationTitle("🌙 DreamCatcher")
}
}
private func saveDream() {
withAnimation {
let newDream = Dream(context: viewContext)
newDream.title = dreamTitle
newDream.details = dreamDetails
newDream.timestamp = Date()
do {
try viewContext.save()
dreamTitle = ""
dreamDetails = ""
} catch {
print("😱 Failed to save dream: \(error.localizedDescription)")
}
}
}
private func deleteDreams(offsets: IndexSet) {
withAnimation {
offsets.map { dreams[$0] }.forEach(viewContext.delete)
do {
try viewContext.save()
} catch {
print("😱 Failed to delete dream: \(error.localizedDescription)")
}
}
}
}
private let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .short
return formatter
}()
⚡ چگونه همگام سازی اتفاق می افتد
- یک رویای جدید را ذخیره کنید؟ ➡ داده های اصلی به طور خودکار آن را به سمت آن سوق می دهند دارای صدای بلند ☁
- برنامه را روی دستگاه دیگری باز کنید ➡ Dreams Sync Down! 📲✨
شما به سختی باید انگشت خود را بلند کنید. سحر 🎩
🧠 نکات حرفه ای برای CloudKit
- خطاهای شبکه: همیشه آماده باشید رسیدگی به شکست ها (اگر شبکه بد است بعداً دوباره امتحان کنید).
- همگام سازی: داده های هسته + SYNC CloudKit حتی در صورت تعلیق برنامه.
- رسیدگی به درگیری: داده های اصلی تغییرات هوشمندانه را ادغام می کنند ، اما برنامه های پیچیده باید استراتژی های حل تعارض را برنامه ریزی کنند.
- حریم شخصی کاربر: کاربران می توانند در هر زمان دسترسی به iCloud را لغو کنند – برنامه خود را برای تخریب با لطف طراحی کنید.
🎯 چالش های DreamCatcher 2.0
- دسته های رویایی را اضافه کنید (کابوس ، ماجراجویی ، رویاهای پرواز!)
- از رتبه بندی رویایی پشتیبانی کنید ⭐
- نمای جدول زمانی بسازید
- برای طراحی رویاها پشتیبانی مداد سیب را اضافه کنید
- اعلان ها را برای “رگه های رویایی” فشار دهید
تبریک می گویم ، Cloud Conqueror! ☁
شما ساخته اید برنامه همبستگی ابر که می تواند در دستگاه ها با صفر سرور اضافیبا صفر کار با پس زمینه اضافیوت جادوی 100 ٪ swiftuiبشر
رویای بزرگ ، خواب اغلب ، و کدگذاری را ادامه دهید! 🚀🌙✨
به من اطلاع دهید که آیا شما هم دوست دارید آموزش پاداش جایی که ما گسترش می دهیم DreamCatcher با به اشتراک گذاری cloudkit – بنابراین کاربران می توانند رویاهای خود را به دوستان خود بفرستند! 📩💭