Skip to content

SwiftMediaMetadata 3.0.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 13:19
· 9 commits to main since this release

Added

  • Breaking: XMPValue.languageAlternative and XMPLanguageAlternative
    retain every
    ordered rdf:Alt item, its exact xml:lang tag, duplicate languages, and
    empty values. The reader, writer, exporter, sidecar display, and embedded XMP
    paths round-trip the lossless representation; the existing scalar
    langAlternative case remains the carrier for one x-default value. Clients
    with an exhaustive switch over XMPValue must handle the new case.
  • IPTCXMPSynchronizationOptions and synchronization reports provide explicit
    merge, replace, clear, title, and date-precision policies for standards-aware
    IPTC-IIM ↔ XMP synchronization. The existing legacy synchronization methods
    remain available unchanged.
  • PhotoMetadata provides an XMP-preferred, IIM/Exif-fallback projection that
    retains every carrier candidate and reports disagreements. Canonical edits
    can be applied with PhotoMetadataMutation without discarding the raw XMP
    graph.
  • XMPStructurePatch and structured-array patching let callers update selected
    XMP members while retaining unknown sibling fields. The typed IPTC Extension
    and PLUS setters now use the same lossless merge behavior.
  • ImageMetadata.WriteOptions.FileCreationDatePolicy preserves a destination's
    creation date by default and can explicitly update or assign it independently
    of the modification-date policy.
  • MetadataWriteResult<Output> provides one source-compatible result contract
    for image, video, audio, XMP sidecar, and single-file batch writes. The result
    carries either serialized Data or the committed destination URL together
    with non-fatal warnings.
  • serialized() and writeResult(to:options:) separate in-memory metadata
    serialization from filesystem commits. Existing writeToData() and
    write(to:) entry points remain available as compatibility wrappers.
  • XMPSidecarRevision, XMPSidecarSnapshot, and XMPSidecar.update provide
    content-revisioned sidecar mutations with stale-write detection, bounded
    merge retries, serialized-packet validation, and an installed-state result.
    Transactional and ordinary sidecar writes share a cross-process lock and the
    existing filesystem write-options contract.
  • Per-format metadata capabilities describe read, direct-write, sidecar-only,
    opaque-preservation, stripping, and unsupported behavior independently for
    Exif, IPTC-IIM, XMP, Camera Raw, ICC, and C2PA.
  • semanticMetadata and preservationReport(comparedTo:) compare normalized
    metadata meaning rather than XML prefixes/order, TIFF byte order/offsets, or
    equivalent date and GPS spellings. Reports separate added, removed, changed,
    unrepresentable, and opaque-preserved values.
  • Typed XMP GPS APIs parse decimal, directional decimal, DMS, and
    degrees/decimal-minutes coordinates; retain original lexical values; validate
    ranges and hemisphere conflicts; and emit stable XMP coordinate/rational
    spellings. PhotoMetadata now retains typed XMP and Exif GPS candidates via
    PhotoMetadataValue.number; exhaustive switches over that enum must handle
    the new case.

Changed

  • The image API implementation is split into focused reading, writing, editing,
    extraction, sidecar, location, and format extensions. The public API remains
    source compatible.
  • plus:ImageSupplier structured arrays serialize as the standard-required
    rdf:Seq rather than rdf:Bag.
  • Ambiguous TIFF byte signatures remain TIFF regardless of camera Make. A
    proprietary TIFF-based RAW is classified from a known RAW filename extension
    when reading from a URL, preventing rendered Sony/Olympus/Pentax TIFFs from
    being incorrectly blocked by the RAW write guard.

Fixed

  • Release preflight notes are selected from the requested version's non-empty
    changelog section instead of always reusing the 2.0.0 notes or requiring a
    breaking-change entry in every future release.
  • Atomic image, video, audio, and sidecar writes explicitly restore the
    destination's prior filesystem visibility. This prevents iCloud Drive and
    similar providers from carrying a dot-prefixed staging file's hidden flag
    onto the installed file.
  • Atomic and direct writes restore the selected file creation date after the
    filesystem transaction.