Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Swift Package for Server-Side and Command-Line Access to CloudKit Web Services

License

NotificationsYou must be signed in to change notification settings

brightdigit/MistKit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MistKit Logo

MistKit

SwiftPMSwift VersionsPlatformsLicenseGitHub Workflow StatusCodecovCodeFactor GradeMaintainabilityDocumentation

A Swift Package for Server-Side and Command-Line Access to CloudKit Web Services

Overview

MistKit provides a modern Swift interface to CloudKit Web Services REST API, enabling cross-platform CloudKit access for server-side Swift applications, command-line tools, and platforms where the CloudKit framework isn't available.

Built with Swift concurrency (async/await) and designed for modern Swift applications, MistKit supports all three CloudKit authentication methods and provides type-safe access to CloudKit operations.

Key Features

  • 🌍 Cross-Platform Support: Works on macOS, iOS, tvOS, watchOS, visionOS, and Linux
  • ⚡ Modern Swift: Built with Swift 6 concurrency features and structured error handling
  • 🔐 Multiple Authentication Methods: API token, web authentication, and server-to-server authentication
  • 🛡️ Type-Safe: Comprehensive type safety with Swift's type system
  • 📋 OpenAPI-Based: Generated from CloudKit Web Services OpenAPI specification
  • 🔒 Secure: Built-in security best practices and credential management

Installation

Swift Package Manager

Add MistKit to yourPackage.swift file:

dependencies:[.package(url:"https://github.com/brightdigit/MistKit.git", from:"1.0.0-alpha.1")]

Or add it through Xcode:

  1. File → Add Package Dependencies
  2. Enter:https://github.com/brightdigit/MistKit.git
  3. Select version and add to your target

Quick Start

1. Choose Your Authentication Method

MistKit supports three authentication methods depending on your use case:

API Token (Container-level access)

import MistKitletservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    apiToken:ProcessInfo.processInfo.environment["CLOUDKIT_API_TOKEN"]!)

Web Authentication (User-specific access)

letservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    apiToken:ProcessInfo.processInfo.environment["CLOUDKIT_API_TOKEN"]!,    webAuthToken: userWebAuthToken)

Server-to-Server (Enterprise access, public database only)

letserverManager=tryServerToServerAuthManager(    keyIdentifier:ProcessInfo.processInfo.environment["CLOUDKIT_KEY_ID"]!,    privateKeyData: privateKeyData)letservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    tokenManager: serverManager,    environment:.production,    database:.public)

2. Create CloudKit Service

do{letservice=tryCloudKitService(        containerIdentifier:"iCloud.com.example.MyApp",        apiToken:ProcessInfo.processInfo.environment["CLOUDKIT_API_TOKEN"]!)    // Use service for CloudKit operations}catch{print("Failed to create service:\\(error)")}

Authentication Setup

API Token Authentication

  1. Get API Token:

  2. Set Environment Variable:

    export CLOUDKIT_API_TOKEN="your_api_token_here"
  3. Use in Code:

    letservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    apiToken:ProcessInfo.processInfo.environment["CLOUDKIT_API_TOKEN"]!)

Web Authentication

Web authentication enables user-specific operations and requires both an API token and a web authentication token obtained through CloudKit JS authentication.

letservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    apiToken: apiToken,    webAuthToken: webAuthToken)

Server-to-Server Authentication

Server-to-server authentication provides enterprise-level access using ECDSA P-256 key signing. Note that this method only supports the public database.

  1. Generate Key Pair:

    # Generate private keyopenssl ecparam -genkey -name prime256v1 -noout -out private_key.pem# Extract public keyopenssl ec -in private_key.pem -pubout -out public_key.pem
  2. Upload Public Key: Upload the public key to Apple Developer Console

  3. Use in Code:

    letprivateKeyData=tryData(contentsOf:URL(fileURLWithPath:"private_key.pem"))letserverManager=tryServerToServerAuthManager(    keyIdentifier:"your_key_id",    privateKeyData: privateKeyData)letservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    tokenManager: serverManager,    environment:.production,    database:.public)

Platform Support

Minimum Platform Versions

PlatformMinimum VersionServer-to-Server Auth
macOS10.15+11.0+
iOS13.0+14.0+
tvOS13.0+14.0+
watchOS6.0+7.0+
visionOS1.0+1.0+
LinuxUbuntu 18.04+
Windows10+

Error Handling

MistKit provides comprehensive error handling with typed errors:

do{letservice=tryCloudKitService(        containerIdentifier:"iCloud.com.example.MyApp",        apiToken: apiToken)    // Perform operations}catchlet error asCloudKitError{print("CloudKit error:\\(error.localizedDescription)")}catchlet error asTokenManagerError{print("Authentication error:\\(error.localizedDescription)")}catch{print("Unexpected error:\\(error)")}

Error Types

  • CloudKitError: CloudKit Web Services API errors
  • TokenManagerError: Authentication and credential errors
  • TokenStorageError: Token storage and persistence errors

Security Best Practices

Environment Variables

Always store sensitive credentials in environment variables:

# .env file (never commit this!)CLOUDKIT_API_TOKEN=your_api_token_hereCLOUDKIT_KEY_ID=your_key_id_here

Secure Logging

MistKit automatically masks sensitive information in logs:

// Sensitive data is automatically redacted in log outputprint("Token:\\(secureToken)") // Outputs: Token: abc12345***

Token Storage

For persistent applications, use secure token storage:

letstorage=InMemoryTokenStorage() // For development// Use KeychainTokenStorage() for production (implement as needed)lettokenManager=WebAuthTokenManager(    apiToken: apiToken,    webAuthToken: webAuthToken,    storage: storage)letservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    tokenManager: tokenManager,    environment:.development,    database:.private)

Advanced Usage

Using AsyncHTTPClient Transport

For server-side applications, MistKit can useswift-openapi-async-http-client as the underlying HTTP transport. This is particularly useful for server-side Swift applications that need robust HTTP client capabilities.

import MistKitimport OpenAPIAsyncHTTPClient// Create an AsyncHTTPClient instancelethttpClient=HTTPClient(eventLoopGroupProvider:.createNew)// Create the transportlettransport=AsyncHTTPClientTransport(client: httpClient)// Use with CloudKit serviceletservice=tryCloudKitService(    containerIdentifier:"iCloud.com.example.MyApp",    apiToken: apiToken,    transport: transport)// Don't forget to shutdown the client when donedefer{try? httpClient.syncShutdown()}

Benefits

  • Production Ready: AsyncHTTPClient is battle-tested in server environments
  • Performance: Optimized for high-throughput server applications
  • Configuration: Extensive configuration options for timeouts, connection pooling, and more
  • Platform Support: Works across all supported platforms including Linux

Adaptive Token Manager

For applications that might upgrade from API-only to web authentication:

letadaptiveManager=AdaptiveTokenManager(    apiToken: apiToken,    storage: storage)// Later, upgrade to web authenticationtryawait adaptiveManager.upgradeToWebAuth(webAuthToken: webToken)

Examples

Check out theExamples/ directory for complete working examples:

  • Command Line Tool: Basic CloudKit operations from the command line
  • Server Application: Using MistKit in a server-side Swift application
  • Cross-Platform App: Shared CloudKit logic across multiple platforms

Documentation

Requirements

  • Swift 6.1+
  • Xcode 16.0+ (for iOS/macOS development)
  • Linux: Ubuntu 18.04+ with Swift 6.1+

License

MistKit is released under the MIT License. SeeLICENSE for details.

Acknowledgments

Roadmap

v0.2.4

Current Version

v1.0.0

Support


MistKit: Bringing CloudKit to every Swift platform 🌟

About

Swift Package for Server-Side and Command-Line Access to CloudKit Web Services

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors4

  •  
  •  
  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp