恐怖! Xcode14でiCloudDriveのファイルが消える

Xcode14でビルドしたアプリをシミュレータで実行した時、iCloud Driveのファイルが消えてしまいます!!
すべてのアプリで発生するのではなく、Core DataをiCloudと一緒に使用しているアプリに限られると思います。
CoreDataを使用していなくても、CapabilitiesでiCloudを追加して、ServicesでKey-value storageをONにしているだけのアプリで発生しました。

Xcode14.1 RCでは、iCloud Deriveの現象が発生しなくなりました。
シミュレータでアイコンを移動できないのは変わりませんでした。

注意!! 
再現させようとする場合、ファイルが消えてしまうかもしれないので、iCloud Driveのすべてのファイルをバックアップしておきましょう。

再現方法

1. 以下のURLから、Appleのサンプルコードをダウンロードする。
https://developer.apple.com/documentation/coredata/synchronizing_a_local_store_to_the_cloud

WWDC2022のビデオにもリンクがあります。
https://developer.apple.com/videos/play/wwdc2022/10119/

2. Xcode14(最新のXcode14.0.1を推奨)でプロジェクトを開き、説明に従って設定する

3. ソースコードは何も変更せずにそのまま実行する(シミュレータはiOS16の機種を選択する)

4. シミュレータの設定アプリで、自分のApple IDでログインする(既にログイン済みの場合は次へ)

5. サンプルアプリでデータを追加する

6. しばらく待つ

7. 何も起きなければ、一度サンプルアプリを閉じてから再度開く

8. しばらく待つ

現象の詳細

ファイルが消えるタイミングはiCloudと同期するタイミングなので、データを追加や削除して同期を走らせます。
同期はOS側で制御されていていつ走るかわからないので、しばらく(1~2分程度)待つしかありません。

ファイルが消えなくてもフォルダーの変更日が変化するので、Finderのリスト表示で変更日順に表示しておくと分かり易いです。
(Xcode13系ではフォルダーの変更日が変わる事自体がありませんでした。)
Finderでフォルダーを開閉したりすると、表示が更新され一気に動き出す事があります。

Xcodeでデバッグ実行しなくても、一度シミュレータにインストールされたアプリであれば、シミュレータでアプリを実行するだけで再現できます。
シミュレータの起動1回につき現象の発生が1回のように見えるので、なかなか現象が発生しない場合は一度シミュレータ自体を再起動すると発生しやすくなります。

すべてのファイルが消えるのではなく、消えないファイルと消えやすいファイルがあるようです。
消えやすいファイルは、テキストエディット、プレビュー、Numbersなど標準アプリで保存されるフォルダー内のファイルや、以下の拡張子のファイルのようです。

mp3
mp4
png
dmg
mmf
txt
csv
pdf
HEIC
numbers

再現させてみようとする方は、必ずバックアップを取ってから実行してください。
もしバックアップなしで削除されてしまってもiCloud.comから30日間は復元できますが、ファイル数が多いとかなり面倒です。

再現させなくても、このような現象があった事は多くの方に知ってもらった方が良いかと思いますので、まわりの開発者に共有をお願いします。

Xcode13系では発生していないので、Xcode14系で加わった不具合だと思われます。
Xcode14系(14.0, 14.0.1)は他にも多数の不具合があるようです。

  • iOS15.7でアプリスイッチャーでアプリを終了させるとアプリがクラッシュする。(Xcode14.0)
  • シミュレータでアイコンを移動できない。
  • シミュレータでDisplay Nameが反映されない

Appleには早急に対応版をリリースされる事を切に願います。