Skip to content

Comments

Add CloudStore module for iCloud sync#1721

Open
DRadmir wants to merge 5 commits intomainfrom
cloud-store
Open

Add CloudStore module for iCloud sync#1721
DRadmir wants to merge 5 commits intomainfrom
cloud-store

Conversation

@DRadmir
Copy link
Contributor

@DRadmir DRadmir commented Feb 20, 2026

Summary

  • Add CloudStore module for iCloud CloudKit sync
  • Support optional AES-GCM encryption via DataTransformable protocol
  • Generic CloudSyncable protocol for any syncable data type

@DRadmir DRadmir self-assigned this Feb 20, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @DRadmir, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a comprehensive solution for integrating iCloud CloudKit synchronization capabilities into the application. It establishes a modular CloudStore component, defining clear protocols for data types that can be synchronized and for optional data transformation, including encryption. The core CloudSyncService provides robust functionality for managing data within iCloud, enhancing the application's ability to persist and retrieve user data securely across devices.

Highlights

  • New CloudStore Module: A new CloudStore module has been introduced to facilitate iCloud CloudKit synchronization.
  • Data Transformation Protocol: A DataTransformable protocol was added to support optional data transformations, such as AES-GCM encryption, before data is stored or after it is retrieved.
  • Generic CloudSyncable Protocol: A CloudSyncable protocol was defined to allow any identifiable and codable data type to be synchronized with CloudKit.
  • CloudSyncService Implementation: A CloudSyncService actor was implemented to handle iCloud account status checks, saving, fetching, and deleting of CloudSyncable items in CloudKit.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • Packages/Store/Package.resolved
    • Removed the Package.resolved file, likely due to dependency updates or management changes.
  • Packages/Store/Package.swift
    • Added 'CloudStore' as a new library product.
    • Added 'CloudStore' as a new target with its source path.
Activity
  • No human activity has occurred on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request introduces a solid foundation for iCloud synchronization using CloudKit. It correctly leverages Swift concurrency with actors and provides a flexible encryption layer via the DataTransformable protocol. The use of AES-GCM for encryption is a secure and appropriate choice for this context. However, there are a few important areas for improvement: the fetch method needs to handle CloudKit pagination to ensure all records are retrieved, the deleteAll method can be optimized to avoid unnecessary data processing, and the default recordType implementation should be more resilient to code refactoring.

- Remove DataTransformable protocol and related implementations
- Remove PlainTransformer and EncryptedTransformer types
- Remove EncryptedTransformerTests
- Simplify CloudSyncService to use JSONEncoder/JSONDecoder directly
- Add configurable encoder/decoder parameters with defaults
// Copyright (c). Gem Wallet. All rights reserved.

import Foundation
import CryptoKit
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move to SystemServices

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.

2 participants