@@ -16,23 +16,26 @@ peak memory during the first full build of a big tree.
1616
1717## 4. ` SwiftExif ` replacement
1818
19- The project pins ` kradalby/SwiftExif ` at master (` eb7c5c4 ` ) because
20- upstream's 0.0.7 tag predates the Swift 6.3 nullability fix. Longer-term
21- options:
22-
23- - Request a new ` 0.0.8 ` tag from upstream that includes the fix, then
24- update ` Package.swift ` to use the version pin again.
25- - Investigate pure-Swift EXIF / IPTC libraries. At the time of this
26- modernization, no widely-used pure-Swift alternative existed. A fork
27- under ` swiftlang ` / ` apple ` would be preferable if one emerges.
28- - Write a minimal in-tree IPTC reader for the specific fields Munin needs
29- (Keywords, City, Province/State, Country Code, Country Name). Most of
30- SwiftExif's surface is unused by Munin.
31-
32- A replacement would also let us distinguish "no EXIF present" from
33- "EXIF present but corrupt" — SwiftExif swallows both into empty
34- dictionaries today, so ` Imaging.readExif ` can't log which one
35- happened.
19+ ` kradalby/SwiftExif ` 0.1.0 covers Munin's needs: a Sendable typed
20+ result from ` Image.parse(at:) ` , an ` IptcFields ` struct that retires
21+ the old ` [String: Any] ` IPTC dict, and a tagged release that lets us
22+ drop the SHA pin. Replacement is no longer urgent — this section
23+ tracks the cases where it might still be worth it:
24+
25+ - A pure-Swift EXIF / IPTC reader would let us drop the libexif C
26+ dependency entirely. None widely-used existed at the time of this
27+ modernization; a fork under ` swiftlang ` / ` apple ` would be
28+ preferable if one emerges.
29+ - A minimal in-tree IPTC reader covering only the fields Munin
30+ actually uses (Keywords, City, Province/State, Country Code,
31+ Country Name) would shrink the dependency surface further. Most of
32+ SwiftExif's API is unused by Munin.
33+
34+ The remaining functional gap, regardless of replacement: SwiftExif
35+ 0.1.0 still can't distinguish "no EXIF present" from "EXIF present
36+ but corrupt" — both surface as an empty ` ExifResult ` . Distinguishing
37+ the two would let ` Photo+Read ` log "image X had unreadable EXIF"
38+ instead of silently degrading.
3639
3740---
3841
0 commit comments