##はじめに
iCloudへのアップロードとダウンロードに長いこと苦戦したので備忘録として記事を書かせていただきます。
1.iCloudコンテナのURLの設定
private var containerUrl: URL? {
// iCloudコンテナのURL
// 特定のiCloudコンテナを指定する場合はnilのところに書き込む
let url = FileManager.default.url(forUbiquityContainerIdentifier: nil)
// コンテナに追加するフォルダのパス
let path = url.appendingPathComponent("")
do {
// iCloudコンテナにフォルダの作成
try FileManager.default.createDirectory(at: path, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
print(error)
}
return path
}
※pathがnilで返って来る場合、iCloudDriveのスイッチがオフになっています。
2.アップロード方法
1 で指定したiCloudのコンテナのURLにドキュメントフォルダの中身をコピーする
// ドキュメントのURL
let documentUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
do {
// ドキュメントをiCloudコンテナにコピー
try fileManager.copyItem(at: documentUrl, to: self.containerUrl)
} catch let error as NSError {
print(error)
}
3.ダウンロードする前にiCloudとの同期を行う
DispatchQueue.main.async {
do {
// iCloudからローカルにダウンロード
try FileManager.default.startDownloadingUbiquitousItem(at: self.containerUrl)
} catch let error as NSError {
print(error)
}
}
}
##4.iCloudコンテナからドキュメントにダウンロード
do {
// iCloud上にアップロードされているフォルダがあるか確認
if fileManager.fileExists(atPath: unwrapICloudContainerUrl.path) {
// iCloudコンテナからドキュメントにコピー
try fileManager.copyItem(at: self.containerUrl, to: documentUrl)
}
}
これでiCloudコンテナにあるものをドキュメントにコピー、ダウンロードできます!
まとめ
まだiCloudを勉強しはじめたばかりでわからないことが多くあります。
NotificationCenterを使用した、アップロード時とダウンロード時の通知なども現在作成中のため、完成次第次の記事を書きたいと思います。