Enabling an iCloud container for app ID เปิดการใช้งานไอคลาวด์สำหรับแอปนั้นๆ
func saveToiCloud() throws {
// กำหนดที่อยู่โฟลเดอร์ของไฟล์ในไอคลาวด์
guard let containerURL = FileManager.default.url(forUbiquityContainerIdentifier: "iCloud.com.mtel.CaptainLog") else { return }
// กำหนดที่อยู่โฟลเดอร์ของไฟล์ในแอป
let docDirectory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
// กำหนดที่อยู่ของไฟล์ในแอป
if let fileURL = docDirectory?.appendingPathComponent("myfile.plist") {
// ถ้าโฟลเดอร์ยังไม่มี ให้สร้างโฟลเดอร์เก็บไฟล์ในไอคลาวด์
if !FileManager.default.fileExists(atPath: containerURL.path) {
try FileManager.default.createDirectory(at: containerURL, withIntermediateDirectories: true, attributes: nil)
}
// กำหนดที่อยู่ของไฟล์ในไอคลาวด์
let backupFileURL = containerURL.appendingPathComponent("myfile.plist")
// ถ้ามีไฟล์เดิมอยู่แล้ว ให้ลบออก แล้วคัดลอกไฟฟล์ใหม่จากแอปไปแทนที่
if FileManager.default.fileExists(atPath: backupFileURL.path) {
try FileManager.default.removeItem(at: backupFileURL)
try FileManager.default.copyItem(at: fileURL, to: backupFileURL)
} else {
// ถ้าไฟล์ยังไม่มี ให้คัดลอกไฟฟล์ใหม่จากแอปไปเก็บในไอคลาวด์
try FileManager.default.copyItem(at: fileURL, to: backupFileURL)
}
}
}
func loadFromiCloud() throws {
let fileManager = FileManager.default
// กำหนดที่อยู่โฟลเดอร์ของไฟล์ในไอคลาวด์
guard let containerURL = fileManager.url(forUbiquityContainerIdentifier: "iCloud.com.mtel.CaptainLog") else { return }
// กำหนดที่อยู่ของไฟล์ในไอคลาวด์
if let icloudFileURL = containerURL.appendingPathComponent("myfile.plist") as URL? {
// ดาวโหลดไฟล์จากไอคลาวด์
try fileManager.startDownloadingUbiquitousItem(at: icloudFileURL)
// กำหนดที่อยู่โฟลเดอร์ของไฟล์ในแอป
let docDirectory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
// กำหนดที่อยู่ของไฟล์ในแอป ปกติจะเก็บข้อมูลแอปไว้ในโฟลเดอร์ Documents
let fileURL = docDirectory?.appendingPathComponent("myfile.plist")
var isDownloaded = false
// วนลูป คอยให้ดาวโหลดเรียบร้อย
print(icloudFileURL.path)
print(fileURL.path)
while !isDownloaded {
// ตรวจสอบว่าไฟล์ดาวโหลดมาแล้วหรือยัง
if fileManager.fileExists(atPath: icloudFileURL.path) {
isDownloaded = true
}
}
// ถ้าดาวโหลดเรียบร้อย ให้คัดลอกมาไว้ในแอป
if isDownloaded {
do {
try FileManager.default.copyItem(at: icloudFileURL, to: fileURL!)
}
catch let error as NSError {
print(error.localizedDescription)
}
}
// นำไฟล์ข้อมูลไปใช้งาน ตัวอย่างนี้โหลดไฟล์ plist มาเก็บในดิกชันนารี แล้วแสดงผล
if fileManager.fileExists(atPath: fileURL!.path) {
// read file
cash = NSDictionary(contentsOf: fileURL!) as! [String : String]
// get balance
let bal = cash["balance"]
cashBalance = Double(bal!)!
refreshBalance()
// remove balance key
cash.removeValue(forKey: "balance")
viewAll(self)
alert(text:"Done, import \(cash.count) items.\n")
}
}
}
@IBAction func shareImage(_ sender: Any) {
let docDirectory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
if let fileURL = docDirectory?.appendingPathComponent("mypic.jpg") {
let objectsToShare = [fileURL]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
// exclude apps you don't want to share to
activityVC.excludedActivityTypes = [
UIActivity.ActivityType.assignToContact,
UIActivity.ActivityType.saveToCameraRoll,
UIActivity.ActivityType.postToFlickr,
UIActivity.ActivityType.postToVimeo,
UIActivity.ActivityType.postToTencentWeibo,
UIActivity.ActivityType.openInIBooks
]
// if share to ipad, use popoverPresentationController to share
if UIDevice.current.userInterfaceIdiom == .pad {
if activityVC.responds(to: #selector(getter: UIViewController.popoverPresentationController)) {
activityVC.popoverPresentationController?.barButtonItem = sender as? UIBarButtonItem
}
}
self.present(activityVC, animated: true, completion: nil)
}
}
@IBAction func shareString(_ sender: Any) {
let word = "string to share"
let objectsToShare = "\(word)"
let activityVC = UIActivityViewController(activityItems: [objectsToShare], applicationActivities: nil)
// exclude apps you don't want to share to
activityVC.excludedActivityTypes = [
UIActivity.ActivityType.assignToContact,
UIActivity.ActivityType.saveToCameraRoll,
UIActivity.ActivityType.postToFlickr,
UIActivity.ActivityType.postToVimeo,
UIActivity.ActivityType.postToTencentWeibo,
UIActivity.ActivityType.openInIBooks
]
// if share to ipad, use popoverPresentationController to share
if UIDevice.current.userInterfaceIdiom == .pad {
if activityVC.responds(to: #selector(getter: UIViewController.popoverPresentationController)) {
activityVC.popoverPresentationController?.barButtonItem = sender as? UIBarButtonItem
}
}
self.present(activityVC, animated: true, completion: nil)
}
@IBAction func shareFile(_ sender: Any) {
let docDirectory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
if let fileURL = docDirectory?.appendingPathComponent("myfile.txt") {
let objectsToShare = [fileURL]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
// exclude apps you don't want to share to
activityVC.excludedActivityTypes = [
UIActivity.ActivityType.assignToContact,
UIActivity.ActivityType.saveToCameraRoll,
UIActivity.ActivityType.postToFlickr,
UIActivity.ActivityType.postToVimeo,
UIActivity.ActivityType.postToTencentWeibo,
UIActivity.ActivityType.postToTwitter,
UIActivity.ActivityType.postToFacebook,
UIActivity.ActivityType.openInIBooks
]
// if share to ipad, use popoverPresentationController to share
if UIDevice.current.userInterfaceIdiom == .pad {
if activityVC.responds(to: #selector(getter: UIViewController.popoverPresentationController)) {
activityVC.popoverPresentationController?.barButtonItem = sender as? UIBarButtonItem
}
}
self.present(activityVC, animated: true, completion: nil)
}
}
2020. mnet50.com