iCloudDocumentとは、ユーザーのファイルをユーザーのiCloud内に保存するものである。
<key>NSUbiquitousContainers</key>
<dict>
<key>iCloud.com.***.app2</key>
<dict>
<key>NSUbiquitousContainerIsDocumentScopePublic</key>
<true/>
<key>NSUbiquitousContainerName</key>
<string>App2</string>
<key>NSUbiquitousContainerSupportedFolderLevels</key>
<string>Any</string>
</dict>
</dict>
本来はこれを追加すればうごくはずなのだが、30回くらいビルドし直しても治らん。
一応解決策として検索してよく出てくるのが、
クリーン ビルドをする
通常のVersionを変更する
Buildバージョンを変更する
Bundle Identifierを変更してみる
一度ストア用に、ビルドをしてAppStoreConnectにアップロードしてみる
(こうすると、普段のビルドでは出現しないエラーがよく出る、そのエラーが原因になっていることがあるため。)
などが上がっているが、どれをやってもうまくいかなかった。ちなみにファイル自体はiCloud内に保存されているのは確かで、取得することはできていた。しかし、FilesアプリやMacのiCloudには表示されない。
埒が明かないので、海外のサイトを見てみると
Documentsフォルダを作ると解決したなどというのがあったので以下のコードを実行してみたが、そもそもすでにフォルダーは存在していた
.onAppear(){
let fm = FileManager.default
// First get the URL for the default ubiquity container for this app
if let containerURL = fm.url(forUbiquityContainerIdentifier: nil) {
let tryURL = containerURL.appendingPathComponent("Documents")
do {
if (fm.fileExists(atPath: tryURL.path, isDirectory: nil) == false) {
try fm.createDirectory(at: tryURL, withIntermediateDirectories: true, attributes: nil)
print("ディレクトリ作成した")
}else{
print("ディレクトリすでに存在している")
}
let documentsURL = tryURL
} catch {
print("ERROR: Cannot create /Documents on iCloud")
}
} else {
print("ERROR: Cannot get ubiquity container")
}
}
結局どうやって解決したかというと、わたしはXcode学びたての頃に、どこかのサイトで書いてあった通りBuildバージョンは整数ではなく、1.0.0のような表記で、通常のアプリバージョンと同様の形式で記述していた。実はこれが原因だったようだ。。
わたしは,1.0.0から1.0.1 1.0.2などのように変更していたのだ。これではダメらしい。
ビルドバージョンを1.0.0から整数の2に変更して、ビルドしてみると...
iCloudに自分のアプリフォルダーが出現した!!!!!!!
結論
Xcodeはやっぱりクソ