Fountain Coach Gitowner-controlled · read only

ReframeICloudKit.git · README.md

ReframeICloudKit.git / README.md

revision a10e1287dd6251b9120f0825b43a74a0b57819d5 · complete file

# ReframeICloudKit

`ReframeICloudKit` is the Fountain-Coach Kit for placing and referencing visual material through two honest Apple
boundaries:

```text
native Photos library  → PhotoKitBackend       → completed placement receipt
iCloud.com session     → ICloudWebBackend      → embedded session + observable handoff
```

The public API is unified, while the capabilities remain distinct. PhotoKit can create an asset and add it to an
album using Apple’s supported `PHPhotoLibrary` change requests. The WebKit route exists for accounts whose desired
cloud library is not exposed by the accepted macOS Photos configuration. It supplies a staged file to Apple’s visible
upload chooser; the host must observe and report the page’s completion before recording placement.

```swift
let request = ICloudPlacementRequest(
    sourceFile: generatedPNG,
    albumTitle: "Image_gen",
    lineageID: promptID
)

let result = try await ReframeICloudKit().place(request, using: .photoKit)
```

`staged`, `awaitingUser`, `blocked`, `placed`, and `failed` are different outcomes. The kit never converts a staged
file or a displayed web page into a false success.

## Boundary

This package does not implement Apple’s private iCloud Photos service. It does not automate undocumented endpoints,
capture Apple passwords, inspect Photos’ database, or control an arbitrary external `.photoslibrary`. WebKit is an
embedded transport surface, not the application’s visual shell.

## Requirements

- macOS 14 or later
- a signed host application with the required Photos usage declaration for PhotoKit
- a user-approved Photos authorization for the native route
- a host-provided AX and visible-state observer for WebKit completion

## FCIS status

The package is source-published as a Fountain-Coach Kit. Release tags, API compatibility, and host acceptance belong
to this repository; Reframe consumes a released package revision rather than copying the implementation.