Releases: RISCfuture/SwiftNASR
Releases · RISCfuture/SwiftNASR
Release list
4.0.0
Added
- Coded Departure Routes are now parsed from the TXT distribution (
CDR.txt) in addition to CSV; the six fields present only in the CSV file arenilwhen parsed from TXT - The CSV
TerminalCommFacilitynow carries radar, military-operations, and class-airspace data, folded in from theRDR,MIL_OPS, andCLS_ARSPfiles that the FAA split out of the legacyTWRsubscriber file — matching the TXT representation
Changed
- BREAKING:
JSONZipEncoderandJSONZipDecoderare nowSendablevalue types (struct) instead ofJSONEncoder/JSONDecodersubclasses, eliminating their unsound@unchecked Sendableconformances. Set formatting viaJSONZipEncoder(outputFormatting:)(theoutputFormattingproperty remains available); both types can now be shared safely across concurrency domains - Progress reporting is now updated synchronously and in order. The downloader's GCD
DispatchQueue.main.asynchop and the per-chunkTask { @MainActor in … }hops in the archive and directory distributions were replaced with direct, thread-safeProgressmutation, removing a hazard where progress could be reported out of order or after a stream finished - Adopted the Approachable Concurrency upcoming-feature flags (
NonisolatedNonsendingByDefault,InferIsolatedConformances), which changes the execution semantics ofnonisolatedasync work - BREAKING: Raised the minimum deployment targets to macOS 15, iOS 18, tvOS 18, watchOS 11, and visionOS 2 to adopt the standard-library
Synchronizationmodule (Mutex/Atomic)
Internal
- Replaced
nonisolated(unsafe)statics in the test URL-protocol mock with aSynchronization.Mutex, and modernized the manual smoke-test harness to top-levelawait
3.0.0
Breaking Changes
NASR.parsenow takeserrorHandler: (RecordParseError) -> ParseDispositioninstead of(Error) -> Bool, unifying dropped-record and kept-field diagnostics into a single channel
Added
RecordParseErrorandParseDispositionpublic types describing parse problems and how to respond to them- Parsers now surface unrepresentable values as field- or record-level diagnostics instead of silently coercing them to
nil
Fixed
- A single malformed row in a CSV file no longer drops the rest of that file's rows
- Many enum and value gaps now parse correctly via CSV synonyms (airway point types, fuel types, ILS marker and back-course status, hold facility routing, terminal facility types)
- Corrected comma- and slash-separated field splitting (fuel types, runway surfaces)
- AWOS weather stations without coordinates are kept (with a nil position) instead of dropped
- Fixed two latent parser bugs: a weather-station parser that could abort an entire file on one bad row, and a string-splitting helper that emitted separator characters
2.0.1
Fixed
- Fixed silent record and field drops discovered by validating the parsers against live FAA data
2.0.0
[2.0.0] - 2026-05-01
Breaking Changes
- Renamed date-component-returning fields to
…componentsaccessors; canonicalDate-returning extensions are now provided alongside under the un-suffixed name - Dimensional property and variable names are now suffixed with their unit of measure (e.g.
altitude→altitudeFeet) - Glidepath in CSV format is now stored in degrees rather than 100ths of a degree
Added
- CSV parsing support, with parsers for all remaining record types
- Complete coverage of all TXT and CSV model types and their parsers
Measurementextensions for dimensional propertiesDate-returning extensions accompanying the renamedcomponentsaccessors--record-typesoption forSwiftNASR_E2E- Improved CSV progress tracking; E2E tests split into separate files
LosslessStringConvertibleconformance for canonical representations
Changed
- Replaced
FixedWidthParserwith the more performantByteParser - Normalized the
Cycleinterface for consistency across libraries - Adopted more typesafe parsing throughout
- Concurrency improvements and warning fixes
Internal
- Updated to Swift 6.2; CI matrix standardized to Swift 6.0–6.2 on macOS 14–15
- Added swift-format
- Updated GitHub Actions
- Updated documentation generation and READMEs
1.0.0
Swift 6 concurrency mode
API Changes
- Removes Combine and callback concurrency models in favor of exclusively
async/await- Removes
ConcurrentDistributionprotocol (now redundant) - Marks loaders and distribution classes as
finalandSendable - Adds
FileReadActorto control synchronous access to a distribution's files
- Removes
- Converts record types (airport, navaid, etc.) into structs for concurrency
guarantees- Adds
RecordandParentRecordprotocols describing parsed records - Makes record types
SendableandCodable - Makes parent record types
Hashable,Equatable, andIdentifiable
- Adds
- Converts
NASRandNASRDatato actors- Adds
NASRDataCodableto preserveCodablesupport forNASRData
- Adds
- Advances minimum OS versions
Documentation Changes
- Updates documentation
- NOTE: A current bug in Swift-DocC is preventing some articles from showing
in the sidebar
- NOTE: A current bug in Swift-DocC is preventing some articles from showing
Test Changes
- Updates tests to use async model
- Rewrites the E2E test app
0.3.0
Updated Swift Tools version to 6.0 (stil using language version 5).
Breaking Changes
ARTCC: ICAO ID is now optional.
API Changes
- ISO-Latin1 encoding is used when parsing distribution text files.
- Moved from
NSLocalizedStringto string catalogs. Runway: Added a gradient estimation method that uses the base and reciprocal
elevations (when known). You can use this is a stopgap until the FAA resumes
distributing runway gradient data.- Dependency updates.
0.2.0
Updated ZIPFoundation dependency.
Breaking Changes
- The
ArchiveFileDistributionandArchiveDataDistributioninitializers no
longer returnnilif the archive could not be read; instead, they rethrow
the error thrown by ZIPFoundation. - The
ArchiveFileDownloaderandArchiveDataDownloader'sloadmethods no
longer throwError.badData; instead they rethrow the error thrown by
ZIPFoundation.
0.1.0
Initial pre-release (Airport, ARTCC, FSS, and Navaid parsing).