iCloud Drive คือพื้นที่จัดเก็บไฟล์บนคลาวด์ของ Apple ที่สร้างไว้ใน iOS, macOS และ iPadOS สำหรับซิงค์เอกสารระหว่างอุปกรณ์ของผู้ใช้ ตามข้อมูลจาก Apple, 2024, iCloud Drive ใช้ CloudKit เป็นแบ็กเอนด์สำหรับจัดเก็บไฟล์และการซิงค์อัตโนมัติ: การเปลี่ยนแปลงที่ทำบน iPhone จะสะท้อนบน Mac และ iPad ทันทีโดยไม่ต้องดำเนินการใดๆ จากผู้ใช้ นักพัฒนาสามารถรวม iCloud Drive เข้ากับแอปพลิเคชันผ่าน NSDocumentPickerViewController และ API ของ Ubiquity
ประเด็นสำคัญ
iCloud Drive คือบริการไฟล์บนคลาวด์ของ Apple ที่ให้พื้นที่จัดเก็บเอกสารแบบรวมศูนย์สำหรับอุปกรณ์ทั้งหมดของผู้ใช้ที่ได้รับอนุญาตด้วย Apple ID เดียวกัน บริการนี้เปิดตัวในปี 2014 พร้อมกับ iOS 8 และ OS X Yosemite เพื่อแทนที่ iCloud Documents
iCloud Drive แตกต่างจากบริการพื้นที่จัดเก็บบนคลาวด์อื่นๆ (Google Drive, Dropbox) ตรงที่มีการผสานรวมอย่างลึกซึ้งกับระบบปฏิบัติการ: ไฟล์จะปรากฏโดยตรงใน Finder บน macOS และในแอปไฟล์บน iOS โดยไม่ต้องติดตั้งแอปเพิ่มเติม ระบบจะซิงค์เนื้อหาโดยอัตโนมัติในพื้นหลัง สลับระหว่างเครือข่าย Wi-Fi และเครือข่ายมือถือ
ตามข้อมูลจาก Apple Platform Overview, 2024, iCloud Drive รองรับการควบคุมเวอร์ชันไฟล์สูงสุด 30 วัน การแชร์โฟลเดอร์ผ่าน iCloud Sharing และการผสานรวมกับการค้นหาระบบ Spotlight นักพัฒนาสามารถเข้าถึงพื้นที่จัดเก็บผ่าน API ของ NSFileCoordinator และคอนเทนเนอร์ Ubiquity
Ubiquity คือคำศัพท์ของ Apple ที่หมายถึงความสามารถของข้อมูลที่จะ “อยู่ทุกหนทุกแห่ง” ในบริบทของ iCloud Drive นี่คือกลไกที่ช่วยให้ไฟล์สามารถซิงค์โดยอัตโนมัติทั่วทุกอุปกรณ์ของผู้ใช้ผ่านแบ็กเอนด์คลาวด์ CloudKit
| ส่วนประกอบ | คำอธิบาย | บทบาท |
|---|---|---|
| คอนเทนเนอร์ Ubiquity | ไดเรกทอรีพิเศษของแอปพลิเคชัน | จัดเก็บไฟล์สำหรับการซิงค์ |
| CloudKit | บริการแบ็กเอนด์ของ Apple | ให้บริการจัดเก็บและการซิงค์ |
| NSMetadataQuery | คำค้นหาระบบ | ติดตามสถานะไฟล์ Ubiquity |
| NSFileVersion | การจัดการเวอร์ชัน | แก้ไขข้อขัดแย้งของการเปลี่ยนแปลง |
คอนเทนเนอร์ Ubiquity คือไดเรกทอรีภายใน Sandbox ของแอปพลิเคชันที่ทำเครื่องหมายสำหรับการซิงค์ ไฟล์ที่วางในไดเรกทอรีนี้จะถูกอัปโหลดไปยัง iCloud Drive โดยอัตโนมัติและกระจายไปยังอุปกรณ์อื่นๆ การเข้าถึงคอนเทนเนอร์ถูกกำหนดค่าผ่าน Capabilities ใน Xcode
ระบบติดตามสถานะของแต่ละไฟล์ผ่าน NSMetadataQuery: ไฟล์สามารถอยู่ในสถานะท้องถิ่น (ดาวน์โหลดไปยังอุปกรณ์แล้ว), ระยะไกล (อยู่เฉพาะบนคลาวด์) หรือกำลังดาวน์โหลด นักพัฒนาสามารถขอให้ดาวน์โหลดไฟล์โดยทางโปรแกรมหรือตรวจสอบความพร้อมใช้งานก่อนเปิด
การรวม iCloud Drive เริ่มต้นด้วยการเพิ่มความสามารถ iCloud ใน Xcode และเปิดใช้งานบริการ iCloud Documents หลังจากนั้น แอปพลิเคชันจะเข้าถึงคอนเทนเนอร์ Ubiquity ซึ่งเป็นไดเรกทอรีพิเศษที่ส่งคืนเส้นทางผ่าน 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 จัดเตรียมอินเทอร์เฟซผู้ใช้ของระบบสำหรับเลือกและนำเข้าไฟล์จาก 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 จัดเก็บประวัติการเปลี่ยนแปลงของไฟล์นานสูงสุด 30 วัน แต่ละเวอร์ชันประกอบด้วย URL วันที่สร้าง และตัวระบุของอุปกรณ์ที่สร้างเวอร์ชัน ระบบจะทำเครื่องหมายเวอร์ชันว่าขัดแย้งกันโดยอัตโนมัติเมื่ออุปกรณ์สองเครื่องส่งการเปลี่ยนแปลงด้วยตัวระบุฐานเดียวกัน
กลยุทธ์การแก้ไข: แอปพลิเคชันสามารถรวมการเปลี่ยนแปลงโดยอัตโนมัติ (สำหรับรูปแบบที่รองรับ) แสดงตัวเลือกเวอร์ชันให้ผู้ใช้เลือก หรือใช้กลยุทธ์ผู้เขียนคนสุดท้ายชนะ (last-writer-wins) Apple แนะนำให้รวมอัตโนมัติสำหรับข้อมูลข้อความและข้อมูลที่มีโครงสร้าง และแสดงเวอร์ชันที่ขัดแย้งให้ผู้ใช้เลือกสำหรับรูปแบบไบนารี
พื้นที่จัดเก็บฟรี ของ iCloud คือ 5 GB ซึ่งกระจายไปยังบริการทั้งหมดของผู้ใช้: การสำรองข้อมูล รูปภาพ อีเมล และ iCloud Drive แผนแบบชำระเงินเริ่มต้นที่ 50 GB และสูงถึง 12 TB สำหรับแอปพลิเคชันที่มีการแลกเปลี่ยนไฟล์จำนวนมาก การพิจารณาขีดจำกัดเหล่านี้เป็นสิ่งสำคัญ
การเพิ่มประสิทธิภาพพื้นที่จัดเก็บ: iOS มีกลไกการนำไฟล์ออก—เมื่อพื้นที่ท้องถิ่นหมด ระบบสามารถลบสำเนาที่แคชไว้ของไฟล์ iCloud Drive ทิ้ง โดยเหลือเพียงข้อมูลเมตา เมื่อพยายามเปิดไฟล์ดังกล่าว ระบบจะดาวน์โหลดจากคลาวด์โดยอัตโนมัติ นักพัฒนาสามารถควบคุมกระบวนการนี้ผ่าน NSFileCoordinator และตรวจสอบสถานะไฟล์ผ่าน NSMetadataUbiquitousItemDownloadingStatusKey
ตามข้อมูลจาก WWDC 2022, Apple แนะนำแนวทางปฏิบัติต่อไปนี้เพื่อเพิ่มประสิทธิภาพ iCloud Drive: เก็บเฉพาะเอกสารผู้ใช้ในคอนเทนเนอร์ Ubiquity ไม่ใช่แคชของแอปพลิเคชัน; ใช้การดาวน์โหลดแบบอะซิงโครนัสพร้อมตัวบ่งชี้ความคืบหน้า; ให้ข้อมูลขนาดไฟล์แก่ผู้ใช้ก่อนดาวน์โหลด; นำการรองรับการดาวน์โหลดต่อสำหรับไฟล์ขนาดใหญ่
ประเด็นสำคัญ: การลบไฟล์ออกจากคอนเทนเนอร์ Ubiquity จะลบไฟล์ออกจากอุปกรณ์ทั้งหมดของผู้ใช้ สำหรับไฟล์ชั่วคราว ให้ใช้ไดเรกทอรี Documents ในท้องถิ่นแทนคอนเทนเนอร์ Ubiquity นอกจากนี้ โปรดทราบว่าการซิงค์ไม่ได้เกิดขึ้นทันที—ความล่าช้าอาจอยู่ในช่วงไม่กี่วินาทีถึงนาที ขึ้นอยู่กับขนาดไฟล์และเครือข่าย
คำถามที่พบบ่อย
iCloud Drive คือพื้นที่จัดเก็บไฟล์บนคลาวด์ของ Apple ที่ซิงค์เอกสารระหว่าง iPhone, iPad, Mac และ PC มันถูกรวมเข้ากับ Finder และแอปไฟล์ ช่วยให้คุณทำงานกับเอกสารได้โดยไม่ต้องใช้แอปเพิ่มเติม
การซิงค์ ทำงานผ่าน CloudKit: ไฟล์จากคอนเทนเนอร์ Ubiquity ของแอปพลิเคชันจะถูกอัปโหลดไปยังคลาวด์โดยอัตโนมัติและกระจายไปยังอุปกรณ์อื่นๆ ของผู้ใช้ ระบบใช้ NSMetadataQuery สำหรับติดตามสถานะและ NSFileCoordinator สำหรับการเข้าถึงที่ปลอดภัย
เพิ่ม ความสามารถ iCloud ใน Xcode เปิดใช้งานบริการ iCloud Documents และใช้ FileManager.url(forUbiquityContainer:) เพื่อรับเส้นทางไปยังไดเรกทอรีที่ซิงค์ ใช้ NSDocumentPickerViewController สำหรับการเลือกไฟล์
iOS สร้าง เวอร์ชันที่ขัดแย้งกัน ผ่าน NSFileVersion นักพัฒนาสามารถรวมการเปลี่ยนแปลงโดยอัตโนมัติหรือแสดงตัวเลือกให้ผู้ใช้เลือก ระบบจัดเก็บเวอร์ชันนานสูงสุด 30 วันและทำเครื่องหมายข้อขัดแย้งโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงพร้อมกันจากอุปกรณ์ต่างๆ
พื้นที่จัดเก็บฟรี คือ 5 GB ในทุกบริการของ iCloud แผนแบบชำระเงิน: 50 GB, 200 GB, 2 TB, 6 TB และ 12 TB สำหรับไฟล์ขนาดใหญ่ ให้ใช้การรองรับการดาวน์โหลดต่อและตรวจสอบพื้นที่ว่างก่อนเขียน
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม