Revision control

Copy as Markdown

# v128.0 (In progress)
### Glean
[Full Changelog](In progress)
# v127.0 (_2024-05-13_)
## 🦊 What's Changed 🦊
### General
- Updated minimum Python version to 3.8 ([#5961](https://github.com/mozilla/application-services/pull/5961)).
### Glean
# v126.0 (_2024-04-15_)
### Nimbus SDK β›…οΈπŸ”¬πŸ”­
- Added `RecordedContext` extendable trait and define its usage in the Kotlin/Swift files ([#6207](https://github.com/mozilla/application-services/pull/6207)).
# v125.0 (_2024-03-18_)
## 🦊 What's Changed 🦊
- The long-deprecated `rc_log` crate has been removed.
### Android
- Upgraded NDK from r25c to r26c. ([#6134](https://github.com/mozilla/application-services/pull/6134))
### Glean
### Suggest
- Improved full keyword display for AMP suggestions
- `SuggestStoreBuilder.cache_path` is now deprecated because we no longer use the cache path.
- `SuggestStoreBuilder.remote_settings_config` is deprecated in favor of `remote_settings_server`, because `remote_settings_config` forced consumers that wanted to override the Remote Settings server to also specify the bucket and collection names.
### Remote Settings
- `RemoteSettingsConfig.server_url` is deprecated in favor of `server`, which is a `RemoteSettingsServer` instead of a string.
- The new `RemoteSettingsServer` type specifies the Remote Settings server to use.
# v124.0 (_2024-02-15_)
## ✨ What's New ✨
### FxA Client
- Added a new API `setUserData` that sets the user's session token, to prevent session token duplication and allow User Agent applications to support a signed in, but not verified state. ([#6111](https://github.com/mozilla/application-services/pull/6111))
## 🦊 What's Changed 🦊
### Webext-Storage
- Uniffied the webext-storage component in preparation for desktop integration ([#6057](https://github.com/mozilla/application-services/pull/6057)).
### Remote Settings
- The Remote Settings UniFFI bindings have been changed. The
`RemoteSettingsConfig` dictionary has had its field re-ordered to [fix code
generation for the Python
affects the Swift bindings, since Swift enforces argument ordering.
### Suggest
- Added more error variants to `SuggestApiError`
- Added `SuggestStoreBuilder` to create `SuggestStore` instances.
- `SuggestStore` now stores a data path. This is the path to the SQLite database that should
persist when the cache is cleared.
### Autofill
- Replace `*-name` fields with a single `name` field for addresses.
- Prevented outgoing syncs of scrubbed credit card records ([#6143](https://github.com/mozilla/application-services/pull/6143)).
## What's Fixed
- It was possible for sync to apply a tombstone for places while a bookmark was still in the database. This would have resulted in foreign constraint SQLite error.
# v123.0 (_2024-01-22_)
## ✨ What's New ✨
### Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
- Added correction candidates to errors returned by the FeatureInspector ([#6019](https://github.com/mozilla/application-services/pull/6019)).
- This will drive the JSON editor on the Experimenter frontend.
### Nimbus SDK β›…οΈπŸ”¬πŸ”­
- Added definition for new Glean `nimbus-test-event` ([#6062](https://github.com/mozilla/application-services/pull/6062)).
- Added `recordIsReady` method to NimbusInterface ([#6063](https://github.com/mozilla/application-services/pull/6063)).
## 🦊 What's Changed 🦊
### Nimbus CLI [β›…οΈπŸ”¬πŸ”­πŸ‘Ύ](./components/support/nimbus-cli)
- Changed the locations of firefox-ios and focus-ios feature manifest files ([#6012](https://github.com/mozilla/application-services/pull/6012)) and added version sensitivity.
### Nimbus SDK β›…οΈπŸ”¬πŸ”­
- Moved the `days_since_install` calculation to closer to where it's needed ([#6042](https://github.com/mozilla/application-services/pull/6042)).
- This means that the Nimbus SDK can run for longer and the JEXL evaluator still is accurate.
### Logins
- Logins now correctly handle the following sync conflict resolution:
- When the client locally deleted a login, and before it synced another client modified the same login, the client will recover the login
### Tabs
- RemoteTabRecord now has an `inactive` boolean with a default value of false ([#6026](https://github.com/mozilla/application-services/pull/6026/)).
Mobile platforms can populate this to indicate if the tab is "inactive" allowing other devices to treat them specially (eg, group them together, hide them by default, etc.)
### Push
- verifyConnection now returns an empty list when there are no subscriptions (which is typical when a device first starts up).
# v122.0 (_2023-12-18_)
### 🦊 What's Changed 🦊
Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite version is now 3.44.0.
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### ✨ What's New ✨
- Added an `info` command to add to the `nimbus-fml` command line ([#5967](https://github.com/mozilla/application-services/pull/5967)). It outputs JSON / YAML with a summmary of each feature including:
- the types used, as a proxy for feature complexity
- [feature metadata](https://experimenter.info/fml/feature-metadata), including documentation and events
- the schema hash and defaults hash.
## Places
### ⚠️ Breaking Changes ⚠️
- Removed the `metrics_params` arguments from `begin_oauth_flow` and `begin_pairing_flow`.
This is technically a breaking change, but no consumers were using these optional params so it shouldn't cause any issues downstream.
# v121.0 (_2023-11-20_)
## Nimbus SDK β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Removed `enrollment_id` from being generated or recorded anywhere in the Nimbus SDK ([#5899](https://github.com/mozilla/application-services/pull/5899)).
- This was originally thought to be of use, but after running the system for sometime, we have found that this isn't needed.
- In the spirit of reducing unique identifiers in telemetry and in the spirit of Lean Data, we have removed `enrollment_id` (and the code that generates it).
- Added the feature `activation` event ([#5908](https://github.com/mozilla/application-services/pull/5908)).
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### ✨ What's New ✨
- Added `string-alias` capability to feature variables ([#5928](https://github.com/mozilla/application-services/pull/5928)).
- This adds quite a lot of type safety around complex features that relied on Strings, e.g. messaging, onboarding.
### 🦊 What's Changed 🦊
- FML errors are now sorted so that they are no longer non-deterministic ([#9741](https://github.com/mozilla/experimenter/issues/9741)).
## Places
### ⚠️ Breaking Changes ⚠️
- `wipe_local` and `prune_destructively` have been removed from history API. `delete_everything` or `run_maintenance_*` methods should be used instead.
## FxA-Client
### 🦊 What's Changed 🦊
- Added the `LocalDevice` struct, tracks the server's knowledge of the local device. Many
device-related methods now return this.
- Check for missing sync scoped keys and return an error if they're not present
- Began implementing functionality to track the authorization state
- Added methods to simulate auth errors
# v120.0 (_2023-10-23_)
## Nimbus SDK β›…οΈπŸ”¬πŸ”­
### ✨ What's New ✨
- Added the `enrollment_status` metric and defined a host metric callback handler interface ([#5857](https://github.com/mozilla/application-services/pull/5857)).
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### 🦊 What's Changed 🦊
- Changed `.experiment.yaml` generation to a `validate` ([#5877](https://github.com/mozilla/application-services/pull/5877)).
- Additionally: moved `nimbus-fml.sh` script from iOS into the application-services directory, replacing it with a `bootstrap.sh` script.
## Rust log forwarder
### 🦊 What's Changed 🦊
- Exposed rust-log-forwarder for iOS ([#5840](https://github.com/mozilla/application-services/pull/5840)).
- Fixed rust-log-forwarder bindings for Focus iOS ([5858](https://github.com/mozilla/application-services/pull/5858)).
## Suggest
### ✨ What's New ✨
- Edits to AMO provider keyword matching to match keyword prefix
### ⚠️ Breaking Changes ⚠️
* The `include_sponsored` and `include_non_sponsored` Boolean options in `SuggestionQuery` have been replaced with a `providers` list. Consumers must now explicitly pass the providers they want to query ([#5867](https://github.com/mozilla/application-services/pull/5867)).
## Places
### ⚠️ Breaking Changes ⚠️
- VisitTransition has been renamed to VisitType to match Desktop and reduce the amount of conversions needed in consumer APIs.
### ✨ What's New ✨
- The `SuggestionQuery` now contains a optional limit that consumers can set to reduce the number of suggestions returned. ([#5870](https://github.com/mozilla/application-services/pull/5870))
# v119.0 (_2023-09-25_)
## Nimbus SDK β›…οΈπŸ”¬πŸ”­
### ✨ What's New ✨
- The `set_experiments` method has been updated to filter down the list of experiments to only those that match the configured `app_name` and `channel` ([#5813](https://github.com/mozilla/application-services/pull/5813)).
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### ✨ What's New ✨
- Added new optional metadata fields to a feature definition ([#5865](https://github.com/mozilla/application-services/pull/5865)).
- This is to open up uses of the FML in experimenter, especially for QA and feature configuration.
- Added support to fetch different versions of a manifest to the `FmlClient` ([#5827](https://github.com/mozilla/application-services/pull/5827)).
- Added a `FmlFeatureInspector` to the `FmlClient` ([#5827](https://github.com/mozilla/application-services/pull/5827)).
- This adds methods to parse a feature configuration and return errors.
- Added a `FmlFeatureDescriptor` to the `FmlClient` ([#5815](https://github.com/mozilla/application-services/pull/5815)).
- This adds methods to get the feature_ids and descriptions from a loaded manifest.
- Added a `channels` subcommmand to the command line ([#5844](https://github.com/mozilla/application-services/pull/5844)).
- This prints the channels for the given manifest.
- Added `pref-key` to feature variables schema definition ([#5862](https://github.com/mozilla/application-services/pull/5862)).
- This allows developers to override remote and default values of top-level variables with preferences.
- Requires setting `userDefaults` and `sharedPreferences` in the call to `NimbusBuilder`.
### 🦊 What's Changed 🦊
- Removed the `channel` argument from the `generate-experimenter` command ([#5843](https://github.com/mozilla/application-services/pull/5843)).
- This cleans up some design issues/technical debt deep within the internal representation of the FML compiler.
## Places
### 🦊 What's Changed 🦊
- `fetch_tree_with_depth` no longer starts a transaction when reading from the database. The transaction causes issues with concurrent calls, and isn't needed for consistency anymore ([#5790](https://github.com/mozilla/application-services/pull/5790)).
## Suggest
### ✨ What's New ✨
- The Suggest component now has Swift bindings for Firefox for iOS ([#5806](https://github.com/mozilla/application-services/pull/5806)).
### 🦊 What's Changed 🦊
- AMP suggestions now replace all template parameters in their `url` and `click_url` fields, and carry the original "raw" URLs in the `raw_url` and `raw_click_url` fields. Consumers can use the `raw_suggestion_url_matches()` function to determine if a `raw_url` or `raw_click_url` matches a URL string with replacements. This is a source-breaking change in Swift only, and doesn't affect Firefox for iOS, because iOS isn't consuming the Suggest component yet ([#5826](https://github.com/mozilla/application-services/pull/5826)).
## Logins
### ⚠️ Breaking Changes ⚠️
- Removal of SQLCipher migration API call and the SQLCipher library. While not technically a breaking change, it's listed here given that we're removing a large library.
# v118.0 (_2023-08-28_)
## General
### 🦊 What's Changed 🦊
- Backward-incompatible changes to the Suggest database schema to accommodate custom details for providers ([#5745](https://github.com/mozilla/application-services/pull/5745)) and future suggestion types ([#5766](https://github.com/mozilla/application-services/pull/5766)). This only affects prototyping, because we aren't consuming Suggest in any of our products yet.
- The `Suggestion` type in the Suggest component has changed from a dictionary to an enum ([#5766](https://github.com/mozilla/application-services/pull/5766)). This only affects prototyping, because we aren't consuming Suggest in any of our products yet.
- The Remote Settings `Client::get_attachment()` method now returns a `Vec<u8>` instead of a Viaduct `Response` ([#5764](https://github.com/mozilla/application-services/pull/5764)). You can use the new `Client::get_attachment_raw()` method if you need the `Response`. This is a backward-incompatible change for Rust consumers only; Swift and Kotlin are unaffected.
- The Remote Settings client now parses `ETag` response headers from Remote Settings correctly ([#5764](https://github.com/mozilla/application-services/pull/5764)).
### ✨ What's New ✨
- Added an OHTTP client library for iOS based on `ohttp` Rust crate ([#5749](https://github.com/mozilla/application-services/pull/5749)). This allows iOS products to use the same OHTTP libraries as Gecko-based products.
- The Remote Settings client has a new `Client::get_records_with_options()` method ([#5764](https://github.com/mozilla/application-services/pull/5764)). This is for Rust consumers only; it's not exposed to Swift or Kotlin.
- `RemoteSettingsRecord` objects have a new `deleted` property that indicates if the record is a tombstone ([#5764](https://github.com/mozilla/application-services/pull/5764)).
- Added `server-megazord` build for compiling crates and uniffi-ing for use in a python based server ([#5804](https://github.com/mozilla/application-services/pull/5804)).
- Initial users of this are a new `nimbus-experimenter` megazord and the existing `cirrus` megazord.
## Rust log forwarder
### 🦊 What's Changed 🦊
- Renamed `Logger` to `AppServicesLogger` to avoid a name conflict on Swift.
## Nimbus CLI [β›…οΈπŸ”¬πŸ”­πŸ‘Ύ](./components/support/nimbus-cli)
### ✨ What's New ✨
- Added passthrough to FML command line ([#5784](https://github.com/mozilla/application-services/pull/5784)), effectively unifying the two command line tools.
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### 🦊 What's Changed 🦊
- Removed previously deprecated commands `experimenter`, `ios`, `android`, `intermediate-repr` ([#5784](https://github.com/mozilla/application-services/pull/5784)).
# v117.0 (_2023-07-31_)
## General
### 🦊 What's Changed 🦊
- Removed obsolete sync functions that were exposed for Firefox iOS prior to the sync manager component integration ([#5725](https://github.com/mozilla/application-services/pull/5725)).
### ✨ What's New ✨
- Added a new Firefox Suggest component ([#5723](https://github.com/mozilla/application-services/pull/5723)).
## Nimbus SDK β›…οΈπŸ”¬πŸ”­
### ✨ What's New ✨
- Add `recordExperimentExposure` to `FeatureHolder`, and substitute `{experiment}` for experiment slugs at enrollment in the feature configuration [#5715](https://github.com/mozilla/application-services/pull/5715).
- This is to enable exposure events to be assigned to the correct experiment in coenrolled features.
- Android and iOS are both supported.
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### ✨ What's New ✨
- Add `allow-coenrollment` property for features in the Feature Manifest Language. This relaxes the feature exclusion rules for features marked with `allow-coenrollment: true`. ([#5688](https://github.com/mozilla/application-services/pull/5688)).
- This adds a non-user-facing method to the `FeatureManifestInterface`, `getCoenrollingFeatureIds`, in both Kotlin and Swift.
- Exposes a method to get the coenrolling feature ids in the FML client ([#5714](https://github.com/mozilla/application-services/pull/5714)), as well as the NimbusBuilders for both Kotlin and Swift ([#5718](https://github.com/mozilla/application-services/pull/5718)).
### 🦊 What's Changed 🦊
- Make sure deterministic builds of downstream consumers are not broken ([#5736](https://github.com/mozilla/application-services/pull/5736)).
## Nimbus CLI [β›…οΈπŸ”¬πŸ”­πŸ‘Ύ](./components/support/nimbus-cli)
### ✨ What's New ✨
- Updated the version number to 0.4.0 ([#5757](https://github.com/mozilla/application-services/pull/5757)).
- Added a `--patch` option to all commands that accept an experiment. ([#5721](https://github.com/mozilla/application-services/pull/5721))
- Added a `--pbpaste` and `start-server` command for testing on iOS devices. ([#5751](https://github.com/mozilla/application-services/pull/5751)).
- Use by `start-server` which directs you to open a URL on your device. Device commands sync with the server, and then on to the device.
- Added a `--pbcopy` option to all commands that open the app. These URLs are used to open the app on device ([#5727](https://github.com/mozilla/application-services/pull/5727)).
- with associated in-app tooling to enroll into experiments via a deeplink URL.
- Added `--is-launcher` to the protocol between the cli and the apps, so apps detecting the launcher intent can work from the generated deeplinks ([#5748](https://github.com/mozilla/application-services/pull/5748)).
- Added filters to the `list` and `fetch-list` commands ([#5730](https://github.com/mozilla/application-services/pull/5730))
- Also, made `--app` and `--channel` non-mandatory for commands that don't need them.
# v116.0 (_2023-07-03_)
## General
### 🦊 What's Changed 🦊
- Android: The JVM compatibility target is now version 17 ([#5651](https://github.com/mozilla/application-services/pull/5651))
- _NOTE: This is technically a breaking change, but all existing downstream projects have already made the necessary changes._
## Nimbus SDK β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- When a rollout audience size changes, the enrollment is re-evaluated and the client is un-enrolled if no longer in the bucket or re-enrolled if they had previously been disqualified from bucketing. ([#5687](https://github.com/mozilla/application-services/pull/5687), [#5716](https://github.com/mozilla/application-services/pull/5716)).
- The record of enrollment will be available in the new `enrollments` targeting attribute.
- Add `enrollments` value to `TargetingAttributes` β€” it is a set of strings containing all enrollments, past and present ([#5685](https://github.com/mozilla/application-services/pull/5685)).
- _Note: This change only applies to stateful uses of the Nimbus SDK, e.g. mobile_
- Add ability to enroll selected features multiple times (coenrollment) ([#5684](https://github.com/mozilla/application-services/pull/5684), [#5697](https://github.com/mozilla/application-services/pull/5697)).
### ⚠️ Breaking Changes ⚠️
- Several changes to the NimbusBuilder mean that this is a breaking change for Firefox for Android [#5697](https://github.com/mozilla/application-services/pull/5697).
- These changes are fixed by [firefox-android#2682](https://github.com/mozilla-mobile/firefox-android/pull/2682).
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### ✨ What's New ✨
- Add `validate` command to the FML CLI. This command validates a chosen manifest file, including all its imports, includes, and channels ([#5607](https://github.com/mozilla/application-services/pull/5607)).
- Add `single-file` command to the FML CLI. This command rationalizes a manifest file– including all of its imports and includes– into a single file, suitable for bundling into a secure environment ([#5676](https://github.com/mozilla/application-services/pull/5676)).
### 🦊 What's Changed 🦊
- When a cache directory is not specified, now spin up a temporary directory instead of using the (sometimes) long lived system one ([#5662](https://github.com/mozilla/application-services/pull/5662)).
## Nimbus CLI [β›…οΈπŸ”¬πŸ”­πŸ‘Ύ](./components/support/nimbus-cli)
### 🦊 What's Changed 🦊
- Added isRollout and bucketing info to the `list` command ([#5672](https://github.com/mozilla/application-services/pull/5672)).
- Fixed several paper cut usability issues ([#5654](https://github.com/mozilla/application-services/pull/5654)):
- Experiments by default are fetched from the API v6, eliminating latency between making changes on experimenter and syncing with remote settings.
- Separated `fetch` and `fetch-list`: experiment lists, by default still come from Remote Settings, but the slower API v6 `/api/v6/experiments` can be queried.
### ✨ What's New ✨
- Added an `info` command ([#5672](https://github.com/mozilla/application-services/pull/5672)).
- Fixed several paper cut usability issues ([#5654](https://github.com/mozilla/application-services/pull/5654)):
- Added a `defaults` command to output the feature configuration from the manifest.
- Added a `features` command to output the experiment branch features and optionally merged with the manifest defaults.
- Now supports reading and writing YAML files.
- Single experiment files can be used as an experiment list file.
- Add passthrough parameters for the `open`, `enroll` and `test-feature` commands. ([#5669](https://github.com/mozilla/application-services/pull/5669))
# v115.0 (_2023-06-05_)
## Push
### ⚠️ Breaking Changes ⚠️
- The constructor for the Push Manager has changed. ([#5389](https://github.com/mozilla/application-services/pull/5389))
- Push manager now takes only one argument, a Push Configuration object
- Push manager no longer takes in the registration_id (token) in construction
- Push manager now takes a new `verifyConnectionRateLimiter` parameter in its configuration, it defines the number of seconds between consecutive verify connection requests.
- The `update` function no longer returns a boolean, the consumers did not use the return value. ([#5389](https://github.com/mozilla/application-services/pull/5389))
- The Error exposed by push is now `PushApiError`, which is reduced to the set of errors the consumer is expected to handle. ([#5389](https://github.com/mozilla/application-services/pull/5389)):
- `PushApiError::UAIDNotRecognizedError`: The server lost the client's uaid. The app should call `verify_connection(true)` and notify all consumers of push
- `RecordNotFoundError`: The record containing the private key cannot be found. The consumer should call `verify_connection(true)` and notify all consumers of push
- `InternalError`: Consumer should report the error, but ignore it
## Nimbus β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Add additional Cirrus SDK helper methods and add Python testing for the generated Cirrus Python code ([#5478](https://github.com/mozilla/application-services/pull/5478)).
- Add `user_id` RandomizationUnit (for Cirrus) ([#5564](https://github.com/mozilla/application-services/pull/5564)).
- Fixed up a bug in `get_experiment_branch` and `get_active_experiments` ([(#5584)](https://github.com/mozilla/application-services/pull/5584)).
- Renamed `GleanPlumb` classes and protocols to `NimbusMessaging` in Swift. Added more protocols to make it more mockable in application code ([#5604](https://github.com/mozilla/application-services/pull/5604)).
## Nimbus CLI [β›…οΈπŸ”¬πŸ”­πŸ‘Ύ](./components/support/nimbus-cli)
### ✨ What's New ✨
- Extra commands: `capture-logs`, `tail-logs`, `test-feature`, `fetch` and `apply-files`. ([#5517](https://github.com/mozilla/application-services/pull/5517))
- Extra commands: `validate` to validate experiments against a feature manifest. ([#5638](https://github.com/mozilla/application-services/pull/5638))
- This is on by default for `test-feature` and `enroll`
- The version of the manifest may be tweaked with the `--version`, `--ref` and `--manifest` options.
- Extra commands and options to open deeplinks with the app. ([#5590](https://github.com/mozilla/application-services/pull/5590)).
- An update checker to keep you and your installation fresh. ([#5613](https://github.com/mozilla/application-services/pull/5613)).
- An installation script to make getting `nimbus-cli` easier. ([#5618](https://github.com/mozilla/application-services/pull/5618)).
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### ✨ What's New ✨
- Added a new Remote Settings client component ([#5423](https://github.com/mozilla/application-services/pull/5423)).
- Added `toJSONObject()` and `getFeatures(featureId)` for Kotlin. This serializes the FML into a `JSONObject` ([#5574](https://github.com/mozilla/application-services/pull/5574)).
- Added `FmlClient`, additional methods to `FeatureManifest`, and Python UniFFI bindings ([#5557](https://github.com/mozilla/application-services/pull/5557)).
- Updated FML validation to error when a property name that doesn't exist is applied to a feature ([#5620](https://github.com/mozilla/application-services/pull/5620)).
### What's fixed
- Updated the FML downloader plugin to correctly download the release artifacts from the GitHub release
## FxA Client
### ⚠️ Breaking Changes ⚠️
- Changes `handlePushMessage` API so that it now returns exactly one event associated with the push message. ([#5556](https://github.com/mozilla/application-services/pull/5556))
- This API does not attempt to retrieve any missing tabs.
- Users of this API can use it to display the notification, but should use `pollDeviceCommands` after to capture the commands.
## Xcode
- Bumped Xcode version from 13.4.1 -> 14.3.1 ([#5615](https://github.com/mozilla/application-services/pull/5615))
# v114.0 (_2023-05-08_)
## General
### ✨ What's New ✨
- Updated the version system to follow the Firefox major version
- Implemented nightly builds
## Nimbus β›…οΈπŸ”¬πŸ”­
### ✨ What's New ✨
- Added processing of command line arguments (or intent extras) to be driven by a command line tool. ([#5482](https://github.com/mozilla/application-services/pull/5482))
- Requires passing `CommandLine.arguments` to `NimbusBuilder` in iOS.
- Requires passing `intent` to `NimbusInterface` in Android.
- Added Cirrus client object for working with Nimbus in a static, stateless manner ([#5471](https://github.com/mozilla/application-services/pull/5471)).
- Added [`nimbus-cli`](./components/support/nimbus-cli). ([#5494](https://github.com/mozilla/application-services/pull/5494))
## Places β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Added support for sync payload evolution in history. If other clients sync history records / visits with fields that we don't know about, we store that data as JSON and send it back when it's synced next.
# v97.5.1 (_2023-04-17_)
## General
### ✨ What's New ✨
- Fixing the objcopy path when building the megazord ([#5154](https://github.com/mozilla/application-services/pull/5154)).
# v97.5.0 (_2023-04-17_)
## General
### What's Changed
- Android: Upgraded NDK from r21d to r25c.
## Nimbus β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Refactor the `EnrollmentEvolver` in preparation for a larger refactor to split out the `stateful` feature. ([#5374](https://github.com/mozilla/application-services/pull/5374)).
- Added a `stateful` cargo feature and added appropriate feature flag attributes ([#5448](https://github.com/mozilla/application-services/pull/5448)).
- This does not functionally change build processes, as the `stateful` feature is now the default feature for the `nimbus-sdk` library.
- Changed the ordering around for optional arguments for Python compatibility ([#5460](https://github.com/mozilla/application-services/pull/5460)).
- This does not change Kotlin or Swift APIs, but affects code that uses the uniffi generated FFI for `record_event` and `record_past_event` directly.
### ✨ What's New ✨
- Added more testing tools for the `NimbusEventStore`, for iOS and Android ([#5477](https://github.com/mozilla/application-services/pull/5477))
- `events.advanceEventTime(by: time)` lets you queue up a sequence of events to test JEXL queries.
## Sync Manager
### 🦊 What's Changed 🦊
- Added the sync telemetry reporting logic to replace the temp metrics in iOS. ([#5479](https://github.com/mozilla/application-services/pull/5479))
# v97.4.1 (_2023-04-04_)
## Places
### 🦊 What's Changed 🦊
- Added a workaround for a database migration issue that was breaking places for some nightly users
# v97.4.0 (_2023-04-03_)
## Nimbus β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Changed the ordering around for optional arguments for Python compatibility ([#5460](https://github.com/mozilla/application-services/pull/5460)).
- This does not change Kotlin or Swift APIs, but affects code that uses the uniffi generated FFI for `record_event` and `record_past_event` directly.
# v97.3.0 (_2023-03-29_)
## Places β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Added support for sync payload evolution in bookmarks. If other clients sync bookmark records with fields that we don't know about, we store that data as JSON and send it back when it's synced next.
## Nimbus β›…οΈπŸ”¬πŸ”­
### ✨ What's New ✨
- Added `recordPastEvent` for iOS and Android for testing of event store triggers. ([#5431](https://github.com/mozilla/application-services/pull/5431))
- Added `recordMalformedConfiguration` method for `FeatureHolder` to record when some or all of a feature configuration is found to be invalid. ([#5440](https://github.com/mozilla/application-services/pull/5440))
### 🦊 What's Changed 🦊
- Removed the check for major `schemaVersion` in Experiment recipes. ([#5433](https://github.com/mozilla/application-services/pull/5433))
# v97.2.0 (_2023-03-08_)
## General
### 🦊 What's Changed 🦊
- Android: The JVM compatibility target is now version 11 ([#5401](https://github.com/mozilla/application-services/issues/5401))
- _NOTE: This is technically a breaking change, but all existing downstream projects have already made the necessary changes._
## Nimbus β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Fix Nimbus gradle plugin source file and task dependency issues ([#5421](https://github.com/mozilla/application-services/pull/5421))
### ✨ What's New ✨
- Added new testing tooling `HardcodeNimbusFeatures` to aid UI and integration tests ([#5393](https://github.com/mozilla/application-services/pull/5393))
# v97.1.0 (_2023-02-24_)
## Tabs
### 🦊 What's Changed 🦊
- The Tabs engine now trims the payload to be under the max the server will accept ([#5376](https://github.com/mozilla/application-services/pull/5376))
## Sync Manager
### 🦊 What's Changed 🦊
- Exposing the Sync Manager component to iOS by addressing the existing naming collisions, adding logic to process the telemetry
data returned in the component's `sync` function, and adding the component to the iOS megazord ([#5359](https://github.com/mozilla/application-services/pull/5359)).
# v97.0.0 (_2023-02-22_)
## Nimbus β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Updated the Nimbus Gradle Plugin to fix a number of issues after migrating it to this repository ([#5348](https://github.com/mozilla/application-services/pull/5348))
- Good fences: protected calls out to the error reporter with a `try`/`catch` ([#5366](https://github.com/mozilla/application-services/pull/5366))
- Updated the Nimbus FML CLI to only import the R class if it will be used by a feature property ([#5361](https://github.com/mozilla/application-services/pull/5361))
### ⚠️ Breaking Changes ⚠️
- Android and iOS: Several errors have been moved to an internal support library and will no longer be reported as top-level Nimbus errors. They should still be accessible through `NimbusError.ClientError`. They are: `RequestError`, `ResponseError`, and `BackoffError`. ([#5369](https://github.com/mozilla/application-services/pull/5369))
# v96.4.0 (_2023-01-30_)
## Tabs
### What's Changed
The Tabs engine is now more efficient in how it fetches its records:
- The Tabs engine no longer clears the DB on every sync.
- Tabs now tracks the last time it synced and only fetches tabs that have changed since the last sync.
- Tabs will keep records for up to 180 days, in parity with the clients engine. To prevent the DB from getting too large.
## Nimbus β›…οΈπŸ”¬πŸ”­
### 🦊 What's Changed 🦊
- Added `GleanMetrics.NimbusHealth` metrics for measuring duration of `apply_pending_experiments` and `fetch_experiments`. ([#5344](https://github.com/mozilla/application-services/pull/5344))
# v96.3.0 (_2023-01-18_)
## Places
### What's changed
- Removes old iOS bookmarks migration code. The function `migrateBookmarksFromBrowserDb` no longer exists. ([#5276](https://github.com/mozilla/application-services/pull/5276))
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's New
- iOS: added a `Bundle.fallbackTranslationBundle()` method. ([#5314](https://github.com/mozilla/application-services/pull/5314))
- Moved the Nimbus Gradle Plugin into application-services and updated its functionality to support local development. ([#5173](https://github.com/mozilla/application-services/pull/5173))
# v96.2.1 (_2023-01-04_)
## Places
### What's changed
- Limited the number of visits to migrate for History to 10,000 visits. ([#5310](https://github.com/mozilla/application-services/pull/5310))
# v96.2.0 (_2023-01-03_)
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's Changed
- Fixed an issue where the NimbusQueues protocol was missing from the NimbusApi ([#5298](https://github.com/mozilla/application-services/pull/5298))
### ✨ What's New ✨
- Added `eventLastSeen` query to the event store and jexl transforms ([#5297](https://github.com/mozilla/application-services/pull/5297))
- Introduced the `NimbusBuilder` for Swift ([#5307](https://github.com/mozilla/application-services/pull/5307))
## Tabs
### What's Changed
- Fixed a regression causing failure to read old tabs databases ([#5286](https://github.com/mozilla/application-services/pull/5286))
## Autofill
### 🦊 What's Changed 🦊
- Exposed autofill api to iOS consumer and resolved `createKey` function conflict with the Logins component.
# v96.1.3 (_2022-12-08_)
## Tabs
### What's Changed
- Fixed a regression causing failure to read old tabs databases ([#5286](https://github.com/mozilla/application-services/pull/5286))
# v96.1.2 (_2022-12-07_)
## Logins
### What's changed
- Removes Fennec migration code. The function `importMultiple` no longer exists. ([#5268](https://github.com/mozilla/application-services/pull/5268))
## Nimbus
### What's Changed
- Event store date comparison logic update to be entirely relative ([#5265](https://github.com/mozilla/application-services/pull/5265))
- Updates event store to initialize all dates at the start of the current year ([#5279](https://github.com/mozilla/application-services/pull/5279))
- Adds new Kotlin/Swift methods to clear the event store ([#5279](https://github.com/mozilla/application-services/pull/5279))
- Adds Swift methods to wait for operation queues to finish ([#5279](https://github.com/mozilla/application-services/pull/5279))
## Places
### What's changed
- Removes Fennec migration code. ([#5268](https://github.com/mozilla/application-services/pull/5268))
The following functions no longer exist:
- `importBookmarksFromFennec`
- `importPinnedSitesFromFennec`
- `importVisitsFromFennec`
## Viaduct
### What's New
- Allow viaduct to make requests to the android emulator's host address via
a new viaduct_allow_android_emulator_loopback() (in Rust)/allowAndroidEmulatorLoopback() (in Kotlin)
## Tabs
### What's changes
- The ClientRemoteTabs struct/interface now has a last_modified field which is the time
when the device last uploaded the tabs.
# v96.1.1 (_2022-12-01_)
## autofill
### What's Changed
- Fixed a bug where `scrub_encrypted_data()` didn't update the last sync time, which prevented the scrubbed CC data
from being fixed.
- Don't report sentry errors when we try to decrypt the empty string. This happens when the consumer tries to decript
a CC number after `scrub_encrypted_data()` is called.
## logins
### What's Changed
- Don't report `Origin is Malformed` errors to Sentry. This is a known issue stemming from FF Desktop sending us
URLs without a scheme. See #5233 for details.
## places
### What's Changed
- Switch to using incremental vacuums for maintenance, which should speed up the process.
- Don't report places `relative URL without a base` to Sentry. This is a known issue caused by Fenix sending us URLs
with an invalid scheme (see #5235)
# v96.1.0 (_2022-11-29_)
## FxA Client
### What's new
- Exposed a new function for swift consumers `resetPersistedState`
- `resetPersistedState` can be used to refresh the account manager to reflect the latest persisted state.
- `resetPersistedState` should be called in between a different account manager instance persisting the state, and the current account manager persisting state
- For example, the Notification Service in iOS creates its own instance of the account manager, changes its state (by changing the index of the last retrieved send tab)
- The main account manager held by the application should call` resetPersistedState` before calling any other method that might change its state. This way it can retrieve the most up to date index that the Notification Services persisted.
### What's changed
- The `processRawIncomingAccountEvent` function will now process all commands, not just one. This moves the responsibilty of ensuring each push gets a UI element to the caller.
# v96.0.1 (_2022-11-18_)
## Logins
### What's Changed
- Updated the URL redaction code to remove potential PII leak. Version `96.0.0` should not be used by downstream clients.
## Nimbus
### What's changed
- Add methods to Kotlin and Swift to call the record event method on the nimbus client ([#5244](https://github.com/mozilla/application-services/pull/5244))
## FxA Client
### What's changed
- The devices retrieved from the devices list are now only the devices that have been accessed in 21 days. This should help remove duplicates and idle devices for users. ([#4984](https://github.com/mozilla/application-services/pull/4984))
# v96.0.0 (_2022-11-16_)
## β›…οΈπŸ”¬πŸ”­ Nimbus
### ✨ What's New ✨
- `active_experiments` is available to JEXL as a set containing slugs of all enrolled experiments ([#5227](https://github.com/mozilla/application-services/pull/5227))
- Added Behavioral Targeting/Display Triggers accessible from JEXL for experiments and messages ([#5226](https://github.com/mozilla/application-services/pull/5226), [#5228](https://github.com/mozilla/application-services/pull/5228))
- Android only: added a new `NimbusBuilder` method to unify Fenix and Focus startup sequences. ([5239](https://github.com/mozilla/application-services/pull/5239))
### ⚠️ Breaking Changes ⚠️
- Changed the type of `customTargetingAttributes` in `NimbusAppSettings` to a `JSONObject`. The change will be breaking only for Android. ([#5229](https://github.com/mozilla/application-services/pull/5229))
- Android only: Removed the `initialize()` methods in favor of `NimbusBuilder` class. ([5239](https://github.com/mozilla/application-services/pull/5239))
## Logins
### What's Changed
- Include a redacted version of the URL in the Sentry error report when we see a login with an invalid origin field.
- Made it so `InvalidDatabaseFile` errors aren't reported to Sentry. These occurs when a non-existent path is passed
to `migrateLoginsWithMetrics()`, which happens about 1-2 times a day. This is very low volume, the code is going
away soon, and we have a plausible theory that these happen when Fenix is killed after the migration but before
`SQL_CIPHER_MIGRATION` is stored.
## Places
### What's Changed
- Report a Sentry breadcrumb when we fail to parse URLs, with a redacted version of the URL.
## JwCrypto
### What's Changed
- Log a breadcrumb with a redacted version of the crypto key when it has an invalid form (before throwing
DeserializationError)
# v95.0.1 (_2022-11-03_)
# General
- Added function to unset the app-services error reporter
# v95.0.0 (_2022-10-28_)
## General
### What's fixed
- Fixed a bug released in 94.3.1. The bug broke firefox-ios builds due to a name conflict. ([#5181](https://github.com/mozilla/application-services/pull/5181))
### What's Changed
- Updated UniFFI to 0.21.0. This improves the string display of the fielded errors on Kotlin. Currently only logins is using these errors, but we plan to start using them for all components.
## Autofill
### ⚠️ Breaking Changes ⚠️
- The autofill API now uses `AutofillApiError` instead of `AutofillError`. `AutofillApiError` exposes a smaller number of variants, which
will hopefully make it easier to use for the consumer.
## Logins
### ⚠️ Breaking Changes ⚠️
- Renamed `LoginsStorageError` to `LoginsApiError`, which better reflects how it's used and makes it consistent with
the places error name.
- Removed the `LoginsApiError::RequestFailed` variant. This was only thrown when calling the sync-related methods
manually, rather than going through the SyncManager which is the preferred way to sync. Those errors will now be
grouped under `LoginsApiError::UnexpectedLoginsApiError`.
### What's Changed
- Added fields to errors in `logins.udl`. Most variants will now have a `message` field.
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's Changed
- Disabled Glean events recorded when the SDK is not ready for a feature ([#5185](https://github.com/mozilla/application-services/pull/5185))
- Add structs for behavioral targeting ([#5205](https://github.com/mozilla/application-services/pull/5205))
- Calls to `log::error` have been replaced with `error_support::report_error` ([#5204](https://github.com/mozilla/application-services/pull/5204))
## Places
### ⚠️ Breaking Changes ⚠️
- Renamed `PlacesError` to `PlacesApiError`, which better reflects that it's used in the public API rather than for
internal errors.
- Removed the `JsonError`, `InternalError`, and `BookmarksCorruption` variants from places error. Errors that
resulted in `InternalError` will now result in `UnexpectedPlacesError`. `BookmarksCorruption` will also result in
an `UnexpectedPlacesError` and an error report will be automatically generated. `JsonError` didn't seem to be
actually used.
## Tabs
### ⚠️ Breaking Changes ⚠️
- The tabs API now uses `TabsError` with `TabsApiError`. `TabsApiError` exposes a smaller number of variants, which
will hopefully make it easier to use for the consumer.
# v94.3.2 (_2022-10-13_)
## General
### What's Changed
- Android: Reverted NDK back to r21d from r25b. ([#5156](https://github.com/mozilla/application-services/issues/5165))
## Sync Manager
### What's Changed
- Syncing will sync each engine in a deterministic order which matches desktop ([#5171](https://github.com/mozilla/application-services/issues/5171))
# v94.3.1 (_2022-09-23_)
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's Fixed
- A regression affecting Android in calculating `days_since_install` and `days_since_update` ([#5157](https://github.com/mozilla/application-services/pull/5157))
# v94.3.0 (_2022-09-20_)
## General
### What's Changed
- Rust toolchain has been bumped to 1.63 and minimum version bumped to 1.61 to comply with our [Rust Policy](https://github.com/mozilla/application-services/blob/main/docs/rust-versions.md#application-services-rust-version-policy)
- Android: Upgraded NDK from r21d to r25b. ([#5142](https://github.com/mozilla/application-services/pull/5142))
## Places
### What's Changed
- Added metrics for the `run_maintenance()` method. This can be used by consumers to decide when to schedule the next `run_maintenance()` call and to check if calls are taking too much time.
### What's new
- Exposed a function in Swift `migrateHistoryFromBrowserDb` to migrate history from `browser.db` to `places.db`, the function will migrate all the local visits in one go. ([#5077](https://github.com/mozilla/application-services/pull/5077)).
- The migration might take some time if a user had a lot of history, so make sure it is **not** run on a thread that shouldn't wait.
- The migration runs on a writer connection. This means that other writes to the `places.db` will be delayed until the migration is done.
## Nimbus
### What's Changed
- Added `applyLocalExperiments()` method as short hand for `setLocalExperiments` and `applyPendingExperiments`. ([#5131](https://github.com/mozilla/application-services/pull/5131))
- `applyLocalExperiments` and `applyPendingExperiments` now returns a cancellable job which can be used in a timeout.
- `initialize` function takes a raw resource file id, and returns a cancellable `Job`.
# v94.2.1 (_2022-09-21_)
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's Changed
- Added `applyLocalExperiments()` method as short hand for `setLocalExperiments` and `applyPendingExperiments`. ([#5131](https://github.com/mozilla/application-services/pull/5131))
- `applyLocalExperiments` and `applyPendingExperiments` now returns a cancellable job which can be used in a timeout.
- `initialize` function takes a raw resource file id, and returns a cancellable `Job`.
### What's Fixed
- A regression affecting Android in calculating `days_since_install` and `days_since_update` ([#5157](https://github.com/mozilla/application-services/pull/5157))
# v94.2.0 (_2022-09-13_)
# General
- `error-support` is now exposed to both Firefox iOS and Focus iOS. `error-support` supports better error reporting and logging for errors. ([#5094](https://github.com/mozilla/application-services/pull/5094))
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### What's Changed
- Add `channels` value for defaults and add support for multiple channels in `channel` via comma separation. ([#5101](https://github.com/mozilla/application-services/pull/5101))
### ✨ What's New ✨
- JEXL targeting allows for using the `in` keyword with objects and a map of active experiments has been added to TargetingAttributes. The map will always be empty at this time. ([#5104](https://github.com/mozilla/application-services/pull/5104))
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's Changed
- Added metrics for SDK unavailability and disk cache unreadiness to tease apart the difference in startup slowness. ([#5118](https://github.com/mozilla/application-services/pull/5118))
# v94.1.0 (_2022-08-18_)
## Nimbus
### What's new
- Added telemetry to track how often apps query for variables before Nimbus is initialized. ([#5091](https://github.com/mozilla/application-services/pull/5091))
# v94.0.1 (_2022-08-09_)
## Nimbus FML
### What's fixed
- Linux releases for the FML were missing, there are available again now. ([#5080](https://github.com/mozilla/application-services/pull/5080))
# v94.0.0 (_2022-08-02_)
## Logins
### ⚠️ Breaking Changes ⚠️
- Removed expired logins sqlcipher migration metrics and renamed the `migrateLoginsWithMetrics` function since it no longer reports metrics. An associated iOS PR ([#11470](https://github.com/mozilla-mobile/firefox-ios/pull/11470)) has been created to address the function renaming. ([#5064](https://github.com/mozilla/application-services/pull/5064))
# v93.8.0 (_2022-07-29_)
## Nimbus FML β›…οΈπŸ”¬πŸ”­
### What's Changed
- Validate the configuration passed from a top-level FML file to imported files. ([#5055](https://github.com/mozilla/application-services/pull/5055))
## Places
### What's new
- We now expose all of the Places history APIs to Swift consumers. ([#4989](https://github.com/mozilla/application-services/pull/4989))
- Added an optional db_size_limit parameter to `run_maintenance`. This can be used to set a target size for the places DB. If the DB is over that size, we'll prune a few older visits. The number of visits is very small (6) to ensure that the operation only blocks the database for a short time. The intention is that `run_maintenance()` is called frequently compared to how often visits are added to the places DB.
## Sync15
### What's changed
- `CLIENTS_TTL` has been updated to be 180 days instead of 21 ([#5054](https://github.com/mozilla/application-services/pull/5054))
# v93.7.1 (_2022-07-26_)
## Places
### What's changed
- The `delete_visits_between` API now also deletes history metadata ([#5046](https://github.com/mozilla/application-services/pull/5046))
# v93.7.0 (_2022-07-18_)
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### What's Changed
- Added `MOZ_APPSERVICES_MODULE` environment variable to specify the megazord module for iOS ([#5042](https://github.com/mozilla/application-services/pull/5042)). If it is missing, no module is imported.
### ✨ What's New ✨
- Enabled remote loading and using configuring of branches. ([#5041](https://github.com/mozilla/application-services/pull/5041))
- Add a `fetch` command to `nimbus-fml` to demo and test remote loading and paths. ([#5047](https://github.com/mozilla/application-services/pull/5047))
## Logins
### What's Changed
- Updated the `LoginsStorageError` implementation and introduce error reporting for unexpected errors.
Note that some errors were removed, which is technically a breaking change, but none of our
consumers use those errors so it's not a breaking change in practice.
# v93.6.0 (_2022-07-11_)
## Autofill
### What's Fixed
- Fixed syncing of autofill when tombstones exist in the local mirror (#5030)
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### What's New
- Added support for breaking up FML files using `includes` and separating into different modules with `imports`.
- This is _not_ a breaking change, but should be accompanied by a upgrade to the megazord ([#4099](https://github.com/mozilla/application-services/pull/4099)).
- This also deprecates some commands in the command line interface ([#5022](https://github.com/mozilla/application-services/pull/5022)). These will be removed in a future release.
- Related proposal document: [FML: Imports and Includes](https://experimenter.info/fml-imports-and-includes).
## Logins
### What's Changed
- sqlcipher migrations no longer record metrics (#5017)
## Glean
### What's Changed
- Updated to Glean v50.1.2
## UniFFI
### What's Changed
- Updated to UniFFI 0.19.3
# v93.5.0 (_2022-06-16_)
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### What's Changed
- Added [`includes` list property](https://experimenter.info/fml-imports-and-includes/#the-include-list) to enable splitting up large `nimbus.fml.yaml` files ([#4976](https://github.com/mozilla/application-services/pull/4976)).
# v93.4.0 (_2022-06-09_)
## General
### What's Changed
* Glean updated to v50 and all internal calls adopted
# v93.3.0 (_2022-06-06_)
## Error-support
### What's New
- Added a new error reporting system that is intended to eventually replace using `log::error` to report errors
- Added code using the new system to track down application-services#4856
- Added UniFFI API for this crate. Consumers should use this to register for error reports and breadcrumbs.
# v93.2.2 (_2022-05-27_)
## Tabs
### What's Changed
- Fixed the iOS breaking change in the `SyncUnlockInfo` constructor by making `tabsLocalId` an optional parameter ([#4975](https://github.com/mozilla/application-services/pull/4975)).
# v93.2.1 (_2022-05-24_)
## General
### What's new
- Uniffi was upgraded to 0.18.0. For our consumers, this means there now exported types that used to be internal to `uniffi`. ([#4949](https://github.com/mozilla/application-services/pull/4949)).
- The types are:
- `Url` alias for `string`
- `PlacesTimestamp` alias for`i64`
- `VisitTransitionSet` alias for `i32`
- `Guid` alias for `string`
- `JsonObject` alias for `string`
- Non of the exposed types conflict with a type in iOS so this is not a breaking change.
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's new
- Make generation of Experimenter compatible YAML repeatable: fields, variables, features and enum variants are listed alphabetically. ([#4964](https://github.com/mozilla/application-services/pull/4964)).
## Tabs
### What's Changed
- The component has been updated for integration into Firefox iOS ([#4905](https://github.com/mozilla/application-services/pull/4905)).
- The `DeviceType` naming conflict which prevented `rust-components-swift` from generating Tabs code has been resolved.
- Errors and the `reset` function have been exposed.
- Parameters for the `sync` function have been updated to match the `SyncUnlockInfo` parameters.
- The `tabs-sync` example has been updated with the above changes.
# v93.2.0 (_2022-05-11_)
## General
### What's new
- Application services now releases a **separate** xcframework with only the components needed by focus-ios (namely Nimbus, Viaduct and Rustlog). This change is only relevant for focus, it does not affect the already existing xcframework for firefox ios. ([#4953](https://github.com/mozilla/application-services/pull/4953))
# v93.1.0 (_2022-05-06_)
## Nimbus β›…οΈπŸ”¬πŸ”­
### What's New
- New API in the `FeatureHolder`, both iOS and Android to control the output of the `value()` call:
- to cache the values given to callers; this can be cleared with `FxNimbus.invalidatedCachedValues()`
- to add a custom initializer with `with(initializer:_)`/`withInitializer(_)`.
## Places
### What's Fixed:
- Fixed a bug in Android where non-fatal errors were crashing. ([#4941](https://github.com/mozilla/application-services/pull/4941))
- Fixed a bug where querying history metadata would return a sql error instead of the result ([4940](https://github.com/mozilla/application-services/pull/4940))
### What's new:
- Exposed the `deleteVisitsFor` function in iOS, the function can be used to delete history metadata. ([#4946](https://github.com/mozilla/application-services/pull/4946))
- Note: The API is meant to delete all history, however, iOS does **not** use the `places` Rust component for regular history yet.
# v93.0.4 (_2022-04-28_)
## Places
### What's New
- The `delete_visits_for()` function now deletes all history metadata even when the item is
bookmarked.
## Nimbus
### What's fixed
- Fixed a bug where the visibility of `GetSdk` was internal and it was used in generated FML code. ([#4927](https://github.com/mozilla/application-services/pull/4927))
# v93.0.3 (_2022-04-27_)
## Nimbus β›…οΈπŸ”­πŸ”¬
### What's New
- Added targeting attributes for `language` and `region`, based upon the `locale`. [#4919](https://github.com/mozilla/application-services/pull/4919)
- This also comes with an update in the JEXL evaluator to handle cases where `region` is not available.
### What's Changed
- Fixed: A crash was detected by the iOS team, which was traced to `FeatureHolder.swift`. ([#4924](https://github.com/mozilla/application-services/pull/4924))
- Regression tests added, and FeatureHolder made stateless in both Swift and Kotlin.
# v93.0.2 (_2022-04-25_)
## Nimbus FML
### What's fixed
- (iOS only) Made the extensions on `String` and `Variables` public. The extended functions are used in the generated code and that didn't compile in consumers when internal.
# v93.0.1 (_2022-04-20_)
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### What's Fixed
- Handling of optional types which require a mapping to a usable type. ([#4915](https://github.com/mozilla/application-services/pull/4915))
## Places
- Downgraded places `get_registered_sync_engine` `log:error` to `log:warn` to fix an issue where places was unnecessarily creating sentry noise. This change was also cherry-picked to [v91.1.2](#v9112-2022-04-19)
# v93.0.0 (_2022-04-13_)
## Nimbus β›…οΈπŸ”­πŸ”¬ + Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### What's New
- Add support for bundled resources in the FML in Swift. This corresponds to the `Image` and `Text` types. [#4892](https://github.com/mozilla/application-services/pull/4892)
- This must include an update to the megazord, as well re-downloading the `nimbus-fml` binary.
- Kotlin support for the same has also changed to match the Swift implementation, which has increased performance.
# v92.0.1 (_2022-03-24_)
## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§
### What's Fixed
- Swift: a bug in our understanding of Swift optional chaining rules meant that maps with a mapping and merging produced invalid code. ([#4885](https://github.com/mozilla/application-services/pull/4885))
## General
### What's Changed
- Added documentation of our sqlite pragma usage. ([#4876](https://github.com/mozilla/application-services/pull/4876))
# v92.0.0 (_2022-03-17_)
## Places
### ⚠️ Breaking Changes ⚠️
- Removed some functions related to sync interruption. These were never really completed and don't seem to be in use by iOS/Android code:
- `PlacesApi.new_sync_conn_interrupt_handle()`
- Swift only: `PlacesAPI.interrupt()`
- The exception variant `InternalPanic` was removed. It's only use was replaced by the already existing `UnexpectedPlacesException`. ([#4847](https://github.com/mozilla/application-services/pull/4847))
### What's New
- The Places component will report more error variants to telemetry. ([#4847](https://github.com/mozilla/application-services/pull/4847))
## Autofill / Logins / Places / Sync Manager, Webext-Storage
### What's Changed
- Updated interruption handling and added support for shutdown-mode which interrupts all operations.
## Tabs
### ⚠️ Breaking Changes ⚠️
- The tabs component's constructor now requires the path to the database file where remote tabs will be persisted to.
- Requesting remote tabs before the first sync will now return the tabs in this database, so may be "stale".
## Glean
### ⚠️ Breaking Changes ⚠️
### Swift
- GleanMetrics should now be imported under `import Glean` instead of importing via `MozillaRustComponents`
## Nimbus FML
### What's Changed
- Papercut fixes for nicer developer experience [#4867](https://github.com/mozilla/application-services/pull/4867)
- More helpful validation error reporting
- Better handling of defaults in objects and enum maps
- More YAML syntactic checking.
- Allow experimenter to output to a YAML file, as well as JSON. [#4874](https://github.com/mozilla/application-services/pull/4874)
- If the file extension is `yaml`, then output as YAML, otherwise, output as JSON.
# v91.1.2 (_2022-04-19_)
**IMPORTANT**: The following change was cherry-picked to 91.1.2 which was a release **not** from the main branch. The change then landed in [v93.0.1](#v9301-2022-04-20). This means that versions v92.0.0 - v93.0.0 do not have the change.
## Places
- Downgraded places `get_registered_sync_engine` `log:error` to `log:warn` to fix an issue where places was unnecessarily creating sentry noise.
# v91.1.1 (_2022-03-23_)
## Autofill
### What's New
- Added `temp-store`, `journal-mode`, and `foreign-keys` pragmas to autofill component. ([#4882](https://github.com/mozilla/application-services/pull/4882))
# v91.1.0 (_2022-02-11_)
## β›…οΈπŸ”¬πŸ”­ Nimbus SDK
### What's fixed
- Fixes a bug where disabling studies did not disable rollouts. ([#4807](https://github.com/mozilla/application-services/pull/4807))
### ✨ What's New ✨
- A message helper is now available to apps wanting to build a Messaging System on both Android and iOS. Both of these access the variables
provided by Nimbus, and can have app-specific variables added. This provides two functions:
- JEXL evaluation ([#4813](https://github.com/mozilla/application-services/pull/4813)) which evaluates boolean expressions.
- String interpolation ([#4831](https://github.com/mozilla/application-services/pull/4831)) which builds strings with templates at runtime.
## Xcode
- Bumped Xcode version from 13.1.0 -> 13.2.1
## Nimbus FML
### What's fixed
- Fixes a bug where each time the fml is run, the ordering of features in the experimenter json is changed. ([#4819](https://github.com/mozilla/application-services/pull/4819))
# v91.0.1 (_2022-02-02_)
## Places
### What's Changed
- The database initialization code now uses BEGIN IMMIDIATE to start a
transaction. This will hopefully prevent `database is locked` errors when
opening a sync connection.
### What's New
- The `HistoryVisitInfo` struct now has an `is_remote` boolean which indicates whether the
represented visit happened locally or remotely. ([#4810](https://github.com/mozilla/application-services/pull/4810))
# v91.0.0 (_2022-01-31_)
## Nimbus FML
### What's New
- The Nimbus FML can now generate swift code for the feature manifest. ([#4780](https://github.com/mozilla/application-services/pull/4780))
- It can be invoked using:
```sh
$ nimbus-fml <FEATURE_MANIFEST_YAML> -o <OUTPUT_NAME> ios features
```
- You can check the support flags and options by running:
```sh
$ nimbus-fml ios --help
```
- The generated code exposes:
- a high level nimbus object, whose name is configurable using the `--classname` option. By default the object is `MyNimbus`.
- All the enums and objects defined in the manifest as idiomatic Swift code.
- Usage:
- To access a feature's value:
```swift
// MyNimbus is the class that holds all the features supported by Nimbus
// MyNimbus has an singleton instance, you can access it using the `shared` field:
let nimbus = MyNimbus.shared
// Then you can access the features using:
// MyNimbus.features.<featureNameCamelCase>.value(), for example:
let feature = nimbus.features.homepage.value()
```
- To access a field in the feature:
```swift
// feature.<propertyNameCamelCase>, for example:
assert(feature.sectionsEnabled[HomeScreenSection.topSites] == true)
```
### ⚠️ Breaking Changes ⚠️
- **Android only**: Accessing drawables has changed to give access to the resource identifier. ([#4801](https://github.com/mozilla/application-services/pull/4801))
- Migration path to the old behaviour is:
```kotlin
let drawable: Drawable = MyNimbus.features.exampleFeature.demoDrawable
```
becomes:
```kotlin
let drawable: Drawable = MyNimbus.features.exampleFeature.demoDrawable.resource
```
## General iOS
### What's changed
- Moved `SwiftKeychainWrapper` from an external Swift Package to be bundled with FxA. This is due to issues Firefox iOS had with their dependency tree. ([#4797](https://github.com/mozilla/application-services/pull/4797))
- Exposed all crates as targets for the XCFramework. ([#4797](https://github.com/mozilla/application-services/pull/4797))
# v90.0.1 (_2022-01-24_)
## Places
- Fixed an issue with previously consumed errors for invalid URLs were propagating to consumers and causing a crash
- Changed `bookmarks_get_all_with_url` and `accept_result` to accept a string instead of url
# v90.0.0 (_2022-01-20_)
## Places
### ⚠️ Breaking Changes ⚠️
- Places has been completely UniFFI-ed
# v89.0.0 (_2022-01-20_)
## Supported Xcode Versions
- Reverting the supported Xcode version from 13.2.1 to 13.1.0 to circumvent the issues with Swift Package Manager in Xcode 13.2.1. ([#4787](https://github.com/mozilla/application-services/pull/4787))
## Nimbusβ˜οΈπŸ”¬πŸ”­
### What's New
- Add `Text` and `Image` support for the FML to access bundled resources ([#4784](https://github.com/mozilla/application-services/pull/4784)).
### Breaking Change
- The `NimbusInterface` now exposes a `context: Context` property.
# v88.0.0 (_2022-01-19_)
## Nimbusβ˜οΈπŸ”¬πŸ”­
### What's Changed
- The SDK is now tolerant to legacy experiment recipes that have both `feature` and `features` in their branches ([SDK-1989](https://github.com/mozilla/application-services/pull/4777))
## General
### ⚠️ Breaking Changes ⚠️
- The bundled version of Glean has been updated to v43.0.2.
See [the Glean Changelog](https://github.com/mozilla/glean/blob/v43.0.2/CHANGELOG.md) for full details.
BREAKING CHANGE: Pass build info into initialize, which contains the build date.
A suitable instance is generated by `glean_parser` in `GleanMetrics.GleanBuild.info`.
# v87.3.0 (_2022-01-11_)
## Supported Xcode Versions
- As of Jan 2022, support for Xcode version 13.2.1 is upcoming. After the associated PR is merged AS side and a release is cut, Fx-iOS will update on their side to fully support this Xcode version. See Fx-iOS's Wiki for details.
## viaduct
### What's New
- Add support for PATCH methods. ([#4751](https://github.com/mozilla/application-services/pull/4751))
## Nimbus
### What's new
- The Nimbus SDK now support application version targeting, where experiment creators can set `app_version|versionCompare({VERSION}) >= 0` and the experiments will only target users running `VERSION` or higher. ([#4752](https://github.com/mozilla/application-services/pull/4752))
- The `versionCompare` transform will return a positive number if `app_version` is greater than
`VERSION`, a negative number if `app_version` is less than `VERSION` and zero if they are equal
- `VERSION` must be passed in as a string, for example: `app_version|versionCompare('95.!') >= 0` will target users who are on any version starting with `95` or above (`95.0`, `95.1`, `95.2.3-beta`, `96` etc..)
# v87.2.0 (_2021-12-15_)
### ✨✨ What's New ✨✨
#### β›…οΈπŸ”­πŸ”¬ Nimbus
- Initial release of the Nimbus Feature Manifest Language tool (`nimbus-fml`).
- This is a significant upgrade to the Variables API, adding code-generation to Kotlin and Experimenter compatible manifest JSON.
- [RFC for language specification](https://github.com/mozilla/experimenter-docs/pull/156).
- This is the first release it is made available to client app's build processes.
- [Build on CI](https://github.com/mozilla/application-services/pull/4701) ready for application build processes to download.
# v87.1.0 (_2021-12-02_)
## Logins
### What's changed
- The `update()` and `add_or_update()` methods will log rather than return an error when trying to update a duplicate login (#4648)
## Logins, Places, SyncManager
### What's Changed
- These packages all use `parking_lot::Mutex` instead of `std::Mutex`, meaning we should no
longer see errors about mutexes being poisoned.
## Push
### What's fixed
- Fixes a bug where the subscriptions would fail because the server didn't return the `uaid`, this seems to happen only when the client sends request that include the `uaid`.([#4697](https://github.com/mozilla/application-services/pull/4697))
# General
- We now use xcode 13.1 to generate our iOS build artifacts. ([#4692](https://github.com/mozilla/application-services/pull/4692))
# v87.0.0 (_2021-11-17_)
## Push
### What's changed
- Push internally no longer uses the `error_support` dependency to simplify the code. It now directly defines exactly one error enum and exposes that to `uniffi`. This should have no implication to the consumer code ([#4650](https://github.com/mozilla/application-services/pull/4650))
## Places
### ⚠️ Breaking Changes ⚠️
- Switched sync manager integration to use `registerWithSyncManager()` like the other components ([#4627](https://github.com/mozilla/application-services/pull/4627))
## SyncManager
### ⚠️ Breaking Changes ⚠️
- Updated SyncManager to use UniFFI:
- SyncManager is now a class that gets instatiated rather than a singleton
- Added more SyncManagerException subclasses
- SyncParams.engines is now a SyncEngineSelection enum.
SyncEngineSelection's variants are All, or Some(engine_list). This
replaces the old code which used null to signify all engines.
- SyncResult.telemetry was replaced with SyncResult.telemetryJson.
- There were a handful of naming changes:
- SyncAuthInfo.tokenserverURL -> SyncAuthInfo.tokenserverUrl
- DeviceSettings.type -> DeviceSettings.kind
# v86.2.0 (_2021-11-02_)
## Push
### What's Changed
- We've changed the database schema to avoid confusion about the state of subscriptions and
in particular, avoid `SQL: UNIQUE constraint failed: push_record.channel_id` errors
technically a breaking change as a dictionary described in the UDL changed, but in practice,
none of our consumers used it, so we are not declaring it as breaking in this context.
## Logins
### What's New
- Added support for recording telemetry when the logins encryption key needs to be regenerated.
# v86.1.0 (_2021-10-27_)
## β›…οΈπŸ”¬πŸ”­ Nimbus
### What's New
- Rollouts: allows winning branch promotion and targeting rollouts of features. [#4567](https://github.com/mozilla/application-services/pull/4567).
- for both Android and iOS.
### What's fixed
- Fixed a bug in iOS where the installation date would be set to start of EPOCH ([#4597](https://github.com/mozilla/application-services/pull/4597))
- Fixed a bug in Android where we were missing disqualification events after a global opt-out ([#4606](https://github.com/mozilla/application-services/pull/4606))
## Push
- We've changed how the push database is opened, which should mean we now automatically handle
some kinds of database corruption.
## General
### What's changed
- The bundled version of Glean has been updated to v42.0.1.
See [the Glean Changelog](https://github.com/mozilla/glean/blob/v42.0.1/CHANGELOG.md) for full details.
(Note there is a breaking change in Rust, but that doesn't impact consumers of Application Services)
# v86.0.1 (_2021-10-28_)
## Logins
### What's Changed
- Downgraded the log level of some logs, so now they should not show up in Sentry.
# v86.0.0 (_2021-10-13_)
## Logins
### ⚠️ Breaking Changes ⚠️
- Rework logins to no longer use sqlcipher and instead use plain sqlite. This is a major change
with a massive impact on all consumers of this component, all of whom are already aware of
this change and have PRs in-progress.
# v85.4.2 (_2021-10-20_)
## Nimbus
### What's fixed
- Fixed a bug in iOS where the installation date would be set to start of EPOCH ([#4597](https://github.com/mozilla/application-services/pull/4597))
# v85.4.1 (_2021-10-08_)
## Logins
- Metrics for the logins sqlcipher migration are included to help "bootstrap"
the metrics ready for the migration.
# v85.4.0 (_2021-10-05_)
## Sync
### What's Changed
- Clients engine now checks for tombstones and any deserialisation errors when receiving a client record, and ignores
it if either are present ([#4504](https://github.com/mozilla/application-services/pull/4504))
## Nimbus
### What's changed
- The DTO changed to remove the `probeSets` and `enabled` fields that were previously unused. ([#4482](https://github.com/mozilla/application-services/pull/4482))
- Nimbus will retry enrollment if it previously errored out on a previous enrollment.
# v85.3.0 (_2021-09-30_)
## Nimbus
### What's new
- Nimbus can now target on `is_already_enrolled`. Which is true only if the user is already enrolled in experiment. ([#4490](https://github.com/mozilla/application-services/pull/4490))
- Nimbus can now target on `days_since_install` and `days_since_update`. Which reflect the days since the user installed the application and the days since the user last updated the application. ([#4491](https://github.com/mozilla/application-services/pull/4491))
- Android only: the observer method `onExperimentsApplied()` is now called every time `applyPendingExperiments()` is called. This is to bring it in line with iOS.
# v85.2.0 (_2021-09-28_)
## Places
### What's New
- Added Swift bindings for the following History Metadata APIs: `getHighlights` and `deleteHistoryMetadata`.
# v85.1.0 (_2021-09-27_)
## General
### What's Changed
- Rust toolchain has been bumped to 1.55 and minimum version bumped to 1.53 to comply with our [Rust Policy](https://github.com/mozilla/application-services/blob/main/docs/rust-versions.md#application-services-rust-version-policy)
- Xcode has been updated to version 13
- application-services noq uses the new build system by default
## Nimbus
### What's Changed
- 🐞🍏 Bugfix, iOS only β€” Increased visibility for `Dictionary` extensions when working with `FeatureVariables` and `enums`.
# v85.0.0 (_2021-09-22_)
## Places, Autofill, Webext-Storage
### What's Changed
- Databases which are detected as being corrupt as they are opened will be deleted and re-created.
## Nimbus
### What's New
- [#4455][1]: For both iOS and Android: extra methods on `Variables` to support orderable items:
- `getEnum` to coerce strings into Enums.
- `get*List`, `get*Map` to get lists and maps of all types.
- Dictionary/Map extensions to map string keys to enum keys, and string values to enum values.
- Nimbus now supports multiple features on each branch. This was added with backward compatibility to ensure support for both schemas. ([#4452](https://github.com/mozilla/application-services/pull/4452))
### ⚠️ Breaking Changes ⚠️
- [#4455][1]: Android only: method `Variables.getVariables(key, transform)`, `transform` changes type
from `(Variables) -> T` to `(Variables) -> T?`.
# v84.0.0 (_2021-09-13_)
## Places
### ⚠️ Breaking Changes ⚠️
- `previewImageUrl` property was added to `HistoryMetadata` ([#4448](https://github.com/mozilla/application-services/pull/4448))
### What's changed
- `previewImageUrl` was added to `VisitObservation`, allowing clients to make observations about the 'hero' image of the webpage ([#4448](https://github.com/mozilla/application-services/pull/4448))
## Push
### ⚠️ Breaking Changes ⚠️
- The push component now uses `uniffi`! Here are the Kotlin breaking changes related to that:
- `PushAPI` no longer exists, consumers should consumer `PushManager` directly
- `PushError` becomes `PushException`, and all specific errors are now `PushException` children, and can be retrieved using `PushException.{ExceptionName}`, for example `StorageError` becomes `PushException.StorageException`
- The `PushManager.decrypt` function now returns a `List<Byte>`, where it used to return `ByteArray`, the consumer can do the conversion using `.toByteArray()`
- All references to `channelID` become `channelId` (with a lowercase `d`)
# v83.0.0 (_2021-09-08_)
## Android
### ⚠️ Breaking Changes ⚠️
- Many error classes have been renamed from `FooError` or `FooErrorException` to just `FooException`,
to be more in keeping with Java/Kotlin idioms.
- This is due to UniFFi now replacing trailing 'Error' named classes to 'Exception'
## Autofill
### ⚠️ Breaking Changes ⚠️
- The `Error` enum is now called `AutofillError` (`AutofillException` in Kotlin) to avoid conflicts with builtin names.
## Push
### ⚠️ Breaking Changes ⚠️
- The `unsubscribeAll` API will now return nothing as opposed to a boolean. The boolean was misleading as it only ever returned true.
errors can be caught using exceptions. ([#4418](https://github.com/mozilla/application-services/pull/4418))
### What's Changed
- The push `unsubscribe` API will no longer accept a null `channel_id` value, a valid `channel_id` must be presented, otherwise rust will panic and an error will be thrown to android.
note that this is not a breaking change, since our hand-written Kotlin code already ensures that the function can only be called with a valid, non-empty, non-nullable string. ([#4402](https://github.com/mozilla/application-services/pull/4402))
## Nimbus
### What's Changed
- `DatabaseNotReady` exceptions are no longer reported to the error reporter on either Android or iOS. [#4438](https://github.com/mozilla/application-services/pull/4438)
- `NimbusErrorException` has been renamed `NimbusException`. This internal API, so is not a breaking change.
# v82.3.0 (_2021-08-30_)
### What's New
- Changed how shared libraries are loaded to avoid an issue when both uniffi
and `Helpers.kt` wants to load the same library ([#4412](https://github.com/mozilla/application-services/pull/4412))
# v82.2.0 (_2021-08-19_)
## Push
### What's changed
- The push component will now attempt to auto-recover from the server losing its UAID ([#4347](https://github.com/mozilla/application-services/pull/4347))
- The push component will return a new kotlin Error `UAIDNotRecognizedError` in cases where auto-recovering isn't possible (when subscribing)
- Two other new errors were defined that were used to be reported under a generic error:
- `JSONDeserializeError` for errors in deserialization
- `RequestError` for errors in sending a network request
## Nimbus
### What's changed
- Nimbus on iOS will now post a notification when it's done fetching experiments, to match what it does when applying experiments. ([#4378](https://github.com/mozilla/application-services/pull/4378))
# v82.1.0 (_2021-07-30_)
## Places
### What's New
- The Swift bindings for history metadata enums and structs now have
public initializers, allowing them to be used properly from Swift.
# v82.0.0 (_2021-07-29_)
## General
### ⚠️ Breaking Changes ⚠️
- The bundled version of Glean has been updated to v39.0.4, which includes a new API
for recording extra event fields that have an explicit type..
### What's New
- Added content signature and chain of trust verification features in `rc_crypto`,
and updated NSS to version 3.66.
## Nimbus
### What's Changed
- The Nimbus API now accepts application specific context as a part of its `appSettings`.
The consumers get to define this context for targeting purposes. This allows different consumers
to target on different fields without the SDK having to acknowledge all the fields.
# v81.0.1 (_2021-07-19_)
## Tabs
### ⚠️ Breaking Changes ⚠️
Note: Though this is technically a breaking change, we do not expect any consumers to have upgraded to v81. Since this was a bug that was introduced in v81 we're treating it as a bugfix.
- Tab struct member last_used is now a i64
# v81.0.0 (_2021-07-13_)
## Tabs
### ⚠️ Breaking Changes ⚠️
- Tabs has been Uniffi-ed! ([#4192](https://github.com/mozilla/application-services/pull/4192))
- Manual calling of sync() is removed
- registerWithSyncManager() should be used instead
- Tab struct member lastUsed is now a U64
## Nimbus
### What's changed
- Fixed a bug where opt-in enrollments in experiments were not preserved when the application is restarted ([#4324](https://github.com/mozilla/application-services/pull/4324))
- The nimbus component now specifies the version of the server's api - currently V1. That was done to avoid redirects. ([#4319](https://github.com/mozilla/application-services/pull/4319))
## Push
### What's changed
- Fixed a bug where we don't delete a client's UAID locally when it's deleted on the server ([#4325](https://github.com/mozilla/application-services/pull/4325))
# v80.0.1 (_2021-07-06_)
## General
### What's Changed
- Updated CircleCI xcode version to 12.5.1
# v80.0.0 (_2021-06-24_)
## fxa-client
### ⚠️ Breaking Changes ⚠️
- The old StateV1 persisted state schema is now removed. ([#4218](https://github.com/mozilla/application-services/pull/4218))
Users on very old versions of this component will no longer be able to cleanly update to this version. Instead, the consumer code
will recieve an error indicating that the schema was not correctly formated.
## Nimbus
### What's Changed
- Nimbus SDK now supports different branches having different Feature Configs ([#4213](https://github.com/mozilla/application-services/pull/4213))
## Other
- `./libs/build-all.sh` now displays a more helpful error message when a file fails checksum integrity test.
# v79.0.2 (_2021-06-23_)
- Removed hard crash for `migrateToPlaintextHeader` and allowed error to propagate for Logins
# v79.0.1 (_2021-06-15_)
## Logins
- Fixed a bug on iOS where `getDbSaltForKey` would incorrectly trigger a fatal error
instead of propagating errors to the caller.
## Dependencies
- The version of UniFFI used to generate Rust component bindings was updated to v0.12.0.
# v79.0.0 (_2021-06-09_)
## Logins
### ⚠️ Breaking changes ⚠️
Logins now Uniffi-ed! While this is a very large change internally, the externally visible changes are:
- The name and types of exceptions have changed - the base class for errors is LoginsStorageErrorException.
- The struct `ServerPassword` (Android) and `LoginRecord` (iOS) is now named `Login` with the formSubmitURL field now formSubmitUrl
## [viaduct-reqwest]
### What's Changed
- Update viaduct-reqwest to use reqwest 0.11. ([#4146](https://github.com/mozilla/application-services/pull/4146))
# v78.0.0 (_2021-06-01_)
## [places]
### ⚠️ Breaking Changes ⚠️
- History Metadata API shape changed to follow an observation pattern, similar to what is present for History.
Shape of objects and related DB schema changed as well. See ([#4123](https://github.com/mozilla/application-services/pull/4123))
# v77.0.2 (_2021-05-31_)
## Autofill
- Fixed a failing assertion when handling local dupes during a sync (#4154)
# v77.0.1 (_2021-05-24_)
## CI-only to force iOS artifact build, 77.0.0 is not good for iOS
- add --force flag when installing swift-protobuf via homebrew (#4137)
# v77.0.0 (_2021-05-24_)
## Logins
- Split the DB from the sync engine (#4129)
- Rename LoginStore to LoginsSyncEngine (#4124)
## Nimbus β˜οΈπŸ”¬
### What's New
- Both Android and iOS gain a `nimbus.getVariables(featureId: String)` and a new wrapper around JSON data coming straight from Remote Settings.
- Application features can only have a maximum of one experiment running at a time.
- Enable consuming applications to change the server collection being used. (#4076)
### What's Changed
- Add manual feature exposure recording (#4120)
- Android and iOS `Branch` objects no longer have access to a `FeatureConfig` object.
- Localized strings and images are provided by the app, but usable from nimbus. (#4133)
### ⚠️ Breaking changes ⚠️
- Migrate the experiment database from version 1 to version 2 on first run .(#4078)
- Various kinds of incorrectly specified feature and featureId
related fields will be detected, and any related experiments & enrollments
will be discarded.
- Experiments & enrollments will also be discarded if they
are missing other required fields (eg schemaVersion).
- If there is an error
during the database upgrade, the database will be wiped, since losing
existing enrollments is still less bad than having the database in an unknown
inconsistent state.
# v76.0.1 (_2021-05-18_)
## Autofill
Fixed an error migrating from version 1 to version 2 of the database.
# v76.0.0 (_2021-05-12_)
## History Metadata Storage
- Introduced a new experimental metadata storage API, part of libplaces.
## Sync Manager
- Removed support for the wipeAll command (#4006)
## Autofill
### What's Changed
- Added support to scrub encrypted data to handle lost/corrupted client keys.
Scrubbed data will be replaced with remote data on the next sync.
## Nimbus
- Added bucket and collections to `NimbusServerSettings`, with default values.
- Added `getAvailableExperiments()` method exposed by `NimbusClient`.
- At most one local experiment will be enrolled for any given `featureId`, and
to support this, the database can now have a NotEnrolledReason::FeatureConflict value.
### ⚠️ Breaking changes ⚠️
- Moved the `Nimbus` class and its test class from Android Components into this repository. Existing integrations should pass a delegate in to provide Nimbus with a thread to do I/O and networking on, and an Obsevrer.
Fixed in the complementary [android-components#10144](https://github.com/mozilla-mobile/android-components/pull/10144)
# v75.2.0 (_2021-04-20_)
## Autofill
### What's Changed
- `get_address()` and `get_credit_card()` now throw a NoSuchRecord error instead of SqlError when the GUID is not found
- The main credit-cards table is dropped and recreated to ensure already existing databases will continue to work.
# v75.1.0 (_2021-04-13_)
## Nimbus SDK
### What's changed
- add a `get_available_experiments()` method to enable QA tooling. This should not be used for user-facing user-interfaces.
# v75.0.1 (_2021-04-06_)
## Nimbus SDK
### What's changed
- Make `channel` targeting comparision case-insensitive. ([#4009](https://github.com/mozilla/application-services/pull/4009))
# v75.0.0 (_2021-03-29_)
# v74.0.1 (_2021-03-19_)
## General
- Revert a Rust toolchain config change that turned out to cause build issues in our release pipeline.
# v74.0.0 (_2021-03-18_)
## General
### What's Changed
- The bundled version of Glean has been updated to v36.0.0.
- The bundled version of Nimbus has been updated to v0.10.0.
## Nimbus SDK
### ⚠️ Breaking changes ⚠️
- The new Nimbus version 0.10.0 includes new required fields `app_name` and `channel` in the `AppContext` struct passed into `initialize`.
# v73.0.2 (_2021-03-16_)
* This is a deliberately empty release, designed to help test some downstream automation
that picks up new appservices releases.
# v73.0.1 (_2021-03-10_)
# Android
- The `-forUnitTest` build no longer includes code compiled for Windows, meaning that
it is no longer possible to run appservices Kotlin unit tests on Windows. We hope
this will be a temporary measure while we resolve some build issues.
# v73.0.0 (_2021-03-10_)
## General
- The bundled version of the Nimbus SDK has been updated to v0.9.0.
- The top-level Rust workspace now builds with Rust 1.50
- The top-level Rust workspace is now stapled to Rust 1.50, so all developers
will build with 1.50, as will the continuous integration for this repo.
## iOS
- The Nimbus SDK is now available as part of the `MozillaAppServices` Swift module.
## FxA Client
### ⚠️ Breaking changes ⚠️
- The Kotlin and Swift bindings are now generated automatically using UniFFI.
As a result many small details of the API surface have changed, such as some
classes changing names to be consistent between Rust, Kotlin and Swift.
# v72.1.0 (_2021-02-25_)
## General
### What's Changed
- This release fixes an "unsatisfied link error" problem with autofill and nimbus,
stemming from a misconfiguration in the Android build setup.
# v72.0.0 (_2021-02-25_)
## General
### What's Changed
- The bundled version of the Nimbus SDK has been updated to v0.8.2.
## Autofill
### ⚠️ Breaking changes ⚠️
- The autofill Kotlin package as been renamed from `org.mozilla.appservices.autofill`
to `mozilla.appservices.autofill`, for consistency with other components.
# v71.0.0 (_2021-02-18_)
## General
### What's Changed
- The bundled version of the Nimbus SDK has been updated to v0.8.1.
# v70.0.0 (_2021-02-04_)
## General
### What's Changed
- The bundled version of Glean has been updated to v34.0.0.
- The bundled version of the Nimbus SDK has been updated to v0.7.2.
## Autofill
### ⚠️ Breaking changes ⚠️
- The `NewCreditCardFields` record is now called `UpdatableCreditCardFields`.
- The `NewAddressFields` record is now called `UpdatableAddressFields`.
### What's Changed
- The `CreditCard` and `Address` records now exposes additional metadata around timestampes.
- Infrastructure for syncing incoming address records has been added.
# v69.0.0 (_2021-01-28_)
## General
### What's Changed
- Updated nimbus-sdk to 0.7.1
- Updated Android Components to 71.0.0
## iOS
### What's Changed
- The `MozillaAppServices.framework` artifact now contains a dynamically-linked library
rather than a static library.
# v68.1.0 (_2020-12-17_)
## General
### What's Changed
- The bundled version of Nimbus SDK has been updated to v0.6.4.
- The internal traits used by `sync15` have been renamed for consistency and clarity
(and the README has been updated with docs to help explain them).
- The bundled version of Glean has been updated to v33.10.3.
# v68.0.0 (_2020-12-08_)
## General
### ⚠️ Breaking changes ⚠️
- The bundled version of Nimbus SDK has been updated to v0.6.3, which includes
the following breaking changes:
- Removed `NimbusClient.resetEnrollment`.
- `NimbusClient.{updateExperiments, optInWithBranch, optOut, setGlobalUserParticipation}` now return a list of telemetry events.
Consumers should forward these events to their telemetry system (e.g. via Glean).
- Removed implicit fetch of experiments on first use of the database. Consumers now must
call update_experiments explicitly in order to fetch experiments from the Remote Settings
server.
### What's Changed
- The bundled version of Glean has been updated to v33.5.0.
- Various third-party dependencies have been updated to their latest versions.
# v67.2.0 (_2020-12-10_)
## Nimbus SDK
### What's Changed
- The bundled version of Nimbus SDK has been updated to v0.5.2.
# v67.1.0 (_2020-11-18_)
### What's Changed
- The bundled version of Glean has been updated to v33.4.0.
## Autofill
### What's New
The autofill component has a first cut at Kotlin bindings and is now bundled in
the full megazord.
# v67.0.0 (_2020-11-10_)
## General
### ⚠️ Breaking changes ⚠️
- The custom "Lockbox Megazord" package (`org.mozilla.appservices:lockbox-megazord`) has been removed.
Existing consumers of this package who wish to update to the latest release of application-services
should migrate to using the default `appservices:full-megazord` package, or contact the development
team to discuss an alternate approach.
### What's Changed
- The version of Rust used to compile our components has been pinned to v1.43.0 in order to match
the version of Rust used in mozilla-central. Changes that do not compile under this version of
Rust will not be accepted.
## iOS
### What's Changed
- The bundled version of Glean has been updated to v33.1.2.
## Android
### What's Changed
- This release comes with a nontrivial increase in the compiled code size of the
`org.mozilla.appservices:full-megazord` package, adding approximately 1M per platform
thanks to the addition of the Nimbus SDK component.
- Several core gradle dependencies have been updated, including gradle itself (now v6.5)
and the android gradle plugin (now v4.0.1).
## Nimbus SDK
### What's New
- The first version of the Nimbus Experimentation SDK is now available, via the
`org.mozilla.appservices:nimbus` package. More details can be found in the
## FxA Client
### What's Fixed
- We no longer discard the final path component from self-hosted sync tokenserver URLs.
## Autofill
### What's Changed
- We added the `touch_address` and `touch_credit_card` store functions and refactored the component.
## Push
### What's Changed
- Attempts to update the device push token are now rate-limited.
## WebExtension Storage
### What's Fixed
- Syncing of incoming tombstone records has been fixed; previously the presence
of an incoming tombstone could cause the sync to fail.
# v66.0.0 (_2020-10-28_)
### Breaking changes
- Android: Updated the `getTopFrecentSiteInfos` API to specify a frecency threshold parameter for the
fetched top frecent sites in `PlacesReaderConnection`. ([#3635](https://github.com/mozilla/application-services/issues/3635))
# v65.0.0 (_2020-10-19_)
## Android
### What's changed ###
- Upgraded the JNA dependency version to 5.6.0. ([#3647](https://github.com/mozilla/application-services/pull/3647))
## Autofill
### What's changed ###
- Updated the autofill-utils example app to include API calls for addresses. ([#3605](https://github.com/mozilla/application-services/pull/3605))
- Added API calls for credit cards. ([#3615](https://github.com/mozilla/application-services/pull/3615))
# v64.0.0 (_2020-09-24_)
## iOS
### ⚠️ Breaking changes ⚠️
- The `MozillaAppServices.framework` is now built using Xcode 12, so consumers will need
update their own build accordingly.
### What's changed
- The bundled version of glean has been updated to v32.4.0.
()
## FxA Client
### What's changed
- Added a circuit-breaker to the `check_authorization_status` method.
In specific circumstances, it was in possible to trigger a failure-recovery infinite loop,
which will now error out after a certain now of retries.
## Autofill
### What's changed ###
- Added a basic API and database layer for the autofill component. ([#3582](https://github.com/mozilla/application-services/pull/3582))
## Places
### What's changed
- Removed the duplicate Timestamp logic from Places, which now exists in Support, and updated the references.
- Fixed a bug in bookmarks reconciliation that could lead to deleted items being resurrected
in some circumstances.
## Support Code
### What's new
- The `rc_crypto` crate now supports ECDSA P384-SHA384 signature verification.
# v63.0.0 (_2020-09-10_)
## iOS
### ⚠️ Breaking changes ⚠️
- The `MozillaAppServices.framework` build now includes Glean. Applications that were previously consuming Glean via
its standalone framework and using `import Glean` will instead need to `import MozillaAppServices`.
### What's changed ###
- The version of xcode used to build `MozillaAppServices.framework` has been updated to v11.7.
- When using a custom sync tokenserver URL, the `/1.0/sync/1.5` suffix will be stripped if present.
This should simplify setup for self-hosters who are accustomed to supplying the tokenserver URL
in this form on other platforms.
## Android
### What's changed ###
- `android-components` has been updated to 56.0.0 (previously 47.0.0) ([#3538](https://github.com/mozilla/application-services/pull/3538))
## Places
### What's fixed ###
- Fixed a bug where sync could ask places to recalculate the frecency of iitems that are not bookmarks,
which would fail and prevent the sync from completing.
### What's changed ###
- If the database somehow contains bookmarks with an invalid URL, they will now be ignored
on read; previously invalid URLs would trigger an error and crash.
## Push
### What's fixed ###
- Messages using the legacy `aesgcm` encryption method will how have padding bytes correctly stripped;
previously the padding bytes would be returned as part of the message and could cause message-parsing
errors in consuming code.
# v62.1.0 (_2020-08-21_)
## Extension Storage
### What's fixed ###
- Do not check total bytes quota on storage.sync.remote operations ([Bug 1656947](https://bugzilla.mozilla.org/1656947))
## FxA Client
### What's new ###
- Send-tab metrics are recorded. A new function, `fxa_gather_telemetry` on the
account object (exposed as `account.gatherTelemetry()` to Kotlin) which
returns a string of JSON.
This JSON might grow to support non-sendtab telemetry in the future, but in
this change it has:
- `commands_sent`, an array of objects, each with `flow_id` and `stream_id`
string values.
- `commands_received`, an array of objects, each with `flow_id`, `stream_id`
and `reason` string values.
## Places
### What's new ###
- Exclude download, redirects, reload, embed and framed link visit type from the
`get_top_frecent_site_infos` query.
# v62.0.0 (_2020-07-13_)
## FxA Client
### ⚠️ Breaking changes ⚠️
- Adds support for `entrypoint` in oauth flow APIs: consumers of `beginOAuthFlow` and `beginPairingFlow` (`beginAuthentication` and `beginPairingAuthentication` in ios) are now ***required*** to pass an `entrypoint` argument that would be used for metrics. This puts the `beginOAuthFlow` and `beginPairingFlow` APIs inline with other existing APIs, like `getManageAccountUrl`. ([#3265](https://github.com/mozilla/application-services/pull/3265))
- Changes the `authorizeOAuthCode` API to now accept an `AuthorizationParams` object instead of the individual parameters. The `AuthorizationParams` also includes optional `AuthorizationPKCEParams` that contain the `codeChallenge`, `codeChallengeMethod`. `AuthorizationParams` also includes an optional `keysJwk` for requesting keys ([#3264](https://github.com/mozilla/application-services/pull/3264))
### What's new ###
- Consumers can now optionally include parameters for metrics in `beginOAuthFlow` and `beginPairingFlow` (`beginAuthentication` and `beginPairingAuthentication` in ios). Those parameters can be passed in using a `MetricsParams` struct/class. `MetricsParams` is defined in both the Kotlin and Swift bindings. The parameters are the following ([#3328](https://github.com/mozilla/application-services/pull/3328)):
- flow_id
- flow_begin_time
- device_id
- utm_source
- utm_content
- utm_medium
- utm_term
- utm_campaign
- entrypoint_experiment
- entrypoint_variation
## Logins
### What's fixed ###
- Fixed a bug where attempting to edit a login with an empty `form_submit_url` would incorrectly
reject the entry as invalid ([#3331](https://github.com/mozilla/application-services/pull/3331)).
## Tabs
### What's new ###
- Tab records now have an explicit TTL set when storing on the server, to match the behaviour
of Firefox Desktop clients ([#3322](https://github.com/mozilla/application-services/pull/3322)).
# v61.0.12 (_2020-08-07_)
## General
- This release only exists to correct issues that occured when publishing a v61.0.11, which failed to produce an artifact because of a warning which occured during the build process. (It contains a small number of additional cherry-picked patches which correct these warnings).
# v61.0.11 (_2020-08-07_)
## FxA Client
### What's new ###
- Send-tab metrics are recorded. A new function, `fxa_gather_telemetry` on the
account object (exposed as `account.gatherTelemetry()` to Kotlin) which
returns a string of JSON.
This JSON might grow to support non-sendtab telemetry in the future, but in
this change it has:
- `commands_sent`, an array of objects, each with `flow_id` and `stream_id`
string values.
- `commands_received`, an array of objects, each with `flow_id`, `stream_id`
and `reason` string values.
# v61.0.10 (_2020-07-15_)
# General
- This release exists to correct an error with the publishing process that happened for v61.0.9. As a result, it's changelog is repeated below and is present in the link above.
## Logins
- Empty strings are now correctly handled in login validation. ([#3331](https://github.com/mozilla/application-services/pull/3331)).
# v61.0.9 (_2020-07-15_)
## Logins
- Empty strings are now correctly handled in login validation. ([#3331](https://github.com/mozilla/application-services/pull/3331)).
# v61.0.8 (_2020-07-15_)
## General
- The logins and places metrics have been renewed until early 2021. ([#3290](https://github.com/mozilla/application-services/pull/3290)).
# v61.0.7 (_2020-06-29_)
## General
- The default branch has been renamed from `master` to `main`
# v61.0.6 (_2020-06-24_)
## General
- Adds cargo aliases to download and use `asdev` ([#3218](https://github.com/mozilla/application-services/pull/3218))
## RustLog
- Network errors should come through as warnings and not errors. ([#3254](https://github.com/mozilla/application-services/issues/3254)).
# v61.0.5 (_2020-06-23_)
- No content release: we have switched to Taskgraph. ([#3168](https://github.com/mozilla/application-services/issues/3168))
# v61.0.4 (_2020-06-18_)
* Fix an issue where a node reassignment or signing out and signing back in
wouldn't clear the locally stored last sync time for engines
# v61.0.3 (_2020-06-17_)
## Tabs
- Fix an issue which we believe is causing numerous failures deserializing protobufs ([#3214](https://github.com/mozilla/application-services/issues/3214))
# v61.0.2 (_2020-06-16_)
## FxA Client
- Short circuit requests if server requested a backoff and time period has not passed. ([#3219](https://github.com/mozilla/application-services/pull/3195))
# v61.0.1 (_2020-06-16_)
## General
- Attempt to fix some build tooling issues with the previous release; no user-visible changes. ([#3245](https://github.com/mozilla/application-services/pull/3245))
# v61.0.0 (_2020-06-15_)
## General
- Remove the node.js integration tests helper and removes node from the circleci environment. ([#3187](https://github.com/mozilla/application-services/pull/3187))
- Put `backtrace` behind a cargo feature. ([#3213](https://github.com/mozilla/application-services/pull/3213))
- Move sqlite dependency down from rc_cryto to nss_sys. ([#3198](https://github.com/mozilla/application-services/pull/3198))
- Adds jwe encryption in scoped_keys. ([#3195](https://github.com/mozilla/application-services/pull/3195))
- Fix bug to correctly return the given defaults when the storageArea's `get()` method is used with an empty store ([bug 1645598](https://bugzilla.mozilla.org/show_bug.cgi?id=1645598)). ([#3236](https://github.com/mozilla/application-services/pull/3236))
- Fixed a sync bug where the application not providing the "persisted state" would mean the declined list was handled incorrectly ([#3205](https://github.com/mozilla/application-services/issues/3205))
## Android
- From now on the project uses the Android SDK manager side-by-side NDK. ([#3222](https://github.com/mozilla/application-services/pull/3222))
- Download the new NDK by running `./verify-android-environment.sh` in the `libs` directory.
- Alternatively, you can download the NDK in Android Studio by going in Tools > SDK Manager > SDK Tools > NDK (check Show Package Details) and check `21.3.6528147`.
- The `ANDROID_NDK_ROOT`, `ANDROID_NDK_HOME` environment variables (and the directory they point to) can be removed.
# v60.0.0 (_2020-06-01_)
## General
- Remove `failure` from the sync_tests and replace it with `anyhow`. ([#3188](https://github.com/mozilla/application-services/pull/3188))
- Adds an alias for generating protobuf files, you can now use `cargo regen-protobufs` to generate them. ([#3178](https://github.com/mozilla/application-services/pull/3178))
- Replaced `failure` with `anyhow` and `thiserror`. ([#3132](https://github.com/mozilla/application-services/pull/3132))
- Android: Added `getTopFrecentSiteInfos` API to retrieve a list of the top frecent sites in `PlacesReaderConnection`. ([#2163](https://github.com/mozilla/application-services/issues/2163))
## FxA Client
### What's new
- Additional special case for China FxA in `getPairingAuthorityURL`. ([#3160](https://github.com/mozilla/application-services/pull/3160))
- Silently ignore push messages for unrecognized commands, rather than reporting an error. ([#3177](https://github.com/mozilla/application-services/pull/3177))
# v0.59.1 (_2021-01-26_)
## General
- Our iOS framework binaries are now built using XCode 11.7. ([#3833](https://github.com/mozilla/application-services/issues/3833))
# v0.59.0 (_2020-05-08_)
## Viaduct
### Breaking changes
- The `include_cookies` setting is not supported anymore (was `false` by default). ([#3096](https://github.com/mozilla/application-services/pull/3096))
## FxA Client
- Added option boolean argument `ignoreCache` to ignore caching for `getDevices`. ([#3066](https://github.com/mozilla/application-services/pull/3066))
### ⚠️ Breaking changes ⚠️
- iOS: Renamed `fetchDevices(forceRefresh)` to `getDevices(ignoreCache)` to establish parity with Android. ([#3066](https://github.com/mozilla/application-services/pull/3066))
- iOS: Renamed argument of `fetchProfile` from `forceRefresh` to `ignoreCache`. ([#3066](https://github.com/mozilla/application-services/pull/3066))
# v0.58.3 (_2020-05-06_)
# v0.58.2 (_2020-04-29_)
## General
- Android: An Android 5 and 6 bug related to protobufs is now fixed. ([#3054](https://github.com/mozilla/application-services/pull/3054))
# v0.58.1 (_2020-04-24_)
## General
- Android: A bug in the protobuf library that made the previous version unusable has been fixed. ([#3033](https://github.com/mozilla/application-services/pull/3033))
# v0.58.0 (_2020-04-22_)
## General
- Android: Gradle wrapper version upgraded to `6.3`, Android Gradle Plugin version upgraded to `3.6.0`. ([#2917](https://github.com/mozilla/application-services/pull/2917))
- Android: Upgraded NDK from r20 to r21. ([#2985](https://github.com/mozilla/application-services/pull/2985))
- iOS: Xcode version changed to 11.4.1 from 11.4.0. ([#2996](https://github.com/mozilla/application-services/pull/2996))
## FxA Client
- iOS: `refreshProfile` now takes an optional boolean argument `forceRefresh` to force a network request to be made in every case ([#3000](https://github.com/mozilla/application-services/pull/3000))
- Added an optional `ttl` parameter to `getAccessToken` to limit the lifetime of the token. ([#2896](https://github.com/mozilla/application-services/pull/2896))
# v0.57.0 (_2020-03-31_)
## General
### ⚠️ Breaking changes ⚠️
- iOS: The `reqwest` network stack will not be initialized automatically anymore.
Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before using the framework. ([#2880](https://github.com/mozilla/application-services/pull/2880))
## Logins
### What's New
- A new function was added to return a list of duplicate logins, ignoring
# v0.56.0 (_2020-03-26_)
## General
### What's changed
- iOS: Xcode version changed to 11.4.0 from 11.3.1.
## Logins
### ⚠️ Breaking changes ⚠️
- Android: `MemoryLoginsStorage` has been removed. Use DatabaseLoginsStorage(":memory:") instead.
## Libs
### What's changed
- The project now builds with version 4.3.0 of SQLCipher instead of a fork
of version 4.2.0. Newest version has NSS crypto backend. ([#2822](https://github.com/mozilla/application-services/pull/2822)).
## FxA Client
### Breaking changes
- `Server.dev` is now `Server.stage` to reflect better the FxA server instance it points to. ([#2830](https://github.com/mozilla/application-services/pull/2830)).
# v0.55.3 (_2020-04-16_)
## Places
- Fix table name for history migration
# v0.55.2 (_2020-04-14_)
## Places
- Android: Fennec's bookmarks db version supported by the migrations is now the same as that of history
# v0.55.1 (_2020-04-14_)
## Places
- Android: Fennec migrations for history and bookmarks now support Fennec database versions 34 and 23, respectively. ([#2949](https://github.com/mozilla/application-services/pull/2949))