iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
CloudKitは日記アプリのモデルを格納する場所には向いていないということで、iCloudドキュメントを試してみた。
iCloudコンテナ・ディレクトリにファイルを格納するのだが、このコンテナ、CloudKitで出てきたコンテナと同じ識別子で指す物のようだ。ただ、識別子は同じでも、領域は異なるのだと思う。
以下がファイルに書き込むコードだ。
let containerURL = FileManager.default.url(forUbiquityContainerIdentifier: "iCloud.com.example.KeepADiary")
let documentsURL = containerURL?.appendingPathComponent("Documents")
let fileURL = documentsURL?.appendingPathComponent("my.diary")
/* write */
let todayText = Date().description
do {
try todayText.write(to: fileURL!, atomically: true, encoding: .utf8)
}
catch {
print("write error")
}
このコードは、macOSとiOSで動作するが、macOSで実行した際のfileURLの内容は以下のとおり。
file:///Users/yukio/Library/Mobile%20Documents/iCloud~com~example~KeepADiary/Documents/my.diary
このディレクトリでファイルを確認すると以下のとおり。
$ pwd
/Users/yukio/Library/Mobile Documents/iCloud~com~example~KeepADiary/Documents
$ ls
my 3.diary my 4.diary my 5.diary my 6.diary my 7.diary
ファイル書き込み時に、このディレクトリのファイルを確認したところ、my.diary という名前のファイルが作成されるが、しばらくすると、my 8.diary という風にファイル名が変更される。何故だ!ファイルの上書き防止機能?版管理機能?