Skip to content

iCloud cloud sync driver #16794

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 19, 2024

Conversation

warmenhoven
Copy link
Collaborator

Uses CloudKit because iCloud Documents isn't available on tvOS.

Fixes #16566

@warmenhoven warmenhoven force-pushed the warmenhoven/pr/icloud branch from 80c8c42 to c43561b Compare July 19, 2024 03:08
@hizzlekizzle
Copy link
Contributor

woooot, that's big news dude. congrats and thanks for all the hard work. 🚀

@LibretroAdmin LibretroAdmin merged commit 6379938 into libretro:master Jul 19, 2024
27 checks passed
@TariqMK
Copy link

TariqMK commented Jul 19, 2024

Does CloudKit mean that it won't work on a windows machine with iCloud installed?

Or that I won't be able to see the save in the files app?

@warmenhoven warmenhoven deleted the warmenhoven/pr/icloud branch July 19, 2024 13:25
@warmenhoven
Copy link
Collaborator Author

Does CloudKit mean that it won't work on a windows machine with iCloud installed?

Yes, that's correct. There aren't iCloud APIs in a Windows SDK that are available.

I've looked at the iCloud for Windows application and it looks like it just exposes iCloud Drive as a location in Explorer. I'm actually not certain whether that's immediately accessible through RetroArch's VFS layer or if you'd need to somehow bind it to a drive letter? In either event RetroArch would be accessing it through standard file operations, so calling it an "iCloud driver" would be quite misleading. You'd basically just be pointing it at a directory. But then that wouldn't work on iOS as it can't use RetroArch's VFS layer to access iCloud Drive, and tvOS can't access iCloud Drive at all even with the iCloud APIs.

Or that I won't be able to see the save in the files app?

You can't see the backed up copy of the files in the Files app, that's true. But, you can see all of the save files in the Files app inside the RetroArch sandbox.

To be completely honest, I don't really see that as a problem. If you can see the files you might be tempted to change them directly, and that's not something that the sync algorithm supports. All of the files are indexed in the manifest file, and manually keeping that updated with any changes you make is going to be a headache.

@TariqMK
Copy link

TariqMK commented Jul 19, 2024

Does CloudKit mean that it won't work on a windows machine with iCloud installed?

Yes, that's correct. There aren't iCloud APIs in a Windows SDK that are available.

I've looked at the iCloud for Windows application and it looks like it just exposes iCloud Drive as a location in Explorer. I'm actually not certain whether that's immediately accessible through RetroArch's VFS layer or if you'd need to somehow bind it to a drive letter? In either event RetroArch would be accessing it through standard file operations, so calling it an "iCloud driver" would be quite misleading. You'd basically just be pointing it at a directory. But then that wouldn't work on iOS as it can't use RetroArch's VFS layer to access iCloud Drive, and tvOS can't access iCloud Drive at all even with the iCloud APIs.

Or that I won't be able to see the save in the files app?

You can't see the backed up copy of the files in the Files app, that's true. But, you can see all of the save files in the Files app inside the RetroArch sandbox.

To be completely honest, I don't really see that as a problem. If you can see the files you might be tempted to change them directly, and that's not something that the sync algorithm supports. All of the files are indexed in the manifest file, and manually keeping that updated with any changes you make is going to be a headache.

My reason for asking is wishing to have the ability to play a game across any/all platforms that support iCloud (Drive). This would mean having progress in sync between platforms seamlessly. All I would have to do is point the program on windows towards iCloud Drive for saves, and it would work similarly on Apple devices.

I would hazard an opinion to say that more people would use windows interoperability more than would use tvOS, so is the sacrifice for its sake warranted? I don't know - but you probably know the truth on that more than me.

Regardless, we all appreciate the work done on this, and hopefully in future if tvOS supports iCloud Drive then maybe it could be added. Emulation is biggest on windows so IMO it would make sense to include windows as much as possible.

But as a non coder, I know it's easier said than done!

@warmenhoven
Copy link
Collaborator Author

My reason for asking is wishing to have the ability to play a game across any/all platforms that support iCloud (Drive). This would mean having progress in sync between platforms seamlessly. All I would have to do is point the program on windows towards iCloud Drive for saves, and it would work similarly on Apple devices.

In theory it's not hard to write a cloud sync driver that just uses the libretro filestream apis to copy files around. I'm not sure that actually works on the windows iCloud integration and I'm not able to test it as I don't have a windows computer, so not something I'm planning on working on.

That's just half the problem though, you'd still need to write the iCloud Drive driver for iOS to be able to sync. Now that the CloudKit support is in, that's not that hard to do either (but again, not something I'm currently planning on working on). And then you'd have the documentation problem ("On Windows, set up iCloud through Explorer, then set up RetroArch with this driver; and then on iOS, set it up a completely different way").

I would hazard an opinion to say that more people would use windows interoperability more than would use tvOS, so is the sacrifice for its sake warranted? I don't know - but you probably know the truth on that more than me.

I don't consider it a sacrifice because in order for tvOS to work at all through iCloud it has to be done this way. Doing it through iCloud Drive is a completely different implementation, and one doesn't preclude the other.

Taking a step back, if you're looking for cross platform interoperability then using proprietary APIs and services that are only marginally supported on those platforms is dubious in my opinion. It's why I started with the WebDAV driver.

@frootloop88
Copy link

it can safe JUST safe data, right? No core settings, shaders etc

Sunderland93 pushed a commit to Sunderland93/RetroArch that referenced this pull request Dec 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Feature request iCloud sync
5 participants