Feature: CloudKit Provider (ManagedCode.Storage.CloudKit)
Purpose
Expose CloudKit Web Services (iCloud app data) as IStorage so applications can store small/medium blobs in a CloudKit container.
Note: iCloud Drive does not provide an official server-side file API. This provider targets CloudKit app data, not iCloud Drive.
Main Flows
flowchart LR
App --> CK[CloudKitStorage : ICloudKitStorage]
CK --> Client[ICloudKitClient]
Client --> Web[(CloudKit Web Services)]
Components
- Storage:
- Client:
- Options / DI:
- Supporting models:
DI Wiring
dotnet add package ManagedCode.Storage.CloudKit
using ManagedCode.Storage.CloudKit.Extensions;
using ManagedCode.Storage.CloudKit.Options;
builder.Services.AddCloudKitStorageAsDefault(options =>
{
options.ContainerId = "iCloud.com.company.app"; // identifier, not a secret
options.Environment = CloudKitEnvironment.Production;
options.Database = CloudKitDatabase.Public;
options.RootPath = "app-data";
options.ApiToken = configuration["CloudKit:ApiToken"];
// Optional: customize HTTP transport (proxy, retries, test handler).
// options.HttpClient = new HttpClient();
});
Current Behavior
- Supports multiple auth modes:
- API token (
ckAPIToken) viaCloudKitStorageOptions.ApiToken - optional web auth token (
ckWebAuthToken) for user-scoped scenarios (rotated by CloudKit on each request) - server-to-server signed requests for supported scenarios via
ServerToServerKeyId+ServerToServerPrivateKeyPem
- API token (
- Record type/field names are configurable to match CloudKit schema:
RecordType(defaultMCStorageFile)PathFieldName,AssetFieldName,ContentTypeFieldName
Tests
- HTTP/SDK-level fake:
- Storage behaviour via fake client:
- DI + provider plumbing:
Configuration Notes
See docs/Development/credentials.md and README.md for step-by-step CloudKit setup (container id, schema, and tokens/keys).