برنامه نویسی

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

ویژگی ها: DreamCatcher – یک برنامه خاطرات رویایی در ابر ☁


خوش آمدید ، توسعه دهنده بینایی! 🧙‍♀ امروز ما در حال غواصی به دنیای عرفانی هستیم ابری، پورتال جادویی اپل برای ذخیره داده های مبتنی بر ابربشر

و ما فقط نظریه پردازی نخواهیم کرد – ما در حال ساخت برنامه ای به نام هستیم DreamCatcher: مکانی برای کاربران برای ورود به رویاهای خود و دسترسی به آنها در تمام دستگاه های خود – iPhone ، iPad و Macبشر 📱💻🎯


📚 آنچه یاد خواهید گرفت

  • Cloudkit چیست و چرا عالی است
  • تنظیم یک برنامه تحت حمایت Cloudkit
  • صرفه جویی ، واکشی و حذف سوابق در iCloud
  • ساختن یک دفتر خاطرات رویایی با Swiftui

☁ چرا از cloudkit استفاده می کنید؟

  • ردیف های رایگان به اندازه کافی سخاوتمندانه برای برنامه های کوچک
  • همگام سازی به طور خودکار در سراسر دستگاه ها
  • ساخته شده در iOS – هیچ حساب اضافی لازم نیست
  • امن و خصوصی – با تشکر از اپل

در اصل: این مانند این است که به صورت رایگان برنامه خود را به ابرقدرت ها بدهید. 🦸‍♀


🛠 راه اندازی پروژه

  1. جدید ایجاد کنید برنامه پروژه در Xcode.
  2. بررسی کنید “از داده های اصلی استفاده کنید” (بعداً Magic CloudKit را به آن اضافه خواهیم کرد).
  3. رفتن به امضای و قابلیت ها:

    • قابلیت اضافه کردن: دارای صدای بلند
    • فعال کردن ابری
    • تضمین کردن حالت های پس زمینهاعلان های از راه دور بررسی می شود (اختیاری برای به روزرسانی های فشار).
  4. در تنظیمات پروژه خود در زیر دارای صدای بلند، اطمینان حاصل کنید که ظروف شما به درستی پیکربندی شده است. (iCloud.com.yourapp.identifier)


✨ مدل سازی رویاها با داده های اصلی + CloudKit

در شما .xcdatamodeld پرونده:

  1. یک موجود را اضافه کنید: Dream
  2. ویژگی ها را اضافه کنید:
    • 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 – بنابراین کاربران می توانند رویاهای خود را به دوستان خود بفرستند! 📩💭

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا