Releases: stadiamaps/ferrostar
0.39.0
Step Advance v2
The major feature for this release is a complete overhaul of the step advance logic. You now have a lot more flexibility, including the ability to compose step advance rules, and to track internal state.
This was a massive effort by @Archdoog, and will enable better handling of traffic light pauses, U-turns, and more. The full PR is here.
This includes several 🚨 breaking changes.
iOS and Android
iOS and Android users now have a set of convenience methods available to configure step advance. These are currently exposed as top-level functions (we're still exploring better options to make this more discoverable). You can find browse the documentation for these on docs.rs. All changes for iOS and Android users will be flagged via compilation errors, so there is no chance of unexpected behavior post-upgrade.
The demo apps for both have been updated with usage examples.
Web
Web users will have a few syntactic changes in how the step advance conditions are specified. Unfortunately, JavaScript does not have the same level of type safety as the mobile platforms, so you do need to carefully check your code or else you'll get an exception at runtime.
We've updated the example code to illustrate the most "complicated" step advance type, and you can check out the code here. The Rust documentation of the enum is currently still the best online reference.
Updates
- Bump android_logger from 0.15.0 to 0.15.1 in /common by @dependabot in #627
- Bump kotlinx-coroutines from 1.10.1 to 1.10.2 in /android by @dependabot in #623
- iOS: Update DemoApp only to use Swift 6 by @bolsinga in #635
- Updated dependencies including upgrade for kotlin.time by @Archdoog in #636
- iOS: Update DemoApp CarPlay Support by @bolsinga in #638
- Bump github.com/maplibre/swiftui-dsl from 0.12.0 to 0.14.0 by @dependabot in #626
Full Changelog: 0.38.0...0.39.0
0.38.0
iOS Demo App Enhancements
- Add SwitchableLocationProvider to DemoApp by @bolsinga in #616
- Mark FerrostarCoreFFI as @preconcurrency by @bolsinga in #632
- Use @mainactor and async let and @preconcurrency for DemoModel state changes by @bolsinga in #633
iOS Library Enhancements
- Allow CPTrip to be created with origin / destination by @bolsinga in #615
- Add CustomStringConvertible to FerrostarCore types by @bolsinga in #617
- Add Observable DemoModel by @bolsinga in #618
- Make APIKeys Swift 6 compatible by @bolsinga in #631
Bug Fixes
- Set the audio session mode to .voicePrompt by @ianthetechie in #613
- enforced MainActor on DemoModel state & removed NavigationStack by @Archdoog in
Updates
- Update UniFFI to 0.29.3 by @bjtrounson in #612
#621
GSoC
- Update NavigationRecording struct by @Kandarp05 in #614
Full Changelog: 0.37.0...0.38.0
0.37.0
Audio ducking
We've enabled audio "ducking" in the default text-to-speech implementations for both iOS and Android. This will ensure that spoken instructions are clearly audible, and your music or other spoken word content either fades into the background or is temporarily stopped.
- Duck audio from other apps when speaking voice instructions on iOS by @ianthetechie in #608
- Duck audio from other apps when speaking voice instructions on Android by @ianthetechie in #610
GSoC 2025
Our Google Summer of Code contributor for 2025 is hard at work on enabling a "black box" recorder, which will be a powerful tool for developers working on polishing their apps and fixing bugs.
- Define methods to record navigation sessions. by @Kandarp05 in #599
- Change higher levels to use trait instead of concrete NavigationController by @Kandarp05 in #605
CarPlay support
We're busily working away on CarPlay support. The following PRs from @bolsinga probably won't show up in typical usage today, but stay tuned ;)
- SpokenInstructionObserver does not need to be ObservableObject by @bolsinga in #597
- Location is not used as ObservableObject by @bolsinga in #598
- Associate VisualInstruction with CPManeuver by @bolsinga in #603
- Associate Route with CPRouteChoice by @bolsinga in #604
- update estimates via a TripProgress extension by @bolsinga in #606
- encapsulate updating maneuver estimates via extension on CPNavigationSession by @bolsinga in #611
General maintenance
- Web JS package updates by @ianthetechie in #609
- Fix nondeterminism in SwiftUI tests (use explicit locale distance formatters) by @ianthetechie in #607
Full Changelog: 0.36.0...0.37.0
0.36.0
What's Changed
- Make the Android HTTP Client generic by @ben-burwood in #587
- Update comments for RouteStep fields by @SiarheiFedartsou in #595
- Define data models for recording session by @Kandarp05 in #596
- Bump tsify from 0.4.5 to 0.5.5 in /common by @dependabot in #578
- feat: trip summary/stats by @Archdoog in #601
New Contributors
- @SiarheiFedartsou made their first contribution in #595
Full Changelog: 0.35.1...0.36.0
0.35.1
Better pinning for cursed GitHub actions: softprops/action-gh-release#627
This should be identical to the last release (read the notes!) but fixes the release automation for iOS.
Full Changelog: 0.35.0...0.35.1
0.35.0
The main feature of this release is upgrading to MapLibre 11 for Android. We had a number of breaking changes in the early releases, but our testing indicates that as of version 11.9 the issues are now resolved. Please let us know if you have any issues during the upgrade!
Enhancements
- Possibly Breaking: Upgrade to Maplibre 11.9 by @Archdoog in #589
- Create CPManeuver via an extension on VisualInstruction. by @bolsinga in #566
Fixes
Updates
- Implement ESLint in web by @Kandarp05 in #553
- Remove unused properties from FerrostarCarPlayAdapter by @bolsinga in #554
- Use CPMapSession.trip instead of holding another reference by @bolsinga in #555
- Remove unused properties from CarPlayNavigationView by @bolsinga in #558
- iOS Demo: Update MapLibre GL Native by @bolsinga in #560
- FerrostarCore is non-Optional in the environment by @bolsinga in #559
- Add FerrostarCore state to CarPlayNavigationView by @bolsinga in #561
- Simplify CarPlaySceneDelegate by @bolsinga in #563
- Remove IdleTemplate reference from Adapter by @bolsinga in #567
- Do not need to reference UIVC in CP delegate by @bolsinga in #565
- run latest swiftformat by @bolsinga in #571
- FerrostarCarPlayAdapter sets up in its initializer by @bolsinga in #568
- Use UISceneSession.userInfo to store FerrostarCarPlayManager by @bolsinga in #564
- FerrostarCarPlayManager now has non-Optional FerrostarCarPlayAdapter by @bolsinga in #574
- FerrostarCarPlayManager is not used as CPMapTemplateDelegate by @bolsinga in #572
- FerrostarCarPlayManager no longer conforms to CPTemplateApplicationSceneDelegate by @bolsinga in #573
- Refactor Adapter parts into Manager by @bolsinga in #575
- Bump github.com/pointfreeco/swift-snapshot-testing from 1.18.3 to 1.18.4 by @dependabot in #584
- Bump rstest from 0.24.0 to 0.25.0 in /common by @dependabot in #580
- Bump @babel/runtime from 7.27.1 to 7.27.3 in /react-native in the npm_and_yarn group across 1 directory by @dependabot in #588
- Bump uuid from 1.16.0 to 1.17.0 in /common by @dependabot in #577
- Bump android_logger from 0.14.1 to 0.15.0 in /common by @dependabot in #579
- Improve error handling in iOS Demo App. by @bolsinga in #576
- Bump agp from 8.9.2 to 8.10.1 in /android by @dependabot in #582
Full Changelog: 0.34.1...0.35.0
0.34.1
0.34.0
Enhancements
- [iOS] DemoApp: Clean up and simplification by @bolsinga in #543
- [iOS] AppEnvironment is a global variable. by @bolsinga in #546
- [Web] Make the geolocate control optional (so you can bring your own) by @tedi4t in #548
- [iOS + Android] Show the user's precise location when off the route or outside an active navigation session by @Archdoog in #547
The changes to location display are notable because they are breaking changes for Android users. This used to be configurable to some extent via a setting, but this did not actually work as well as it should.
The changes in this release make things "just work" for most vehicular navigation use cases in a way that they did not before, switching smartly between a snapped location and the user's actual location. If you would like this to be configurable, please leave a comment on issue #209.
NOTE: Behavior is unchanged for the web, which uses MapLibre's location control and does not currently snap the user anyways.
In case you are implementing your own UI layer, the core models actually have NEW properties. We added a userLocation
property to the TripState
enum to reflect the user's current location without any snapping. This is available in all enum variants. It is however still a breaking change, since TripState::Idle
and TripState::Complete
previously did not contain any associated values.
Fixes
- [iOS] Canceling navigation now informs the CarPlay template by @bolsinga in #540
- [iOS] FerrorstarCore always creates and owns the SpokenInstructionObserver by @bolsinga in #541
Full Changelog: 0.33.0...0.34.0
0.33.0
Enhancements
- Add CarPlay delegate logging. by @bolsinga in #527
- Move the recenter button to the top right (end) position on Android by @ianthetechie in #538
Fixes
Updates
- Bump geo from 0.29.3 to 0.30.0 in /common by @dependabot in #501
- Bump uuid from 1.12.1 to 1.16.0 in /common by @dependabot in #502
- Update to the latest snapshot package version by @bolsinga in #524
- Update Package.resolved by @bolsinga in #526
- wrap a test in an availabity check by @bolsinga in #525
- Use the logger instance variable instead by @bolsinga in #528
- Bump serde from 1.0.218 to 1.0.219 in /common by @dependabot in #530
- Bump insta from 1.42.2 to 1.43.1 in /common by @dependabot in #531
- Bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot in #523
- Bump androidx.compose.ui:ui-test-junit4 from 1.7.8 to 1.8.0 in /android by @dependabot in #535
- Bump thiserror from 2.0.11 to 2.0.12 in /common by @dependabot in #533
- Bump chrono from 0.4.39 to 0.4.41 in /common by @dependabot in #532
- Bump androidx.compose:compose-bom from 2025.02.00 to 2025.04.01 in /android by @dependabot in #536
- One camera up in the AppEnvironment. by @bolsinga in #529
- Update MapLibre SwiftUI DSL dependency by @ianthetechie in #539
Full Changelog: 0.32.1...0.33.0
0.32.1
Fixes
Enhancements
Updates
- Bump kotlin from 2.1.10 to 2.1.20 in /android by @dependabot in #508
- Bump agp from 8.8.0 to 8.9.1 in /android by @dependabot in #510
Full Changelog: 0.32.0...0.32.1