iOS

iOS

1.3.1 Wednesday, September 14, 2016


As part of this release we had 47 commits which resulted in 7 issues being closed.

Performance Improvements

  • #1379 ForestDB updateseq

Enhancements

  • #1400 Support for refresh response without ID token

Bugs

  • #1369 PSWebSocket crash iOS 10
  • #1379 ForestDB updateseq
  • #1387 tvOS Unit Test Build has a lot of warnings
  • #1392 When OIDC Refresh token failed, there is no replication change notification sent.
  • #1403 CBLSocketChangeTracker endless loop of JSON Parsing Errors
  • #1406 Encryption is a no-op with the system libsqlite3 on macOS 12

Download

You can download this release from Couchbase.com

If you are using Cocopods, just add this line to your Podfile:

pod 'couchbase-lite-ios', '~> 1.3.1'

1.3 Thursday, August 3, 2016


As part of this release we had 60 issues closed.

This is a feature release, with a focus on performance. Noteworthy changes:

  • Support for OpenID Connect authentication, so you can log into Sync Gateway using a 3rd-party identity like a Google or Yahoo ID.
  • Timed expiration of documents can help keep your database from growing indefinitely.
  • Better performance with docs that have many revisions. Replication is faster, and older revisions are now automatically cleaned up in SQLite storage.
  • Optimized redisplay of UITableViews when using CBLUITableController.
  • Clearer error messages and better logging.
  • And of course many smaller optimizations, and lots of bug fixes.

Performance Improvements

  • #1114 LiveQuery shouldn't re-run query if view index didn't change
  • #1150 Optimize & animate CBLUITableController by using the Levenshtein algorithm
  • #1165 Incrementally purge oldest revisions in SQLite databases
  • #1242 Fix inefficiencies replicating docs with many revisions
  • #1340 Optimized multipart download performance

Enhancements

  • #394 Start using NSURLSession in the replicator
  • #984 Comparing CBLQuery objects
  • #1100 External property on kCBLDatabaseChangeNotification when CBL is remote
  • #1107 Logging overhaul
  • #1117 Redact passwords/tokens in URLs in log messages
  • #1118 API: Public method for inserting existing revisions (putExistingRevisionWithProperties:...)
  • #1148 API: Make -[View updateIndex] public; add async version
  • #1150 Optimize & animate CBLUITableController by using the Levenshtein algorithm
  • #1165 Incrementally purge oldest revisions in SQLite databases
  • #1181 API: Document expiration time (TTL)
  • #1201 Replicator should immediately fail if URL path is invalid
  • #1245 Expose server error messages in NSErrors from public API
  • #1266 OpenID Connect authenticator
  • #1271 Disable App Transport Security on Mac OSX LiteServ
  • #1291 Allow configuring revs_limit in LiteServ
  • #1334 Scope cookie storage by database, not by replication

Bugs

  • #641 Enumerate sequence in descending order in CBForest not working
  • #966 CBLIS : Data loss
  • #1005 Replication fails without starting on wifi if network depends on a proxy
  • #1015 Crash when [CBLRemoteRequest connection:didFailWithError:]
  • #1045 POST docs does not support HTTPBodyStream
  • #1071 [Testfest] Items not showing up in offline mode
  • #1085 CBLIS : NSIncrementalStore accessed by multiple context dispatch queues
  • #1095 Obsolete rows left in view index when documentType is used (1.1.1)
  • #1106 CBLListener readOnly property prevents pulls from updating the database
  • #1120 Warn if map function calls emit(nil, ...)
  • #1124 Multipart Uploader cannot upload the attachment when using basic auth
  • #1128 Crash pushing docs with non-downloaded attachments
  • #1129 CBLIS: NSSet was mutated while being enumerated.
  • #1131 CBLVersion() incorrectly returns "(unofficial)" in official releases
  • #1132 CBLReplicator.isDocumentPending is inaccurate when replicator is offline
  • #1138 Continuous puller with WebSocket not responding with 401 error when changing password
  • #1139 ChangeTracker POST request are incompatible with CouchDB
  • #1143 Swift API glitches
  • #1152 CBLRestReplicator does not properly end bgTask when app is foregrounded
  • #1163 Fixed macOS 10.10 dependency & updated deployment version to 10.9
  • #1180 Doc can be saved with missing attachment file, leading to errors
  • #1188 CBForest bad memory access while purging doc
  • #1191 Liteserv crashes with Forestdb option when creating local docs after delete operation
  • #1192 Manual compaction returns error if auto-compact is already running
  • #1200 Replication rejects attachments generated by PouchDB with revpos:0
  • #1216 REST API: POST /_replicate can start/stop once, but not restart?
  • #1228 One-shot push from empty db never stops
  • #1233 Failure to encrypt SQLite database when using WAL journaling
  • #1260 Inconsistent response when no conflicts are present and ?conflicts=true
  • #1263 Incorrect "error" property in REST response for GET of deleted doc
  • #1274 pendingDocumentIDs is incorrect
  • #1279 Don't stop replicator if one doc gets an error
  • #1292 _replicate between 2 dbs on same LiteServ fails
  • #1323 Cannot push encrypted attachments when testing with ToDoLite
  • #1325 LiteServ crash when delete dbs asyncronously
  • #1327 Archive build is missing symbols in iOS frameworks
  • #1335 Database upgrades from 1.1 not copying "content_type" of attachments
  • #1348 OIDC tokens in Keychain should be per-database
  • #1362 App crashing on iOS 8.3 device
  • #1370 TodoLite showing wrong list when deleting tasks

Download

You can download this release from Couchbase.com

If you are using Cocopods, just add this line to your Podfile:

pod 'couchbase-lite-ios', '~> 1.3'

1.2.1 Thursday, April 21, 2016


Couchbase Lite for iOS 1.2.1 is a maintenance release.

Performance Improvements

  • #1017 Possible p2p memory leak
  • #1127 Replicator isn't including Authorization: header in requests, so it gets unnecessary 401s

Enhancements

  • #1078 Check for empty database before using active_only

Bugs

  • #1006 MYUtilites function beginBackgroundTaskNamed: crash when app goes to background twice while replicating
  • #1017 Possible p2p memory leak
  • #1048 Couchbase lite iOS binary has enable_bitcode' flag disabled
  • #1101 Couchbase Lite thread stuck on GZIP operation
  • #1127 Replicator isn't including Authorization: header in requests, so it gets unnecessary 401s
  • #1140 Continuous WebSocket puller crashes when receiving changes after changing user's password
  • #1153 Carthage build not working as suggested
  • #1168 Listener basic auth not being evaluated when syncing over SSL.

Download

You can download this release from Couchbase.com

If you are using Cocopods, just add this line to your Podfile:

pod 'couchbase-lite-ios', '~> 1.2.1'

Support Statement

Version 1.1 was released in June, 2015. With the release of version 1.2, the support window for 1.1 expires in August 2016.

Release Release Date End of Life Date
1.0 May 2014 December 2015
1.1 June 2015 August 2016
1.2 Febrary 2016

1.2.0 Febrary 3, 2016


As part of this release we had 537 commits which resulted in 92 issues being closed. This release features a number of enhancements and bug fixes, including:

  • Improved ForestDB Storage Engine (Developer Preview) - Our developer preview for the ForestDB storage engine saw a number of major code improvements under the hood.
  • Improved database encryption - AES-256 on-disk encryption with your choice of provided storage library: SQLCipher or ForestDB
  • CBL Incremental Store improvements - Your CoreData apps benefit from significant performance improvements and bug fixes.

The list goes on, including better P2P support, replication speed-ups, AppleTV compatibility, and more!

Performance Improvements

  • #726 CBLListener.readOnly=YES prevents clients from storing checkpoints
  • #733 Peer replication checkpoints are lost if its hostname or port changes
  • #858 Attachment downloads should be resumeable
  • #860 Ignore redundant attachment downloads
  • #922 No auto-compact (db.forest getting very large)
  • #926 Enable HTTP compression for _changes feed requests (non-continuous)
  • #927 Compression for _changes feed requests (continuous)
  • #938 CBLIS - Very poor performances from 5000 documents locally
  • #960 CBLIS - Improve relationship cache invalidation
  • #972 ForestDB-based view indexes don't auto-compact
  • #991 Verify that ForestDB store's allDocs query is actually faster than SQLite store's allDocs
  • #1046 CBLLiveQuery notification throttling too aggressive by default

Enhancements

  • #73 Disallow leading "_" in attachment name (for compatibility)
  • #79 Deferred attachment download
  • #82 Add SSL client cert support to replicator
  • #485 ForestDB: Reimplement geo-queries
  • #652 Add CBLJSViewCompiler to the framework
  • #702 Integrate new replicator
  • #729 Allow validations to distinguish local from remote changes
  • #806 Add "_conflicts" property to doc in map function when doc is in conflict
  • #808 Expose totalRows from CBLView to developers
  • #826 ForestDB: Implement database encryption
  • #836 Allow adding/removing db encryption, or changing the key
  • #858 Attachment downloads should be resumeable
  • #859 Attachment downloads should be more fault tolerant
  • #870 Migrating SQLite db to ForestDB
  • #879 Need a purge method from CoreData with CBLIncrementalStore
  • #918 Build for tvOS (AppleTV)
  • #926 Enable HTTP compression for _changes feed requests (non-continuous)
  • #927 Compression for _changes feed requests (continuous)
  • #928 Add Carthage support
  • #950 Update CouchbaseLiteViewer
  • #960 CBLIS - Improve relationship cache invalidation
  • #970 Add official openDatabase API for encryption/storage options
  • #976 Package a SQLCipher binary with our storage engine
  • #1029 Set custom user agent on HTTP Requests
  • #1052 Optimize first-time sync

Bug Fixes

  • #648 CBLModel has trouble with dynamic properties in Swift classes
  • #649 Attachment crash (CBL_BlobStoreWriter's initializer failed?)
  • #671 "_removed" properties received from SG cause errors pushing to another server
  • #681 Migrate v1.1.0 database file to cblite2 file structure
  • #683 All-docs queries ignore prefixMatchLevel property
  • #686 The bg replication server's database not getting closed
  • #695 Revise replaceDatabase signature and backward db support
  • #698 CBLReplicator could still be in the running status after closing the database
  • #728 Checkpoint ID shared by distinct pull replications
  • #733 Peer replication checkpoints are lost if its hostname or port changes
  • #800 "Unexpected CBForest exception iterating query"
  • #805 Crash after receiving 401 error from CBLReplication (ASSERTION FAILED: storage)
  • #807 CBLReplication.pendingDocIDs doesn't update while replicator not running
  • #838 Implement readOnly mode in CBLSyncListener
  • #841 Assertion failure when using invalid username/password with replication
  • #843 CBLDatabase not getting attachments from ancestry when processing attachments
  • #857 Cannot get result using CBLQueryBuilder with NSSortDescriptor
  • #877 Listener throws warnings even though there is no error
  • #889 Query builder can't index on descending sort descriptors
  • #892 Query.sortDescriptors doesn't gives expected result when '-limit' is applied.
  • #893 Query.postFilter with limit gives limit+1 results.
  • #895 Pusher doesn't send non-winning deletion replications (ForestDB)
  • #899 WARNING: Unexpected CBForest exception iterating query
  • #900 401 status from server not being propagated to CBLReplication.lastError
  • #901 -[ListenerHTTP_Tests test03_ReadOnly] fails in iOS 9 simulator
  • #903 Problem with relationship one-to-many when documents are created simultaneously on multiple devices
  • #908 ForestDB queries wrong key range for descending=true and prefixMatch
  • #909 New model objects created with +modelForDocument should set isNew flag to true
  • #917 CBL returns NO with no error when attempting to encrypt an SQLite database
  • #921 CBLQueryBuilder: Sorted property disappears from _valueTemplate (select)
  • #922 No auto-compact (db.forest getting very large)
  • #925 Crash in processing CBLIS changes when document has no type
  • #938 CBLIS - Very poor performances from 5000 documents locally
  • #942 CBLIS - Crash with relationships
  • #958 CBLIS doesn't handle accesses from multiple dispatch queues
  • #961 400 Invalid Attachment Warning / Error in Pull Replication
  • #963 Couchbase lite eventually sends invalid heartbeat value for longpoll feed
  • #964 WebSockets cannot be used with channel filtering for large amounts of channels
  • #965 CBLModel -propertiesToSave does not nil check for _document == nil
  • #973 LiteServ logs disconnect warnings
  • #974 Liteserv throws exception when invoked with relative paths
  • #979 AttachmentsPath of CBLManager replaceDatabaseNamed:... should be nullable
  • #982 CBL can't handle _removed (some of the time) and tags it as illegal and kills the replicator
  • #983 Full-text indexing fails for non-English-language users
  • #986 "Invalid revpos" warnings and attachment errors during pull replication
  • #987 ForestDB crashes with a fullTextQuery
  • #999 Unsafe threading closing ForestDB view index in low-memory situation
  • #1001 Attachment errors should not stop the replicator
  • #1025 CBLDatabaseUpgrade selects wrong noAtts column
  • #1039 The couchbase-lite-ios package doesn't contain tvOS binary
  • #1040 CBL tvOS scheme absent for building tvOS package.
  • #1041 DatabaseUpgrade not importing local docs
  • #1046 CBLLiveQuery notification throttling too aggressive by default
  • #1047 Adding Universal build of the 'releases/1.2' to Kitchen-Sync causes missing symbol during linking
  • #1048 Couchbase lite iOS binary has enable_bitcode' flag disabled
  • #1059 Workaround go multipart parser issue -- use different boundary?
  • #1061 Bug on to-many relationships with Core Data context
  • #1062 Liteserv binary doesn't use the ForestDB when specified via 'defaults' mac command
  • #1063 Debug LiteServ build fails: missing symbol _CBLRegisterJSViewCompiler
  • #1079 -[CBL_SQLiteStorage lowMemoryWarning]: unrecognized selector sent to instance
  • #1081 [tvOS] Cannot create databases in default CBLManager
  • #1082 Delete docs could cause missing undeleted docs in ForestDB view index
  • #1083 App needs trigger(going back to home screen and realunch) to sync/pull docs

Download

You can download this release from Couchbase.com

If you are using Cocopods, just add this line to your Podfile:

pod 'couchbase-lite-ios', '~> 1.2'

Support Statement

Version 1.1 was released in June, 2015. With this release of version 1.2, the support window for 1.1 expires in August 2016.

Release Release Date End of Life Date
1.0 May 2014 December 2015
1.1 June 2015 August 2016
1.2 Febrary 2016

1.1.1 Sept 14, 2015


Caution:

If you use the database encryption feature introduced in Couchbase Lite for iOS 1.1 in combination with file attachments, then you are affected by a critical security issue that is fixed in this release. Please upgrade to Couchbase Lite for iOS 1.1.1 immediately to ensure that your attachments are encrypted. Only attachments are affected. The Couchbase Lite database files themselves were correctly encrypted in the 1.1 release.

In order to apply the fix, ensure that your application opens, at least once, every Couchbase Lite database that was encrypted using Couchbase Lite for iOS version 1.1. This will initiate an automatic process that encrypts all previously attached files. Files subsequently attached to a document using Couchbase Lite version 1.1.1 and later will be encrypted automatically, before any bytes are actually written to storage.

Couchbase Lite for iOS v1.1.1 is a hotfix release containing fixes for one critical security issue, as well as several other issues.

Critical Security Fixes

  • #912 Encrypt attachment store if db encrypted, and fix existing unencrypted stores

Bug Fixes

  • #834 Use NS_UNAVAILABLE attribute to mark -init as unavailable in API classes
  • #832 Use parameterized (generic-ized) NSArray/NSDictionary in public APIs
  • #829 Fix for push replicator loading all doc bodies, with ForestDB
  • #828 Fixed unintentional 100ms delay sending multipart HTTP bodies
  • #827 Send mismatched MIME multipart boundary strings on HTTP retry
  • #817 Replication Push (to CouchDB) is failing when attachments are involved
  • #815 ChangeTracker SSL settings incompatible with iOS 9 Transport Security
  • #809 CBLManager.storageType is not in public header, despite being documented in wiki
  • #803 400 bad_request for view query with stale is false parameter
  • #802 Failed to write revision with attachment
  • #793 CBLIS - Slow down UI thread when saving CoreData context
  • #788 CBL_BlobStore temp directories don't get cleaned up, can overflow
  • #786 Warning replicating attachments from CouchDB
  • #782 CBLIS - Cannot nullify nullable attributes and relationships
  • #781 ForestDB: Crash when query with non existent keys after reindex
  • #772 SSL error -9806 from P2P replication
  • #765 dateWithJSONObject: method cannot parse ISO 8601 dates with a time zone designator "+hhmm" or "-hhmm"
  • #763 CBLIS - Cannot nullify NSData property
  • #759 Reference to -queryAllDocuments in CBLQuery.h documentation
  • #758 CBL 1.1 Mac: Stopping continuous replication consistently triggers timeout warning
  • #757 Problems with conflictHandler in CBLIncementalStore
  • #756 CBLIS query with boolean value returns 0 result
  • #755 CBL 1.1 Mac: CBLQueryRow.document is null
  • #752 CBLMultipartUploader's connection:needNewBodyStream returns closed stream
  • #749 CBLIncrementalStore - Fail when sorting with key from relationship doc
  • #727 ForestDBViewStorage doesn't filter _design docs out when indexing
  • #725 Listener doesn't expose actual Bonjour service name that's published
  • #724 Need a way to disable cert hostname check (only for 'anonymous' P2P certs)
  • #717 'Assertion failed: Sequence of {4A8D140 #633-......} unknown'
  • #714 Error re-adding a document after it's been purged
  • #703 CBLModel not working with namespaced Swift classes
  • #664 Temporary folder not getting removed?
  • #629 Replication loop with conflicts (status 594).
  • #235 Error message passed to rejectWithMessage: in validation block does not propagate to out-error

Known Issues

  • #877 Listener throws warnings even though there is no error.

Download

You can download this release from Couchbase.com

If you are using Cocopods, just add this line to your Podfile:

pod 'couchbase-lite-ios', '~> 1.1.1'

Support Statement

Version 1.0 was released in May, 2014. With this release of version 1.1, the support window for 1.0 expires in December 2015.

Release Release Date End of Life Date
1.0 May 2014 December 2015
1.1 June 2015

1.1.0 June 17, 2015


Couchbase Lite for iOS v1.1.0 is the most feature rich release since v1.0.0, which we released one year ago. It has several new features and enhancements including:

  1. Pluggable storage engines. Couchbase Lite can now support multiple data persistence libraries. By default, it will continue to use SQLite.
  2. [Experimental] Our new, super-fast ForestDB storage engine! Anyone who wants a preview of our future default storage engine can get started today by following these instructions for enabling the ForestDB storage engine.
  3. Page-level database encryption via SQLCipher.
  4. You can now query your database using NSPredicates thanks to CBLQueryBuilder, which provides an alternative to using map/reduce functions.
  5. Our newly overhauled Core Data adapter, CBLIncrementalStore. Add sync to your Core Data applications by using Couchbase Lite as your backing store.
  6. Improved replication and view indexing performance. Views are now stored more efficiently, which speeds up document indexing by roughly 10%.

Checkout the full list of API changes for more details.

Note:Couchbase Lite 1.1.0 has a new optimized database schema which is not backwards compatible with 1.0.4 and earlier release. Once automatically migrated to the Couchbase Lite 1.1.0 format, your application’s .cblite database files are no longer readable by earlier versions. This would only impact developers attempting to share a database among multiple apps running different versions of Couchbase Lite, or Couchbase Lite downgrade scenarios.

Features and Improvements

  • #684 iOS 8.2+ seems slower than 8.1 or lesser
  • #677 Test performance improvement replicating docs with large revision trees
  • #606 Inverse relation support for CBLModel
  • #605 CBLIncrementalStore - Support query via abstract entity
  • #571 Use CBLQueryBuilder in CBLIncrementalStore
  • #569 Support to-many without inverse relationship in CBLIncrementalStore
  • #526 Implement isStoredInExternalRecord support in CBLIncrementalStore
  • #514 Support feed=eventsource in _changes feed
  • #439 Support for encoding / decoding NSURL instances as properties of a CBLModel
  • #358 userProperties method on CBLModel.
  • #316 Can CBLModel define the "type" @property instead of making a subclass have to implement it?

Bug fixes

  • #723 CBL 1.1 (iOS) Docs not syncing when I think they should
  • #718 Crash when create a document with attachment in one single revision
  • #712 CBLView updateIndex isn't public, but is in the API spec
  • #711 Potential database upgrade error
  • #709 CBLQuery fullTextRanking and fullTextSnippet properties were removed
  • #705 ForestDB native lib missing dev preview package
  • #701 Couchbase lite iOS memory consumption indexing views
  • #700 ForestDB fails in 32-bit OS due to bug in get_memory_size fn
  • #696 Start-restart replication problem in CBL 1.1.0
  • #691 Thread-safety issue in CBLReplication cookie methods
  • #687 Cannot get the database schema version while replace/upgrade a database
  • #684 iOS 8.2+ seems slower than 8.1 or lesser
  • #672 Pulled docs with a stub attachment failed to insert
  • #665 Multipart streams cannot be reopened when retrying to send the request
  • #662 ForestDB: fullTextSearch emmits wrong values
  • #608 Pull replication missing documents from SG channel
  • #592 CBL 1.0.4 - Rare/minor dealloc issue
  • #578 View not indexing older revisions
  • #576 New object notification not generated when using CBLIncrementalStore
  • #574 Query with limit and postFilter may not return enough rows
  • #566 save and lockForWriting issues
  • #543 Replicators should have independent cookie storage
  • #495 forestdb::RevTree:compact() causing crash
  • #479 ForestDB: Emitting dictionary key causes error
  • #390 Sync problem with Cloudant databases - puller or change tracker?

Download

You can download this release from Couchbase.com

If you are using Cocopods, just add this line to your Podfile:

pod 'couchbase-lite-ios', '~> 1.1'

Support Statement

Version 1.0 was released in May, 2014. With this release of version 1.1, the support window for 1.0 expires in December 2015.

Release Release Date End of Life Date
1.0 May 2014 December 2015
1.1 June 2015

1.0.4, March 5, 2015


This release focuses on quality improvements.

Features and Improvements

  • Limit puller memory use, by throttling ChangeTracker (090a279)
  • Added CBL_Replicator option to pin to a specific SSL cert (2ac3a00)
  • API: Added CBLReplication.serverCertificate (bd28768)
  • Propagate changes in CBLJSONEncoding array to its parent model (658f622)
  • Support log() function for JS map functions (3aa03f9)
  • Return a Bonjour (.local) hostname instead of a raw IPv4 address when calling the CBLListener's URL method (4e930bf)
  • Support for easily using an anonymous SSL identity in CBLListener (1db5f65)

Bug fixes

  • Fix a crash found in CBLBatcher (18fa9e2)
  • Fix WebSocket connecting to a wrong port when the HTTPS URL had no port number specified (1ccd928)
  • Fix replicator overriding the cookies set in the request headers added to a replicator (1e0dc7f)
  • Fix CBLJSONEncoding array not propagate changes to its parent model (658f622)
  • Fix crash in CBLModel when setOnMutate is not defined in CBLJSONEncoding submodel (dd90db0)
  • Fix failures when adding revisions to resolve conflicts (7b3fca5)

1.0.3.1, October 28, 2014


This is to fix two regressions introduced in 1.0.3, one a crash and one a hang:

  • Assertion failure reindexing views, #438
  • Hang at -[MYReadWriteLock lockForWriting], #500

#438 has a workaround, but #500 doesn't; it will just cause random deadlocks. (Apparently the app needs to do specific things to hit the situation that deadlocks, but it's not clear what those things are or how to avoid them.)

1.0.3, October 17, 2014


With our third quality release we again focus on bug fixing and improvements, but have begun to add enhancements that we plan to port over to the rest of the Couchbase Lite clients in our next major release. Some highlights are as follows:

Features

  • Added several CBLQuery enhancements to allow custom sorting and filtering, and to make prefix-match queries easier to write.
  • Added method -[CBLDatabase close] to explicitly close a database. This can be useful for apps that manage a large number of databases and want to limit the number of open files.
  • CBLModel now supports the NSURL class for document properties.
  • CBLModel now has a "type" property, to make it easier to set the "type" property of a document.

Bug fixes

  • Self-signed server certs, that were properly registered with the replicator, are no longer improperly rejected.
  • Models are autosaved on the correct thread.
  • Grouped queries now properly reduce the values from the final group of rows.
  • CBLLiveQuery will now refresh after the view's mapBlock is changed.
  • Fixed a bug that caused -deleteDatabase: to sometimes hang.
  • SSL connections now require the TLS v1 protocol, to avoid falling back to SSLv3 which is potentially vulnerable to the "POODLE" exploit (even though that exploit seems to require a web browser, not an app using a REST API.)

Improvements

  • Better arbitration between multiple threads wanting to access a database. This should eliminate "database busy" warnings or errors and many of the delays caused by waiting for the database.
  • Faster allDocuments queries.
  • Faster database compaction.
  • In the static library, symbols from 3rd party libraries (like CocoaLumberjack and GCDAsyncSocket) are now renamed, to avoid causing conflicts in apps that also use those libraries.

1.0.2, August 22, 2014


In our second quality release, we have added optimizations and fixes for map/reduce, fixes to our SSL support and Replication API, behavior corrections in CBLModel, addressed a number of issues filed on the changes feed, added a few iOS-specific APIs, and more. Let's go through some of these changes as follows:

Map/Reduce optimizations

Optimize view performance by re-indexing multiple views together: When updating a view's index, Couchbase Lite now also updates other related views' indexes simultaneously. This saves time because a lot of the work (iterating through the sequences, fetching the documents, looking for conflicts) is shared. The other views that will get updated are the ones whose names share the same prefix up through the first "/". (This is the same rule used by CouchDB.) If the view's name does not include a "/", it won't be indexed with any other views. To take advantage of this, you should name your views so that views that are often used together — like in the same screen of your UI — share a common prefix. (For instance, "tasklist/bydate", "tasklist/commentcount") (Commit 09b9a75)

Optimization for map functions that emit 'doc' as the value: It's still better for performance to not emit the entire document as a value, but there are some apps that do it because they're following old/obsolete advice or sample code, so we've optimized it to reduce the slowdown. (Commit 03454e8)

Several other view-indexing performance optimizations. (Commits 59594d4, ce3ea09)

Fixes for SSL server cert trust checking

  • CBLSocketChangeTracker now allows a self-signed cert, provided the replicator allows it (i.e. app has configured that root cert.)
  • The replicator now stops completely on an SSL trust error instead of retrying.
  • Replicator now sets the correct error code when it comes across an untrusted server cert. (Invalid-cert, not auth-canceled.) (Commit d222ba1)

Replicator fixes

  • Fixes for "_asyncTaskCount >= 0" assertion failures
  • Fixes for checkpoints not being saved or for 409 Conflict errors saving checkpoints

API additions

We have also made some iOS-specific API additions that include the following:

  • CBLJSON.h:

    + (NSString*) JSONObjectWithDate: (NSDate*)date timeZone:(NSTimeZone *)tz;
    

  • CBLManager.h:

    //Added to struct CBLManagerOptions:
    NSDataWritingOptions fileProtection;    /**< File protection/encryption options (iOS only) */
    /** Should the databases and attachments be excluded from iCloud or Time Machine backup?
        Defaults to NO. */
    @property BOOL excludedFromBackup;
    /** Redirects Couchbase Lite logging: instead of writing to the console/stderr, it will call the
        given block. Passing a nil block restores the default behavior. */
    + (void) redirectLogging: (void (^)(NSString* type, NSString* message))callback;
    

  • CBLReplication.h:

    /** Suspends/resumes a replication.
    On iOS a replication will suspend itself when the app goes into the background, and resume
    when the app is re-activated. If your app receives a push notification while suspended and needs
    to run the replication to download new data, your handler should set suspended to NO to resume
    replication, and then set the property back to YES when it's done. */
    @property BOOL suspended;
    

Some additional fixes we'd like to highlight include:

  • Fixes to CBLModel #310, #363
  • Corrupt response to Content-Range requests if already in client's cache #317
  • App being rejected due to iCloud backup #357
  • WebSocket change tracker doesn't work with CBLAuthenticator #400
  • CBLSocketChangeTracker/CBLJSONReader SIGSEGV crashes #369
  • _changes JSON response from Sync Server fails parsing #384
  • Infinite loop on CBLDocument update #349
  • The draconian thread-safety check is not sufficient to detect compatible queues #376
  • CBLQuery doesn't call observer on dispatch queue #364
  • Failing assertion in CBLQueryRow due to unset _database #403

1.0.1, July 22, 2014


This is our first patch release for 1.0.0, that features fixes for higher impact issues in our Document, change tracker, and map/reduce APIs.

  • Fixed a bug in -[CBLDocument update:error:] that could cause an infinite loop if the update was blocked by a conflicting update. #349
  • Hide any passwords in URLs logged by CBLSocketChangeTracker
  • Fixed some mistakes in documentation-comments in CBLQuery.h #342, #343
  • Make [-CBLQueryRow description] not crash if the row's value is nil #318
  • CBLQuery now calls its observer on the correct dispatch queue #364
  • Database-change notifications are now delivered correctly when using dispatch queues #364

1.0.0, May 21, 2014


This is our first official release for Couchbase Lite. A major change from our Beta releases and 1.0.0 is an expansion of our platform support, which includes a 1.0.0 ready version of "portable" Java libraries to support Linux-based app development. We've also made a lot of advancement in the performance stability of our Android and Java platform, created better parity for our authentication support, and enabled better logging for community debugging feedback. Simultaneously to this release, we have also published our first beta for our C# support in a collaborative effort with our partner, Xamarin.

As we continue to build out our platform, we have made some API naming changes to reflect a strengthened spec that supports us across many different spaces. Between our last Beta and 1.0.0, we've made some minor adjustments to our naming conventions regarding basic authentication, cookie-based authentication, and logging support.