iCloud Drive یک ذخیرهسازی فایل ابری Apple است که در iOS، macOS و iPadOS برای همگامسازی اسناد بین دستگاههای کاربر تعبیه شده است. به گفته Apple, 2024، iCloud Drive از CloudKit به عنوان backend برای ذخیرهسازی فایلها و همگامسازی خودکار استفاده میکند: تغییرات اعمال شده در iPhone بلافاصله در Mac و iPad بدون اقدام کاربر منعکس میشود. توسعهدهندگان میتوانند iCloud Drive را از طریق NSDocumentPickerViewController و API Ubiquity در برنامهها ادغام کنند.
نکات اصلی
iCloud Drive یک سرویس فایل ابری Apple است که یک ذخیرهسازی یکپارچه اسناد برای تمام دستگاههای کاربر که با یک Apple ID مجاز شدهاند فراهم میکند. این سرویس در سال ۲۰۱۴ همراه با iOS 8 و OS X Yosemite به عنوان جایگزین iCloud Documents راهاندازی شد.
iCloud Drive با سایر ذخیرهسازیهای ابری (Google Drive, Dropbox) با ادغام عمیق با سیستم عامل متفاوت است: فایلها مستقیماً در Finder در macOS و در برنامه Files در iOS بدون نیاز به نصب برنامه اضافی نمایش داده میشوند. سیستم به طور خودکار محتوا را در پسزمینه با سوئیچ بین Wi-Fi و شبکه سلولی همگامسازی میکند.
به گفته Apple Platform Overview, 2024، iCloud Drive از نسخهبندی فایل تا ۳۰ روز، اشتراکگذاری پوشهها از طریق iCloud Sharing و ادغام با جستجوی سیستمی Spotlight پشتیبانی میکند. توسعهدهندگان از طریق API NSFileCoordinator و Ubiquity containers به ذخیرهسازی دسترسی پیدا میکنند.
Ubiquity — اصطلاح Apple به معنای توانایی داده برای «حضور در همهجا» (از انگلیسی ubiquitous). در زمینه iCloud Drive این مکانیزمی است که به فایلها اجازه میدهد به طور خودکار بین تمام دستگاههای کاربر از طریق backend ابری CloudKit همگامسازی شوند.
| جزء | توضیح | نقش |
|---|---|---|
| Ubiquity container | دایرکتوری ویژه برنامه | فایلها را برای همگامسازی ذخیره میکند |
| CloudKit | سرویس backend اپل | ذخیرهسازی و همگامسازی را فراهم میکند |
| NSMetadataQuery | پرسوجوی سیستمی | وضعیت فایلهای Ubiquity را ردیابی میکند |
| NSFileVersion | مدیریت نسخه | تعارضات تغییرات را حل میکند |
Ubiquity container دایرکتوری داخل Sandbox برنامه است که برای همگامسازی علامتگذاری شده است. فایلهای قرار داده شده در این دایرکتوری به طور خودکار به iCloud Drive آپلود شده و به دستگاههای دیگر منتشر میشوند. دسترسی به کانتینر از طریق Capabilities در Xcode پیکربندی میشود.
سیستم وضعیت هر فایل را از طریق NSMetadataQuery ردیابی میکند: فایل میتواند محلی (دانلود شده روی دستگاه)، از راه دور (فقط در ابر) یا در حال دانلود باشد. توسعهدهنده میتواند به صورت برنامهنویسی دانلود فایل را درخواست کند یا قبل از باز کردن، در دسترس بودن آن را بررسی کند.
ادغام iCloud Drive با افزودن capability iCloud در Xcode و فعال کردن سرویس iCloud Documents آغاز میشود. پس از آن برنامه به Ubiquity container — دایرکتوری ویژهای که مسیر آن از طریق FileManager بازگردانده میشود — دسترسی پیدا میکند.
import UIKit
class DocumentManager {
func ubiquityURL() -> URL? {
return FileManager.default
.url(forUbiquityContainer: nil)
}
func saveToICloud(data: Data, filename: String) {
guard let containerURL = ubiquityURL() else { return }
let fileURL = containerURL
.appendingPathComponent(filename)
do {
try data.write(to: fileURL)
Logger.storage.info(
"Saved \(filename) to iCloud Drive"
)
} catch {
Logger.storage.error(
"Save failed: \(error.localizedDescription)"
)
}
}
func listICloudFiles() {
let query = NSMetadataQuery()
query.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
query.start()
}
}
NSDocumentPickerViewController یک UI سیستمی برای انتخاب و واردات فایلها از iCloud Drive فراهم میکند. کاربر یک مرورگر فایل استاندارد با پشتیبانی از جستجو، مرتبسازی و انتخاب چندگانه میبیند. پس از انتخاب فایل، برنامه URL آن را دریافت کرده و میتواند از طریق NSFileCoordinator با آن کار کند.
قانون مهم: هنگام کار با فایلهای iCloud Drive باید از NSFileCoordinator برای خواندن و نوشتن استفاده کرد. این تضمین میکند که فایل در طول عملیات توسط فرآیند دیگری (مثلاً همگامسازی) تغییر نکند. عدم رعایت هماهنگی میتواند منجر به خرابی داده شود.
تعارضات نسخه زمانی رخ میدهد که یک فایل به طور همزمان روی دو دستگاه قبل از اتمام همگامسازی تغییر کند. iOS به طور خودکار چنین موقعیتهایی را از طریق NSFileVersion تشخیص داده و نسخههای متعارضی ایجاد میکند که کاربر یا برنامه باید آنها را حل کنند.
func resolveConflicts(for fileURL: URL) {
let conflictVersions = NSFileVersion
.unresolvedConflictVersionsOfItem(at: fileURL) ?? []
for version in conflictVersions {
do {
let conflictData = try Data(contentsOf: version.url)
let resolved = mergeData(
original: try Data(contentsOf: fileURL),
conflict: conflictData
)
try resolved.write(to: fileURL)
version.remove()
} catch {
Logger.sync.error(
"Conflict resolution failed: \(error)"
)
}
}
}
NSFileVersion تاریخچه تغییرات فایل را تا ۳۰ روز ذخیره میکند. هر نسخه شامل URL، تاریخ ایجاد و شناسه دستگاهی است که نسخه را ایجاد کرده است. هنگامی که دو دستگاه تغییرات را با شناسه پایه یکسان ارسال میکنند، سیستم به طور خودکار نسخهها را به عنوان متعارض علامتگذاری میکند.
استراتژیهای حل: برنامه میتواند تغییرات را به طور خودکار ادغام کند (برای فرمتهای پشتیبانی شده)، انتخاب نسخه را به کاربر نشان دهد یا از استراتژی «آخرین نویسنده» (last-writer-wins) استفاده کند. Apple برای دادههای متنی و ساختاریافته ادغام خودکار و برای فرمتهای باینری نمایش نسخههای متعارض به کاربر را توصیه میکند.
ذخیرهسازی رایگان iCloud 5 گیگابایت است که بین تمام سرویسهای کاربر توزیع میشود: پشتیبانگیری، عکسها، ایمیل و iCloud Drive. تعرفههای پولی از ۵۰ گیگابایت شروع شده و تا ۱۲ ترابایت میرسد. برای برنامههایی با تبادل فایل فشرده، در نظر گرفتن این محدودیتها حیاتی است.
بهینهسازی ذخیرهسازی: iOS مکانیزم تخلیه فایل (eviction) را فراهم میکند — وقتی فضای محلی تمام میشود، سیستم میتواند کپیهای کش شده فایلهای iCloud Drive را حذف کرده و فقط فراداده را باقی بگذارد. هنگام تلاش برای باز کردن چنین فایلی، سیستم به طور خودکار آن را از ابر دانلود میکند. توسعهدهنده میتواند این فرآیند را از طریق NSFileCoordinator کنترل کرده و وضعیت فایل را از طریق NSMetadataUbiquitousItemDownloadingStatusKey بررسی کند.
به گفته WWDC 2022، Apple شیوههای زیر را برای بهینهسازی iCloud Drive توصیه میکند: فقط اسناد کاربر را در Ubiquity container ذخیره کنید، نه کش برنامه؛ از دانلود ناهمگام با نشانگر پیشرفت استفاده کنید؛ اطلاعاتی درباره اندازه فایلها قبل از دانلود به کاربر ارائه دهید؛ پشتیبانی از ادامه دانلود برای فایلهای بزرگ را پیادهسازی کنید.
نکته کلیدی: حذف فایل از Ubiquity container منجر به حذف آن از تمام دستگاههای کاربر میشود. برای فایلهای موقت از دایرکتوری محلی Documents استفاده کنید، نه Ubiquity container. همچنین در نظر داشته باشید که همگامسازی آنی نیست — تاخیر بسته به اندازه فایل و شبکه میتواند از چند ثانیه تا چند دقیقه متغیر باشد.
سوالات متداول
iCloud Drive یک ذخیرهسازی فایل ابری Apple است که اسناد را بین iPhone، iPad، Mac و PC همگامسازی میکند. این سرویس با Finder و برنامه Files ادغام شده و امکان کار با اسناد را بدون برنامههای اضافی فراهم میکند.
همگامسازی از طریق CloudKit کار میکند: فایلهای Ubiquity container برنامه به طور خودکار به ابر آپلود شده و به دستگاههای دیگر کاربر منتشر میشوند. سیستم از NSMetadataQuery برای ردیابی وضعیت و NSFileCoordinator برای دسترسی امن استفاده میکند.
capability iCloud را در Xcode اضافه کنید، سرویس iCloud Documents را فعال کنید و از FileManager.url(forUbiquityContainer:) برای دریافت مسیر دایرکتوری همگامسازی شده استفاده کنید. برای انتخاب فایلها از NSDocumentPickerViewController استفاده کنید.
iOS از طریق NSFileVersion نسخههای متعارض ایجاد میکند. توسعهدهنده میتواند تغییرات را به طور خودکار ادغام کند یا انتخاب را به کاربر نشان دهد. سیستم نسخهها را تا ۳۰ روز ذخیره کرده و در صورت تغییرات همزمان از دستگاههای مختلف، تعارضات را به طور خودکار علامتگذاری میکند.
رایگان ۵ گیگابایت برای تمام سرویسهای iCloud ارائه میشود. تعرفههای پولی: ۵۰ گیگابایت، ۲۰۰ گیگابایت، ۲ ترابایت، ۶ ترابایت و ۱۲ ترابایت. برای فایلهای بزرگ، پشتیبانی از ادامه دانلود را پیادهسازی کرده و فضای موجود را قبل از نوشتن بررسی کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید