Updates for YapDatabase 4.0
This commit is contained in:
parent
4067e2632c
commit
a626fbff56
|
@ -55,7 +55,7 @@ TODO: Add long description of the pod here.
|
|||
s.dependency 'ChatSecure-Push-iOS'
|
||||
|
||||
s.dependency 'SQLCipher', '~> 4.2.0'
|
||||
s.dependency 'YapDatabase/SQLCipher', '~> 3.1.3'
|
||||
s.dependency 'YapDatabase/SQLCipher', '~> 4.0'
|
||||
|
||||
s.dependency 'libsqlfs/SQLCipher'
|
||||
s.dependency 'IOCipher/GCDWebServer'
|
||||
|
|
|
@ -134,16 +134,13 @@
|
|||
}
|
||||
NSString *databasePath = [self.databaseDirectory stringByAppendingPathComponent:name];
|
||||
|
||||
self.database = [[YapDatabase alloc] initWithPath:databasePath
|
||||
serializer:nil
|
||||
deserializer:nil
|
||||
options:options];
|
||||
self.database = [[YapDatabase alloc] initWithURL:[NSURL fileURLWithPath:databasePath] options:options];
|
||||
|
||||
// Stop trying to setup up the database. Something went wrong. Most likely the password is incorrect.
|
||||
if (self.database == nil) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
self.database.connectionDefaults.objectPolicy = YapDatabasePolicyShare;
|
||||
self.database.connectionDefaults.objectCacheLimit = 10000;
|
||||
|
||||
[self setupConnections];
|
||||
|
|
|
@ -232,7 +232,7 @@ open class OTRSignalStorageManager: NSObject {
|
|||
}
|
||||
|
||||
let query = YapDatabaseQuery(string: "WHERE (OTRYapDatabaseSignalPreKeyAccountKeySecondaryIndexColumnName) = ?", parameters: ["\(self.accountKey)"])
|
||||
secondaryIndexTransaction.enumerateKeysAndObjects(matching: query, using: { (collection, key, object, stop) in
|
||||
let _ = secondaryIndexTransaction.iterateKeysAndObjects(matching: query, using: { (collection, key, object, stop) in
|
||||
guard let preKey = object as? OTRSignalPreKey else {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
//
|
||||
|
||||
import Foundation
|
||||
import YapDatabase.YapDatabaseFullTextSearch
|
||||
import YapDatabase.YapDatabaseSearchResultsView
|
||||
import YapDatabase
|
||||
|
||||
open class OTRYapExtensions:NSObject {
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
//
|
||||
|
||||
import Foundation
|
||||
import YapDatabase.YapDatabaseView
|
||||
import YapDatabase
|
||||
|
||||
@objc public protocol OTRYapViewHandlerDelegateProtocol:NSObjectProtocol {
|
||||
|
||||
|
|
|
@ -132,11 +132,9 @@ class PushStorage: NSObject, PushStorageProtocol {
|
|||
func unusedToken() -> TokenContainer? {
|
||||
var tokenContainer:TokenContainer? = nil
|
||||
self.databaseConnection.read { (transaction) -> Void in
|
||||
transaction.enumerateKeysAndObjects(inCollection: PushYapCollections.unusedTokenCollection.rawValue, using: { (key, object, stop) -> Void in
|
||||
if let tc = object as? TokenContainer {
|
||||
tokenContainer = tc
|
||||
}
|
||||
stop.initialize(to: true)
|
||||
transaction.iterateKeysAndObjects(inCollection: PushYapCollections.unusedTokenCollection.rawValue, using: { (key, tc: TokenContainer, stop) -> Void in
|
||||
tokenContainer = tc
|
||||
stop = true
|
||||
})
|
||||
}
|
||||
return tokenContainer
|
||||
|
@ -236,18 +234,16 @@ class PushStorage: NSObject, PushStorageProtocol {
|
|||
self.databaseConnection.asyncReadWrite({ (transaction) in
|
||||
let collection = PushYapCollections.unusedTokenCollection.rawValue
|
||||
var removeKeyArray:[String] = []
|
||||
transaction.enumerateKeysAndObjects(inCollection: collection, using: { (key, object, stop) in
|
||||
if let token = object as? TokenContainer {
|
||||
//Check that there is an expires date otherwise remove
|
||||
guard let expiresDate = token.pushToken?.expires else {
|
||||
removeKeyArray.append(token.uniqueId)
|
||||
return
|
||||
}
|
||||
|
||||
// Check that the date is farther in the future than currentDate + timeBuffer
|
||||
if (Date(timeIntervalSinceNow: timeBuffer).compare(expiresDate) == .orderedDescending ) {
|
||||
removeKeyArray.append(token.uniqueId)
|
||||
}
|
||||
transaction.iterateKeysAndObjects(inCollection: collection, using: { (key, token: TokenContainer, stop) in
|
||||
//Check that there is an expires date otherwise remove
|
||||
guard let expiresDate = token.pushToken?.expires else {
|
||||
removeKeyArray.append(token.uniqueId)
|
||||
return
|
||||
}
|
||||
|
||||
// Check that the date is farther in the future than currentDate + timeBuffer
|
||||
if (Date(timeIntervalSinceNow: timeBuffer).compare(expiresDate) == .orderedDescending ) {
|
||||
removeKeyArray.append(token.uniqueId)
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -924,13 +924,7 @@ typedef NS_ENUM(NSInteger, XMPPClientState) {
|
|||
{
|
||||
DDLogWarn(@"%@: %@ %@ %@", THIS_FILE, THIS_METHOD, message, error);
|
||||
[self.databaseConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
[transaction enumerateMessagesWithElementId:message.elementID originId:message.originId stanzaId:nil block:^(id<OTRMessageProtocol> _Nonnull databaseMessage, BOOL * _Null_unspecified stop) {
|
||||
if ([databaseMessage isKindOfClass:[OTRBaseMessage class]]) {
|
||||
((OTRBaseMessage *)databaseMessage).error = error;
|
||||
[(OTRBaseMessage *)databaseMessage saveWithTransaction:transaction];
|
||||
*stop = YES;
|
||||
}
|
||||
}];
|
||||
[transaction setMessageErrorWithElementId:message.elementID originId:message.originId stanzaId:nil error:error];
|
||||
}];
|
||||
}
|
||||
- (void)xmppStream:(XMPPStream *)sender didFailToSendPresence:(XMPPPresence *)presence error:(NSError *)error
|
||||
|
|
|
@ -111,7 +111,7 @@ import CocoaLumberjack
|
|||
transaction.enumerateMessages(elementId: responseId, originId: responseId, stanzaId: nil) { (message, stop) in
|
||||
if let message = message as? OTROutgoingMessage {
|
||||
_deliveredMessage = message
|
||||
stop.pointee = true
|
||||
stop = true
|
||||
}
|
||||
}
|
||||
if _deliveredMessage == nil {
|
||||
|
@ -146,7 +146,7 @@ import CocoaLumberjack
|
|||
transaction.enumerateMessages(elementId: oid, originId: oid, stanzaId: sid) { (foundMessage, stop) in
|
||||
if foundMessage.threadId == buddyUniqueId {
|
||||
result = true
|
||||
stop.pointee = true
|
||||
stop = true
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
@ -475,6 +475,26 @@ extension String {
|
|||
}
|
||||
|
||||
extension OTRBaseMessage {
|
||||
|
||||
@objc public static func message(forMessageId messageId: String, incoming: Bool, transaction: YapDatabaseReadTransaction) -> OTRMessageProtocol? {
|
||||
var deliveredMessage: OTRMessageProtocol?
|
||||
transaction.enumerateMessages(elementId: messageId, originId: nil, stanzaId: nil) { (message, stop) in
|
||||
if message.isMessageIncoming == incoming {
|
||||
deliveredMessage = message
|
||||
stop = true
|
||||
}
|
||||
}
|
||||
return deliveredMessage
|
||||
}
|
||||
|
||||
@objc public static func message(forMessageId messageId: String, transaction: YapDatabaseReadTransaction) -> OTRMessageProtocol? {
|
||||
if self is OTRIncomingMessage.Type {
|
||||
return self.message(forMessageId: messageId, incoming: true, transaction: transaction)
|
||||
} else {
|
||||
return self.message(forMessageId: messageId, incoming: false, transaction: transaction)
|
||||
}
|
||||
}
|
||||
|
||||
/// You can override message body, for example if this is an encrypted message
|
||||
convenience init(xmppMessage: XMPPMessage, body: String?, account: OTRXMPPAccount, buddy: OTRXMPPBuddy, capabilities: XMPPCapabilities) {
|
||||
self.init()
|
||||
|
|
|
@ -220,7 +220,7 @@ import YapDatabase
|
|||
if let roomMessage = message as? OTRXMPPRoomMessage,
|
||||
roomMessage.senderJID == xmppMessage.from?.full {
|
||||
result = roomMessage
|
||||
stop.pointee = true
|
||||
stop = true
|
||||
} else {
|
||||
DDLogWarn("Found matching MUC message but intended for different recipient \(message) \(xmppMessage)")
|
||||
}
|
||||
|
|
|
@ -26,10 +26,21 @@ extension YapDatabaseConnection {
|
|||
}
|
||||
}
|
||||
|
||||
extension YapDatabaseReadWriteTransaction {
|
||||
@objc public func setMessageError(elementId:String?, originId: String?, stanzaId:String?, error: Error) {
|
||||
enumerateMessages(elementId: elementId, originId: originId, stanzaId: stanzaId) { (message, stop) in
|
||||
if let databaseMessage = message as? OTRBaseMessage {
|
||||
databaseMessage.error = error
|
||||
databaseMessage.save(with: self)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension YapDatabaseReadTransaction {
|
||||
|
||||
/// elementId is the XMPP elementId, originId and stanzaId are from XEP-0359
|
||||
@objc public func enumerateMessages(elementId:String?, originId: String?, stanzaId:String?, block:@escaping (_ message:OTRMessageProtocol,_ stop:UnsafeMutablePointer<ObjCBool>) -> Void) {
|
||||
public func enumerateMessages(elementId:String?, originId: String?, stanzaId:String?, block:@escaping (_ message:OTRMessageProtocol,_ stop: inout Bool) -> Void) {
|
||||
guard let secondaryIndexTransaction = self.ext(SecondaryIndexName.messages) as? YapDatabaseSecondaryIndexTransaction else {
|
||||
return
|
||||
}
|
||||
|
@ -53,22 +64,22 @@ extension YapDatabaseReadTransaction {
|
|||
}
|
||||
let query = YapDatabaseQuery(string: queryString, parameters: parameters)
|
||||
|
||||
secondaryIndexTransaction.enumerateKeys(matching: query) { (collection, key, stop) -> Void in
|
||||
let _ = secondaryIndexTransaction.iterateKeys(matching: query) { (collection, key, stop) -> Void in
|
||||
if let message = self.object(forKey: key, inCollection: collection) as? OTRMessageProtocol {
|
||||
block(message, stop)
|
||||
block(message, &stop)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc public func enumerateSessions(accountKey:String, signalAddressName:String, block:@escaping (_ session:OTRSignalSession,_ stop:UnsafeMutablePointer<ObjCBool>) -> Void) {
|
||||
public func enumerateSessions(accountKey:String, signalAddressName:String, block:@escaping (_ session:OTRSignalSession,_ stop: inout Bool) -> Void) {
|
||||
guard let secondaryIndexTransaction = self.ext(SecondaryIndexName.signal) as? YapDatabaseSecondaryIndexTransaction else {
|
||||
return
|
||||
}
|
||||
let queryString = "Where \(SignalIndexColumnName.session) = ?"
|
||||
let query = YapDatabaseQuery(string: queryString, parameters: [OTRSignalSession.sessionKey(accountKey: accountKey, name: signalAddressName)])
|
||||
secondaryIndexTransaction.enumerateKeys(matching: query) { (collection, key, stop) -> Void in
|
||||
let _ = secondaryIndexTransaction.iterateKeys(matching: query) { (collection, key, stop) -> Void in
|
||||
if let session = self.object(forKey: key, inCollection: collection) as? OTRSignalSession {
|
||||
block(session, stop)
|
||||
block(session, &stop)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -97,12 +108,7 @@ extension YapDatabaseReadTransaction {
|
|||
let queryString = "Where \(MessageIndexColumnName.isMessageRead) == 0"
|
||||
let query = YapDatabaseQuery(string: queryString, parameters: [])
|
||||
|
||||
var count:UInt = 0
|
||||
let success = secondaryIndexTransaction.getNumberOfRows(&count, matching: query)
|
||||
if (!success) {
|
||||
NSLog("Error with global numberOfUnreadMessages index")
|
||||
}
|
||||
return count
|
||||
return secondaryIndexTransaction.numberOfRows(matching: query) ?? 0
|
||||
}
|
||||
|
||||
|
||||
|
@ -114,7 +120,7 @@ extension YapDatabaseReadTransaction {
|
|||
let queryString = "Where \(MessageIndexColumnName.threadId) == ? AND \(MessageIndexColumnName.isMessageRead) == 0"
|
||||
let query = YapDatabaseQuery(string: queryString, parameters: [thread.threadIdentifier])
|
||||
var result = [OTRMessageProtocol]()
|
||||
let success = indexTransaction.enumerateKeysAndObjects(matching: query) { (collection, key, object, stop) in
|
||||
let success = indexTransaction.iterateKeysAndObjects(matching: query) { (collection, key, object, stop) in
|
||||
if let message = object as? OTRMessageProtocol {
|
||||
result.append(message)
|
||||
}
|
||||
|
@ -130,17 +136,17 @@ extension YapDatabaseReadTransaction {
|
|||
|
||||
extension YapDatabaseReadTransaction {
|
||||
|
||||
@objc public func enumerateUnreadMessages(_ block:@escaping (_ message:OTRMessageProtocol,_ stop:UnsafeMutablePointer<ObjCBool>) -> Void) {
|
||||
public func enumerateUnreadMessages(_ block:@escaping (_ message:OTRMessageProtocol,_ stop: inout Bool) -> Void) {
|
||||
guard let secondaryIndexTransaction = self.ext(SecondaryIndexName.messages) as? YapDatabaseSecondaryIndexTransaction else {
|
||||
return
|
||||
}
|
||||
let queryString = "Where \(MessageIndexColumnName.isMessageRead) == 0"
|
||||
let query = YapDatabaseQuery(string: queryString, parameters: [])
|
||||
secondaryIndexTransaction.enumerateKeysAndObjects(matching: query) { (key, collection, object, stop) in
|
||||
let _ = secondaryIndexTransaction.iterateKeysAndObjects(matching: query) { (key, collection, object, stop) in
|
||||
if let message = object as? OTRMessageProtocol {
|
||||
block(message, stop)
|
||||
block(message, &stop)
|
||||
} else {
|
||||
DDLogError("Non-message object in messages index \(object)")
|
||||
DDLogError("Non-message object in messages index \(String(describing: object))")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -272,26 +272,6 @@
|
|||
}];
|
||||
}
|
||||
|
||||
+ (id<OTRMessageProtocol>)messageForMessageId:(NSString *)messageId incoming:(BOOL)incoming transaction:(YapDatabaseReadTransaction *)transaction {
|
||||
__block id<OTRMessageProtocol> deliveredMessage = nil;
|
||||
[transaction enumerateMessagesWithElementId:messageId originId:nil stanzaId:nil block:^(id<OTRMessageProtocol> _Nonnull message, BOOL * _Null_unspecified stop) {
|
||||
if ([message isMessageIncoming] == incoming) {
|
||||
//Media messages are not delivered until the transfer is complete. This is handled in the OTREncryptionManager.
|
||||
deliveredMessage = message;
|
||||
*stop = YES;
|
||||
}
|
||||
}];
|
||||
return deliveredMessage;
|
||||
}
|
||||
+ (nullable id<OTRMessageProtocol>)messageForMessageId:(nonnull NSString *)messageId transaction:(nonnull YapDatabaseReadTransaction *)transaction
|
||||
{
|
||||
if ([self class] == [OTRIncomingMessage class]) {
|
||||
return [self messageForMessageId:messageId incoming:YES transaction:transaction];
|
||||
} else {
|
||||
return [self messageForMessageId:messageId incoming:NO transaction:transaction];
|
||||
}
|
||||
}
|
||||
|
||||
- (id<OTRMessageProtocol>)duplicateMessage {
|
||||
OTRBaseMessage *message = self;
|
||||
OTRBaseMessage *newMessage = [[[self class] alloc] init];
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
//
|
||||
|
||||
import UIKit
|
||||
import YapDatabase.YapDatabaseRelationship
|
||||
import YapDatabase
|
||||
|
||||
@objc public enum RoomSecurity: Int {
|
||||
/// will choose omemo if _any_ occupants have available keys
|
||||
|
@ -264,12 +264,7 @@ extension OTRXMPPRoom:OTRThreadOwner {
|
|||
}
|
||||
let queryString = "Where \(MessageIndexColumnName.threadId) == ? AND \(MessageIndexColumnName.isMessageRead) == 0"
|
||||
let query = YapDatabaseQuery(string: queryString, parameters: [self.uniqueId])
|
||||
var count:UInt = 0
|
||||
let success = indexTransaction.getNumberOfRows(&count, matching: query)
|
||||
if (!success) {
|
||||
NSLog("Query error for OTRXMPPRoom numberOfUnreadMessagesWithTransaction")
|
||||
}
|
||||
return count
|
||||
return indexTransaction.numberOfRows(matching: query) ?? 0
|
||||
}
|
||||
|
||||
public var isGroupThread: Bool {
|
||||
|
|
|
@ -479,7 +479,7 @@ extension OTRXMPPRoomMessage {
|
|||
transaction.enumerateMessages(elementId: messageId, originId: message.originId, stanzaId: nil) { (messageProtocol, stop) in
|
||||
if let message = messageProtocol as? OTRXMPPRoomMessage {
|
||||
roomMessage = message
|
||||
stop.pointee = true
|
||||
stop = true
|
||||
}
|
||||
}
|
||||
// Mark messages as delivered, that aren't previous incoming messages
|
||||
|
|
|
@ -251,7 +251,7 @@ extension OTRXMPPRoomOccupant {
|
|||
queryString.append(")")
|
||||
|
||||
let query = YapDatabaseQuery(string: queryString, parameters: parameters)
|
||||
let success = indexTransaction.enumerateKeysAndObjects(matching: query) { (collection, key, object, stop) in
|
||||
let success = indexTransaction.iterateKeysAndObjects(matching: query) { (collection, key, object, stop) in
|
||||
if let matchingOccupant = object as? OTRXMPPRoomOccupant,
|
||||
matchingOccupant.jid != nil || matchingOccupant.realJID != nil {
|
||||
matchingOccupants.append(matchingOccupant)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
import Foundation
|
||||
import ChatSecure_Push_iOS
|
||||
import YapDatabase.YapDatabaseRelationship
|
||||
import YapDatabase
|
||||
|
||||
let kDeviceAccountRelationshipEdgeName = "OTRPushDeviceAccountRelationshipEdgeName"
|
||||
let kBuddyTokenRelationshipEdgeName = "OTRPushBuddyTokenRelationshipEdgeName"
|
||||
|
|
|
@ -190,11 +190,10 @@ extension OTRXMPPBuddy {
|
|||
transaction: YapDatabaseReadTransaction) -> OTRXMPPBuddy? {
|
||||
DDLogWarn("WARN: Using slow O(n) lookup for OTRXMPPBuddy: \(jid)")
|
||||
var buddy: OTRXMPPBuddy? = nil
|
||||
transaction.enumerateKeysAndObjects(inCollection: OTRXMPPBuddy.collection) { (key, object, stop) in
|
||||
if let potentialMatch = object as? OTRXMPPBuddy,
|
||||
potentialMatch.username == jid.bare {
|
||||
transaction.iterateKeysAndObjects(inCollection: OTRXMPPBuddy.collection) { (key, potentialMatch: OTRXMPPBuddy, stop) in
|
||||
if potentialMatch.username == jid.bare {
|
||||
buddy = potentialMatch
|
||||
stop.pointee = true
|
||||
stop = true
|
||||
}
|
||||
}
|
||||
return buddy
|
||||
|
@ -213,7 +212,7 @@ extension OTRXMPPBuddy {
|
|||
let query = YapDatabaseQuery(string: queryString, parameters: [accountUniqueId, jid.bare])
|
||||
|
||||
var matchingBuddies: [OTRXMPPBuddy] = []
|
||||
let success = indexTransaction.enumerateKeysAndObjects(matching: query) { (collection, key, object, stop) in
|
||||
let success = indexTransaction.iterateKeysAndObjects(matching: query) { (collection, key, object, stop) in
|
||||
if let matchingBuddy = object as? OTRXMPPBuddy {
|
||||
matchingBuddies.append(matchingBuddy)
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
//
|
||||
|
||||
import Foundation
|
||||
import YapDatabase.YapDatabaseActionManager
|
||||
import YapDatabase
|
||||
import YapTaskQueue
|
||||
|
||||
@objc public enum BuddyActionType: Int {
|
||||
|
|
|
@ -109,8 +109,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
+ (void)deleteAllMessagesWithTransaction:(nonnull YapDatabaseReadWriteTransaction*)transaction;
|
||||
+ (void)deleteAllMessagesForBuddyId:(nonnull NSString *)uniqueBuddyId transaction:(nonnull YapDatabaseReadWriteTransaction*)transaction;
|
||||
+ (void)deleteAllMessagesForAccountId:(nonnull NSString *)uniqueAccountId transaction:(nonnull YapDatabaseReadWriteTransaction*)transaction;
|
||||
+ (nullable id<OTRMessageProtocol>)messageForMessageId:(nonnull NSString *)messageId incoming:(BOOL)incoming transaction:(nonnull YapDatabaseReadTransaction *)transaction;
|
||||
+ (nullable id<OTRMessageProtocol>)messageForMessageId:(nonnull NSString *)messageId transaction:(nonnull YapDatabaseReadTransaction *)transaction;
|
||||
|
||||
- (nullable OTRXMPPBuddy*) buddyWithTransaction:(nonnull YapDatabaseReadTransaction*)transaction;
|
||||
|
||||
|
|
133
Podfile.lock
133
Podfile.lock
|
@ -50,7 +50,7 @@ PODS:
|
|||
- TTTAttributedLabel (~> 2.0)
|
||||
- XLForm (~> 4.1)
|
||||
- XMPPFramework/Swift
|
||||
- YapDatabase/SQLCipher (~> 3.1.3)
|
||||
- YapDatabase/SQLCipher (~> 4.0)
|
||||
- YapTaskQueue/SQLCipher
|
||||
- ZXingObjC/QRCode (~> 3.6)
|
||||
- CocoaAsyncSocket (7.6.4)
|
||||
|
@ -147,70 +147,113 @@ PODS:
|
|||
- XMPPFramework/Swift (4.1.0):
|
||||
- CocoaLumberjack/Swift
|
||||
- XMPPFramework/default
|
||||
- YapDatabase/SQLCipher (3.1.4):
|
||||
- YapDatabase/SQLCipher/Core (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Core (3.1.4):
|
||||
- CocoaLumberjack
|
||||
- YapDatabase/SQLCipher (4.0):
|
||||
- YapDatabase/SQLCipher/Core (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions (= 4.0)
|
||||
- YapDatabase/SQLCipher-ObjC/Core (4.0):
|
||||
- SQLCipher (>= 3.4.0)
|
||||
- YapDatabase/SQLCipher/Extensions (3.1.4):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/ActionManager (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/AutoView
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/AutoView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/View
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/CloudCore (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/CloudKit (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/CrossProcessNotification (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/FilteredView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/View
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/FullTextSearch (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/Hooks (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/ManualView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/View
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/Relationships (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/RTreeIndex (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/SearchResultsView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/AutoView
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/FullTextSearch
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/SecondaryIndex (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/View (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher/Core (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Core
|
||||
- YapDatabase/SQLCipher/Extensions (4.0):
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/ActionManager (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/AutoView (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/CloudCore (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/CloudKit (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/ConnectionPool (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/ConnectionProxy (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/CrossProcessNotification (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/FilteredView (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/FullTextSearch (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/Hooks (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/ManualView (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/Relationships (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/RTreeIndex (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/SearchResultsView (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/SecondaryIndex (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/View (= 3.1.4)
|
||||
- YapDatabase/SQLCipher/Extensions/ActionManager (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/ActionManager (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/AutoView (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/CloudCore (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/CloudKit (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/CrossProcessNotification (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/FilteredView (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/FullTextSearch (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/Hooks (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/ManualView (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/Relationships (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/RTreeIndex (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/SearchResultsView (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/SecondaryIndex (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/View (= 4.0)
|
||||
- YapDatabase/SQLCipher/Extensions/ActionManager (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/ActionManager
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/AutoView
|
||||
- YapDatabase/SQLCipher/Extensions/AutoView (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/AutoView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/AutoView
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/View
|
||||
- YapDatabase/SQLCipher/Extensions/CloudCore (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/CloudCore (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/CloudCore
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/CloudKit (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/CloudKit (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/CloudKit
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/ConnectionPool (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/CrossProcessNotification (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/CrossProcessNotification
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/ConnectionProxy (3.1.4):
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/CrossProcessNotification (3.1.4):
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/FilteredView (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/FilteredView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/FilteredView
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/View
|
||||
- YapDatabase/SQLCipher/Extensions/FullTextSearch (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/FullTextSearch (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/FullTextSearch
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/Hooks (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/Hooks (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/Hooks
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/ManualView (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/ManualView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/ManualView
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/View
|
||||
- YapDatabase/SQLCipher/Extensions/Relationships (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/Relationships (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/Relationships
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/RTreeIndex (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/RTreeIndex (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/RTreeIndex
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/SearchResultsView (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/SearchResultsView (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/SearchResultsView
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/AutoView
|
||||
- YapDatabase/SQLCipher/Extensions/FullTextSearch
|
||||
- YapDatabase/SQLCipher/Extensions/SecondaryIndex (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/SecondaryIndex (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/SecondaryIndex
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapDatabase/SQLCipher/Extensions/View (3.1.4):
|
||||
- YapDatabase/SQLCipher/Extensions/View (4.0):
|
||||
- YapDatabase/SQLCipher-ObjC/Extensions/View
|
||||
- YapDatabase/SQLCipher/Core
|
||||
- YapTaskQueue/SQLCipher (0.3.0):
|
||||
- YapDatabase/SQLCipher (~> 3.0)
|
||||
- YapDatabase/SQLCipher (~> 4.0)
|
||||
- ZXingObjC/Core (3.6.5)
|
||||
- ZXingObjC/QRCode (3.6.5):
|
||||
- ZXingObjC/Core
|
||||
|
@ -325,7 +368,7 @@ SPEC CHECKSUMS:
|
|||
BBlock: c56d7f72597ffe1634fcdc73836c5c0fed3271be
|
||||
BButton: ab0f2ed3b998ae73c5188b57d270d81e4a1eeb27
|
||||
ChatSecure-Push-iOS: b1e7f4133afb77a42464aa0be96b14e03edcef29
|
||||
ChatSecureCore: 08d24a7ddfdff59bd9afaec3141e1e26d50271db
|
||||
ChatSecureCore: 84d4ea5a09d07cdd2b64c13c9c06a2baa9c0b82b
|
||||
CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
|
||||
CocoaLumberjack: b17ae15142558d08bbacf69775fa10c4abbebcc9
|
||||
CPAProxy: fdb5600a16502e7c8176ab59e7e9c306fbe5dc59
|
||||
|
@ -361,8 +404,8 @@ SPEC CHECKSUMS:
|
|||
TTTAttributedLabel: 8cffe8e127e4e82ff3af1e5386d4cd0ad000b656
|
||||
XLForm: 7ee02761be8a369d1ad1bbffe738b97083d94f3e
|
||||
XMPPFramework: 8b7ce3a5d8f95d1f9e1389e20431ffa06f399d77
|
||||
YapDatabase: e9cf10cbf11d91f7c6dc723b0ff54fa8a04e3c8d
|
||||
YapTaskQueue: f3b23875bead71a7ee57b65637ce9c0e98b68c34
|
||||
YapDatabase: 260b1b0b3e6ae6775383edc923e19813586615eb
|
||||
YapTaskQueue: 390669f5ef248a515e2a0d955de9d2529e2c7fa5
|
||||
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
|
||||
|
||||
PODFILE CHECKSUM: 0581b06632eb5047847f0daf2042a99bbbed22ca
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 3a3958b8b78db1faa56a4d5622cdc3e17304dc0c
|
||||
Subproject commit df26a1c91bf522db7607d0bb1d74fed9284fc3bb
|
|
@ -1 +1 @@
|
|||
Subproject commit a18a8f1882d2d94a51cf1bf743d09734898387b1
|
||||
Subproject commit 19bedc68983c43e2709719479059e78a72edb901
|
Loading…
Reference in New Issue