Let me update you on this issue. There were no changes in Obsidian 1.7.x with regard to iCloud.
The issue that we have is that we need to 1) check if the configuration files are present and 2) download them if they are not. We believe there is a problem in the iCloud API related to the checking part (not downloading). Specifically, checking if a directory is present (the settings directory) takes proportionally longer the more files you have (including files not in that directory and even including files in other vaults!).
The “keep downloaded” toggle in iOS 18+ has not improve the speed of this check. If you have keep download on, in theory, you can safely skip the check/download.
We are currently considering a couple of different approaches to the way Obsidian starts from iCloud vault.
I am gonna add here an excerpt of a note from the CTO:
Maybe it’s good time I give an update on the iCloud situation. I know that the load time has been super frustrating for iCloud users, especially when Apple finally added the “keep downloaded” option but it’ still so damn slow.
The API that Apple gives developers is unfortunately super limited, and also quite buggy. When we first load the iCloud vault, we use the NSMetadataQuery API to scan the vault for any file that is “offloaded” to the cloud. When this API returns results, we will request the OS to download each file. The biggest bug with this API, is that even though we explicitly ask the NSMetadataQuery to ONLY query the files in your vault’s .obsidian folder (meaning, just the configuration files, themes, and plugins, because we need these to exist when booting up the app correctly), the API still actually iterates through every single file in your Obsidian iCloud folder (called the “ubiquitous container”. Because of this, a scan of anything in the iCloud folder, even if we limit the query to a single file, will cause an entire scan of everything in your Obsidian iCloud folder.
Now with iOS 18, and the “keep downloaded” option. Apple has provided no API to know whether that’s enabled. And there also isn’t a way for the app to request it. In fact, an apple developer publicly said that the option is designed to be used by the user, and they have no intention to expose any API for app developers.