Releases: RISCfuture/SwiftACD
Releases · RISCfuture/SwiftACD
Release list
0.3.0
Changed (breaking)
Performance.Descent.initialDescentis now aPerformance.MachDescentBand
rather than aDescentBand. EUROCONTROL publishes the initial descent as a
Mach number and a rate of descent, never as an IAS, so the band the model
asked for could never be assembled and the field was alwaysnil.Performance.Climb.machClimbis now aPerformance.MachClimbBandrather
than a bareDouble, so the band's rate of climb — published by EUROCONTROL
alongside its Mach number, and previously discarded — is available. The Mach
itself is nowmachClimb?.mach.RECATEU.codeis nowString?, because the newRECATEU.specialcase
carries noCAT-Xcode.
Added
- A
Distribution Watchworkflow that probes the FAA workbook daily and parses
the full distribution whenever it changes — or monthly regardless, since the
EUROCONTROL side cannot be probed cheaply. Coverage is compared against the
previous check, so a field that quietly stops being parsed is reported even
though it raises no error. SwiftACD_E2E parse --report <path>writes a JSON report of profile counts,
per-record errors, and how many profiles carry each field;--baseline <path>
compares that against an earlier report and exits non-zero when a field loses
all of its values.- The FAA's
ICAO_WTCcolumn now fillsCategories.wakeTurbulencefor types
EUROCONTROL does not list, which carried no wake category at all before.
EUROCONTROL still wins where both publish one, since it gives the ICAO letter
directly, and a type the FAA records as straddling two categories
("Light/Medium") is left empty rather than rounded to one side. RECATEU.special, the"Special"category EUROCONTROL publishes for types
it separates case by case (A225,B2,B52), which previously decoded to
nilalongside genuinely uncategorized types.Dimensions.wingspanWithWinglets(and itswingspanWithWingletsFtscalar)
expose the FAA's winglet/sharklet wingspan column, which the parser
previously ignored.
Fixed
- The EUROCONTROL index page (
apd/listpage.html) is no longer parsed as an
aircraft detail page, so the profile dictionary no longer contains an empty
entry keyedlistpage. - Types whose FAA row fills in only the winglet-equipped wingspan column (for
exampleGLF6and the E-Jets) no longer report a wingspan of 0 ft;
Dimensions.wingspanfalls back to that column before falling back to
EUROCONTROL.
0.2.1
Changed
- Raised the minimum dependency versions to SwiftSoup 2.13.7,
swift-argument-parser 1.8.2, and swift-docc-plugin 1.5.0. - The package now declares Swift language mode 5 alongside mode 6, so a package
that has not moved to mode 6 can still depend on SwiftACD. The required Swift
tools version is unchanged at 6.3.
Fixed
- Documentation: the Domain Enums topic no longer links to
WingPosition,
EnginePosition,TailConfiguration, orLandingGearConfiguration, which
the library does not define —Recognitionexposes those fields asString?.
Parser.init(directory:)links toDownloader.downloadAll(errorCallback:)
with its argument label, so the symbol resolves.
0.2.0
Added
- Linux support.
URLSessionis guarded behindFoundationNetworking, a
String(localized:)shim covers error strings, and the downloader falls back
to a buffered response on Linux (Apple keeps incremental progress streaming).
0.1.0
Added
- Initial release.
- Async
Downloaderthat fetches the FAA ACD.xlsxand scrapes the EUROCONTROL APD detail pages. Parserthat ingests the downloaded data and assembles oneAircraftProfileper ICAO type designator.- Domain-restricted enums for every fixed-value field (no open
Stringtypes). Measurement<Unit>computed properties for every physical quantity.AsyncProgressactor for tracking parse progress.SwiftACDErrorwith localized error descriptions.
Changed
- Adopted the Approachable Concurrency upcoming-feature flags (
NonisolatedNonsendingByDefault,InferIsolatedConformances). Thenonisolated asyncAPIs (Parser.parse,Downloader.downloadACD/downloadAPD/downloadAll) run on the caller's executor by default instead of hopping to the global concurrent executor. - Raised the minimum deployment targets to macOS 15, iOS 18, tvOS 18, watchOS 11, and visionOS 2, and moved shared-state synchronization to
Synchronization.Mutex.