- [fixed] Add conditional
Sendable
conformance soServerTimestamp<T>
isSendable
ifT
isSendable
. (#14042)
- [changed] Prepare Firestore cache to support session token.
- [changed] Improve efficiency of memory persistence when processing a large number of writes. (#13572)
- [fixed] Marked all public classes with only readonly properties as
Sendable
to address Swift Concurrency Check warning. (#12666)
- [feature] Add
VectorValue
type support.
- [removed] Breaking change: The deprecated
FirebaseFirestoreSwift
module has been removed. See https://firebase.google.com/docs/ios/swift-migration for migration instructions. - [changed] Breaking change: LRU Garbage Collector is now the default GC for memory cache, eager GC is now opt-in (via MemoryCacheSettings(garbageCollectorSettings: MemoryEagerGCSettings())) instead of the default one.
- [changed] Move
Timestamp
class intoFirebaseCore
.FirebaseFirestore.Timestamp
was changed toFirebaseCore.Timestamp
. (#13221) - [changed] Update gRPC dependency to 1.65.
- [fixed] Allow blob of data with zero length. (#11773, #12620)
- [changed] Passing a non-nil value to the
@DocumentID
property wrapper's setter no longer logs a warning since it discouraged valid patterns, e.g., updating the document ID after the document is created in Firestore. (#12756)
- [feature] Enable queries with range & inequality filters on multiple fields. (#12416)
- [feature] Enable snapshot listener option to retrieve data from local cache only. (#12370)
- [fixed] Update gRPC dependency to 1.62.* (#12098, #12021)
- [feature] Firestore's binary Swift Package Manager distribution uses XCFrameworks with code signatures (#12238).
- [fixed] Fix the flaky offline behaviour when using
arrayRemove
onMap
object. (#12378)
- Add an error when trying to build Firestore's binary SPM distribution for visionOS (#12279). See Firestore's 10.12.0 release note for a supported workaround.
- [fixed] Made an optimization to the synchronization logic for resumed queries to only re-download locally-cached documents that are known to be out-of-sync. (#12044)
- [fixed] Fix Firestore build for visionOS on Xcode 15.1. (#12023)
- [feature] Add support for sum and average aggregate queries.
- [feature] The
FirebaseFirestore
module now contains Firebase Firestore's Swift-only APIs that were previously only available via theFirebaseFirestoreSwift
extension SDK. See theFirebaseFirestoreSwift
release note from this release for more details.
- [fixed] Fixed an issue where Firestore's binary SwiftPM distribution would not link properly when building a target for testing. This issue affected Xcode 15 Beta 5 and later (#11656).
- [fixed] Downgrade the CocoaPods grpc dependency back to 1.44.0 (from 1.50.1) to fix a crash on iOS 12 devices that was introduced in the Firebase Apple SDK 10.10.0 when the grpc dependency was upgraded (#11509).
- [feature] Add the option to allow the SDK to create cache indexes automatically to improve query execution locally. (#11596)
- [feature] Implemented an optimization in the local cache synchronization logic that reduces the number of billed document reads when documents were deleted on the server while the client was not actively listening to the query (e.g. while the client was offline). (#11457)
- [added] Developers using Firestore on visionOS must use a source
Firestore distribution rather than the default binary distribution. To do
this, quit Xcode and open the desired project from the command line
with the
FIREBASE_SOURCE_FIRESTORE
environment variable:To go back to using the binary distribution of Firestore, quit Xcode and open Xcode like normal, without the environment variable. (#11492)open --env FIREBASE_SOURCE_FIRESTORE /path/to/project.xcodeproj
- [feature] Expose MultiDb API for public preview. (#10465)
- [fixed] Fixed a compilation warning related to integer casting. (#11332)
- [fixed] Allow initializing FIRLocalCacheSettings with unlimited size. (#11405)
- [feature] Add new cache config API to customize SDK cache settings.
- [feature] Add LRU garbage collector as an option to memory cache.
- [feature] Change Firestore's Swift Package Manager distribution from source to binary to reduce the time it takes to add the Firebase package and to build the Firestore SDK (#6564).
- [fixed] Fixed SSL symbol collision issue affecting SwiftPM users. (#6869)
- [feature] Add support for disjunctions in queries (
OR
queries). - [fixed] Fixed stack overflow caused by deeply nested server timestamps.
- [fixed] Fix a potential high memory usage issue.
- [fixed] Add @discardableResult to addDocument API for easy handling unused return value. (#10640)
- [fixed] Fix an issue that stops some performance optimization being applied (#10579).
- [feature] Add MultiDb support.
- [fixed] Fix App crashed when there are nested data structures inside IN Filter (#10507).
- [fixed] Fix FAILED_PRECONDITION when writing to a deleted document in a transaction (#10431).
- [fixed] Fixed data race in credentials provider (#10393).
- [fixed] Fix Firestore failing to raise initial snapshot from empty local cache result (#10437).
- [feature] Added
Query.count()
, which fetches the number of documents in the result set without actually downloading the documents (#10246). - [fixed] Fixed compiler warning about
@param comparator
(#10226).
- [added] Expose client side indexing feature with
FIRFirestore.setIndexConfigurationFromJSON
andFIRFirestore.setIndexConfigurationFromStream
(#10090). - [fixed] Fixed high CPU usage whenever Firestore was in use (#10168).
- [fixed] Fixed an intermittent crash if
ListenerRegistration::Remove()
was invoked concurrently (#10065). - [fixed] Fixed a crash if multiple large write batches with overlapping documents were executed where at least one batch performed a delete operation (#9965).
- [fixed] Fixed a crash during app start (#9985, #10018).
- [feature] Added
TransactionOptions
to control how many times a transaction will retry commits before failing (#9838).
- [fixed] Fixed CMake build errors when building with Xcode 13.3.1 (#9702).
- [fixed] Breaking change: Fixed an issue where returning
nil
from the update closure when running a transaction caused a crash in Swift by removing the auto-generatedasync throw
ing method from theFirebaseFirestore
module. In order to use theasync throw
ing transaction method, add theFirebaseFirestoreSwift
module dependency to your build target (#9426).
- [changed] Potentially fixed a crash during application exit caused by an assertion about ordering documents by missing fields (#9258).
- [changed] Add more details to the assertion failure in Query::Comparator() to help with future debugging (#9258).
- [fixed] Fixed compiler warnings in
local_serializer.cc
about "implicit conversion loses integer precision" that were introduced in 8.13.0 (#9430).
- [changed] Add more details to the assertion failure in OrderBy::Compare() to help with future debugging (#9258).
- [fixed] Fixed an issue that can result in incomplete Query snapshots when an app is backgrounded during query execution.
- [fixed] Fixed a bug in the AppCheck integration that caused the SDK to respond to unrelated notifications (#8895).
- [added] Added support for Firebase AppCheck.
- [fixed] Fix a crash if
[FIRTransaction getDocument]
was called after[FIRFirestore terminateWithCompletion]
(#8760). - [fixed] Fixed a performance issue due to repeated schema migrations at app startup (#8791).
- [changed] Internal refactor to improve serialization performance.
- [changed]
DocumentSnapshot
objects consider the document's key and data for equality comparison, but ignore the internal state and internal version.
- [fixed] Fixed handling of Unicode characters in log and assertion messages (#8372).
- [changed] Passing in an empty document ID, collection group ID, or collection path will now result in a more readable error (#8218).
- [feature] Added support for Firestore Bundles via
FIRFirestore.loadBundle
,FIRFirestore.loadBundleStream
andFIRFirestore.getQueryNamed
. Bundles contain pre-packaged data produced with the Server SDKs and can be used to populate Firestore's cache without reading documents from the backend.
- [fixed] Fixed a crash that could happen when the App is being deleted and there's an active listener (#6909).
- [fixed] Fixed a bug where local cache inconsistencies were unnecessarily being resolved (#7455).
- [changed] A write to a document that contains FieldValue transforms is no longer split up into two separate operations. This reduces the number of writes the backend performs and allows each WriteBatch to hold 500 writes regardless of how many FieldValue transformations are attached.
- [fixed] Fixed an issue where using
FieldValue.arrayRemove()
would only delete the first occurrence of an element in an array in a latency compensated snapshots.
- [fixed] Fixed a crash that could happen when the SDK encountered invalid data during garbage collection (#6721).
- [added] Made emulator connection API consistent between Auth, Database, Firestore, and Functions (#5916).
- [changed] Added the original query data to error messages for Queries that cannot be deserizialized.
- [fixed] Remove explicit MobileCoreServices library linkage from podspec (#6850).
- [fixed] Removed excess validation of null and NaN values in query filters. This more closely aligns the SDK with the Firestore backend, which has always accepted null and NaN for all operators, even though this isn't necessarily useful.
- [changed] Breaking change: Removed the
areTimestampsInSnapshotsEnabled
setting. Timestamp fields that read from aFIRDocumentSnapshot
now always returnFIRTimestamp
objects. UseFIRTimestamp.dateValue
to convert toNSDate
if required. - [fixed] Fixed a memory leak introduced in 1.18.0 that may manifest when serializing queries containing equality or non-equality comparisons.
- [changed] Internal improvements for future C++ and Unity support. Includes a breaking change for the Firestore C++ Alpha SDK, but does not affect Objective-C or Swift users.
- [changed] Added new internal HTTP headers to the gRPC connection.
- [feature] Added
whereField(_:notIn:)
andwhereField(_:isNotEqualTo:)
query operators.whereField(_:notIn:)
finds documents where a specified field’s value is not in a specified array.whereField(_:isNotEqualTo:)
finds documents where a specified field's value does not equal the specified value. Neither query operator will match documents where the specified field is not present.
- [fixed] Fix gRPC documentation warning surfaced in Xcode (#6340).
- [changed] Internal improvements for future C++ and Unity support.
- [changed] Rearranged public headers for future Swift Package Manager support. This should have no impact existing users of CocoaPods, Carthage, or zip file distributions.
- [changed] Internal improvements for future C++ and Unity support.
- [fixed] Fixed a configuration issue where listeners were no longer being called back on the main thread by default.
- [fixed] Removed a delay that may have prevented Firestore from immediately establishing a network connection if a connectivity change occurred while the app was in the background (#5783).
- [fixed] Fixed a rare crash that could happen if the garbage collection process for old documents in the cache happened to run during a LevelDB compaction (#5881).
- [fixed] Fixed an issue that may have prevented the client from connecting to the backend immediately after a user signed in.
- [changed] Internal improvements for future C++ and Unity support. Includes a breaking change for the Firestore C++ Alpha SDK, but does not affect Objective-C or Swift users.
- [changed] Internal improvements for future C++ and Unity support. Includes a breaking change for the Firestore C++ Alpha SDK, but does not affect Objective-C or Swift users.
- [changed] Firestore now limits the number of concurrent document lookups it will perform when resolving inconsistencies in the local cache (firebase/firebase-js-sdk#2683).
- [changed] Upgraded gRPC-C++ to 1.28.0 (#4994).
- [fixed] Firestore will now send Auth credentials to the Firestore Emulator (#5072).
- [changed] Internal improvements for future C++ and Unity support.
- [changed] Internal improvements for future C++ and Unity support. Includes a breaking change for the Firestore C++ Alpha SDK, but does not affect Objective-C or Swift users.
- [fixed] Fixed the FirebaseFirestore podspec to properly declare its dependency on the UIKit framework on iOS and tvOS.
- [fixed] Firestore should now recover its connection to the server more quickly after returning from the background (#4905).
- [changed] Improved performance of queries with large result sets.
- [changed] Internal improvements.
- [changed] Internal improvements.
- [feature] Firestore previously required that every document read in a transaction must also be written. This requirement has been removed, and you can now read a document in a transaction without writing to it.
- [changed] Improved the performance of repeatedly executed queries when
persistence is enabled. Recently executed queries should see dramatic
improvements. This benefit is reduced if changes accumulate while the query
is inactive. Queries that use the
limit()
API may not always benefit, depending on the accumulated changes. - [changed] Changed the location of Firestore's locally stored data from the Documents folder to Library/Application Support, hiding it from users of apps that share their files with the iOS Files app. Important: After a user's data is migrated, downgrading to an older version of the SDK will cause the user to appear to lose data, since older versions of the SDK can't read data from the new location (#843).
- [feature] Added a
limit(toLast:)
query operator, which returns the last matching documents up to the given limit.
- [changed] Internal improvements.
- [changed] Internal improvements.
- [fixed] Firestore no longer loads its TLS certificates from a bundle, which
fixes crashes at startup when the bundle can't be loaded. This fixes a
specific case where the bundle couldn't be loaded due to international
characters in the application name. If you're manually tracking dependencies,
you can now remove
gRPCCertificates-Cpp.bundle
from your build. (#3951).
- [changed] Removed Firestore's dependency on the
Protobuf
CocoaPod. If you're manually tracking dependencies, you may be able to remove it from your build (note, however, that other Firebase components may still require it). - [changed] Added a dependency on the
abseil
CocoaPod. If you're manually tracking dependencies, you need to add it to your build.
- [feature] Added
whereField(_:in:)
andwhereField(_:arrayContainsAny:)
query operators.whereField(_:in:)
finds documents where a specified field’s value is IN a specified array.whereField(_:arrayContainsAny:)
finds documents where a specified field is an array and contains ANY element of a specified array. - [changed] Firestore SDK now uses Nanopb rather than the Objective-C Protobuf library for parsing protos. This change does not affect visible behavior of the SDK in any way. While we don't anticipate any issues, please report any issues with network behavior or persistence that you experience.
- [fixed] Fixed a race condition that could cause a segmentation fault during client initialization.
- [feature] Added an
addSnapshotsInSyncListener()
method toFIRFirestore
that notifies you when all your snapshot listeners are in sync with each other.
- [fixed] Fixed a memory access error discovered using the sanitizers in Xcode 11.
- [changed] Transactions now perform exponential backoff before retrying. This means transactions on highly contended documents are more likely to succeed.
- [feature] Added a
waitForPendingWrites()
method toFIRFirestore
class which allows users to wait on a promise that resolves when all pending writes are acknowledged by the Firestore backend. - [feature] Added a
terminate()
method toFIRFirestore
which terminates the instance, releasing any held resources. Once it completes, you can optionally callclearPersistence()
to wipe persisted Firestore data from disk.
- [fixed] Fixed a crash that would happen when changing networks or going from online to offline. (#3661).
- [changed] Internal improvements.
- [changed] Transactions are now more flexible. Some sequences of operations that were previously incorrectly disallowed are now allowed. For example, after reading a document that doesn't exist, you can now set it multiple times successfully in a transaction.
- [fixed] Fixed an issue where query results were temporarily missing documents that previously had not matched but had been updated to now match the query (firebase/firebase-android-sdk#155).
- [fixed] Fixed an internal assertion that was triggered when an update
with a
FieldValue.serverTimestamp()
and an update with aFieldValue.increment()
were pending for the same document. - [fixed] Fixed the
oldIndex
andnewIndex
values inDocumentChange
to actually beNSNotFound
when documents are added or removed, respectively (#3298). - [changed] Failed transactions now return the failure from the last attempt,
instead of
ABORTED
.
- [fixed] Fixed certificate loading for non-CocoaPods builds that may not include bundle identifiers in their frameworks or apps (#3184).
- [feature] Added
clearPersistence()
, which clears the persistent storage including pending writes and cached documents. This is intended to help write reliable tests (firebase/firebase-js-sdk#449).
- [fixed] Firestore should now recover its connection to the server more quickly after being on a network suffering from total packet loss (#2987).
- [fixed] Changed gRPC-C++ dependency to 0.0.9 which adds support for using it concurrently with the Objective-C gRPC CocoaPod. This fixes certificate errors you might encounter when trying to use Firestore and other Google Cloud Objective-C APIs in the same project.
- [fixed] Disabling garbage collection now avoids even scheduling the
collection process. This can be used to prevent crashes in the background when
using
NSFileProtectionComplete
. Note that Firestore does not support operating in this mode--nearly all API calls will cause crashes while file protection is enabled. This change just prevents a crash when Firestore is idle (#2846).
- [feature] You can now query across all collections in your database with a
given collection ID using the
Firestore.collectionGroup()
method. - [feature] Added community support for tvOS.
- [fixed] Fixed a use-after-free bug that could be observed when using snapshot listeners on temporary document references (#2682).
- [feature] Added community support for macOS (#434).
- [fixed] Fixed the way gRPC certificates are loaded on macOS (#2604).
- [feature] Added
FieldValue.increment()
, which can be used inupdateData(_:)
andsetData(_:merge:)
to increment or decrement numeric field values safely without transactions. - [changed] Improved performance when querying over documents that contain subcollections (#2466).
- [changed] Prepared the persistence layer to support collection group queries. While this feature is not yet available, all schema changes are included in this release.
- [changed] Internal improvements.
- [changed] Internal improvements.
- [changed] Breaking change: The
areTimestampsInSnapshotsEnabled
setting is now enabled by default. Timestamp fields that read from aFIRDocumentSnapshot
will be returned asFIRTimestamp
objects instead ofNSDate
objects. Update any code that expects to receive anNSDate
object. See the reference documentation for more details. - [changed] Breaking change:
FIRTransaction.getDocument()
has been changed to return a non-nilFIRDocumentSnapshot
withexists
equal tofalse
if the document does not exist (instead of returning a nilFIRDocumentSnapshot
). Code that includesif (snapshot) { ... }
must be changed toif (snapshot.exists) { ... }
. - [fixed] Fixed a crash that could happen when the app is shut down after a write has been sent to the server but before it has been received on a listener (#2237).
- [changed] Firestore no longer bundles a copy of the gRPC certificates, now
that the gRPC-C++ CocoaPod includes them. CocoaPods users should be updated
automatically. Carthage users should follow the updated
instructions
to get
gRPCCertificates.bundle
from the correct location.
- [fixed] Offline persistence now properly records schema downgrades. This is a forward-looking change that allows all subsequent versions to safely downgrade to this version. Some other versions might be safe to downgrade to, if you can determine there haven't been any schema migrations between them. For example, downgrading from v0.16.1 to v0.15.0 is safe because there have been no schema changes between these releases.
- [fixed] Fixed an issue where gRPC would crash if shut down multiple times (#2146).
- [changed] Added a garbage collection process to on-disk persistence that
removes older documents. This is enabled by default, and the SDK will attempt
to periodically clean up older, unused documents once the on-disk cache passes
a threshold size (default: 100 MB). This threshold can be configured by
setting
FIRFirestoreSettings.cacheSizeBytes
. It must be set to a minimum of 1 MB. The garbage collection process can be disabled entirely by settingFIRFirestoreSettings.cacheSizeBytes
tokFIRFirestoreCacheSizeUnlimited
.
- [changed] Changed how the SDK handles locally-updated documents while syncing
those updates with Cloud Firestore servers. This can lead to slight behavior
changes and may affect the
SnapshotMetadata.hasPendingWrites
metadata flag. - [changed] Eliminated superfluous update events for locally cached documents that are known to lag behind the server version. Instead, the SDK buffers these events until the client has caught up with the server.
- [changed] Moved from Objective-C gRPC framework to gRPC C++. If you're
manually tracking dependencies, the
gRPC
,gRPC-ProtoRPC
, andgRPC-RxLibrary
frameworks have been replaced withgRPC-C++
. While we don't anticipate any issues, please report any issues with network behavior you experience. (#1968)
- [fixed] Fixed compilation in C99 and C++11 modes without GNU extensions.
- [changed] Internal improvements.
- [changed] Some SDK errors that represent common mistakes (such as permission denied or a missing index) will automatically be logged as a warning in addition to being surfaced via the API.
- [fixed] Fixed an issue where the first
get()
call made after being offline could incorrectly return cached data without attempting to reach the backend. - [changed] Changed
get()
to only make one attempt to reach the backend before returning cached data, potentially reducing delays while offline. - [fixed] Fixed an issue that caused Firebase to drop empty objects from calls
to
setData(..., merge:true)
.
- [changed] Internal improvements.
- [fixed] Fixed an issue where changes to custom authentication claims did not take effect until you did a full sign-out and sign-in. (#1499)
- [changed] Improved how Firestore handles idle queries to reduce the cost of re-listening within 30 minutes.
- [fixed] Fixed an issue where
get(source:.Cache)
could throw an "unrecognized selector" error if the SDK has previously cached the non-existence of the document (#1632).
- [feature] Added
FieldValue.arrayUnion()
andFieldValue.arrayRemove()
to atomically add and remove elements from an array field in a document. - [feature] Added
whereField(_:arrayContains:)
query filter to find documents where an array field contains a specific element. - [fixed] Fixed compilation with older Xcode versions (#1517).
- [fixed] Fixed a performance issue where large write batches with hundreds of changes would take a long time to read and write and consume excessive memory. Large write batches should now see no penalty.
- [fixed] Fixed a performance issue where adding a listener for a large (thousands of documents) collection would take a long time in offline mode (#1477).
- [fixed] Fixed an issue that could cause deleted documents to momentarily re-appear in the results of a listener, causing a flicker (#1591).
- [fixed] Fixed an issue where queries returned fewer results than they should, caused by documents that were cached as deleted when they should not have been (#1548). Some cache data is cleared and so clients may use extra bandwidth the first time they launch with this version of the SDK.
- [changed] Internal improvements.
- [fixed]
setData
methods takingmergeFields:
arguments can now delete fields usingFieldValue.delete()
. - [fixed] Firestore will now recover from auth token expiration when the system clock is wrong.
- [fixed] Fixed compilation with older Xcode versions (#1366).
- [changed] Internal improvements.
- [fixed] Fixed an issue where
FirestoreSettings
would accept a concurrent dispatch queue, but this configuration would trigger an assertion failure. Passing a concurrent dispatch queue should now work correctly (#988).
- [changed] Internal improvements.
- [changed] Replaced the
DocumentListenOptions
object with a simple boolean. Instead of callingaddSnapshotListener(options: DocumentListenOptions.includeMetadataChanges(true))
calladdSnapshotListener(includeMetadataChanges:true)
. - [changed] Replaced the
QueryListenOptions
object with simple booleans. Instead of callingaddSnapshotListener(options: QueryListenOptions.includeQueryMetadataChanges(true) .includeDocumentMetadataChanges(true))
calladdSnapshotListener(includeMetadataChanges:true)
. - [changed]
QuerySnapshot.documentChanges()
is now a method which optionally takesincludeMetadataChanges:true
. By default even when listening to a query withincludeMetadataChanges:true
metadata-only document changes are suppressed indocumentChanges()
. - [changed] Replaced the
SetOptions
object with a simple boolean. Instead of callingsetData(["a": "b"], options: SetOptions.merge())
callsetData(["a": "b"], merge: true)
. - [changed] Replaced the
SnapshotOptions
object with direct use of theFIRServerTimestampBehavior
onDocumentSnapshot
. Instead of callingdata(SnapshotOptions.serverTimestampBehavior(.estimate))
calldata(serverTimestampBehavior: .estimate)
. Changedget
similarly. - [changed] Added ability to control whether DocumentReference.getDocument() and Query.getDocuments() should fetch from server only, cache only, or attempt server and fall back to the cache (which was the only option previously, and is now the default.)
- [feature] Added new
mergeFields:(NSArray<id>*)
override forset()
which allows merging of a reduced subset of fields.
- [fixed] Fixed a regression in the Firebase iOS SDK release 4.11.0 that could
cause
getDocument()
requests made while offline to be delayed by up to 10 seconds (rather than returning from cache immediately). - [feature] Added a new
Timestamp
class to represent timestamp fields, currently supporting up to microsecond precision. It can be passed to API methods anywhere a system Date is currently accepted. To makeDocumentSnapshot
s read timestamp fields back asTimestamp
s instead of Dates, you can set the newly added propertyareTimestampsInSnapshotsEnabled
inFirestoreSettings
totrue
. Note that the current behavior (DocumentSnapshot
s returning system Dates) will be removed in a future release. UsingTimestamp
s avoids rounding errors (system Date is stored as a floating-point value, so the value read back from aDocumentSnapshot
might be slightly different from the value written).
- [changed] If the SDK's attempt to connect to the Cloud Firestore backend neither succeeds nor fails within 10 seconds, the SDK will consider itself "offline", causing getDocument() calls to resolve with cached results, rather than continuing to wait.
- [fixed] Fixed a race condition after calling
enableNetwork()
that could result in a "Mutation batchIDs must be acknowledged in order" assertion crash. - [fixed] Fixed undefined symbols in the absl namespace (#898).
- [fixed] Fixed a regression in the 4.10.0 Firebase iOS SDK release that prevented the SDK from communicating with the backend before successfully authenticating via Firebase Authentication or after unauthenticating and re-authenticating. Reads and writes would silently be executed locally but not sent to the backend.
- [changed] When you delete a FirebaseApp, the associated Firestore instances are now also deleted (#683).
- [fixed] Fixed race conditions in streams that could be exposed by rapidly toggling the network from enabled to disabled and back (#772) or encountering a failure from the server (#835).
- [fixed] Addressed warnings shown by the latest versions of Xcode and CocoaPods.
- [fixed] Fixed a regression in Firebase iOS release 4.8.1 that could in certain cases result in an "OnlineState should not affect limbo documents." assertion crash when the client loses its network connection.
- [fixed] It's now possible to pass a nil completion block to WriteBatch.commit (#745).
- [changed] Removed the includeMetadataChanges property in FIRDocumentListenOptions to avoid confusion with the factory method of the same name.
- [changed] Added a commit method that takes no completion handler to FIRWriteBatch.
- [feature] Queries can now be created from an NSPredicate.
- [feature] Added SnapshotOptions API to control how DocumentSnapshots return unresolved server timestamps.
- [feature] Added
disableNetwork()
andenableNetwork()
methods toFirestore
class, allowing for explicit network management. - [changed] For non-existing documents, DocumentSnapshot.data() now returns
nil
instead of throwing an exception. A non-nullable QueryDocumentSnapshot is introduced for Queries to reduce the number of nil-checks in your code. - [changed] Snapshot listeners (with the
includeMetadataChanges
option enabled) now receive an event withsnapshot.metadata.isFromCache
set totrue
if the SDK loses its connection to the backend. A new event withsnapshot.metadata.isFromCache
set to false will be raised once the connection is restored and the query is in sync with the backend again. - [fixed] Multiple offline mutations now properly reflected in retrieved documents. Previously, only the last mutation would be visible. (#643)
- [fixed] Fixed a crash in
closeWithFinaleState:
that could be triggered by signing out when the app didn't have a network connection.
- [changed] Firestore no longer has a direct dependency on FirebaseAuth.
- [fixed] Fixed a crash when using path names with international characters with persistence enabled.
- [fixed] Addressed race condition during the teardown of idle streams (#490).
- [changed] Improved performance loading documents matching a query.
- [changed] Cleanly shut down idle write streams.
- [changed] Firestore now retries requests more often before considering a client offline.
- [changed] You can now use FieldValue.delete() with SetOptions.merge().
- [fixed] Fixed validation of nested arrays to allow indirect nesting.
- [fixed] Add an NS_SWIFT_NAME for FIRSnapshotMetadata and FIRListenerRegistration.
- [fixed] Fixed retain cycle in DocumentReference.getDocument(completion:).
- Initial public release.