Skip to content

Latest commit

 

History

History
1046 lines (747 loc) · 89.1 KB

CHANGELOG.md

File metadata and controls

1046 lines (747 loc) · 89.1 KB

Parse-Swift Changelog

main

Full Changelog, Documentation

  • Contributing to this repo? Add info about your change here to be included in the next release

5.9.3

Full Changelog, Documentation

Fixes

  • Certain calls to the user or installation did not wait for the SDK to initialize causing a crash (#163), thanks to Corey Baker.

5.9.2

Full Changelog, Documentation

Fixes

  • Querying using findAll may be inacurrate when results are greater than the batch limit (#161), thanks to Corey Baker.

5.9.1

Full Changelog, Documentation

Fixes

5.9.0

Full Changelog, Documentation

New features

Fixes

  • Improve mutiple types conformance to Equatable and Hashable (#148), thanks to Corey Baker.
  • Updates to ParseUser password now persist the updated sessionToken from the server to the client Keychain (#147), thanks to Corey Baker.

5.8.2

Full Changelog, Documentation

Fixes

  • Expose isSaved method on ParseFile and ParseOperation (#135), thanks to Corey Baker.

5.8.1

Full Changelog, Documentation

Fixes

  • There was an issue where Parse pointers were not sending includeKeys to the server (#133), thanks to proj-sashido.

5.8.0

Full Changelog, Documentation

New features

  • Add concrete types: ParseHookTrigger and ParseHookFunction to reduce code developers need to write. Deprecate triggerName in favor of trigger where possible. The SDK also yields for 0.5 second as oppose to 1 second, which can lead to faster app starts (#122), thanks to Corey Baker.

Fixes

  • There was a problem when the developer did not implement merge() on a ParseObject and depended on the internal mergeAutomatically() to merge. If the developer used mergeAutomatically() indirectly for objects with different objectId's, the method allowed the merge. Now the method now throws the proper error (#122), thanks to Corey Baker.

5.7.4

Full Changelog, Documentation

Fixes

  • hydrateUser() should not replace the options passed in (#121), thanks to Corey Baker.

5.7.3

Full Changelog, Documentation

Fixes

  • Remove all generic shadow warnings in Swift 5.9 (#120), thanks to Corey Baker.

5.7.2

Full Changelog, Documentation

Fixes

  • ParsePolygon encoding during a save and decoding resulted in (longitude, latitude) when it should be (latitude, longitude). If a developer used ParseSwift <= 5.7.1 to save/update ParsePolygon's, they will need to update the respective ParseObjects by swapping the latitude and longitude manually. Deprecated withinPolygon() query constraint for geoPoint() and polygonContains() for polygon() (#118), thanks to Corey Baker.

5.7.1

Full Changelog, Documentation

Fixes

  • ParseACL.defaultACL() calls should yield until SDK has finished configuration (#117), thanks to Corey Baker.
  • ParsePolygon.containsPoint() correctly uses longitude and latitude (#116), thanks to Corey Baker.

5.7.0

Full Changelog, Documentation

New features

  • Add failedLoginCount and accountLockoutExpiresAt to ParseCloudUser protocol for better access (#109), thanks to Corey Baker.

5.6.0

Full Changelog, Documentation

New features

  • Adds liveQueryConnectionAdditionalProperties parameter to SDK configuration to prevent additional properties from being sent to LiveQuery servers. This is useful for Parse Servers < 4.0.0 (#103), thanks to Corey Baker.

Fixes

  • Modernize Xcode project by using only one framework target. Also removes Carthage testing from CI (#101), thanks to Corey Baker.

5.5.1

Full Changelog, Documentation

Fixes

  • Move enableAutomaticLogin() to the appropriate ParseUser protocol (#100), thanks to Corey Baker.

5.5.0

Full Changelog, Documentation

New features

  • Adds a setting to enable automatic user login by calling User.current(). The setting can be enabled/disabled when initializing the SDK by setting "usingAutomaticLogin" or at anytime after initialization using User.enableAutomaticLogin() (#98), thanks to Corey Baker.
  • Add ParseServer.information() to retrieve version and info from a Parse Server. Depracates ParseHealth and check() in favor of ParseServer and health() respectively (#97), thanks to Corey Baker.

5.4.3

Full Changelog, Documentation

Fixes

  • Move some ParseObject methods and properties to required to leverage developer implementations (#96), thanks to Corey Baker.

5.4.2

Full Changelog, Documentation

Fixes

  • Prevent crash when the developer makes query, fetch, etc. calls before the SDK is properly initialized (#95), thanks to Corey Baker.
  • Add backwards compatability to Xcode 13.2. Building on Xcode <13.3 only works for SPM (#92), thanks to Corey Baker.

5.4.1

Full Changelog, Documentation

Fixes

  • Refactor test suite and code for Swift 5.8. Removes a number of warnings that show up in Xcode 14.3 (#90), thanks to Corey Baker.

5.4.0

Full Changelog, Documentation

New features

  • Add batch and increment double operations. All operations have also been made public so developers can build batch operations with ParseOperationBatch (#88), thanks to Corey Baker.

5.3.3

Full Changelog, Documentation

Fixes

  • Only retry connections on specific codes (#84), thanks to Corey Baker.

5.3.2

Full Changelog, Documentation

Fixes

  • ParseFile id creation should be consistent to ensure proper hashing (#83), thanks to Corey Baker.

5.3.1

Full Changelog, Documentation

Fixes

5.3.0

Full Changelog, Documentation

New features

  • Add ParseUser.loginAs(objectId: String) method to allow impersonating a user. This method requires the server primaryKey and is intended to run server-side (#79), thanks to Corey Baker.

Fixes

  • Fix ParseUser.become(), ParseUser.linkCommand, and other calls that depend on a specific endpoint for specialized ParseObjects such as ParseUser, ParseInstallation, ParseRole, etc. (#80), thanks to Corey Baker.

5.2.0

Full Changelog, Documentation

New features

  • All Parse-Swift view models now update on the MainActor to make view changes more predictable (#75), thanks to Corey Baker.

5.1.1

Full Changelog, Documentation

Fixes

  • Instead of a possible inifinite loop, throw an error if the Swift SDK is used, but not initialized within 5 seconds of first use (#73), thanks to Corey Baker.

5.1.0

Full Changelog, Documentation

New features

  • Add ParseConfigCodable type that allows access to the Parse Server Config as a dictionary. ParseConfigCodable and types that conform to ParseConfig are interoperable (#68), thanks to Corey Baker.
  • Make it easier to login with email or authData (#67), thanks to Corey Baker.
  • Add missing async/await and Combine ParseUser.become() type methods (#66), thanks to Corey Baker.

5.0.1

Full Changelog, Documentation

Fixes

  • Access to all ParseStorage (.current() objects) yields until SDK has completed initialization (#63), thanks to Corey Baker.

5.0.0

Full Changelog, Documentation

Breaking Changes

  • Current objects such as ParseObject, ParseUser, ParseVersion, etc. now require try async/await. All synchronous networking and local storage calls have been removed. Please look at the updated Swift Playgrounds for examples (#62), thanks to Corey Baker.
  • ParseHookTriggerRequest has been renamed to ParseHookTriggerObjectRequest as it is used for decoding triggers related to ParseObjects. The new ParseHookTriggerRequest is similar but used for decoding requests not related to ParseObjects like ParseFile (#53), thanks to Corey Baker.
  • Added a new ParseHealth.Status enum to support new feature in Parse Server 6.0.0. Developers can now receive intermediate status updates (Status.initialized, Status.starting) using the ParseHealth.check callback or Combine methods. Status.initialized and Status.starting will only show for async/await and synchronous methods if they are the last value reported from the server after maxConnectionAttempts. Connecting to Parse Servers < 6.0.0 only returns Status.ok or a ParseError (#43), thanks to Corey Baker.
  • Add and update ParseError codes. unknownError has been renamed to otherCause. invalidImageData now has the correct error code of 150. webhookError has the correct error code of 143 (#23), thanks to Corey Baker.
  • Remove all deprecated code. Be sure to follow the suggestions of all deprecation warnings when building your app in Xcode before upgrading (#23), thanks to Corey Baker.

New features

  • ParseError now has a new property called "swift" which is of type Swift.Error. This property will not be nil when the ParseError is really an OS error. This is intented to help developers improve error handeling by propagating the complete error (#64), thanks to Corey Baker.
  • Add user login related attempts to ParseCloudUser. This allows developers to decode login related information when using Parse-Swift for Cloud Code (#51), thanks to Corey Baker.
  • Add option to set the serverURL for a particular call. This is useful when using the Swift SDK for Cloud Code in a multi-server environment (#50), thanks to Corey Baker.
  • ParseVersion now supports pre-release versions of the SDK (#49), thanks to Corey Baker.
  • Adds the the ability to watch particular keys with LiveQueries. Requires Parse-Server 6.0.0 (#48), thanks to Corey Baker.
  • The Swift SDK can now properly handle HTTP Status codes 429 and 503 and will retry after the delay specified in the respective header (#43), thanks to Corey Baker.
  • The max connection attempts for LiveQuery can now be changed when initializing the SDK (#43), thanks to Corey Baker.

Fixes

  • Fixed "Duplicate request" error when resending requests related to idempotency (#63), thanks to Corey Baker.
  • Fixed query count and withCount returning 0 when the SDK is configured to use GET for queries (#61), thanks to Corey Baker.
  • Fixed ambiguous ParseAnalytics trackAppOpenned (#55), thanks to Corey Baker.
  • Refactored playground mount to be "/parse" instead "/1". Also do not require url when decoding a ParseFile (#52), thanks to Corey Baker.
  • Fixed issues that can cause cache misses when querying (#46), thanks to Corey Baker.
  • Fixed a threading issue with .current objects that can cause apps to crash (#45), thanks to Corey Baker.

4.16.2

Full Changelog, Documentation

Fixes

  • Callback async calls return to correct callbackQueue (#19), thanks to Corey Baker.

4.16.1

Full Changelog, Documentation

Fixes

  • Querying using findAll throws a hang risk warning in Xcode 14 (#14), thanks to Corey Baker.

4.16.0

Full Changelog, Documentation

New features

  • Added the ability to check if a ParseObject key is dirty (#9), thanks to Corey Baker.

Fixes

  • Fixed an issue where the name propery of a ParseRole may not be restored after updating a ParseRole on the server (#10), thanks to Corey Baker.

4.15.2

Full Changelog, Documentation

Fixes

  • Fixed an issue that prevented nested ParseObjects and ParseFiles from saving correctly in some cases (#8), thanks to Corey Baker.

4.15.1

Full Changelog, Documentation

Fixes

4.15.0

Full Changelog, Documentation

New features

  • Refactored masterKey->primaryKey due to insensitive language (#2), thanks to Corey Baker.

4.14.2

Full Changelog, Documentation

Fixes

  • Addressed an issue that prevented updating ParseObjects with saveAll (#423), thanks to Corey Baker.

4.14.1

Full Changelog, Documentation

Fixes

  • For Swift 5.5.2+ all asynchronous methods that attempt to save, create, update, or replace use the async/await version of deep saving ParseObjects. This fixes any purple warnings caused by the SDK in Xcode. Older Swift versions use the synchronous version of deep saving (#418), thanks to Corey Baker.
  • Can catch when the Parse Server throws an improper ParseError that only contains "error" or "message", but does not contain a "code" (#418), thanks to Corey Baker.

4.14.0

Full Changelog, Documentation

New features

  • Add file caching using the Parse download folder (#416), thanks to Corey Baker.

4.13.1

Full Changelog, Documentation

Fixes

  • Remove ParseFile caching due to OS not having a natural way to cache files. Instead, if developers want to access a saved ParseFile, they should check the download directory for the respective file name (#414), thanks to Corey Baker.

4.13.0

Full Changelog, Documentation

New features

  • Add helper methods to ParseFileTransferable protocol to assist with creating propper responses to file uploads (#411), thanks to Corey Baker.

Fixes

  • Remove cached error responses when decoding errors occur (#411), thanks to Corey Baker.

4.12.0

Full Changelog, Documentation

New features

  • Add the ParseFileTransferable protocol for overriding the default transfer behavior for ParseFile's. Allows for direct uploads to other file storage providers (#410), thanks to Corey Baker.
  • Add the become method to ParseInstallation which allows any ParseInstallation to be copied to the current installation. This method can be used to migrate any ParseInstallation to the current installation in the Swift SDK (#407), thanks to Corey Baker.

Fixes

  • Properly get the session token from the Parse Objective-C Keychain when using ParseUser.loginUsingObjCKeychain (#407), thanks to Corey Baker.

4.11.0

Full Changelog, Documentation

New features

  • Add a set method that developers can call on their ParseObjects which automatically sends updated properties to a Parse Server and merges those updates with the original ParseObject locally. The feature removes the requirement to call mergeable and implement merge(), but comes at additional computational overhead (#406), thanks to Corey Baker.

4.10.0

Full Changelog, Documentation

New features

  • Add a new operation method that allows developers to set a new value to a KeyPath without needing the string version of the key. Also adds the get() method to allow developers to get the unwrapped property of any ParseObject based on its KeyPath (#403), thanks to Corey Baker.
  • Add revertKeyPath() and revertObject() methods to ParseObject which allow developers to revert to original values of key paths or objects after mutating ParseObjects that already have an objectId (#402), thanks to Corey Baker.

4.9.3

Full Changelog, Documentation

Fixes

  • When saving ParseFiles locally, files that have a directory in their filename save correctly instead of throwing an error on the client (#399), thanks to Corey Baker.
  • Default to not setting kSecUseDataProtectionKeychain to true as this can cause issues with querying the Keychain in Swift Playgrounds or other apps that cannot setup the Keychain on macOS. This behavior can be changed by setting usingDataProtectionKeychain to true when initializing the SDK (#398), thanks to Corey Baker.

4.9.2

Full Changelog, Documentation

Fixes

  • Allow fully qualified ParseSwift types to be used externally by fixing clash with module name (#397), thanks to Corey Baker.

4.9.1

Full Changelog, Documentation

Fixes

  • Corrects a memory leak where multiple Parse URLSessions can get created. Use an actor for the url session delegates to ensure thread safety when making async calls in parallel (#394), thanks to Corey Baker.

4.9.0

Full Changelog, Documentation

New features

  • Add methods for migrating users and installations from the Parse Objective-C SDK to the Swift SDK (#391), thanks to Corey Baker.
  • Enable query caching by using GET instead of POST. GET is now used by default. To switch back to POST, set usingPostForQuery = true when initializing the SDK which will automatically disable all query caching (#386), thanks to Corey Baker.
  • Add setAccessGroup method which allows the Parse Keychain to be shared with app extensions and iCloud accounts (#378), thanks to Corey Baker.

Improvements

  • Add more details to error messages related when decoding errors occur (#388), thanks to Daniel Blyth.
  • Added discardableResult to allow developers to choose whether or not certain functions should return a result (#385), thanks to Damian Van de Kauter.

Fixes

  • Ensure properties that are already saved ParseObject's are converted to Parse pointers when using saveAll (#390), thanks to Corey Baker.

4.8.0

Full Changelog

New features

Fixes

  • Encode withinPolygon Queryconstraint correctly (#381), thanks to Corey Baker.
  • Use select for ParseLiveQuery when fields are not present (#376), thanks to Corey Baker.

4.7.0

Full Changelog

New features

  • Add support for ParseFile and beforeConnect triggers (#376), thanks to Corey Baker.

4.6.0

Full Changelog

New features

  • Add the ability to use Parse Hooks and Triggers (#373), thanks to Corey Baker.
  • Add ParseInstagram authentication (#372), thanks to Ulaş Sancak.
  • Add the ability to send APN and FCM push notifications. Also adds the ability to query _PushStatus (#371), thanks to Corey Baker.
  • Add ParseSchema, ParseCLP, and ParseFieldOptions. Should only be used when using the Swift SDK on a secured server (#370), thanks to Corey Baker.

4.5.0

Full Changelog

New features

  • Add toCLLocation and toCLLocationCoordinate2D computed properties to ParseGeoPoint, deprecate toCLLocation() and toCLLocationCoordinate2D() (#366), thanks to Corey Baker.
  • Add query computed property to ParseObject (#365), thanks to Corey Baker.
  • Add macCatalyst to SPM (#363), thanks to Corey Baker.
  • Add an order() method to Query that excepts a variadic list as input (#362), thanks to Corey Baker.

Improvements

  • Allow includeAll key to be sent with additional include keys. When fetching, if the include argument is specified, convert it to a Set to prevent duplicate keys from being sent to the server (#367), thanks to Corey Baker.
  • Allow LiveQuery client to be set using ParseLiveQuery.defaultClient and deprecate ParseLiveQuery.setDefault(). Show usage of deprecated code as warnings during compile time and suggest changes (#360), thanks to Corey Baker.

4.4.0

Full Changelog

Improvements

  • Drop support for Swift 5.2 as App Store requires apps to be built in Xcode 12 (#356), thanks to Corey Baker.

4.3.1

Full Changelog

Fixes

4.3.0

Full Changelog

Improvements

  • Use DocC for documentation instead of jazzy. Improved documentation (#350), thanks to Corey Baker.

4.2.0

Full Changelog

New features

  • Add variadic QueryConstraint methods for or, nor, and (#345), thanks to Corey Baker.

Improvements

  • Add clientDefault static property to ParseLiveQuery which replaces the getDefault() method. getDefault() is still avaiable, but will be deprecated in ParseSwift 5.0.0 so it is recommended to switch to defaultClient (#342), thanks to Corey Baker.

4.1.0

Full Changelog

Improvements

  • Let the OS and developer decide if app tracking authorization is required when using ParseAnalytics. ParseAnalytics can now take any Codable value in its' dimensions instead of just strings. Added a new property "date" to ParseAnalytics. The "at" property will be deprecated in ParseSwift 5.0.0, so developers should switch to "date". ParseAnalytics can now be properly decoded after encoding with a JSONEncoder. This is useful if ParseAnalytics need to be stored locally and sent to the server later (#341), thanks to Corey Baker.

4.0.1

Full Changelog

Fixes

  • Allow ParseRole's to be updated when the SDK is allowing custom objectId's (#338), thanks to Corey Baker.

4.0.0

Full Changelog

New features

  • Add the verifyPassword to ParseUser. This method defaults to using POST though POST is not available on the current Parse Server. Change userPost == false to use GET on older Parse Servers (#333), thanks to Corey Baker.
  • (Breaking Change) Bump the SPM toolchain from 5.1 to 5.5. This is done to take advantage of features in the latest toolchain. For developers using < Xcode 13 and depending on the Swift SDK through SPM, this will cause a break. You can either upgrade your Xcode or use Cocoapods or Carthage to depend on ParseSwift (#326), thanks to Corey Baker.
  • (Breaking Change) Add the ability to merge updated ParseObject's with original objects when using the .mergeable property. To do this, developers need to add an implementation of merge() to respective ParseObject's. The compiler will recommend the new originalData property be added to every ParseObject. If you used ParseObjectMutable in the past, you should remove it as it is now part of ParseObject. In addition, all ParseObject properties should be optional and every object needs to have a default initializer of init(). See the Playgrounds for recommendations on how to define a ParseObject. Look at the PR for details on why this is important when using the SDK (#315), thanks to Corey Baker.
  • Add DocC for SDK documentation (#209), thanks to Corey Baker.

Improvements

  • (Breaking Change) Make ParseRelation conform to Codable and add methods to make decoded stored ParseRelations "usable". ParseObjects can now contain properties of ParseRelation. In addition, ParseRelations can now be made from ParseObject pointers. For ParseRole, the computed properties: users and roles, are now optional. The queryRoles property has been changed to queryRoles() to improve the handling of thrown errors (#328), thanks to Corey Baker.
  • (Breaking Change) Change the following method parameter names: isUsingMongoDB -> usingMongoDB, isIgnoreCustomObjectIdConfig -> ignoringCustomObjectIdConfig, isUsingEQ -> usingEqComparator (#321), thanks to Corey Baker.
  • (Breaking Change) Change the following method parameter names: isUsingMongoDB -> usingMongoDB, isIgnoreCustomObjectIdConfig -> ignoringCustomObjectIdConfig, isUsingEQ -> usingEqComparator (#321), thanks to Corey Baker.
  • (Breaking Change) Change the following method parameter names: isUsingTransactions -> usingTransactions, isAllowingCustomObjectIds -> allowingCustomObjectIds, isUsingEqualQueryConstraint -> usingEqualQueryConstraint, isMigratingFromObjcSDK -> migratingFromObjcSDK, isDeletingKeychainIfNeeded -> deletingKeychainIfNeeded (#323), thanks to Corey Baker.

Fixes

  • Async/await methods that return void would no throw errors received from server (#334), thanks to Corey Baker.
  • Always check for ParseError first when decoding responses from the server. Before this fix, this could cause issues depending on how calls are made from the Swift SDK (#332), thanks to Corey Baker.

3.1.2

Full Changelog

Fixes

  • Allowing building of the Swift SDK for Swift 5.5.0 and 5.5.1 re-enabling builds for Xcode 13.0 and 13.1. Note that async/await functionality is only available for Swift 5.5.2+ and Xcode 13.2+ (#320), thanks to Corey Baker.
  • Move the var score: Double? to a protocol named ParseQueryScorable. When developers want to sort by score using a matchesText QueryConstraint, they just conform their ParseObject's to ParseQueryScorable (#319), thanks to Corey Baker.

3.1.1

Full Changelog

Fixes

  • Always sort keys when using the ParseEncoder as it can cause issues when trying to save ParseObject's that have children (#318), thanks to Corey Baker.

3.1.0

Full Changelog

New features

  • Add the ability to explain MongoDB queries by setting usingMongoDB = true for the respective explain query (#314), thanks to Corey Baker.

3.0.0

Full Changelog

New features

  • Adds equalTo QueryConstraint along with ability to change the SDK default behavior of using $eq QueryConstraint parameter or not (#310), thanks to Corey Baker.
  • Adds isNull and isNotNull QueryConstraint along with the ability set/forceSet null using ParseOperation (#308), thanks to Corey Baker.
  • Adds auth support for GitHub, Google, and LinkedIn (#307), thanks to Corey Baker.
  • (Breaking Change) Adds options to matchesText QueryConstraint along with the ability to see matching score. The compiler will recommend the new score property be added to all ParseObjects (#306), thanks to Corey Baker.
  • Adds withCount query (#306), thanks to Corey Baker.

Improvements

  • (Breaking Change) Change boolean configuration parameters to match Swift conventions. The compilor should help with name changes (#311), thanks to Corey Baker.
  • Improve QueryWhere by making at a set of QueryConstraint's instead of any array. This dedupes the same constraint when encoding the query; improving the encoding speed when the same constraints are added (#308), thanks to Corey Baker.

2.5.1

Full Changelog

Improvements

  • Reduce call sites by having all methods with variadic arguments call their array counterparts (#301), thanks to Corey Baker.

Fixes

  • Let additional headers accept [AnyHashable: Any] (#302), thanks to Corey Baker.
  • Throw .missingObjectId when missing the client detects a missing objectId instead of throwing an .unknown error (#300), thanks to Corey Baker.

2.5.0

Full Changelog

New features

  • Added create(), replace(), update(), createAll(), replaceAll(), and updateAll() to ParseObjects. Currently, update() and updateAll() are unavaivalble due to limitations of PATCH on the Parse Server (#299), thanks to Corey Baker.
  • Added convenience methods to convert ParseObject's to Pointer's for QueryConstraint's: !=, containedIn, notContainedIn, containedBy, containsAll (#298), thanks to Corey Baker.

2.4.0

Full Changelog

New features

  • Added additional methods to ParseRelation to make it easier to create and query relations (#294), thanks to Corey Baker.
  • Enable async/await for iOS13, tvOS13, watchOS6, and macOS10_15. All async/await methods are MainActor's. Requires Xcode 13.2 or above to use async/await. Not compatible with Xcode 13.0/1, will need to upgrade to 13.2+. Still works with Xcode 11/12 (#278), thanks to Corey Baker.

Fixes

  • When transactions are enabled errors are now thrown from the client if the amount of objects in a transaction exceeds the batch size. An error will also be thrown if a developer attempts to save objects in a transation that has unsaved children (#295), thanks to Corey Baker.

2.3.1

Full Changelog

Fixes

  • Fixed an issue where querying an object did not dispatch to the proper queue which can cause app crashes (#293), thanks to Corey Baker.

2.3.0

Full Changelog

New features

  • Add a retry mechanism to the SDK that randomly (up to 3 seconds each) tries to reconnect up to 5 times. The developer can increase or reduce the amount of retries when configuring the SDK (#291), thanks to Corey Baker.
  • Add toCLLocation and toCLLocationCoordinate2D methods for easy conversion from a ParseGeoPoint object (#287), thanks to Jayson Ng.

Fixes

  • Fixed an issue where an annonymous could not be turned into a regular user using signup (#291), thanks to Corey Baker.
  • The default ACL is now deleted from the keychain when a user is logged out. This previously caused an issue when logging out a user and logging in as a different user caused all objects to only have ACL permisions for the logged in user (#291), thanks to Corey Baker.

2.2.6

Full Changelog

Fixes

  • Use default ACL automatically on newley created ParseObject's if a default ACL is available (#284), thanks to Corey Baker.

2.2.5

Full Changelog

Fixes

2.2.4

Full Changelog

Fixes

  • Delete all stored Parse data and cache when isDeletingKeychainIfNeeded is true (#280), thanks to Corey Baker.

2.2.3

Full Changelog

Fixes

2.2.2

Full Changelog

Fixes

  • Improve equatable comparison of QueryConstraint (#275), thanks to Corey Baker.

2.2.1

Full Changelog

Fixes

  • Set the default cache policy for ParseFile to the default policy set when initializing the SDK (#274), thanks to Corey Baker.

2.2.0

Full Changelog

Improvements

  • Added ability to fetch ParsePointer using async/await (#271), thanks to Corey Baker.

Fixes

  • By default, do not use cache when fetching ParseObject's and ParseFile's. Developers can choose to fetch from cache if desired by passing the necessary option while fetching. Fixed a bug when the incorrect file location for a dowloaded ParseFile was being cached (#272), thanks to Corey Baker.

2.1.0

Full Changelog

Improvements

  • Make ParseUser.current, ParseInstallation.current, ParseConfig.current immutable. This prevents accidently setting to nil. When developers want to make changes, they should make mutable copies, mutate, then save (#266), thanks to Corey Baker.
  • Added the ParseObjectMutable protocol to make emptyObject more developer friendly (#270), thanks to Damian Van de Kauter.

2.0.3

Full Changelog

Fixes

  • Async/await methods should be available for watchOS 8+ (#265), thanks to Corey Baker.

2.0.2

Full Changelog

Improvements

  • Add static methods for accessing encoders/decoder so developers do not have to create instances to access (#259), thanks to Corey Baker.

Fixes

  • Parse ViewModels always dispatch to the main queue when updating published properties. This prevents possible issues when background async calls update properties used for views (#260), thanks to Corey Baker.

2.0.1

Full Changelog

Fixes

  • ParseUser should only encode email when User.current?.email is different from current user email (#256), thanks to Corey Baker.

2.0.0

Full Changelog

New features

  • Added option to delete Parse items from Keychain when the app is running for the first time (#254), thanks to Corey Baker.

Improvements

  • (Breaking Change) ParseObject's now conform to Identifiable and can be used directly with SwiftUI without additonal properties needed. Drops support for iOS 12, tvOS 12, watchOS 5, and macOS 10.13/14 (#254), thanks to Corey Baker.

1.11.0

Full Changelog

Improvements

1.10.4

Full Changelog

Improvements

1.10.3

Full Changelog

Improvements

  • Update documents to show new Swift 5.5 async/await methods (#252), thanks to Corey Baker.

1.10.2

Full Changelog

New features

Improvements

  • Added an extension to compare a Swift Error with a single ParseError or multiple ParseErrors (#250), thanks to Damian Van de Kauter.

1.10.1

Full Changelog

Improvements

  • Removes emptyObject requirement that was added in #243. Instead, has a recommendation in playgrounds on how to use emptyObject to only send select modified keys to the server (#249), thanks to Corey Baker.

1.10.0

Full Changelog

Improvements

  • (Breaking Change) Provide ParseObject property, emptyObject, that makes it easy to send only modified keys to the server. This change "might" be breaking depending on your implementation as it requires ParseObjects to now have an empty initializer, init() (#243), thanks to Corey Baker.

Fixes

  • ParseUser should not send email if it has not been modified or else email verification is resent (#241), thanks to Corey Baker.

1.9.10

Full Changelog

Fixes

  • ParseInstallation cannot be retreived from Keychain after the first fun (#236), thanks to Corey Baker.

1.9.9

Full Changelog

Fixes

  • Saving ParseObjects with ParseFile properties now saves files on background queue (#230), thanks to Corey Baker.

1.9.8

Full Changelog

Fixes

  • Use a seperate Keychain for each app bundleId. This only effects macOS apps as their Keychain is handled by the OS differently. For macOS app developers only, the user who logged in last to your app will have their Keychain upgraded to the patched version. Other users/apps will either need to login again or logout then login again (#224), thanks to Corey Baker.

1.9.7

Full Changelog

Improvements

  • Properly allow a mixed custom objectId environment without compromising safety checks using .save(). If a developer wants to ignore the objectId checks, they need to specify ignoringCustomObjectIdConfig = true each time (#222), thanks to Corey Baker.

1.9.6

Full Changelog

Fixes

  • Query withinMiles and withinKilometers was not returning unsorted results when sort=false (#219), thanks to Corey Baker.

1.9.5

Full Changelog

Improvements

  • LiveQuery web socket connections handle URL error codes -1001 "The request timed out" and -1011 "There was a bad response from the server." (#217), thanks to Lukas Smilek.

1.9.4

Full Changelog

Fixes

  • Fix LiveQuery reconnections when server disconnects. Always receive and pass connection errors to ParseLiveQuery delegate (#211), thanks to Corey Baker.

1.9.3

Full Changelog

Improvements

  • Ensure delegate set before resuming a ParseLiveQuery task (#209), thanks to Corey Baker.

1.9.2

Full Changelog

Improvements

  • ParseLiveQuery checks all states of a websocket and reacts as needed after an error (#207), thanks to Corey Baker.

1.9.1

Full Changelog

Improvements

  • Clear caching when a user logs out (#198), thanks to Corey Baker.
  • Close all LiveQuery connections when a user logs out (#199), thanks to Corey Baker.
  • ParseLiveQuery attempts to reconnect upon disconnection error (#204), thanks to Corey Baker.
  • Make ParseFileManager public so developers can easily find the location of ParseFiles (#205), thanks to Corey Baker.

Fixes

  • Fix Facebook and Twitter login setting incorrect keys (#202), thanks to Daniel Blyth.

1.9.0

Full Changelog

New features

  • (Breaking Change) Added a new type, QueryViewModel which conforms to ObservableObject. The new type serves as a view model property for any Parse Query. Simply call query.viewModel to use the view model with any SwiftUI view. QueryViewModel can be subclassed for customization. In addition, developers can create their own view models for queries by conforming to QueryObservable. LiveQuery Subscription's inherrit from QueryViewModel meaning instances of Subscription provides a single view model that publishes updates from LiveQuery events and traditional find, first, count, and aggregate queries. A breaking change is introduced for those use custom subscriptions as ParseSubscription has been renamed to QuerySubscribable (#183), thanks to Corey Baker.
  • Added a new type, CloudViewModel which conforms to ObservableObject. The new type serves as a view model property for any Cloud Code. Simply call cloud.viewModel to use the view model with any SwiftUI view. CloudViewModel can be subclassed for customization. In addition, developers can create their own view models for queries by conforming to CloudObservable (#183), thanks to Corey Baker.
  • Added two missing Parse types, ParseBytes and ParsePolygon (#190), thanks to Corey Baker.
  • Added caching of http requests along with adding additional headers. Caching and additional headers can be set when initializing the SDK. Caching can also be set per request using API.Options (#196), thanks to Corey Baker.

Improvements

  • Removed CommonCrypto and now uses encoded string as a hash for child ParseObjects across all OS's (#184), thanks to Corey Baker.
  • All types now conform to CustomStringConvertible (#185), thanks to Corey Baker.
  • Setting limit = 0 of a query does not query the server and instead just returns empty or no results depending on the query (#189), thanks to Corey Baker.
  • ParseGeoPoint initializer now throws if geopoints are out-of-bounds instead of asserting (#190), thanks to Corey Baker.
  • Persist all properties of ParseUser and ParseInstallation to keychain so they can be accessed via current. Developers do not have to fetch the ParseUser or ParseInstlation after app restart anymore (#191), thanks to Corey Baker.

Fixes

  • Fixed a bug when signing up from a ParseUser instance resulted in custom keys not being persisted to the keychain (#187), thanks to Corey Baker.
  • Fixed a bug where countExplain query result was not returned as an array (#189), thanks to Corey Baker.
  • The query withinPolygon(key: String, points: [ParseGeoPoint]) now works correctly and sends an array of doubles instead of an array of GeoPoint's (#190), thanks to Corey Baker.
  • Fixed a bug where the ParseEncoder incorrectly detects a circular dependency when two child objects are the same (#194), thanks to Corey Baker.
  • Make sure all LiveQuery socket changes are received on the correct queue to prevent threading issues (#195), thanks to Corey Baker.

1.8.6

Full Changelog

Improvements

  • Added SwiftUI query combine example to playgrounds. Skip id when encoding ParseObjects (#181), thanks to Corey Baker.
  • Persist current SDK version for migrating between versions (#182), thanks to Corey Baker.

1.8.5

Full Changelog

Fixes

  • Fixed a bug in LiveQuery when a close frame is sent from the server that resulted in closing all running websocket tasks instead of the particular task the request was intended for. The fix includes a new delegate method named closedSocket() which provides the close code and reason the server closed the connection (#176), thanks to Corey Baker.

1.8.4

Full Changelog

Fixes

  • Switched context header X-Parse-Context to X-Parse-Cloud-Context to match server (#170), thanks to Corey Baker.
  • Fixed a bug in LiveQuery that prevented reconnecting after a connection was closed. Also added a sendPing method to LiveQuery (#172), thanks to Corey Baker.

1.8.3

Full Changelog

Fixes

  • Fixed a bug that prevented saving ParseObjects that had Pointers as properties (#169), thanks to Corey Baker.

1.8.2

Full Changelog

Improvements

  • Ensure pipeline and fields are checked when comparing queries (#163), thanks to Corey Baker.
  • Allow custom error codes to be thrown from Cloud Functions (#165), thanks to Daniel Blyth.

1.8.1

Full Changelog

Improvements

  • Append instead of replace when using query select, exclude, include, and fields (#155), thanks to Corey Baker.

Fixes

  • Transactions currently do not work when using MongoDB(postgres does work) on the parse-server. Internal use of transactions are disabled by default. If you want the Swift SDK to use transactions internally, you need to set isUsingTransactionsInternally=true when configuring the client. It is recommended not to use transactions if you are using MongoDB until it is fixed on the server (#158), thanks to Corey Baker.

1.8.0

Full Changelog

New features

  • Add ParseAnalytics. Requires app tracking authorization in latest OS's (#147), thanks to Corey Baker.

Improvements

  • Adds the ability to directly use == as a QueryConstraint on a field that's a ParseObject (#147), thanks to Corey Baker.
  • Future proof SDK by always sending client version header. Also added http method PATCH to API for future use (#146), thanks to Corey Baker.

Fixes

  • Fixed an error that occured when deleting a ParseFile which resulted in the file being downloaded locally (#147), thanks to Corey Baker.

1.7.2

Full Changelog

New features

  • Added ability to send context with object by specifying it within options (#140), thanks to Corey Baker.

Fixes

  • ParseFiles cannot be updated from the client and will now throw an error if attempted. Instead another file should be created and the older file should be deleted by the developer. (#144), thanks to Corey Baker.
  • Fixed issue where Swift SDK prevented fetching of Parse objects when custom objectId was enabled (#139), thanks to Corey Baker.

Improvements

  • Add playground example of saving Parse objects with a custom objectId (#137), thanks to Corey Baker.
  • Improved comparison of query constraints by comparing value (#140), thanks to Corey Baker.

1.7.1

Full Changelog

New features

  • Can now check the health of a Parse Server using ParseHealth. (#134), thanks to Corey Baker.

1.7.0

Full Changelog

Improvements

  • Add emailVerified to ParseUser. Make relative query take a QueryConstraint as an argument. Add more documentation (#129), thanks to Corey Baker.

1.6.0

Full Changelog

Improvements

  • Make AnyCodable internal. If developers want to use AnyCodable, AnyEncodable, or AnyDecodable for explain or ParseCloud, they should add the AnyCodable package to their app. In addition developers can create their own type-erased wrappers or use whatever they desire (#127), thanks to Corey Baker.

1.5.1

Full Changelog

Improvements

  • Update ParseError to match server and make ParseError and ParseObject Pointer documentation public (#125), thanks to Corey Baker.

1.5.0

Full Changelog

Improvements

  • (Breaking Change) Aggregrate takes any Encodable type. Query planning methods are now: findExlpain, firstEplain, countExplain, etc. The distinct query now works. The client will also not throw an error anymore when attempting to delete a File and the masterKey is not available. The developer will still need to configure the server to delete the file properly (#122), thanks to Corey Baker.

1.4.0

Full Changelog

Improvements

  • (Breaking Change) A query hint can now be set using a method and its return type is automatically inferred. In addition, a hint can now be any Encodable type instead of just a String (#119), thanks to Corey Baker.

1.3.1

Full Changelog

New features

  • Add findAll query to find all objects (#118), thanks to Corey Baker.
  • Can now delete the iOS Objective-C SDK Keychain from app (#118), thanks to Corey Baker.
  • Migrate installationId from obj-c SDK (#117), thanks to Corey Baker.

Improvements

  • Added ability to initialize SDK with ParseConfiguration. Can now update certificate pinning authorization after SDK is initializated (#117), thanks to Corey Baker.

1.3.0

Full Changelog

Improvements

  • (Breaking Change) No longer require dispatch to main queue when using ParseInstallation. The side effect of this is badge is no longer retrieved by the SDK. The developer should retrieve the badge count on their own and save it to ParseInstallation if they require badge (#114), thanks to Corey Baker.

Fixes

  • (Breaking Change) Correctly saves objectId of ParseInstallation to Keychain when saving to server. Also fixes issue when using deleteAll with current ParseUser and ParseInstallation. Old installations will automatically be migrated to the new one. If you end up having issues you can delete all of the installations in your ParseDashboard that were created with Parse-Swift < 1.30. If you are not able to do this, you can all log out of devices using Parse-Swift < 1.30 and then log back in (#116), thanks to Corey Baker.

1.2.6

Full Changelog

Fixes

  • Recreate installation automatically after deletion from Keychain (#112), thanks to Corey Baker.
  • Error when linking auth types due to server not sending sessionToken (#109), thanks to Corey Baker.

1.2.5

Full Changelog

Fixes

  • Let ParseFacebook accept expiresIn parameter instead of converting to date (#104), thanks to Corey Baker.

1.2.4

Full Changelog

Fixes

  • Ensure all dates are encoded/decoded to the proper UTC time (#103), thanks to Corey Baker.

1.2.3

Full Changelog

Fixes

  • Fixed a bug that prevented custom objectIds from working (#101), thanks to Corey Baker.

1.2.2

Full Changelog

New features

Fixes

  • There was another bug after a user first logs in anonymously and then becomes a real user. The authData sent to the server was not stripped, keep the user anonymous instead of making them a real user (#100), thanks to Corey Baker.

1.2.1

Full Changelog

Improvements

  • Child objects are now automatically saved in batches using transactions. This will result in less network overhead and prevent uneccessary clean up of data on the server if a child objects throws an error while saving (#94), thanks to Corey Baker.

Fixes

  • There was a bug after a user first logs in anonymously and then becomes a real user as the server sends a new sessionToken when this occurs, but the SDK used the old sessionToken, resulting in an invalid sessionToken error (#94), thanks to Corey Baker.

1.2.0

Full Changelog

New features

  • Add transaction support to batch saveAll and deleteAll (#89), thanks to Corey Baker.
  • Add modifiers to containsString, hasPrefix, hasSuffix (#85), thanks to Corey Baker.

Improvements

  • (Breaking Change) Allows return types to be specified for ParseCloud, query hint, and explain (see playgrounds for examples). Changed functionality of synchronous query.first(). It use to return nil if no values are found. Now it will throw an error if none are found. (#92), thanks to Corey Baker.
  • Better error reporting when decode errors occur (#92), thanks to Corey Baker.
  • Can use a variadic version of exclude. Added examples of select and exclude query in playgrounds (#88), thanks to Corey Baker.

1.1.6

Full Changelog

Fixes

  • Send correct SDK version number to Parse Server (#84), thanks to Corey Baker.

1.1.5

Full Changelog

Improvements

  • Make it easier to use ParseApple (#81), thanks to Corey Baker.
  • ParseACL improvements. Only call ParseUser.current when necessary (#80), thanks to Corey Baker.

1.1.4

Full Changelog

New features

Improvements

  • Added ParseLiveQuery SwiftUI example to Playgrounds (#77), thanks to Corey Baker.

1.1.3

Full Changelog

New features

Fixes

  • Fixes some issues with ParseUser.logout (#73), thanks to Corey Baker.

1.1.2

Full Changelog

Fixes Installing via SPM crashes (#69), thanks to pmmlo.

1.1.1

Full Changelog

Fixes

  • Expose ParseLiveQuery subscription properties (#66), thanks to Corey Baker.

1.1.0

Full Changelog

New features

1.0.2

Full Changelog

New features

  • Linux support. See the PR for limitations (#59), thanks to Corey Baker.

1.0.0

New features

  • Config support (#56), thanks to Corey Baker and Tom Fox.
  • Role and Relation support. Also improved Parse operations and added examples in Playgrounds (#54), thanks to Corey Baker and Tom Fox.
  • Added more Query support for distinct, aggregate, nor, containedBy, and relative time (#54), thanks to Corey Baker and Tom Fox.
  • Annonymous and Apple login along with ParseAuthentication protocol for support of any adapter (#53), thanks to Corey Baker and Tom Fox.
  • Developer side network authentication for certificate pinning. Parse-Swift can share authentication with ParseLiveQuery or they can use seperate (#45), thanks to Corey Baker and Tom Fox.
  • Full LiveQuery support (min requirement: macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0) (#45), thanks to Corey Baker and Tom Fox.
  • Support of Cloud and Job functions along with password reset and verification email request (#43), thanks to Corey Baker and Tom Fox.
  • Add ParseFile support (#40), thanks to Corey Baker.
  • Add deleteAll to Parse objects (#34), thanks to Corey Baker.
  • Save child pointers and deep saving of objects (#21), thanks to Corey Baker.
  • Persist ParseUser, ParseInstallation, and default ParseACL to Keychain (#19), thanks to Corey Baker.
  • Add PrimitiveObectStore protocol that extends Keychain Store (#13), thanks to Pranjal Satija.
  • Add AnyCodable support (#12), thanks to Corey Baker and Shawn Baek.
  • Add Keychain storage (#7), thanks to Florent Vilmart.
  • Add ParseError, SwiftLint, saveAll, SPM, synchronous support (#6), thanks to Florent Vilmart.
  • Create Parse-Swift project, project Playground, and add Travis CI (#1), thanks to Florent Vilmart.

Improvements

Fixes

  • Delete current installation during logout (#52), thanks to Corey Baker.
  • Parse server supports $eq, but this is not supported by LiveQueryServer, switched to supported (#49), thanks to Corey Baker.
  • Bug when updating a ParseObject bug where objects was accidently converted to pointers (#48), thanks to Corey Baker.
  • User logout was calling the wrong endpoint (#43), thanks to Corey Baker and Tom Fox.
  • Fix an issue where ACL was overwritten with nil (#40), thanks to Corey Baker.
  • Update Keychain during fetch. Fix synchronous bug that occured with ParseError was thrown (#38), thanks to Corey Baker.
  • Fix ParseEncoder bugs (#27), thanks to Corey Baker.
  • Fix async callback queue bug (#27), thanks to Corey Baker.
  • Fix bugs in ParseACL and bump minimum OS support to .iOS(.v11), .macOS(.v10_13), .tvOS(.v11), .watchOS(.v4) (#19), thanks to Corey Baker.
  • Fix bugs in batch and save responses (#15), thanks to Corey Baker.
  • Fix Keychain tests (#12), thanks to Corey Baker.