Skip to content

feat(swift-sdk): ios support#3148

Open
QuantumExplorer wants to merge 27 commits intov3.1-devfrom
feat/iOSSupport
Open

feat(swift-sdk): ios support#3148
QuantumExplorer wants to merge 27 commits intov3.1-devfrom
feat/iOSSupport

Conversation

@QuantumExplorer
Copy link
Member

@QuantumExplorer QuantumExplorer commented Feb 23, 2026

Issue being fixed or feature implemented

Adds full iOS SDK support for Dash Platform, unifying Core (SPV wallet) and Platform (identity/documents/DashPay) functionality into a single native iOS framework. This enables iOS applications to interact with both the Dash Core network (SPV sync, transactions, HD wallets) and Dash Platform (identities, documents, data contracts, DashPay contacts) through idiomatic Swift APIs backed by Rust FFI.

What was done?

New Crates

  • rs-platform-wallet — Core Rust library for wallet-aware identity management. Combines SPV wallet state (ManagedWalletInfo from key-wallet) with Platform identity tracking via IdentityManager. Key types:

    • PlatformWalletInfo: Unified wallet + identity container with transaction maturity tracking and contact request processing
    • ManagedIdentity: Wraps dpp::Identity with sync state, user labels, established contacts, and inbound/outbound contact requests
    • ContactRequest: One-way DashPay relationship with DIP-15 encrypted extended public key (96 bytes: IV + AES-256-CBC ciphertext)
    • EstablishedContact: Bidirectional contact (auto-established when mutual requests are detected), with alias, notes, hidden status, and multi-account support
  • rs-platform-encryption — DIP-15 cryptographic utilities:

    • ECDH shared key derivation (secp256k1)
    • AES-256-CBC encryption/decryption for contact request payloads
    • Extended public key and account label encryption helpers
  • rs-platform-wallet-ffi — C-compatible FFI bindings for rs-platform-wallet with opaque handle management (Box::into_raw/Box::from_raw), generated C header (platform_wallet_ffi.h), comprehensive integration and unit tests

SDK Enhancements

  • rs-sdk — New platform/dashpay module providing high-level Rust helpers for DashPay contact request creation, querying, and DIP-15 key negotiation
  • rs-sdk-ffi — Expanded unified FFI surface with new modules:
    • address/ — Platform address queries (info, balance changes, branch/trunk state) and transitions (top-up, transfer, withdraw)
    • identity/ — Full identity lifecycle FFI (create from addresses, top-up, transfer credits, withdraw, key management)
    • dashpay/ — Contact request FFI operations
    • Re-exports all rs-platform-wallet-ffi symbols for a single unified C interface
    • New C-compatible types (DashSDKConfig, DashSDKAddressInfo, DashSDKNetwork, result enums)

Swift SDK (96 source files)

  • Address & Identity ManagementAddresses, PlatformAddressInfo wrappers with multi-format support (hex, bech32m, raw bytes)
  • DashPay Contact SystemDashPayService, ContactRequest, EstablishedContact for social payment workflows
  • SPV ClientSPVClient and SPVEventHandler wrapping Core SPV FFI with progress tracking, event callbacks, and network lifecycle management
  • HD WalletHDWallet, HDTransaction with SwiftData persistence, BIP44 derivation (13 account categories), multi-account support
  • Core ModelsFilterMatch, HDWalletModels, CoreTransaction, CoreTypes for SPV data
  • Platform ModelsTokenModel, DataContract, DocumentModel, IdentityModel with full SwiftData persistence layer
  • Transaction BuildingTransactionBuilder and TransactionService for creating and broadcasting transactions
  • Unified StateUnifiedStateManager coordinating Core wallet sync, Platform identity sync, and cross-layer operations
  • SecurityKeychainManager, KeyWalletTypes, PrivateKeyUtils, input validation
  • UtilitiesDataTransformers (hex/bech32m/base58 conversion), TestnetNodes configuration, error handling
  • Concurrency — All public APIs are Sendable-compliant for Swift structured concurrency (async/await)

Build & CI

  • Updated build_ios.sh — Builds unified rs-sdk-ffi framework (Core + Platform), with intelligent dependency change detection and automatic cache invalidation when local rust-dashcore changes
  • New GitHub Actions workflow (swift-sdk-build.yml) — Automated iOS framework builds on PR/push with protoc caching, multi-architecture targets (device + simulator ARM64 + simulator x86), 90-minute timeout

Other Changes

  • Updated Cargo.lock and workspace Cargo.toml to include new crates
  • Minor fixes in rs-dapi-client (tonic channel), rs-dapi (bloom filter streaming), rs-dpp (dependency versions)
  • Removed stale .bak files from rs-sdk-ffi
  • swift-sdk/Package.swift updated for new module structure

Architecture

iOS App
  └─ SwiftDashSDK (Swift wrappers, SwiftData persistence)
       └─ rs-sdk-ffi (unified C FFI)
            ├─ rs-sdk (high-level Rust SDK + DashPay helpers)
            ├─ rs-platform-wallet-ffi → rs-platform-wallet (wallet + identity + contacts)
            ├─ rs-platform-encryption (DIP-15 ECDH + AES-256-CBC)
            └─ dash-spv-ffi (Core SPV, HD wallet, key derivation)

How Has This Been Tested?

  • rs-platform-wallet-ffi: Comprehensive integration tests (tests/integration_tests.rs) and comprehensive tests (tests/comprehensive_tests.rs) covering FFI handle lifecycle, contact request creation, identity management, and memory safety
  • rs-platform-wallet: Contact workflow tests (tests/contact_workflow_tests.rs) covering the full contact request → established contact lifecycle with auto-establishment logic
  • Swift SDK builds verified via CI workflow (swift-sdk-build.yml) targeting iPhone simulator (arm64 + x86_64) and device (arm64)
  • SwiftExampleApp integration testing for end-to-end validation of Core + Platform features

Breaking Changes

None — this is entirely additive. New crates and modules are introduced without modifying existing public APIs.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

QuantumExplorer and others added 23 commits December 29, 2025 15:25
Co-authored-by: Borja Castellano <borja.castellano@dash.org>
Co-authored-by: Quantum Explorer <quantum@dash.org>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Borja Castellano <borja.castellano@dash.org>
Co-authored-by: Borja Castellano <borja.castellano@dash.org>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Borja Castellano <borja.castellano@dash.org>
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 23, 2026

Important

Review skipped

Too many files!

This PR contains 259 files, which is 109 over the limit of 150.

📥 Commits

Reviewing files that changed from the base of the PR and between 6b5a9c4 and 1d68b72.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (259)
  • .github/workflows/swift-sdk-build.yml
  • Cargo.toml
  • packages/rs-dapi-client/src/transport/tonic_channel.rs
  • packages/rs-dapi/src/services/streaming_service/bloom.rs
  • packages/rs-platform-encryption/Cargo.toml
  • packages/rs-platform-encryption/src/lib.rs
  • packages/rs-platform-wallet-ffi/Cargo.toml
  • packages/rs-platform-wallet-ffi/IMPLEMENTATION_SUMMARY.md
  • packages/rs-platform-wallet-ffi/README.md
  • packages/rs-platform-wallet-ffi/cbindgen.toml
  • packages/rs-platform-wallet-ffi/platform_wallet_ffi.h
  • packages/rs-platform-wallet-ffi/src/contact.rs
  • packages/rs-platform-wallet-ffi/src/contact_request.rs
  • packages/rs-platform-wallet-ffi/src/error.rs
  • packages/rs-platform-wallet-ffi/src/established_contact.rs
  • packages/rs-platform-wallet-ffi/src/handle.rs
  • packages/rs-platform-wallet-ffi/src/identity_manager.rs
  • packages/rs-platform-wallet-ffi/src/lib.rs
  • packages/rs-platform-wallet-ffi/src/managed_identity.rs
  • packages/rs-platform-wallet-ffi/src/platform_wallet_info.rs
  • packages/rs-platform-wallet-ffi/src/types.rs
  • packages/rs-platform-wallet-ffi/src/utils.rs
  • packages/rs-platform-wallet-ffi/tests/comprehensive_tests.rs
  • packages/rs-platform-wallet-ffi/tests/integration_tests.rs
  • packages/rs-platform-wallet-ffi/tests/test_data/mod.rs
  • packages/rs-platform-wallet/Cargo.toml
  • packages/rs-platform-wallet/examples/basic_usage.rs
  • packages/rs-platform-wallet/src/block_time.rs
  • packages/rs-platform-wallet/src/contact_request.rs
  • packages/rs-platform-wallet/src/crypto.rs
  • packages/rs-platform-wallet/src/error.rs
  • packages/rs-platform-wallet/src/established_contact.rs
  • packages/rs-platform-wallet/src/identity_manager.rs
  • packages/rs-platform-wallet/src/identity_manager/accessors.rs
  • packages/rs-platform-wallet/src/identity_manager/initializers.rs
  • packages/rs-platform-wallet/src/identity_manager/mod.rs
  • packages/rs-platform-wallet/src/lib.rs
  • packages/rs-platform-wallet/src/managed_identity.rs
  • packages/rs-platform-wallet/src/managed_identity/contact_requests.rs
  • packages/rs-platform-wallet/src/managed_identity/contacts.rs
  • packages/rs-platform-wallet/src/managed_identity/identity_ops.rs
  • packages/rs-platform-wallet/src/managed_identity/label.rs
  • packages/rs-platform-wallet/src/managed_identity/mod.rs
  • packages/rs-platform-wallet/src/managed_identity/sync.rs
  • packages/rs-platform-wallet/src/platform_wallet_info/accessors.rs
  • packages/rs-platform-wallet/src/platform_wallet_info/contact_requests.rs
  • packages/rs-platform-wallet/src/platform_wallet_info/managed_account_operations.rs
  • packages/rs-platform-wallet/src/platform_wallet_info/matured_transactions.rs
  • packages/rs-platform-wallet/src/platform_wallet_info/mod.rs
  • packages/rs-platform-wallet/src/platform_wallet_info/wallet_info_interface.rs
  • packages/rs-platform-wallet/src/platform_wallet_info/wallet_transaction_checker.rs
  • packages/rs-platform-wallet/tests/contact_workflow_tests.rs
  • packages/rs-sdk-ffi/Cargo.toml
  • packages/rs-sdk-ffi/build_ios.sh
  • packages/rs-sdk-ffi/src/address/mod.rs
  • packages/rs-sdk-ffi/src/address/queries/balance_changes.rs
  • packages/rs-sdk-ffi/src/address/queries/branch_state.rs
  • packages/rs-sdk-ffi/src/address/queries/compacted_balance_changes.rs
  • packages/rs-sdk-ffi/src/address/queries/info.rs
  • packages/rs-sdk-ffi/src/address/queries/infos.rs
  • packages/rs-sdk-ffi/src/address/queries/mod.rs
  • packages/rs-sdk-ffi/src/address/queries/trunk_state.rs
  • packages/rs-sdk-ffi/src/address/transitions/mod.rs
  • packages/rs-sdk-ffi/src/address/transitions/top_up_from_asset_lock.rs
  • packages/rs-sdk-ffi/src/address/transitions/transfer.rs
  • packages/rs-sdk-ffi/src/address/transitions/withdraw.rs
  • packages/rs-sdk-ffi/src/address_sync/provider.rs
  • packages/rs-sdk-ffi/src/core_sdk.rs.bak
  • packages/rs-sdk-ffi/src/dashpay/contact_request.rs
  • packages/rs-sdk-ffi/src/dashpay/mod.rs
  • packages/rs-sdk-ffi/src/identity/create_from_addresses.rs
  • packages/rs-sdk-ffi/src/identity/mod.rs
  • packages/rs-sdk-ffi/src/identity/top_up_from_addresses.rs
  • packages/rs-sdk-ffi/src/identity/transfer_to_addresses.rs
  • packages/rs-sdk-ffi/src/lib.rs
  • packages/rs-sdk-ffi/src/platform_wallet_types.rs
  • packages/rs-sdk-ffi/src/types.rs
  • packages/rs-sdk-ffi/src/unified.rs.bak
  • packages/rs-sdk-trusted-context-provider/src/provider.rs
  • packages/rs-sdk/Cargo.toml
  • packages/rs-sdk/src/lib.rs
  • packages/rs-sdk/src/platform.rs
  • packages/rs-sdk/src/platform/dashpay/contact_request.rs
  • packages/rs-sdk/src/platform/dashpay/contact_request_queries.rs
  • packages/rs-sdk/src/platform/dashpay/mod.rs
  • packages/swift-sdk/Package.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Address/Addresses.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Address/PlatformAddressInfo.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/ConcurrencyCompat.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Config/TestnetNodes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Models/CoreTransaction.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Models/CoreTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Models/FilterMatch.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Models/HDWalletModels.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVClient.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVEventHandler.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Services/FilterMatchService.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Services/WalletService.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Utils/DataContractParser.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Utils/ModelContainerHelper.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/CoreWalletManager.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/HDTransaction.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/HDWallet.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/TransactionErrors.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/TransactionService.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/WalletStorage.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/DPP/DPPDataContract.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/DPP/DPPDocument.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/DPP/DPPIdentity.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/DPP/DPPStateTransition.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/DPP/DPPTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/FFI/PlatformQueryExtensions.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/FFI/Signer.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/FFI/StateTransitionExtensions.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Helpers/TestKeyGenerator.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Helpers/WIFParser.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/IdentityTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/Account.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/KeyManager.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/KeyWalletTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/ManagedAccount.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/ManagedAccountCollection.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/ManagedWallet.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/README.md
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/Transaction.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/Wallet.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/KeyWallet/WalletManager.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/ContractModel.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/DocumentModel.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/IdentityModel.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/Network.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/StateTransitionDefinitions.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/TokenAction.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/TokenModel.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Models/TransitionTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/DashModelContainer.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentDataContract.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentDocument.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentDocumentType.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentIdentity.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentIndex.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentKeyword.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentProperty.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentPublicKey.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentToken.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentTokenBalance.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentTokenHistoryEvent.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Types/TokenTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/ContactRequest.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/DashPayService.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/EstablishedContact.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/IdentityManager.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/ManagedIdentity.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/PlatformWallet.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/PlatformWalletFFI.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/PlatformWalletTypes.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/README.md
  • packages/swift-sdk/Sources/SwiftDashSDK/SDK.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/SPV/SPVClient.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Security/KeychainManager.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Services/DataManager.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Shared/UnifiedStateManager.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Tx/TransactionBuilder.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Utils/DataExtensions.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Utils/DataTransformers.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Utils/ErrorHandling.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Utils/PrivateKeyUtils.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Utils/StateManagement.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Utils/Validation.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/Wallet/WalletModels.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp.xcodeproj/project.pbxproj
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp.xcodeproj/xcshareddata/xcschemes/SwiftExampleApp.xcscheme
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/AppState.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/ContentView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Models/Balance.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Models/HDWalletModels.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Services/WalletService.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/AccountDetailView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/AccountListView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/AddressManagementView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/CoreContentView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/CreateWalletView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/FilterMatchesView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/ReceiveAddressView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/SendTransactionView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/WalletDetailView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Wallet/WalletViewModel.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/DPP/DPPCoreTypes.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/DPP/DataContract.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/DPP/Document.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/DPP/Identity.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/DPP/StateTransition.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/Network.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/ModelContainer+App.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentDataContract.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentDocument.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentDocumentType.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentIdentity.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentIndex.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentKeyword.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentProperty.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentPublicKey.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentToken.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentTokenBalance.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/SwiftData/PersistentTokenHistoryEvent.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/TestnetNodes.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Models/TransitionTypes.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/SDK/SDKExtensions.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Services/KeychainManager.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/UnifiedAppState.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/ViewModels/AddressTransferViewModel.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/ViewModels/BaseViewModel.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/ViewModels/GetAddressInfoViewModel.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/ViewModels/GetAddressesInfosViewModel.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/ViewModels/TopUpAddressFromAssetLockViewModel.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/ViewModels/WithdrawAddressFundsViewModel.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/AddressQueriesView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/ContractsView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/DocumentWithPriceView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/DocumentsView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/FriendsView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/FriendsViewStubs.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/KeyDetailView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/KeysListView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/ObservableDashPayService.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/OptionsView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/PlatformQueriesView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/RegisterNameView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/SelectMainNameView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/StateTransitionsView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/TokensView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/TransitionCategoryView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/TransitionDetailView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Views/TransitionInputView.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/CrashDebugTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/DataTransformersTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/DebugTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/ErrorHandlingTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/KeyManagerTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/SDKMethodTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/SimpleTransitionTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/StateManagementTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/StateTransitionTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/ValidationTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/WalletTests/KeyDerivationTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/WalletTests/TransactionTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/WalletTests/WalletIntegrationTests.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleAppTests/WalletTests/WalletStorageTests.swift
  • packages/swift-sdk/SwiftExampleApp/test_account_collection.swift
  • packages/swift-sdk/SwiftTests/Tests/SwiftDashSDKTests/ContactRequestTests.swift
  • packages/swift-sdk/SwiftTests/Tests/SwiftDashSDKTests/EstablishedContactTests.swift
  • packages/swift-sdk/SwiftTests/Tests/SwiftDashSDKTests/IdentityManagerTests.swift
  • packages/swift-sdk/SwiftTests/Tests/SwiftDashSDKTests/ManagedIdentityTests.swift
  • packages/swift-sdk/SwiftTests/Tests/SwiftDashSDKTests/PlatformWalletIntegrationTests.swift
  • packages/swift-sdk/SwiftTests/Tests/SwiftDashSDKTests/PlatformWalletTests.swift
  • packages/swift-sdk/SwiftTests/Tests/SwiftDashSDKTests/PlatformWalletTypesTests.swift
  • packages/swift-sdk/build_ios.sh
  • packages/swift-sdk/verify_build.sh

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/iOSSupport

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@thepastaclaw
Copy link
Contributor

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 23, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link

github-actions bot commented Feb 25, 2026

✅ gRPC Query Coverage Report

================================================================================
gRPC Query Coverage Report - NEW QUERIES ONLY
================================================================================

Total queries in proto: 53
Previously known queries: 47
New queries found: 6

================================================================================

New Query Implementation Status:
--------------------------------------------------------------------------------
✓ getAddressInfo                                /home/runner/work/platform/platform/packages/rs-sdk/src/platform/query.rs
✓ getAddressesBranchState                       /home/runner/work/platform/platform/packages/rs-sdk/src/platform/address_sync/mod.rs
✓ getAddressesInfos                             /home/runner/work/platform/platform/packages/rs-sdk/src/platform/fetch_many.rs
✓ getAddressesTrunkState                        /home/runner/work/platform/platform/packages/rs-sdk/src/platform/query.rs
✓ getRecentAddressBalanceChanges                /home/runner/work/platform/platform/packages/rs-sdk/src/platform/query.rs
✓ getRecentCompactedAddressBalanceChanges       /home/runner/work/platform/platform/packages/rs-sdk/src/platform/query.rs

================================================================================
Summary:
--------------------------------------------------------------------------------
New queries implemented: 6 (100.0%)
New queries missing: 0 (0.0%)

Total known queries: 53
  - Implemented: 50
  - Not implemented: 2
  - Excluded: 1

Not implemented queries:
  - getConsensusParams
  - getTokenPreProgrammedDistributions

@QuantumExplorer QuantumExplorer marked this pull request as ready for review February 25, 2026 10:41
@QuantumExplorer QuantumExplorer changed the title feat(swift sdk): ios support feat(swift-sdk): ios support Feb 25, 2026
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.

5 participants