diff --git a/Chatto/Chatto.xcodeproj/project.pbxproj b/Chatto/Chatto.xcodeproj/project.pbxproj index 926b1af..a28f20f 100644 --- a/Chatto/Chatto.xcodeproj/project.pbxproj +++ b/Chatto/Chatto.xcodeproj/project.pbxproj @@ -14,11 +14,14 @@ C321DDBE1BE964DC00DE88CC /* BaseChatItemPresenterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C321DDBC1BE964D500DE88CC /* BaseChatItemPresenterTests.swift */; }; C32BB72B1BE0504D0069EC50 /* Chatto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C32BB7201BE0504D0069EC50 /* Chatto.framework */; }; C3383E281BFFA49F00244F5C /* BaseChatViewControllerTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3383E271BFFA49F00244F5C /* BaseChatViewControllerTestHelpers.swift */; }; + C342D0BD1C638681008A4605 /* ChatItemCompanion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C342D0BC1C638681008A4605 /* ChatItemCompanion.swift */; }; + C342D0C11C638A2C008A4605 /* ReadOnlyOrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = C342D0C01C638A2C008A4605 /* ReadOnlyOrderedDictionary.swift */; }; + C342D0C41C638FDF008A4605 /* ReadOnlyOrderedDictionaryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C342D0C21C638FDF008A4605 /* ReadOnlyOrderedDictionaryTests.swift */; }; + C342D0C51C638FDF008A4605 /* SerialTaskQueueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C342D0C31C638FDF008A4605 /* SerialTaskQueueTests.swift */; }; C36281E51BF0F0F0004D6BCE /* BaseChatViewController+Changes.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36281E41BF0F0F0004D6BCE /* BaseChatViewController+Changes.swift */; }; C36281E71BF0F196004D6BCE /* BaseChatViewController+Scrolling.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36281E61BF0F196004D6BCE /* BaseChatViewController+Scrolling.swift */; }; C36281EB1BF0F62F004D6BCE /* DummyChatItemPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36281EA1BF0F62F004D6BCE /* DummyChatItemPresenter.swift */; }; C36281ED1BF10086004D6BCE /* SerialTaskQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36281EC1BF10086004D6BCE /* SerialTaskQueue.swift */; }; - C36281F01BF12727004D6BCE /* SerialTaskQueueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36281EE1BF126F7004D6BCE /* SerialTaskQueueTests.swift */; }; C36281F21BF12A4B004D6BCE /* ChatCollectionViewLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36281F11BF12A4B004D6BCE /* ChatCollectionViewLayoutTests.swift */; }; C38621DF1BE6C89900421718 /* CollectionChanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38621DE1BE6C89900421718 /* CollectionChanges.swift */; }; C3E904D91BE0509E00C662A2 /* ChatCollectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E904AF1BE0509E00C662A2 /* ChatCollectionViewLayout.swift */; }; @@ -50,11 +53,14 @@ C32BB7201BE0504D0069EC50 /* Chatto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Chatto.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C32BB72A1BE0504D0069EC50 /* ChattoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChattoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C3383E271BFFA49F00244F5C /* BaseChatViewControllerTestHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseChatViewControllerTestHelpers.swift; sourceTree = ""; }; + C342D0BC1C638681008A4605 /* ChatItemCompanion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatItemCompanion.swift; sourceTree = ""; }; + C342D0C01C638A2C008A4605 /* ReadOnlyOrderedDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadOnlyOrderedDictionary.swift; sourceTree = ""; }; + C342D0C21C638FDF008A4605 /* ReadOnlyOrderedDictionaryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadOnlyOrderedDictionaryTests.swift; sourceTree = ""; }; + C342D0C31C638FDF008A4605 /* SerialTaskQueueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SerialTaskQueueTests.swift; sourceTree = ""; }; C36281E41BF0F0F0004D6BCE /* BaseChatViewController+Changes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BaseChatViewController+Changes.swift"; sourceTree = ""; }; C36281E61BF0F196004D6BCE /* BaseChatViewController+Scrolling.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BaseChatViewController+Scrolling.swift"; sourceTree = ""; }; C36281EA1BF0F62F004D6BCE /* DummyChatItemPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DummyChatItemPresenter.swift; sourceTree = ""; }; C36281EC1BF10086004D6BCE /* SerialTaskQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SerialTaskQueue.swift; sourceTree = ""; }; - C36281EE1BF126F7004D6BCE /* SerialTaskQueueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SerialTaskQueueTests.swift; sourceTree = ""; }; C36281F11BF12A4B004D6BCE /* ChatCollectionViewLayoutTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatCollectionViewLayoutTests.swift; sourceTree = ""; }; C38621DE1BE6C89900421718 /* CollectionChanges.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionChanges.swift; sourceTree = ""; }; C3E904AF1BE0509E00C662A2 /* ChatCollectionViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatCollectionViewLayout.swift; sourceTree = ""; }; @@ -90,6 +96,8 @@ isa = PBXGroup; children = ( 55E85D821BE390BE001885AD /* Info.plist */, + C342D0C21C638FDF008A4605 /* ReadOnlyOrderedDictionaryTests.swift */, + C342D0C31C638FDF008A4605 /* SerialTaskQueueTests.swift */, C321DDBB1BE964D500DE88CC /* Chat Items */, C321C3941BE78835009803D1 /* ChatController */, ); @@ -103,7 +111,6 @@ C31E91991BFF4CA300339585 /* BaseChatViewControllerTests.swift */, C3383E271BFFA49F00244F5C /* BaseChatViewControllerTestHelpers.swift */, C321C3951BE78835009803D1 /* CollectionChangesTests.swift */, - C36281EE1BF126F7004D6BCE /* SerialTaskQueueTests.swift */, ); path = ChatController; sourceTree = ""; @@ -112,6 +119,7 @@ isa = PBXGroup; children = ( C321DD941BE9649F00DE88CC /* BaseChatItemPresenter.swift */, + C342D0BC1C638681008A4605 /* ChatItemCompanion.swift */, C321DD9A1BE9649F00DE88CC /* ChatItemProtocolDefinitions.swift */, C36281EA1BF0F62F004D6BCE /* DummyChatItemPresenter.swift */, ); @@ -158,6 +166,7 @@ children = ( C3E905031BE0521700C662A2 /* Chatto.h */, C3E905041BE0521700C662A2 /* Info.plist */, + C342D0C01C638A2C008A4605 /* ReadOnlyOrderedDictionary.swift */, C36281EC1BF10086004D6BCE /* SerialTaskQueue.swift */, C321DD931BE9649F00DE88CC /* Chat Items */, C3E904AE1BE0509E00C662A2 /* ChatController */, @@ -315,8 +324,10 @@ C321DDAE1BE9649F00DE88CC /* ChatItemProtocolDefinitions.swift in Sources */, C3E904DD1BE0509E00C662A2 /* KeyboardTracker.swift in Sources */, C36281E51BF0F0F0004D6BCE /* BaseChatViewController+Changes.swift in Sources */, + C342D0BD1C638681008A4605 /* ChatItemCompanion.swift in Sources */, C36281E71BF0F196004D6BCE /* BaseChatViewController+Scrolling.swift in Sources */, C36281EB1BF0F62F004D6BCE /* DummyChatItemPresenter.swift in Sources */, + C342D0C11C638A2C008A4605 /* ReadOnlyOrderedDictionary.swift in Sources */, C38621DF1BE6C89900421718 /* CollectionChanges.swift in Sources */, C3E904D91BE0509E00C662A2 /* ChatCollectionViewLayout.swift in Sources */, ); @@ -326,10 +337,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C342D0C51C638FDF008A4605 /* SerialTaskQueueTests.swift in Sources */, C3383E281BFFA49F00244F5C /* BaseChatViewControllerTestHelpers.swift in Sources */, - C36281F01BF12727004D6BCE /* SerialTaskQueueTests.swift in Sources */, C36281F21BF12A4B004D6BCE /* ChatCollectionViewLayoutTests.swift in Sources */, C321C3961BE78835009803D1 /* CollectionChangesTests.swift in Sources */, + C342D0C41C638FDF008A4605 /* ReadOnlyOrderedDictionaryTests.swift in Sources */, C321DDBE1BE964DC00DE88CC /* BaseChatItemPresenterTests.swift in Sources */, C31E919A1BFF4CA300339585 /* BaseChatViewControllerTests.swift in Sources */, ); diff --git a/Chatto/Source/Chat Items/ChatItemCompanion.swift b/Chatto/Source/Chat Items/ChatItemCompanion.swift new file mode 100644 index 0000000..177fa6a --- /dev/null +++ b/Chatto/Source/Chat Items/ChatItemCompanion.swift @@ -0,0 +1,47 @@ +/* +The MIT License (MIT) + +Copyright (c) 2015-present Badoo Trading Limited. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +import Foundation + +public protocol ChatItemsDecoratorProtocol { + func decorateItems(chatItems: [ChatItemProtocol]) -> [DecoratedChatItem] +} + +public struct DecoratedChatItem { + public let chatItem: ChatItemProtocol + public let decorationAttributes: ChatItemDecorationAttributesProtocol? + public init(chatItem: ChatItemProtocol, decorationAttributes: ChatItemDecorationAttributesProtocol?) { + self.chatItem = chatItem + self.decorationAttributes = decorationAttributes + } +} + +struct ChatItemCompanion: UniqueIdentificable { + let chatItem: ChatItemProtocol + let presenter: ChatItemPresenterProtocol + var decorationAttributes: ChatItemDecorationAttributesProtocol? + var uid: String { + return self.chatItem.uid + } +} diff --git a/Chatto/Source/ChatController/BaseChatViewController+Changes.swift b/Chatto/Source/ChatController/BaseChatViewController+Changes.swift index 1999c0e..a55da6f 100644 --- a/Chatto/Source/ChatController/BaseChatViewController+Changes.swift +++ b/Chatto/Source/ChatController/BaseChatViewController+Changes.swift @@ -43,7 +43,7 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol { self.updateQueue.addTask({ [weak self] (completion) -> () in guard let sSelf = self else { return } - let oldItems = sSelf.decoratedChatItems.map { $0.chatItem } + let oldItems = sSelf.chatItemCompanionCollection sSelf.updateModels(newItems: newItems, oldItems: oldItems, context: context, completion: { if sSelf.updateQueue.isEmpty { sSelf.enqueueMessageCountReductionIfNeeded() @@ -63,7 +63,7 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol { return } let newItems = sSelf.chatDataSource?.chatItems ?? [] - let oldItems = sSelf.decoratedChatItems.map { $0.chatItem } + let oldItems = sSelf.chatItemCompanionCollection sSelf.updateModels(newItems: newItems, oldItems: oldItems, context: .MessageCountReduction, completion: completion ) }) } @@ -90,24 +90,28 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol { func updateVisibleCells(changes: CollectionChanges) { // Datasource should be already updated! + func updateCellIfVisible(atIndexPath cellIndexPath: NSIndexPath, newDataIndexPath: NSIndexPath) { + if let cell = self.collectionView.cellForItemAtIndexPath(cellIndexPath) { + let presenter = self.presenterForIndexPath(newDataIndexPath) + presenter.configureCell(cell, decorationAttributes: self.decorationAttributesForIndexPath(newDataIndexPath)) + presenter.cellWillBeShown(cell) // `createModelUpdates` may have created a new presenter instance for existing visible cell so we need to tell it that its cell is visible + } + } + let visibleIndexPaths = Set(self.collectionView.indexPathsForVisibleItems().filter { (indexPath) -> Bool in return !changes.insertedIndexPaths.contains(indexPath) && !changes.deletedIndexPaths.contains(indexPath) - }) + }) var updatedIndexPaths = Set() for move in changes.movedIndexPaths { updatedIndexPaths.insert(move.indexPathOld) - if let cell = self.collectionView.cellForItemAtIndexPath(move.indexPathOld) { - self.presenterForIndexPath(move.indexPathNew).configureCell(cell, decorationAttributes: self.decorationAttributesForIndexPath(move.indexPathNew)) - } + updateCellIfVisible(atIndexPath: move.indexPathOld, newDataIndexPath: move.indexPathNew) } // Update remaining visible cells let remaining = visibleIndexPaths.subtract(updatedIndexPaths) for indexPath in remaining { - if let cell = self.collectionView.cellForItemAtIndexPath(indexPath) { - self.presenterForIndexPath(indexPath).configureCell(cell, decorationAttributes: self.decorationAttributesForIndexPath(indexPath)) - } + updateCellIfVisible(atIndexPath: indexPath, newDataIndexPath: indexPath) } } @@ -161,7 +165,7 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol { } } - private func updateModels(newItems newItems: [ChatItemProtocol], oldItems: [ChatItemProtocol], var context: UpdateContext, completion: () -> Void) { + private func updateModels(newItems newItems: [ChatItemProtocol], oldItems: ChatItemCompanionCollection, var context: UpdateContext, completion: () -> Void) { let collectionViewWidth = self.collectionView.bounds.width context = self.isFirstLayout ? .FirstLoad : context let performInBackground = context != .FirstLoad @@ -198,20 +202,37 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol { } } - private func createModelUpdates(newItems newItems: [ChatItemProtocol], oldItems: [ChatItemProtocol], collectionViewWidth: CGFloat) -> (changes: CollectionChanges, updateModelClosure: () -> Void) { + private func createModelUpdates(newItems newItems: [ChatItemProtocol], oldItems: ChatItemCompanionCollection, collectionViewWidth: CGFloat) -> (changes: CollectionChanges, updateModelClosure: () -> Void) { let newDecoratedItems = self.chatItemsDecorator?.decorateItems(newItems) ?? newItems.map { DecoratedChatItem(chatItem: $0, decorationAttributes: nil) } - let changes = Chatto.generateChanges( - oldCollection: oldItems.map { $0 }, - newCollection: newDecoratedItems.map { $0.chatItem }) - let layoutModel = self.createLayoutModel(newDecoratedItems, collectionViewWidth: collectionViewWidth) + let changes = Chatto.generateChanges(oldCollection: oldItems.map { $0.chatItem }, newCollection: newDecoratedItems.map { $0.chatItem }) + let itemCompanionCollection = self.createCompanionCollection(fromChatItems: newDecoratedItems, previousCompanionCollection: oldItems) + let layoutModel = self.createLayoutModel(itemCompanionCollection, collectionViewWidth: collectionViewWidth) let updateModelClosure : () -> Void = { [weak self] in self?.layoutModel = layoutModel - self?.decoratedChatItems = newDecoratedItems + self?.chatItemCompanionCollection = itemCompanionCollection } return (changes, updateModelClosure) } - private func createLayoutModel(decoratedItems: [DecoratedChatItem], collectionViewWidth: CGFloat) -> ChatCollectionViewLayoutModel { + private func createCompanionCollection(fromChatItems newItems: [DecoratedChatItem], previousCompanionCollection oldItems: ChatItemCompanionCollection) -> ChatItemCompanionCollection { + return ChatItemCompanionCollection(items: newItems.map { (decoratedChatItem) -> ChatItemCompanion in + let chatItem = decoratedChatItem.chatItem + var presenter: ChatItemPresenterProtocol! + // We assume that a same messageId can't mutate from one cell class to a different one. + // If we ever need to support that then generation of changes needs to suppport reloading items. + // Oherwise updateVisibleCells may try to update existing cell with a new presenter which is working with a different type of cell + + // Optimization: reuse presenter if it's the same instance. + if let oldChatItemCompanion = oldItems[chatItem.uid] where oldChatItemCompanion.chatItem === chatItem { + presenter = oldChatItemCompanion.presenter + } else { + presenter = self.createPresenterForChatItem(decoratedChatItem.chatItem) + } + return ChatItemCompanion(chatItem: decoratedChatItem.chatItem, presenter: presenter, decorationAttributes: decoratedChatItem.decorationAttributes) + }) + } + + private func createLayoutModel(items: ChatItemCompanionCollection, collectionViewWidth: CGFloat) -> ChatCollectionViewLayoutModel { typealias IntermediateItemLayoutData = (height: CGFloat?, bottomMargin: CGFloat) typealias ItemLayoutData = (height: CGFloat, bottomMargin: CGFloat) @@ -224,24 +245,23 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol { let isInbackground = !NSThread.isMainThread() var intermediateLayoutData = [IntermediateItemLayoutData]() - var itemsForMainThread = [(index: Int, item: DecoratedChatItem, presenter: ChatItemPresenterProtocol?)]() + var itemsForMainThread = [(index: Int, itemCompanion: ChatItemCompanion)]() - for (index, decoratedItem) in decoratedItems.enumerate() { - let presenter = self.presenterForIndex(index, decoratedChatItems: decoratedItems) + for (index, itemCompanion) in items.enumerate() { var height: CGFloat? - let bottomMargin: CGFloat = decoratedItem.decorationAttributes?.bottomMargin ?? 0 - if !isInbackground || presenter.canCalculateHeightInBackground ?? false { - height = presenter.heightForCell(maximumWidth: collectionViewWidth, decorationAttributes: decoratedItem.decorationAttributes) + let bottomMargin: CGFloat = itemCompanion.decorationAttributes?.bottomMargin ?? 0 + if !isInbackground || itemCompanion.presenter.canCalculateHeightInBackground { + height = itemCompanion.presenter.heightForCell(maximumWidth: collectionViewWidth, decorationAttributes: itemCompanion.decorationAttributes) } else { - itemsForMainThread.append((index: index, item: decoratedItem, presenter: presenter)) + itemsForMainThread.append((index: index, itemCompanion: itemCompanion)) } intermediateLayoutData.append((height: height, bottomMargin: bottomMargin)) } if itemsForMainThread.count > 0 { dispatch_sync(dispatch_get_main_queue(), { () -> Void in - for (index, decoratedItem, presenter) in itemsForMainThread { - let height = presenter?.heightForCell(maximumWidth: collectionViewWidth, decorationAttributes: decoratedItem.decorationAttributes) + for (index, itemCompanion) in itemsForMainThread { + let height = itemCompanion.presenter.heightForCell(maximumWidth: collectionViewWidth, decorationAttributes: itemCompanion.decorationAttributes) intermediateLayoutData[index].height = height } }) @@ -251,7 +271,7 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol { public func chatCollectionViewLayoutModel() -> ChatCollectionViewLayoutModel { if self.layoutModel.calculatedForWidth != self.collectionView.bounds.width { - self.layoutModel = self.createLayoutModel(self.decoratedChatItems, collectionViewWidth: self.collectionView.bounds.width) + self.layoutModel = self.createLayoutModel(self.chatItemCompanionCollection, collectionViewWidth: self.collectionView.bounds.width) } return self.layoutModel diff --git a/Chatto/Source/ChatController/BaseChatViewController+Presenters.swift b/Chatto/Source/ChatController/BaseChatViewController+Presenters.swift index 8bda437..f3182a6 100644 --- a/Chatto/Source/ChatController/BaseChatViewController+Presenters.swift +++ b/Chatto/Source/ChatController/BaseChatViewController+Presenters.swift @@ -27,7 +27,7 @@ import Foundation extension BaseChatViewController: ChatCollectionViewLayoutDelegate { public func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return self.decoratedChatItems.count + return self.chatItemCompanionCollection.count } public func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { @@ -66,23 +66,16 @@ extension BaseChatViewController: ChatCollectionViewLayoutDelegate { self.presenterForIndexPath(indexPath).performMenuControllerAction(action) } - public func presenterForIndexPath(indexPath: NSIndexPath) -> ChatItemPresenterProtocol { - return self.presenterForIndex(indexPath.item, decoratedChatItems: self.decoratedChatItems) + func presenterForIndexPath(indexPath: NSIndexPath) -> ChatItemPresenterProtocol { + return self.presenterForIndex(indexPath.item, chatItemCompanionCollection: self.chatItemCompanionCollection) } - public func presenterForIndex(index: Int, decoratedChatItems: [DecoratedChatItem]) -> ChatItemPresenterProtocol { - guard index < decoratedChatItems.count else { + func presenterForIndex(index: Int, chatItemCompanionCollection items: ChatItemCompanionCollection) -> ChatItemPresenterProtocol { + guard index < items.count else { // This can happen from didEndDisplayingCell if we reloaded with less messages return DummyChatItemPresenter() } - - let chatItem = decoratedChatItems[index].chatItem - if let presenter = self.presentersByChatItem.objectForKey(chatItem) as? ChatItemPresenterProtocol { - return presenter - } - let presenter = self.createPresenterForChatItem(chatItem) - self.presentersByChatItem.setObject(presenter, forKey: chatItem) - return presenter + return items[index].presenter } public func createPresenterForChatItem(chatItem: ChatItemProtocol) -> ChatItemPresenterProtocol { @@ -95,6 +88,6 @@ extension BaseChatViewController: ChatCollectionViewLayoutDelegate { } public func decorationAttributesForIndexPath(indexPath: NSIndexPath) -> ChatItemDecorationAttributesProtocol? { - return self.decoratedChatItems[indexPath.item].decorationAttributes + return self.chatItemCompanionCollection[indexPath.item].decorationAttributes } } diff --git a/Chatto/Source/ChatController/BaseChatViewController.swift b/Chatto/Source/ChatController/BaseChatViewController.swift index f3c4733..43c4ebe 100644 --- a/Chatto/Source/ChatController/BaseChatViewController.swift +++ b/Chatto/Source/ChatController/BaseChatViewController.swift @@ -24,21 +24,10 @@ import UIKit -public protocol ChatItemsDecoratorProtocol { - func decorateItems(chatItems: [ChatItemProtocol]) -> [DecoratedChatItem] -} - -public struct DecoratedChatItem { - public let chatItem: ChatItemProtocol - public let decorationAttributes: ChatItemDecorationAttributesProtocol? - public init(chatItem: ChatItemProtocol, decorationAttributes: ChatItemDecorationAttributesProtocol?) { - self.chatItem = chatItem - self.decorationAttributes = decorationAttributes - } -} - public class BaseChatViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { + typealias ChatItemCompanionCollection = ReadOnlyOrderedDictionary + public struct Constants { var updatesAnimationDuration: NSTimeInterval = 0.33 var defaultContentInsets = UIEdgeInsets(top: 10, left: 0, bottom: 10, right: 0) @@ -51,7 +40,7 @@ public class BaseChatViewController: UIViewController, UICollectionViewDataSourc public var constants = Constants() public private(set) var collectionView: UICollectionView! - var decoratedChatItems = [DecoratedChatItem]() + var chatItemCompanionCollection: ChatItemCompanionCollection = ReadOnlyOrderedDictionary(items: []) public var chatDataSource: ChatDataSourceProtocol? { didSet { self.chatDataSource?.delegate = self @@ -195,8 +184,6 @@ public class BaseChatViewController: UIViewController, UICollectionViewDataSourc var accessoryViewRevealer: AccessoryViewRevealer! var inputContainer: UIView! var presenterBuildersByType = [ChatItemType: [ChatItemPresenterBuilderProtocol]]() - var presenters = [ChatItemPresenterProtocol]() - let presentersByChatItem = NSMapTable(keyOptions: .WeakMemory, valueOptions: .StrongMemory) let presentersByCell = NSMapTable(keyOptions: .WeakMemory, valueOptions: .WeakMemory) var updateQueue: SerialTaskQueueProtocol = SerialTaskQueue() diff --git a/Chatto/Source/ReadOnlyOrderedDictionary.swift b/Chatto/Source/ReadOnlyOrderedDictionary.swift new file mode 100644 index 0000000..1ca9dd1 --- /dev/null +++ b/Chatto/Source/ReadOnlyOrderedDictionary.swift @@ -0,0 +1,71 @@ +/* +The MIT License (MIT) + +Copyright (c) 2015-present Badoo Trading Limited. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +import Foundation + +struct ReadOnlyOrderedDictionary : CollectionType { + + private let items: [T] + private let itemsById: [String: Int] // Maping to the position in the array instead the item itself for better performance + + init(items: [T]) { + var dictionary = [String: Int](minimumCapacity: items.count) + for (index, item) in items.enumerate() { + dictionary[item.uid] = index + } + self.items = items + self.itemsById = dictionary + } + + subscript(index: Int) -> T { + return self.items[index] + } + + subscript(uid: String) -> T? { + if let index = self.itemsById[uid] { + return self.items[index] + } + return nil + } + + func generate() -> AnyGenerator { + var index = 0 + + return anyGenerator({ + guard index < self.items.count else { + return nil + } + + defer { index += 1 } + return self.items[index] + }) + } + + var startIndex: Int { + return 0 + } + + var endIndex: Int { + return self.items.count + } +} diff --git a/Chatto/Tests/ReadOnlyOrderedDictionaryTests.swift b/Chatto/Tests/ReadOnlyOrderedDictionaryTests.swift new file mode 100644 index 0000000..21f8cd0 --- /dev/null +++ b/Chatto/Tests/ReadOnlyOrderedDictionaryTests.swift @@ -0,0 +1,59 @@ +/* +The MIT License (MIT) + +Copyright (c) 2015-present Badoo Trading Limited. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +import XCTest +@testable import Chatto + +class ReadOnlyOrderedDictionaryTests: XCTestCase { + + var orderedDictionary: ReadOnlyOrderedDictionary! + override func setUp() { + let items = [ + FakeChatItem(uid: "3", type: "type3"), + FakeChatItem(uid: "1", type: "type1"), + FakeChatItem(uid: "2", type: "type2"), + ] + self.orderedDictionary = ReadOnlyOrderedDictionary(items: items) + } + + func testThat_MapsCorrectly() { + XCTAssertEqual(self.orderedDictionary.map { $0.uid}, ["3", "1", "2"]) + } + + func testThat_NumberOfItemsIsCorrect() { + XCTAssertEqual(self.orderedDictionary.count, 3) + } + + func testThat_WhenSubscriptingByIndex_ThenReturnsCorrectValue() { + XCTAssertEqual(self.orderedDictionary[1].uid, "1") + } + + func testThat_WhenSubscriptingByExistingKey_ThenReturnsCorrectValue() { + XCTAssertEqual(self.orderedDictionary["3"]?.type, "type3") + } + + func testThat_WhenSubscriptingByNonExistingKey_ThenReturnsNil() { + XCTAssertTrue(self.orderedDictionary["non-existing"] == nil) + } +} diff --git a/Chatto/Tests/ChatController/SerialTaskQueueTests.swift b/Chatto/Tests/SerialTaskQueueTests.swift similarity index 100% rename from Chatto/Tests/ChatController/SerialTaskQueueTests.swift rename to Chatto/Tests/SerialTaskQueueTests.swift diff --git a/ChattoApp/Pods/Pods.xcodeproj/project.pbxproj b/ChattoApp/Pods/Pods.xcodeproj/project.pbxproj index 0994fb8..babcb9e 100644 --- a/ChattoApp/Pods/Pods.xcodeproj/project.pbxproj +++ b/ChattoApp/Pods/Pods.xcodeproj/project.pbxproj @@ -1,3544 +1,1215 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 009190E3F05F45D8D6C88DEA3CA2C170 - - fileRef - 9CE13526223A899F54C1E16E05F8946F - isa - PBXBuildFile - - 009C3474B74EA99EECE8FEC03D2E8AB6 - - buildActionMask - 2147483647 - files - - 30335E196E222B59437BD403BD9AB87C - A9F96C14507E98EE31B7BAE561F03175 - F21638FC48EE88002DB9483A50B954C8 - 1B711986342D2D3E2942F4A1FA8A9170 - D971CE7B397BE986742360B10B8F2359 - C5DF37AA756D2CBAA78620777DCB776F - CA69E209D33BBB6637CACBFAE54DA2EA - F5BE534FFB04B1578B8A6743B8105B9A - 0D6614F5E251779A3D8744D0C29766A2 - 6FE50BF26CBD1E2A296AAD91A2F890B2 - 682F66692BAADF06AB73963D48805CEC - A7E4AA1C44A7438BBE9FE05D64156964 - DD3754D71C190EF5E50132F6242FB58D - 7A523EA154F94903026E09C860EB8F3B - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 00C42DE4E7BA84C9B0F5D1A68BE58C87 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextMessageCollectionViewCellDefaultStyle.swift - sourceTree - <group> - - 0115F92456789DC5293B80ADE95E0C9F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextMessageCollectionViewCell.swift - sourceTree - <group> - - 02E98763D4A6CFA615BD940D2419A125 - - children - - C1E67DA90AD21E5BD1C2A650617D2A2A - E5784D88764B0B37D2F1F0A0FA3190C3 - FB596DB3E0A07D813D0A8B3190CC87DF - 0F9398A0BAD021D6AA777E0D6FCFBD49 - - isa - PBXGroup - name - Source - path - Source - sourceTree - <group> - - 05D31F297955F0F0DD4FEC528EE49A5F - - children - - 2359A998D9C76796BE410695F6524156 - - isa - PBXGroup - name - UI Components - path - UI Components - sourceTree - <group> - - 0830C6876687803EBD18173FA46E6A63 - - children - - 664656BDB7A47AC9ECBA2D58EB550D51 - A65DE185A12E70BE17EFA373F195C9E6 - 41A9B2AAC21030F2945A94BC7CBD1423 - AF3827E052F4369A86F32B555BFE2E80 - 42D8BFA51D1A4D7997DDA3DAEEC7BB3A - C117BD8C68DD05EFED4E96C19B341962 - - isa - PBXGroup - name - Support Files - path - ChattoApp/Pods/Target Support Files/Chatto - sourceTree - <group> - - 0938863B64F4AE791D7EAFDEFAD09085 - - fileRef - CBA0556F9682A8263E184A5F4851B9AD - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 09BD679DB19419AE64123C48BDA1D4E8 - - fileRef - FB5030FB81D772482E145FF745310021 - isa - PBXBuildFile - - 0CE0C32F2E53D253FBD890532AA9201C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextChatInputItem.swift - sourceTree - <group> - - 0D4563F2E2197EAA6A27C1DDAB837884 - - buildActionMask - 2147483647 - files - - D2D9B5C18D7A84F7945B137EFF0C037A - E4C32DC33587BD2B3561B95808F01DD9 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 0D6614F5E251779A3D8744D0C29766A2 - - fileRef - 8DFADD757D9E0D8289EB018E3D00686F - isa - PBXBuildFile - - 0D98BB57B382420C6D082403D6F19496 - - baseConfigurationReference - A65DE185A12E70BE17EFA373F195C9E6 - buildSettings - - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - CURRENT_PROJECT_VERSION - 1 - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_PREFIX_HEADER - Target Support Files/Chatto/Chatto-prefix.pch - INFOPLIST_FILE - Target Support Files/Chatto/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - LD_RUNPATH_SEARCH_PATHS - - $(inherited) - @executable_path/Frameworks - @loader_path/Frameworks - - MODULEMAP_FILE - Target Support Files/Chatto/Chatto.modulemap - MTL_ENABLE_DEBUG_INFO - NO - PRODUCT_NAME - Chatto - SDKROOT - iphoneos - SKIP_INSTALL - YES - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Release - - 0E7726F07BAD9AC95C0FB541855E2AE4 - - children - - 6E5712D008F1D3582EB2F57000DC0F18 - - isa - PBXGroup - name - Resources - sourceTree - <group> - - 0F9398A0BAD021D6AA777E0D6FCFBD49 - - children - - FCDEF6B27F93F5B6F4AD220376197C76 - 98CE80856E741B90F1C348CC9D3BDA4B - C1DDB784990F2C5A6090095179E0EE6C - 5D3B5DD049E4A0EF5FA80CF91BEF00F5 - 6CD5AC45EAE8945AD25992A7AC20AEDA - EF09A512197D5DD9119648A56B26FAEB - 89A2487E5B1D46BB28E571155C51131F - 297397CC37ABCDE16EC01366354D78D8 - 92CC896B9297CE4DF311E5CA9A888D89 - - isa - PBXGroup - name - ChatController - path - ChatController - sourceTree - <group> - - 1281E83BEA9A48C95D01A3CFFB17E893 - - fileRef - 5A4BF7E99DD1960EA3ACDCE6F29D58BB - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 135C12037302D7FC90A29E5A12128734 - - fileRef - 637A06D57DDDE2353B5A90D3F0897A6C - isa - PBXBuildFile - - 1450F7E23B95E33D58368BB36C594CCF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CircleIconView.h - sourceTree - <group> - - 167D53F6123B5236B27506A95BA7851A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - CircleProgressView.m - sourceTree - <group> - - 172A7832E1A396868678E4EB69EC12D5 - - fileRef - 4306E5B302B20801B08011A90E0FF1F8 - isa - PBXBuildFile - - 17C5314D4E48DD75B9B2D33978F8495A - - fileRef - 23398C34333A5A585408BF38AE0C2065 - isa - PBXBuildFile - - 1B711986342D2D3E2942F4A1FA8A9170 - - fileRef - 5D3B5DD049E4A0EF5FA80CF91BEF00F5 - isa - PBXBuildFile - - 1BEA3E8EE37844059E557750F6F3467D - - fileRef - 3333BED070BA5CD346B481AB6022E549 - isa - PBXBuildFile - - 1C3FFA4958DD0EB59C26EFD65CB5186C - - baseConfigurationReference - A65DE185A12E70BE17EFA373F195C9E6 - buildSettings - - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - CURRENT_PROJECT_VERSION - 1 - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_PREFIX_HEADER - Target Support Files/Chatto/Chatto-prefix.pch - INFOPLIST_FILE - Target Support Files/Chatto/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - LD_RUNPATH_SEARCH_PATHS - - $(inherited) - @executable_path/Frameworks - @loader_path/Frameworks - - MODULEMAP_FILE - Target Support Files/Chatto/Chatto.modulemap - MTL_ENABLE_DEBUG_INFO - YES - PRODUCT_NAME - Chatto - SDKROOT - iphoneos - SKIP_INSTALL - YES - SWIFT_OPTIMIZATION_LEVEL - -Onone - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Debug - - 1C8DD2806DDEC6C4DE1DE2F13C5295BA - - children - - 0CE0C32F2E53D253FBD890532AA9201C - - isa - PBXGroup - name - Text - path - Text - sourceTree - <group> - - 21E7AEFC96DF3C318E59AFC99A5F2F87 - - fileRef - 31E6E29A9A89094B4B607C4C341D18FF - isa - PBXBuildFile - - 23398C34333A5A585408BF38AE0C2065 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatInputBarAppearance.swift - sourceTree - <group> - - 2359A998D9C76796BE410695F6524156 - - children - - DA69C4842198E41E23867E01B0161612 - - isa - PBXGroup - name - CircleProgressIndicatorView - path - CircleProgressIndicatorView - sourceTree - <group> - - 23CC058C87AD2CF0D378D217EE78620F - - children - - A3643B3F3761685639739C82F2307E77 - - isa - PBXGroup - name - PhotoMessages - path - PhotoMessages - sourceTree - <group> - - 297397CC37ABCDE16EC01366354D78D8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - CollectionChanges.swift - sourceTree - <group> - - 2A0D073A6C8292215CF9C18BDE409BE1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - folder.assetcatalog - path - Text.xcassets - sourceTree - <group> - - 2A560B5BC0929E09496CB42FC6FF4B42 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseMessagePresenter.swift - sourceTree - <group> - - 2BCC458FDD5F692BBB2BFC64BB5701FC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-umbrella.h - sourceTree - <group> - - 2D8E8EC45A3A1A1D94AE762CB5028504 - - buildConfigurations - - A70CDAD61F90AC503C7D04CC22DA2923 - FB45FFD90572718D82AB9092B750F0CA - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 2FC2C1302FD5B8205152057E1B255477 - - fileRef - A9160597BE3659155259293AABCB3555 - isa - PBXBuildFile - - 2FC91F230E6B87767585794C423F4732 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotosInputViewItemSizeCalculator.swift - sourceTree - <group> - - 30335E196E222B59437BD403BD9AB87C - - fileRef - FCDEF6B27F93F5B6F4AD220376197C76 - isa - PBXBuildFile - - 31A4C2E8EED4E2085BB5E8A7F1D9FBBB - - baseConfigurationReference - DD7E5A5969A01E3A504D0135C6F25CFF - buildSettings - - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - CURRENT_PROJECT_VERSION - 1 - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_PREFIX_HEADER - Target Support Files/ChattoAdditions/ChattoAdditions-prefix.pch - INFOPLIST_FILE - Target Support Files/ChattoAdditions/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - LD_RUNPATH_SEARCH_PATHS - - $(inherited) - @executable_path/Frameworks - @loader_path/Frameworks - - MODULEMAP_FILE - Target Support Files/ChattoAdditions/ChattoAdditions.modulemap - MTL_ENABLE_DEBUG_INFO - YES - PRODUCT_NAME - ChattoAdditions - SDKROOT - iphoneos - SKIP_INSTALL - YES - SWIFT_OPTIMIZATION_LEVEL - -Onone - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Debug - - 31E6E29A9A89094B4B607C4C341D18FF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - AnimationUtils.swift - sourceTree - <group> - - 3333BED070BA5CD346B481AB6022E549 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - LiveCameraCell.swift - sourceTree - <group> - - 33468BC8EC486396F2339403DDB8C8A3 - - fileRef - D92F80EFA905D1D2B49E78A544CA770E - isa - PBXBuildFile - - 33CFA9817381D5D452D65F3CE2F73E1B - - fileRef - 8544C25F17FD6BA40AE7191260F8B89D - isa - PBXBuildFile - - 35784B943EDF77E81962AF955E2122E1 - - children - - A090C4E7541E04C60FEC74B26A1983D8 - E50EDA3F59861363F8D1562C64520389 - BBC78D5C31DE842F5996D6DFE95CBE39 - - isa - PBXGroup - name - Views - path - Views - sourceTree - <group> - - 36440BE9E9EA3F580694F74AC894187D - - baseConfigurationReference - DD7E5A5969A01E3A504D0135C6F25CFF - buildSettings - - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - CURRENT_PROJECT_VERSION - 1 - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_PREFIX_HEADER - Target Support Files/ChattoAdditions/ChattoAdditions-prefix.pch - INFOPLIST_FILE - Target Support Files/ChattoAdditions/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - LD_RUNPATH_SEARCH_PATHS - - $(inherited) - @executable_path/Frameworks - @loader_path/Frameworks - - MODULEMAP_FILE - Target Support Files/ChattoAdditions/ChattoAdditions.modulemap - MTL_ENABLE_DEBUG_INFO - NO - PRODUCT_NAME - ChattoAdditions - SDKROOT - iphoneos - SKIP_INSTALL - YES - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Release - - 36820B14073A38BC33D0028CCCEF48D1 - - fileRef - B6570F04FDD5CC8C2BC932E82306D690 - isa - PBXBuildFile - - 37FAE4CA5C70625D5AE777B5D3CC5429 - - fileRef - DA69C4842198E41E23867E01B0161612 - isa - PBXBuildFile - - 3882A61CF128C4409DEE2E421E4EA59D - - children - - 6A94AF8F3D77223D1DE72DC3C971502B - 0830C6876687803EBD18173FA46E6A63 - - isa - PBXGroup - name - Chatto - path - ../.. - sourceTree - <group> - - 3A4012010BE69B97E46A5FB84F2302AC - - containerPortal - D41D8CD98F00B204E9800998ECF8427E - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 7AF7E2DF8892E014AE5FCDF57A214D19 - remoteInfo - Chatto - - 3C99EADA4754BC7B0BFB33A977FD5192 - - fileRef - CEA37B6B7D260CE35E463E68DE47C0F0 - isa - PBXBuildFile - - 3D102E537B24FD32C4408CDC03234189 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotosChatInputItem.swift - sourceTree - <group> - - 3D557CE5B2A13E659FB504ED9E4351CB - - fileRef - F4549EAD309CDA9A0C8B82AC7F9381D1 - isa - PBXBuildFile - - 3D5944B7FBF068C523CA6742F67FEF47 - - fileRef - F6269251CBD6458BEEDBEDA08B64C442 - isa - PBXBuildFile - - 3F635F51C46E8B20880BB7EF933DD874 - - buildConfigurations - - DCE277310A043383EC97FC45344064D9 - D1CBF7ED1C4CCB0A2600FEC5035FA59B - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 4132B6A0B82C9AD10C98563576173FA9 - - children - - 73D0E435C33C19717B04811C0F73600E - 2A560B5BC0929E09496CB42FC6FF4B42 - CCECC6BEBDCA29F005882EBE7E4A6CFA - FFA8F01724F587E5E59A7FF51CB8DE82 - - isa - PBXGroup - name - BaseMessage - path - BaseMessage - sourceTree - <group> - - 41A9B2AAC21030F2945A94BC7CBD1423 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Chatto-dummy.m - sourceTree - <group> - - 42D8BFA51D1A4D7997DDA3DAEEC7BB3A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Chatto-umbrella.h - sourceTree - <group> - - 4306E5B302B20801B08011A90E0FF1F8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotosInputCellProvider.swift - sourceTree - <group> - - 4337838D91565AA2287EF6B034D13A7D - - fileRef - EE14101F8C4BA1B959F36608FBAA4982 - isa - PBXBuildFile - - 43B2D39ACB83720FAE1D14EC5F213849 - - children - - B6570F04FDD5CC8C2BC932E82306D690 - 0115F92456789DC5293B80ADE95E0C9F - 00C42DE4E7BA84C9B0F5D1A68BE58C87 - - isa - PBXGroup - name - Views - path - Views - sourceTree - <group> - - 44A649D8B3231A80F0177C4B86571655 - - fileRef - 667C1CA3478EA3D81ADADD11F7EFB62C - isa - PBXBuildFile - - 480D85CCE10ACF23367AB556C48F3FB4 - - isa - PBXTargetDependency - name - Chatto - target - 7AF7E2DF8892E014AE5FCDF57A214D19 - targetProxy - 4EE8DDA26FBDE4C7E6738F7506377ECB - - 483FB1B75E6CF6007D39F9C9BE4FCD36 - - fileRef - 5EB60CC19EC06054D693A3635FC065C8 - isa - PBXBuildFile - - 4927E8B748B6DCD67DA10E42879EEC22 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ChattoAdditions.h - sourceTree - <group> - - 4AC819B1D861D4DAB565E0F55A285701 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatInputBarPresenter.swift - sourceTree - <group> - - 4CB5A1C529335B0491D9932407898317 - - fileRef - 2A560B5BC0929E09496CB42FC6FF4B42 - isa - PBXBuildFile - - 4CCCFC26F93E395D9CA66219440F3D6F - - fileRef - CA2CDE90F026B1E3CE3241BAF0CBDF42 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4DA84E57C97397BABF3DFEC7A20473A4 - - fileRef - BC886B6248C7ACE6B9152CC90B2CE25D - isa - PBXBuildFile - - 4EE8DDA26FBDE4C7E6738F7506377ECB - - containerPortal - D41D8CD98F00B204E9800998ECF8427E - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 7AF7E2DF8892E014AE5FCDF57A214D19 - remoteInfo - Chatto - - 506DC1B37003C9C4393D540E196DEF41 - - children - - 7F5203F70424BF8FE0A443C488977D78 - 0E7726F07BAD9AC95C0FB541855E2AE4 - 5C4A68DF3D211320E5061770B0C3B112 - - isa - PBXGroup - name - ChattoAdditions - path - ../.. - sourceTree - <group> - - 50EB32A161726B3296730BD11DCCF5A7 - - buildActionMask - 2147483647 - files - - EAC0E38ED8452A7F664DD63E918C95FE - CEEB179AC74112C35F06D166DC81D49E - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 53EF802D8961B00EC0CFED2F0704E2F5 - - fileRef - D24BCF073CE16056F253257894CF66DD - isa - PBXBuildFile - - 54DB1556763801347CC408FC15FE7D6F - - fileRef - A090C4E7541E04C60FEC74B26A1983D8 - isa - PBXBuildFile - - 58294E0D6B459AFD04DEA87154A8368F - - explicitFileType - wrapper.framework - includeInIndex - 0 - isa - PBXFileReference - name - Chatto.framework - path - Chatto.framework - sourceTree - BUILT_PRODUCTS_DIR - - 5902D05B5BB1C50C7F4680DD211F6AA5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextMessagePresenter.swift - sourceTree - <group> - - 5A4BF7E99DD1960EA3ACDCE6F29D58BB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ChattoAdditions-umbrella.h - sourceTree - <group> - - 5C4A68DF3D211320E5061770B0C3B112 - - children - - FC4E873D2874D2207B97F63437C9827E - DD7E5A5969A01E3A504D0135C6F25CFF - FB5030FB81D772482E145FF745310021 - A210C8B9CA993A2C831727CE2515A3DE - 5A4BF7E99DD1960EA3ACDCE6F29D58BB - AF5BD772CABAA008A4802F6B3A73307E - - isa - PBXGroup - name - Support Files - path - ChattoApp/Pods/Target Support Files/ChattoAdditions - sourceTree - <group> - - 5D3B5DD049E4A0EF5FA80CF91BEF00F5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseChatViewController+Presenters.swift - sourceTree - <group> - - 5EB60CC19EC06054D693A3635FC065C8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ReusableXibView.swift - sourceTree - <group> - - 60BB18C70C8E4E2D1D6F54E83E219A8B - - fileRef - 681E03D75C85DD9F68B05EFA215C12DA - isa - PBXBuildFile - - 615290649C3A3BEA4EFA350B39B58488 - - fileRef - 4AC819B1D861D4DAB565E0F55A285701 - isa - PBXBuildFile - - 637A06D57DDDE2353B5A90D3F0897A6C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotosInputCameraPicker.swift - sourceTree - <group> - - 64098046251F40CFE18AABFF28F8AF30 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - file.xib - path - ChatInputBar.xib - sourceTree - <group> - - 6559DEDD0FDE1E6B645A304DAA4E372A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseChatItemPresenter.swift - sourceTree - <group> - - 659E3A6A1BC77CD2033B4E15551A6EB0 - - buildActionMask - 2147483647 - files - - 68D0351426E0494FC782C18126BB7BDD - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 664656BDB7A47AC9ECBA2D58EB550D51 - - includeInIndex - 1 - isa - PBXFileReference - path - Chatto.modulemap - sourceTree - <group> - - 667C1CA3478EA3D81ADADD11F7EFB62C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - folder.assetcatalog - path - BaseMessageAssets.xcassets - sourceTree - <group> - - 67137A4E85897A4235934C1AD67CD2E5 - - fileRef - 7019E99B21789BA603247FD118DFB1AF - isa - PBXBuildFile - - 681E03D75C85DD9F68B05EFA215C12DA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatInputItemView.swift - sourceTree - <group> - - 682F66692BAADF06AB73963D48805CEC - - fileRef - 297397CC37ABCDE16EC01366354D78D8 - isa - PBXBuildFile - - 68D0351426E0494FC782C18126BB7BDD - - fileRef - 894E5DA93A9F359521A89826BE6DA777 - isa - PBXBuildFile - - 698E976767454CEA971282CD4122B5D2 - - isa - PBXTargetDependency - name - Chatto - target - 7AF7E2DF8892E014AE5FCDF57A214D19 - targetProxy - 3A4012010BE69B97E46A5FB84F2302AC - - 6A94AF8F3D77223D1DE72DC3C971502B - - children - - 02E98763D4A6CFA615BD940D2419A125 - - isa - PBXGroup - name - Chatto - path - Chatto - sourceTree - <group> - - 6C5B434C2A4737145DBA9318EF0B164D - - children - - 64098046251F40CFE18AABFF28F8AF30 - C322C204C7D59AB4720A2CAD6C38078B - 8E746D60240566BFD95B5FDB0589F010 - - isa - PBXGroup - name - Input - path - Input - sourceTree - <group> - - 6C673786B8D417D72D1A4FD07403D332 - - fileRef - 73D0E435C33C19717B04811C0F73600E - isa - PBXBuildFile - - 6CD5AC45EAE8945AD25992A7AC20AEDA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseChatViewController+Scrolling.swift - sourceTree - <group> - - 6E5712D008F1D3582EB2F57000DC0F18 - - children - - BDCB2EC04F318F528132F68C371EE9CD - - isa - PBXGroup - name - ChattoAdditions - path - ChattoAdditions - sourceTree - <group> - - 6FE50BF26CBD1E2A296AAD91A2F890B2 - - fileRef - 41A9B2AAC21030F2945A94BC7CBD1423 - isa - PBXBuildFile - - 7019E99B21789BA603247FD118DFB1AF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextMessageViewModel.swift - sourceTree - <group> - - 70D77E6C8B815EBD66FF9CE04922FDF1 - - buildActionMask - 2147483647 - files - - B5DC5D3B818ED2A4F5D15261EB896837 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 73D0E435C33C19717B04811C0F73600E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseMessageModel.swift - sourceTree - <group> - - 7468334D2E29C3979DE993CD32ACC1CC - - children - - F16CAF022D5603843128A2381A0B6887 - 23398C34333A5A585408BF38AE0C2065 - 4AC819B1D861D4DAB565E0F55A285701 - EE14101F8C4BA1B959F36608FBAA4982 - 681E03D75C85DD9F68B05EFA215C12DA - D24BCF073CE16056F253257894CF66DD - F4549EAD309CDA9A0C8B82AC7F9381D1 - 5EB60CC19EC06054D693A3635FC065C8 - 99CF1DE7C434899AC0FF56172A90C7B7 - 1C8DD2806DDEC6C4DE1DE2F13C5295BA - - isa - PBXGroup - name - Input - path - Input - sourceTree - <group> - - 74A62FD17620A7F212C97BAF348CC48C - - fileRef - F9295E06CBFBBA5200243C4EE50AFA67 - isa - PBXBuildFile - - 75D98FF52E597A11900E131B6C4E1ADA - - children - - E8446514FBAD26C0E18F24A5715AEF67 - 79A9DEDC89FE8336BF5FEDAAF75BF7FC - D0405803033A2A777B8E4DFA0C1800ED - 87B213035BAC5F75386F62D3C75D2342 - 894E5DA93A9F359521A89826BE6DA777 - E7F21354943D9F42A70697D5A5EF72E9 - CBC0F7C552B739C909B650A0F42F7F38 - 2BCC458FDD5F692BBB2BFC64BB5701FC - 977577C045EDA9D9D1F46E2598D19FC7 - DA312349A49333542E6F4B36B329960E - - isa - PBXGroup - name - Pods - path - Target Support Files/Pods - sourceTree - <group> - - 75FE19E41E61A16534ECC3755AD1FB04 - - containerPortal - D41D8CD98F00B204E9800998ECF8427E - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 7DD08A69500CBF4A4EFFEEE3FF9E3C54 - remoteInfo - ChattoAdditions - - 774ED369A498A948F1CB47492C70C331 - - fileRef - 1450F7E23B95E33D58368BB36C594CCF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 79A9DEDC89FE8336BF5FEDAAF75BF7FC - - includeInIndex - 1 - isa - PBXFileReference - path - Pods.modulemap - sourceTree - <group> - - 7A523EA154F94903026E09C860EB8F3B - - fileRef - E5784D88764B0B37D2F1F0A0FA3190C3 - isa - PBXBuildFile - - 7AF7E2DF8892E014AE5FCDF57A214D19 - - buildConfigurationList - 998B194A41236B68BCB6666A8FBBAB4B - buildPhases - - 009C3474B74EA99EECE8FEC03D2E8AB6 - B502FC1C06782AB119E7B550426A5182 - 0D4563F2E2197EAA6A27C1DDAB837884 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Chatto - productName - Chatto - productReference - 58294E0D6B459AFD04DEA87154A8368F - productType - com.apple.product-type.framework - - 7B25C629ADCBF309A6CC76BE734D5A5B - - children - - 31E6E29A9A89094B4B607C4C341D18FF - 4927E8B748B6DCD67DA10E42879EEC22 - 97EC8D64F772F020E4A9E737D4A050C3 - A62E24EAB3E41E6298553D72F1AACB0B - 8544C25F17FD6BA40AE7191260F8B89D - F6E06C5F7EB5590920E4A39BD92857FD - 7468334D2E29C3979DE993CD32ACC1CC - AFB70FD5FE6FEDFA0F3361C99F63A627 - - isa - PBXGroup - name - Source - path - Source - sourceTree - <group> - - 7BFD9A3C31260386847F9B7920E6FC80 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - folder.assetcatalog - path - PhotoMessageAssets.xcassets - sourceTree - <group> - - 7D52C857CF1B68DE68B2C4ACFF5F06BB - - fileRef - 8A3C388748081057087ABCD9B0DDC950 - isa - PBXBuildFile - - 7DB346D0F39D3F0E887471402A8071AB - - children - - BA6428E9F66FD5A23C0A2E06ED26CD2F - DF648B3CF24B9FDB22C46C8F894C25FE - 82B4130D6842ED151D75732401A98763 - C1BDB953EFC03352CF11E24248A50AA7 - B7B80995527643776607AFFA75B91E24 - - isa - PBXGroup - sourceTree - <group> - - 7DD08A69500CBF4A4EFFEEE3FF9E3C54 - - buildConfigurationList - E6ADA2C5706A6F1E0D5C504344DDFAB7 - buildPhases - - D0B57C30BF887C961A42D4EDC1A145B5 - 50EB32A161726B3296730BD11DCCF5A7 - 930B77B0B215490568CD3228FA91E67A - BD76A104CEBAD30C83B8058DFDE61468 - - buildRules - - dependencies - - 480D85CCE10ACF23367AB556C48F3FB4 - - isa - PBXNativeTarget - name - ChattoAdditions - productName - ChattoAdditions - productReference - CE7CD41DBBB972864685F06362CCC494 - productType - com.apple.product-type.framework - - 7DF19D1C33F02CDBE97223A0F2535E5C - - explicitFileType - wrapper.framework - includeInIndex - 0 - isa - PBXFileReference - name - Pods.framework - path - Pods.framework - sourceTree - BUILT_PRODUCTS_DIR - - 7F5203F70424BF8FE0A443C488977D78 - - children - - 7B25C629ADCBF309A6CC76BE734D5A5B - - isa - PBXGroup - name - ChattoAdditions - path - ChattoAdditions - sourceTree - <group> - - 817B87B6772FDADDCC41A0A8E4499B2E - - fileRef - B04C38B6EBC9EC62019D9CF55AA0238E - isa - PBXBuildFile - - 82B4130D6842ED151D75732401A98763 - - children - - D0A636ED63D4950987B5410B6B50F1B4 - E166EAE657932B27CB37E9CBB9280FAF - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 8471D19BA239ED6CACAAB5B4FBA78029 - - fileRef - 9CE13526223A899F54C1E16E05F8946F - isa - PBXBuildFile - - 8544C25F17FD6BA40AE7191260F8B89D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - Utils.swift - sourceTree - <group> - - 87B213035BAC5F75386F62D3C75D2342 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - 88430EE95105DF1E3602E0B47D2551CC - - fileRef - A62E24EAB3E41E6298553D72F1AACB0B - isa - PBXBuildFile - - 88E90BC196F83EB029881AAFB31CE452 - - children - - 1450F7E23B95E33D58368BB36C594CCF - BC886B6248C7ACE6B9152CC90B2CE25D - CA2CDE90F026B1E3CE3241BAF0CBDF42 - A9160597BE3659155259293AABCB3555 - CBA0556F9682A8263E184A5F4851B9AD - 167D53F6123B5236B27506A95BA7851A - - isa - PBXGroup - name - CircleProgressIndicatorView - path - CircleProgressIndicatorView - sourceTree - <group> - - 894E5DA93A9F359521A89826BE6DA777 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - <group> - - 89A2487E5B1D46BB28E571155C51131F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatDataSourceProtocol.swift - sourceTree - <group> - - 8A3C388748081057087ABCD9B0DDC950 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatItemDecorationAttributes.swift - sourceTree - <group> - - 8DFADD757D9E0D8289EB018E3D00686F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatItemProtocolDefinitions.swift - sourceTree - <group> - - 8E746D60240566BFD95B5FDB0589F010 - - children - - 2A0D073A6C8292215CF9C18BDE409BE1 - - isa - PBXGroup - name - Text - path - Text - sourceTree - <group> - - 917F4BC3AF3D500040DD7417DDA921AA - - fileRef - 9B766F68048B2995D20C6DF8D77A6429 - isa - PBXBuildFile - - 92CC896B9297CE4DF311E5CA9A888D89 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - KeyboardTracker.swift - sourceTree - <group> - - 930B77B0B215490568CD3228FA91E67A - - buildActionMask - 2147483647 - files - - 1281E83BEA9A48C95D01A3CFFB17E893 - A63CF3857F3FCC965E5D575410482B49 - 774ED369A498A948F1CB47492C70C331 - 4CCCFC26F93E395D9CA66219440F3D6F - 0938863B64F4AE791D7EAFDEFAD09085 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9486F27E9C712C62F6856EC5E1DFD468 - - children - - 9950012E86344A91EE5E3EF4834DEBC1 - - isa - PBXGroup - name - BaseMessage - path - BaseMessage - sourceTree - <group> - - 977577C045EDA9D9D1F46E2598D19FC7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.debug.xcconfig - sourceTree - <group> - - 97EC8D64F772F020E4A9E737D4A050C3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - KeyedOperationQueue.swift - sourceTree - <group> - - 98CE80856E741B90F1C348CC9D3BDA4B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseChatViewController.swift - sourceTree - <group> - - 9950012E86344A91EE5E3EF4834DEBC1 - - children - - 667C1CA3478EA3D81ADADD11F7EFB62C - - isa - PBXGroup - name - Views - path - Views - sourceTree - <group> - - 998B194A41236B68BCB6666A8FBBAB4B - - buildConfigurations - - 1C3FFA4958DD0EB59C26EFD65CB5186C - 0D98BB57B382420C6D082403D6F19496 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 99CF1DE7C434899AC0FF56172A90C7B7 - - children - - 3333BED070BA5CD346B481AB6022E549 - 3D102E537B24FD32C4408CDC03234189 - 637A06D57DDDE2353B5A90D3F0897A6C - D5E415AF9FF70A25E565DD75E7A5B741 - 4306E5B302B20801B08011A90E0FF1F8 - 9BE76FB30802E2048AEF7A804E8FA056 - B04C38B6EBC9EC62019D9CF55AA0238E - 2FC91F230E6B87767585794C423F4732 - - isa - PBXGroup - name - Photos - path - Photos - sourceTree - <group> - - 9B766F68048B2995D20C6DF8D77A6429 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotoMessageViewModel.swift - sourceTree - <group> - - 9BE76FB30802E2048AEF7A804E8FA056 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotosInputDataProvider.swift - sourceTree - <group> - - 9CE13526223A899F54C1E16E05F8946F - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - A090C4E7541E04C60FEC74B26A1983D8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotoBubbleView.swift - sourceTree - <group> - - A1F625687BCBD5B333CDCD9E609AE21C - - fileRef - 0115F92456789DC5293B80ADE95E0C9F - isa - PBXBuildFile - - A210C8B9CA993A2C831727CE2515A3DE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ChattoAdditions-prefix.pch - sourceTree - <group> - - A3643B3F3761685639739C82F2307E77 - - children - - 7BFD9A3C31260386847F9B7920E6FC80 - - isa - PBXGroup - name - Views - path - Views - sourceTree - <group> - - A518D2A6B2CC93AD5FC6EF88205E08E8 - - children - - 9486F27E9C712C62F6856EC5E1DFD468 - 23CC058C87AD2CF0D378D217EE78620F - - isa - PBXGroup - name - Chat Items - path - Chat Items - sourceTree - <group> - - A62E24EAB3E41E6298553D72F1AACB0B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - Observable.swift - sourceTree - <group> - - A63CF3857F3FCC965E5D575410482B49 - - fileRef - 4927E8B748B6DCD67DA10E42879EEC22 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A65DE185A12E70BE17EFA373F195C9E6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Chatto.xcconfig - sourceTree - <group> - - A70CDAD61F90AC503C7D04CC22DA2923 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - COPY_PHASE_STRIP - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - SYMROOT - ${SRCROOT}/../build - - isa - XCBuildConfiguration - name - Debug - - A7E4AA1C44A7438BBE9FE05D64156964 - - fileRef - EB0BAE425A4CCABBA1A695F76B8523BA - isa - PBXBuildFile - - A8405C91165AB7A31FE6A88A333DD701 - - fileRef - 2FC91F230E6B87767585794C423F4732 - isa - PBXBuildFile - - A9160597BE3659155259293AABCB3555 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - CircleProgressIndicatorView.m - sourceTree - <group> - - A9F96C14507E98EE31B7BAE561F03175 - - fileRef - 6559DEDD0FDE1E6B645A304DAA4E372A - isa - PBXBuildFile - - AC410D8567E6C696227B566F9AFCC075 - - fileRef - 64098046251F40CFE18AABFF28F8AF30 - isa - PBXBuildFile - - AF3827E052F4369A86F32B555BFE2E80 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Chatto-prefix.pch - sourceTree - <group> - - AF5BD772CABAA008A4802F6B3A73307E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - AF6C60699C45E376AB593B5FA984954E - - buildConfigurationList - 3F635F51C46E8B20880BB7EF933DD874 - buildPhases - - 659E3A6A1BC77CD2033B4E15551A6EB0 - E625D698677F51C1049B239AD65C4F60 - 70D77E6C8B815EBD66FF9CE04922FDF1 - - buildRules - - dependencies - - 698E976767454CEA971282CD4122B5D2 - E37197B156C72EB287049632D6C5DA8A - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 7DF19D1C33F02CDBE97223A0F2535E5C - productType - com.apple.product-type.framework - - AFB70FD5FE6FEDFA0F3361C99F63A627 - - children - - 88E90BC196F83EB029881AAFB31CE452 - - isa - PBXGroup - name - UI Components - path - UI Components - sourceTree - <group> - - B04C38B6EBC9EC62019D9CF55AA0238E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotosInputView.swift - sourceTree - <group> - - B502FC1C06782AB119E7B550426A5182 - - buildActionMask - 2147483647 - files - - 009190E3F05F45D8D6C88DEA3CA2C170 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - B5DC5D3B818ED2A4F5D15261EB896837 - - fileRef - 2BCC458FDD5F692BBB2BFC64BB5701FC - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B5E09F29F0C9B6EC251B7350DFECBEA7 - - fileRef - 5902D05B5BB1C50C7F4680DD211F6AA5 - isa - PBXBuildFile - - B6570F04FDD5CC8C2BC932E82306D690 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextBubbleView.swift - sourceTree - <group> - - B7B80995527643776607AFFA75B91E24 - - children - - 75D98FF52E597A11900E131B6C4E1ADA - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - BA6428E9F66FD5A23C0A2E06ED26CD2F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - name - Podfile - path - ../Podfile - sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby - - BBC78D5C31DE842F5996D6DFE95CBE39 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotoMessageCollectionViewCellDefaultStyle.swift - sourceTree - <group> - - BC886B6248C7ACE6B9152CC90B2CE25D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - CircleIconView.m - sourceTree - <group> - - BD76A104CEBAD30C83B8058DFDE61468 - - buildActionMask - 2147483647 - files - - 44A649D8B3231A80F0177C4B86571655 - AC410D8567E6C696227B566F9AFCC075 - 37FAE4CA5C70625D5AE777B5D3CC5429 - EDF609BF0B29652FAA7CF6F1FD36CA11 - DB94084D0A44BA2D3F5ADC62B776414E - BD7AB12D0B465616431F59E5229BE0A5 - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - BD7AB12D0B465616431F59E5229BE0A5 - - fileRef - 2A0D073A6C8292215CF9C18BDE409BE1 - isa - PBXBuildFile - - BDA2BD34DA413B3F0CB3F7446318CBFF - - fileRef - 9BE76FB30802E2048AEF7A804E8FA056 - isa - PBXBuildFile - - BDCB2EC04F318F528132F68C371EE9CD - - children - - A518D2A6B2CC93AD5FC6EF88205E08E8 - 6C5B434C2A4737145DBA9318EF0B164D - 05D31F297955F0F0DD4FEC528EE49A5F - - isa - PBXGroup - name - Source - path - Source - sourceTree - <group> - - C0E9BFF70A14D72F547A0FD8E54D12D2 - - fileRef - 0CE0C32F2E53D253FBD890532AA9201C - isa - PBXBuildFile - - C0EBAA11EA89A45AAD5EEC0671CB697E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotoMessagePresenter.swift - sourceTree - <group> - - C117BD8C68DD05EFED4E96C19B341962 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - C1BDB953EFC03352CF11E24248A50AA7 - - children - - 58294E0D6B459AFD04DEA87154A8368F - CE7CD41DBBB972864685F06362CCC494 - 7DF19D1C33F02CDBE97223A0F2535E5C - - isa - PBXGroup - name - Products - sourceTree - <group> - - C1DDB784990F2C5A6090095179E0EE6C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseChatViewController+Changes.swift - sourceTree - <group> - - C1E67DA90AD21E5BD1C2A650617D2A2A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Chatto.h - sourceTree - <group> - - C322C204C7D59AB4720A2CAD6C38078B - - children - - D2B2293D7D418420AB03F0584A71EB69 - - isa - PBXGroup - name - Photos - path - Photos - sourceTree - <group> - - C5DF37AA756D2CBAA78620777DCB776F - - fileRef - 98CE80856E741B90F1C348CC9D3BDA4B - isa - PBXBuildFile - - C8DB6F6376D771949DBF44C56D2756D1 - - fileRef - 97EC8D64F772F020E4A9E737D4A050C3 - isa - PBXBuildFile - - CA1A1BD015BDA5A8B58B7D2E0E533520 - - fileRef - D38FF70C7961730494358A781BBD4266 - isa - PBXBuildFile - - CA2CDE90F026B1E3CE3241BAF0CBDF42 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CircleProgressIndicatorView.h - sourceTree - <group> - - CA69E209D33BBB6637CACBFAE54DA2EA - - fileRef - EF09A512197D5DD9119648A56B26FAEB - isa - PBXBuildFile - - CBA0556F9682A8263E184A5F4851B9AD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CircleProgressView.h - sourceTree - <group> - - CBC0F7C552B739C909B650A0F42F7F38 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh - sourceTree - <group> - - CC27B0AA8783E403851467DA308D736D - - children - - D92F80EFA905D1D2B49E78A544CA770E - 5902D05B5BB1C50C7F4680DD211F6AA5 - CEA37B6B7D260CE35E463E68DE47C0F0 - 7019E99B21789BA603247FD118DFB1AF - 43B2D39ACB83720FAE1D14EC5F213849 - - isa - PBXGroup - name - TextMessages - path - TextMessages - sourceTree - <group> - - CC2C226C413CE617F8BF06BE47C11C73 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotoMessagePresenterBuilder.swift - sourceTree - <group> - - CCECC6BEBDCA29F005882EBE7E4A6CFA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseMessageViewModel.swift - sourceTree - <group> - - CE7CD41DBBB972864685F06362CCC494 - - explicitFileType - wrapper.framework - includeInIndex - 0 - isa - PBXFileReference - name - ChattoAdditions.framework - path - ChattoAdditions.framework - sourceTree - BUILT_PRODUCTS_DIR - - CEA37B6B7D260CE35E463E68DE47C0F0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextMessagePresenterBuilder.swift - sourceTree - <group> - - CEEB179AC74112C35F06D166DC81D49E - - fileRef - 9CE13526223A899F54C1E16E05F8946F - isa - PBXBuildFile - - D0405803033A2A777B8E4DFA0C1800ED - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - path - Pods-acknowledgements.markdown - sourceTree - <group> - - D0A636ED63D4950987B5410B6B50F1B4 - - explicitFileType - wrapper.framework - includeInIndex - 0 - isa - PBXFileReference - path - Chatto.framework - sourceTree - BUILT_PRODUCTS_DIR - - D0B57C30BF887C961A42D4EDC1A145B5 - - buildActionMask - 2147483647 - files - - 21E7AEFC96DF3C318E59AFC99A5F2F87 - D7FCB154DF24B64737D8482138192E34 - 74A62FD17620A7F212C97BAF348CC48C - 6C673786B8D417D72D1A4FD07403D332 - 4CB5A1C529335B0491D9932407898317 - FD65B50F2C2C231254D616FBE64BCE93 - FFC8FDDB7D848CFBF68CF848AB9E5FD0 - 17C5314D4E48DD75B9B2D33978F8495A - 615290649C3A3BEA4EFA350B39B58488 - 4337838D91565AA2287EF6B034D13A7D - 60BB18C70C8E4E2D1D6F54E83E219A8B - 7D52C857CF1B68DE68B2C4ACFF5F06BB - 09BD679DB19419AE64123C48BDA1D4E8 - 4DA84E57C97397BABF3DFEC7A20473A4 - 2FC2C1302FD5B8205152057E1B255477 - EFB74EE0A89287687BE1936EADE1CD3A - 53EF802D8961B00EC0CFED2F0704E2F5 - 3D557CE5B2A13E659FB504ED9E4351CB - C8DB6F6376D771949DBF44C56D2756D1 - 1BEA3E8EE37844059E557750F6F3467D - 88430EE95105DF1E3602E0B47D2551CC - 54DB1556763801347CC408FC15FE7D6F - FA425B297903CF809BFA8C0238DA59B9 - DED2BABE15E93002DCD0963164AA37D8 - CA1A1BD015BDA5A8B58B7D2E0E533520 - DB179935E7B42289354103564BE69134 - F194E1AB922FFF837278FCEC54B06449 - 917F4BC3AF3D500040DD7417DDA921AA - FCBF2BA23C23C1F5C3281D0C5D34C968 - 135C12037302D7FC90A29E5A12128734 - FB7FD6E6D7B54832D06B08301BED1537 - 172A7832E1A396868678E4EB69EC12D5 - BDA2BD34DA413B3F0CB3F7446318CBFF - 817B87B6772FDADDCC41A0A8E4499B2E - A8405C91165AB7A31FE6A88A333DD701 - 483FB1B75E6CF6007D39F9C9BE4FCD36 - 36820B14073A38BC33D0028CCCEF48D1 - C0E9BFF70A14D72F547A0FD8E54D12D2 - A1F625687BCBD5B333CDCD9E609AE21C - DB71E72FC92441C0155C6C2C15CDE623 - 33468BC8EC486396F2339403DDB8C8A3 - B5E09F29F0C9B6EC251B7350DFECBEA7 - 3C99EADA4754BC7B0BFB33A977FD5192 - 67137A4E85897A4235934C1AD67CD2E5 - 33CFA9817381D5D452D65F3CE2F73E1B - 3D5944B7FBF068C523CA6742F67FEF47 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - D1B9575301EAF330DF2C9F01CFC35126 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseMessageCollectionViewCell.swift - sourceTree - <group> - - D1CBF7ED1C4CCB0A2600FEC5035FA59B - - baseConfigurationReference - DA312349A49333542E6F4B36B329960E - buildSettings - - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - CURRENT_PROJECT_VERSION - 1 - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - ENABLE_STRICT_OBJC_MSGSEND - YES - INFOPLIST_FILE - Target Support Files/Pods/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - LD_RUNPATH_SEARCH_PATHS - - $(inherited) - @executable_path/Frameworks - @loader_path/Frameworks - - MACH_O_TYPE - staticlib - MODULEMAP_FILE - Target Support Files/Pods/Pods.modulemap - MTL_ENABLE_DEBUG_INFO - NO - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - Pods - SDKROOT - iphoneos - SKIP_INSTALL - YES - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Release - - D24BCF073CE16056F253257894CF66DD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ExpandableTextView.swift - sourceTree - <group> - - D2B2293D7D418420AB03F0584A71EB69 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - folder.assetcatalog - path - Photos.xcassets - sourceTree - <group> - - D2D9B5C18D7A84F7945B137EFF0C037A - - fileRef - 42D8BFA51D1A4D7997DDA3DAEEC7BB3A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D38FF70C7961730494358A781BBD4266 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotoMessageModel.swift - sourceTree - <group> - - D41D8CD98F00B204E9800998ECF8427E - - attributes - - LastSwiftUpdateCheck - 0700 - LastUpgradeCheck - 0700 - - buildConfigurationList - 2D8E8EC45A3A1A1D94AE762CB5028504 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - 7DB346D0F39D3F0E887471402A8071AB - productRefGroup - C1BDB953EFC03352CF11E24248A50AA7 - projectDirPath - - projectReferences - - projectRoot - - targets - - 7AF7E2DF8892E014AE5FCDF57A214D19 - 7DD08A69500CBF4A4EFFEEE3FF9E3C54 - AF6C60699C45E376AB593B5FA984954E - - - D5E415AF9FF70A25E565DD75E7A5B741 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotosInputCell.swift - sourceTree - <group> - - D7FCB154DF24B64737D8482138192E34 - - fileRef - D1B9575301EAF330DF2C9F01CFC35126 - isa - PBXBuildFile - - D92F80EFA905D1D2B49E78A544CA770E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - TextMessageModel.swift - sourceTree - <group> - - D971CE7B397BE986742360B10B8F2359 - - fileRef - 6CD5AC45EAE8945AD25992A7AC20AEDA - isa - PBXBuildFile - - DA312349A49333542E6F4B36B329960E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.release.xcconfig - sourceTree - <group> - - DA69C4842198E41E23867E01B0161612 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - folder.assetcatalog - path - CircleProgressIndicator.xcassets - sourceTree - <group> - - DB179935E7B42289354103564BE69134 - - fileRef - C0EBAA11EA89A45AAD5EEC0671CB697E - isa - PBXBuildFile - - DB71E72FC92441C0155C6C2C15CDE623 - - fileRef - 00C42DE4E7BA84C9B0F5D1A68BE58C87 - isa - PBXBuildFile - - DB94084D0A44BA2D3F5ADC62B776414E - - fileRef - D2B2293D7D418420AB03F0584A71EB69 - isa - PBXBuildFile - - DCE277310A043383EC97FC45344064D9 - - baseConfigurationReference - 977577C045EDA9D9D1F46E2598D19FC7 - buildSettings - - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - CURRENT_PROJECT_VERSION - 1 - DEFINES_MODULE - YES - DYLIB_COMPATIBILITY_VERSION - 1 - DYLIB_CURRENT_VERSION - 1 - DYLIB_INSTALL_NAME_BASE - @rpath - ENABLE_STRICT_OBJC_MSGSEND - YES - INFOPLIST_FILE - Target Support Files/Pods/Info.plist - INSTALL_PATH - $(LOCAL_LIBRARY_DIR)/Frameworks - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - LD_RUNPATH_SEARCH_PATHS - - $(inherited) - @executable_path/Frameworks - @loader_path/Frameworks - - MACH_O_TYPE - staticlib - MODULEMAP_FILE - Target Support Files/Pods/Pods.modulemap - MTL_ENABLE_DEBUG_INFO - YES - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - Pods - SDKROOT - iphoneos - SKIP_INSTALL - YES - SWIFT_OPTIMIZATION_LEVEL - -Onone - TARGETED_DEVICE_FAMILY - 1,2 - VERSIONING_SYSTEM - apple-generic - VERSION_INFO_PREFIX - - - isa - XCBuildConfiguration - name - Debug - - DD3754D71C190EF5E50132F6242FB58D - - fileRef - 92CC896B9297CE4DF311E5CA9A888D89 - isa - PBXBuildFile - - DD7E5A5969A01E3A504D0135C6F25CFF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - ChattoAdditions.xcconfig - sourceTree - <group> - - DED2BABE15E93002DCD0963164AA37D8 - - fileRef - BBC78D5C31DE842F5996D6DFE95CBE39 - isa - PBXBuildFile - - DF648B3CF24B9FDB22C46C8F894C25FE - - children - - 3882A61CF128C4409DEE2E421E4EA59D - 506DC1B37003C9C4393D540E196DEF41 - - isa - PBXGroup - name - Development Pods - sourceTree - <group> - - E166EAE657932B27CB37E9CBB9280FAF - - children - - 9CE13526223A899F54C1E16E05F8946F - - isa - PBXGroup - name - iOS - sourceTree - <group> - - E37197B156C72EB287049632D6C5DA8A - - isa - PBXTargetDependency - name - ChattoAdditions - target - 7DD08A69500CBF4A4EFFEEE3FF9E3C54 - targetProxy - 75FE19E41E61A16534ECC3755AD1FB04 - - E4C32DC33587BD2B3561B95808F01DD9 - - fileRef - C1E67DA90AD21E5BD1C2A650617D2A2A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E50EDA3F59861363F8D1562C64520389 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - PhotoMessageCollectionViewCell.swift - sourceTree - <group> - - E5784D88764B0B37D2F1F0A0FA3190C3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - SerialTaskQueue.swift - sourceTree - <group> - - E625D698677F51C1049B239AD65C4F60 - - buildActionMask - 2147483647 - files - - 8471D19BA239ED6CACAAB5B4FBA78029 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - E6ADA2C5706A6F1E0D5C504344DDFAB7 - - buildConfigurations - - 31A4C2E8EED4E2085BB5E8A7F1D9FBBB - 36440BE9E9EA3F580694F74AC894187D - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - E7F21354943D9F42A70697D5A5EF72E9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-frameworks.sh - sourceTree - <group> - - E8446514FBAD26C0E18F24A5715AEF67 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - EAC0E38ED8452A7F664DD63E918C95FE - - fileRef - D0A636ED63D4950987B5410B6B50F1B4 - isa - PBXBuildFile - - EB0BAE425A4CCABBA1A695F76B8523BA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - DummyChatItemPresenter.swift - sourceTree - <group> - - EDF609BF0B29652FAA7CF6F1FD36CA11 - - fileRef - 7BFD9A3C31260386847F9B7920E6FC80 - isa - PBXBuildFile - - EE14101F8C4BA1B959F36608FBAA4982 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatInputItem.swift - sourceTree - <group> - - EEAABA8E8443311507CD9BB41E35B286 - - children - - D38FF70C7961730494358A781BBD4266 - C0EBAA11EA89A45AAD5EEC0671CB697E - CC2C226C413CE617F8BF06BE47C11C73 - 9B766F68048B2995D20C6DF8D77A6429 - 35784B943EDF77E81962AF955E2122E1 - - isa - PBXGroup - name - PhotoMessages - path - PhotoMessages - sourceTree - <group> - - EF09A512197D5DD9119648A56B26FAEB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatCollectionViewLayout.swift - sourceTree - <group> - - EFB74EE0A89287687BE1936EADE1CD3A - - fileRef - 167D53F6123B5236B27506A95BA7851A - isa - PBXBuildFile - - F16CAF022D5603843128A2381A0B6887 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ChatInputBar.swift - sourceTree - <group> - - F194E1AB922FFF837278FCEC54B06449 - - fileRef - CC2C226C413CE617F8BF06BE47C11C73 - isa - PBXBuildFile - - F21638FC48EE88002DB9483A50B954C8 - - fileRef - C1DDB784990F2C5A6090095179E0EE6C - isa - PBXBuildFile - - F4549EAD309CDA9A0C8B82AC7F9381D1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - HorizontalStackScrollView.swift - sourceTree - <group> - - F5BE534FFB04B1578B8A6743B8105B9A - - fileRef - 89A2487E5B1D46BB28E571155C51131F - isa - PBXBuildFile - - F6269251CBD6458BEEDBEDA08B64C442 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - ViewDefinitions.swift - sourceTree - <group> - - F6E06C5F7EB5590920E4A39BD92857FD - - children - - 8A3C388748081057087ABCD9B0DDC950 - 4132B6A0B82C9AD10C98563576173FA9 - EEAABA8E8443311507CD9BB41E35B286 - CC27B0AA8783E403851467DA308D736D - - isa - PBXGroup - name - Chat Items - path - Chat Items - sourceTree - <group> - - F9295E06CBFBBA5200243C4EE50AFA67 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - BaseMessageCollectionViewCellDefaultSyle.swift - sourceTree - <group> - - FA425B297903CF809BFA8C0238DA59B9 - - fileRef - E50EDA3F59861363F8D1562C64520389 - isa - PBXBuildFile - - FB45FFD90572718D82AB9092B750F0CA - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - COPY_PHASE_STRIP - YES - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.0 - STRIP_INSTALLED_PRODUCT - NO - SYMROOT - ${SRCROOT}/../build - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - FB5030FB81D772482E145FF745310021 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - ChattoAdditions-dummy.m - sourceTree - <group> - - FB596DB3E0A07D813D0A8B3190CC87DF - - children - - 6559DEDD0FDE1E6B645A304DAA4E372A - 8DFADD757D9E0D8289EB018E3D00686F - EB0BAE425A4CCABBA1A695F76B8523BA - - isa - PBXGroup - name - Chat Items - path - Chat Items - sourceTree - <group> - - FB7FD6E6D7B54832D06B08301BED1537 - - fileRef - D5E415AF9FF70A25E565DD75E7A5B741 - isa - PBXBuildFile - - FC4E873D2874D2207B97F63437C9827E - - includeInIndex - 1 - isa - PBXFileReference - path - ChattoAdditions.modulemap - sourceTree - <group> - - FCBF2BA23C23C1F5C3281D0C5D34C968 - - fileRef - 3D102E537B24FD32C4408CDC03234189 - isa - PBXBuildFile - - FCDEF6B27F93F5B6F4AD220376197C76 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.swift - path - AccessoryViewRevealer.swift - sourceTree - <group> - - FD65B50F2C2C231254D616FBE64BCE93 - - fileRef - CCECC6BEBDCA29F005882EBE7E4A6CFA - isa - PBXBuildFile - - FFA8F01724F587E5E59A7FF51CB8DE82 - - children - - D1B9575301EAF330DF2C9F01CFC35126 - F9295E06CBFBBA5200243C4EE50AFA67 - F6269251CBD6458BEEDBEDA08B64C442 - - isa - PBXGroup - name - Views - path - Views - sourceTree - <group> - - FFC8FDDB7D848CFBF68CF848AB9E5FD0 - - fileRef - F16CAF022D5603843128A2381A0B6887 - isa - PBXBuildFile - - - rootObject - D41D8CD98F00B204E9800998ECF8427E - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0938863B64F4AE791D7EAFDEFAD09085 /* CircleProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = CBA0556F9682A8263E184A5F4851B9AD /* CircleProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 09BD679DB19419AE64123C48BDA1D4E8 /* ChattoAdditions-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB5030FB81D772482E145FF745310021 /* ChattoAdditions-dummy.m */; }; + 1281E83BEA9A48C95D01A3CFFB17E893 /* ChattoAdditions-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4BF7E99DD1960EA3ACDCE6F29D58BB /* ChattoAdditions-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 135C12037302D7FC90A29E5A12128734 /* PhotosInputCameraPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637A06D57DDDE2353B5A90D3F0897A6C /* PhotosInputCameraPicker.swift */; }; + 13DB1CF0CEFA2FF493E6BEAD2139936C /* CollectionChanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD067B2C43A39C8F29C6B70691FC7B8 /* CollectionChanges.swift */; }; + 172A7832E1A396868678E4EB69EC12D5 /* PhotosInputCellProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4306E5B302B20801B08011A90E0FF1F8 /* PhotosInputCellProvider.swift */; }; + 17C5314D4E48DD75B9B2D33978F8495A /* ChatInputBarAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23398C34333A5A585408BF38AE0C2065 /* ChatInputBarAppearance.swift */; }; + 1BEA3E8EE37844059E557750F6F3467D /* LiveCameraCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3333BED070BA5CD346B481AB6022E549 /* LiveCameraCell.swift */; }; + 21E7AEFC96DF3C318E59AFC99A5F2F87 /* AnimationUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31E6E29A9A89094B4B607C4C341D18FF /* AnimationUtils.swift */; }; + 23FC32666E623FE02FAE815267004565 /* DummyChatItemPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC8B562575F15B1063DA3F12983E605 /* DummyChatItemPresenter.swift */; }; + 2BDF077C0D08BF17E44F73A568A546D2 /* BaseChatViewController+Presenters.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9CAFD2207ED1C04D3BE9C9F4EF9C01C /* BaseChatViewController+Presenters.swift */; }; + 2FC2C1302FD5B8205152057E1B255477 /* CircleProgressIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9160597BE3659155259293AABCB3555 /* CircleProgressIndicatorView.m */; }; + 33468BC8EC486396F2339403DDB8C8A3 /* TextMessageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D92F80EFA905D1D2B49E78A544CA770E /* TextMessageModel.swift */; }; + 33CFA9817381D5D452D65F3CE2F73E1B /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8544C25F17FD6BA40AE7191260F8B89D /* Utils.swift */; }; + 35D49ABC96CE7C0D3E8146B859EEA032 /* Chatto-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 41A9B2AAC21030F2945A94BC7CBD1423 /* Chatto-dummy.m */; }; + 36820B14073A38BC33D0028CCCEF48D1 /* TextBubbleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6570F04FDD5CC8C2BC932E82306D690 /* TextBubbleView.swift */; }; + 37FAE4CA5C70625D5AE777B5D3CC5429 /* CircleProgressIndicator.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA69C4842198E41E23867E01B0161612 /* CircleProgressIndicator.xcassets */; }; + 3C99EADA4754BC7B0BFB33A977FD5192 /* TextMessagePresenterBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA37B6B7D260CE35E463E68DE47C0F0 /* TextMessagePresenterBuilder.swift */; }; + 3D557CE5B2A13E659FB504ED9E4351CB /* HorizontalStackScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4549EAD309CDA9A0C8B82AC7F9381D1 /* HorizontalStackScrollView.swift */; }; + 3D5944B7FBF068C523CA6742F67FEF47 /* ViewDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6269251CBD6458BEEDBEDA08B64C442 /* ViewDefinitions.swift */; }; + 4239CAEE3F17556CF992547FD70C5FBF /* Chatto-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 42D8BFA51D1A4D7997DDA3DAEEC7BB3A /* Chatto-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4337838D91565AA2287EF6B034D13A7D /* ChatInputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE14101F8C4BA1B959F36608FBAA4982 /* ChatInputItem.swift */; }; + 44A649D8B3231A80F0177C4B86571655 /* BaseMessageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 667C1CA3478EA3D81ADADD11F7EFB62C /* BaseMessageAssets.xcassets */; }; + 483FB1B75E6CF6007D39F9C9BE4FCD36 /* ReusableXibView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB60CC19EC06054D693A3635FC065C8 /* ReusableXibView.swift */; }; + 4CB5A1C529335B0491D9932407898317 /* BaseMessagePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A560B5BC0929E09496CB42FC6FF4B42 /* BaseMessagePresenter.swift */; }; + 4CCCFC26F93E395D9CA66219440F3D6F /* CircleProgressIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA2CDE90F026B1E3CE3241BAF0CBDF42 /* CircleProgressIndicatorView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DA84E57C97397BABF3DFEC7A20473A4 /* CircleIconView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC886B6248C7ACE6B9152CC90B2CE25D /* CircleIconView.m */; }; + 520FAA44139958761E2F5F42771506B6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CE13526223A899F54C1E16E05F8946F /* Foundation.framework */; }; + 53EF802D8961B00EC0CFED2F0704E2F5 /* ExpandableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24BCF073CE16056F253257894CF66DD /* ExpandableTextView.swift */; }; + 54DB1556763801347CC408FC15FE7D6F /* PhotoBubbleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A090C4E7541E04C60FEC74B26A1983D8 /* PhotoBubbleView.swift */; }; + 60BB18C70C8E4E2D1D6F54E83E219A8B /* ChatInputItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 681E03D75C85DD9F68B05EFA215C12DA /* ChatInputItemView.swift */; }; + 615290649C3A3BEA4EFA350B39B58488 /* ChatInputBarPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC819B1D861D4DAB565E0F55A285701 /* ChatInputBarPresenter.swift */; }; + 67137A4E85897A4235934C1AD67CD2E5 /* TextMessageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7019E99B21789BA603247FD118DFB1AF /* TextMessageViewModel.swift */; }; + 68D0351426E0494FC782C18126BB7BDD /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */; }; + 6B7672BC385B565FBA81FCB3FFAF450F /* ChatItemProtocolDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAEDD66F204613F7909B6366489E5877 /* ChatItemProtocolDefinitions.swift */; }; + 6C673786B8D417D72D1A4FD07403D332 /* BaseMessageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D0E435C33C19717B04811C0F73600E /* BaseMessageModel.swift */; }; + 71A04AA0639B0DAFD053BFDBFB478512 /* BaseChatItemPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A14766A8E0032BB78606EC453D0E319 /* BaseChatItemPresenter.swift */; }; + 71BF373B1A5E11AC51A7D5BA39FAE8C0 /* Chatto.h in Headers */ = {isa = PBXBuildFile; fileRef = 737E2CF45205A77F92C3BB577EC402AC /* Chatto.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 732F36EE305570AB4434DD55E8909691 /* ChatItemCompanion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6BD0B70E57045A2F80FE71D185225EC /* ChatItemCompanion.swift */; }; + 74A62FD17620A7F212C97BAF348CC48C /* BaseMessageCollectionViewCellDefaultSyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9295E06CBFBBA5200243C4EE50AFA67 /* BaseMessageCollectionViewCellDefaultSyle.swift */; }; + 75DE942B1F0BCC571FC94D3450CFEACD /* AccessoryViewRevealer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F06F0E819E1A4B623D5D5CB005332F5 /* AccessoryViewRevealer.swift */; }; + 774ED369A498A948F1CB47492C70C331 /* CircleIconView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1450F7E23B95E33D58368BB36C594CCF /* CircleIconView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79E04E9DBEF95CEA8BC5189A4817999E /* ChatCollectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C1B14121609E9FEF78CC5A1F5D33C87 /* ChatCollectionViewLayout.swift */; }; + 7D52C857CF1B68DE68B2C4ACFF5F06BB /* ChatItemDecorationAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3C388748081057087ABCD9B0DDC950 /* ChatItemDecorationAttributes.swift */; }; + 817B87B6772FDADDCC41A0A8E4499B2E /* PhotosInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B04C38B6EBC9EC62019D9CF55AA0238E /* PhotosInputView.swift */; }; + 83A1E35E3030AEBFF2FFAB3EB12892E2 /* ReadOnlyOrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A91A17B65A0DFC2E91B06732D39DF4D8 /* ReadOnlyOrderedDictionary.swift */; }; + 8471D19BA239ED6CACAAB5B4FBA78029 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CE13526223A899F54C1E16E05F8946F /* Foundation.framework */; }; + 88430EE95105DF1E3602E0B47D2551CC /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A62E24EAB3E41E6298553D72F1AACB0B /* Observable.swift */; }; + 917F4BC3AF3D500040DD7417DDA921AA /* PhotoMessageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B766F68048B2995D20C6DF8D77A6429 /* PhotoMessageViewModel.swift */; }; + A1F625687BCBD5B333CDCD9E609AE21C /* TextMessageCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0115F92456789DC5293B80ADE95E0C9F /* TextMessageCollectionViewCell.swift */; }; + A63CF3857F3FCC965E5D575410482B49 /* ChattoAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4927E8B748B6DCD67DA10E42879EEC22 /* ChattoAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A785A7F0413CCCEE79368F037F174942 /* BaseChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26CDE1DC9156413E1F1498B6E064FD9C /* BaseChatViewController.swift */; }; + A8405C91165AB7A31FE6A88A333DD701 /* PhotosInputViewItemSizeCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC91F230E6B87767585794C423F4732 /* PhotosInputViewItemSizeCalculator.swift */; }; + AC410D8567E6C696227B566F9AFCC075 /* ChatInputBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 64098046251F40CFE18AABFF28F8AF30 /* ChatInputBar.xib */; }; + B5DC5D3B818ED2A4F5D15261EB896837 /* Pods-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E09F29F0C9B6EC251B7350DFECBEA7 /* TextMessagePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5902D05B5BB1C50C7F4680DD211F6AA5 /* TextMessagePresenter.swift */; }; + BD7AB12D0B465616431F59E5229BE0A5 /* Text.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2A0D073A6C8292215CF9C18BDE409BE1 /* Text.xcassets */; }; + BDA2BD34DA413B3F0CB3F7446318CBFF /* PhotosInputDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BE76FB30802E2048AEF7A804E8FA056 /* PhotosInputDataProvider.swift */; }; + C0E9BFF70A14D72F547A0FD8E54D12D2 /* TextChatInputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CE0C32F2E53D253FBD890532AA9201C /* TextChatInputItem.swift */; }; + C417103E0FCA3D932165F20C9D380795 /* BaseChatViewController+Changes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97AF83716E31AEE76D059FBFFCFB4AB9 /* BaseChatViewController+Changes.swift */; }; + C8DB6F6376D771949DBF44C56D2756D1 /* KeyedOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97EC8D64F772F020E4A9E737D4A050C3 /* KeyedOperationQueue.swift */; }; + CA1A1BD015BDA5A8B58B7D2E0E533520 /* PhotoMessageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D38FF70C7961730494358A781BBD4266 /* PhotoMessageModel.swift */; }; + CEEB179AC74112C35F06D166DC81D49E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CE13526223A899F54C1E16E05F8946F /* Foundation.framework */; }; + D7FCB154DF24B64737D8482138192E34 /* BaseMessageCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B9575301EAF330DF2C9F01CFC35126 /* BaseMessageCollectionViewCell.swift */; }; + DB179935E7B42289354103564BE69134 /* PhotoMessagePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0EBAA11EA89A45AAD5EEC0671CB697E /* PhotoMessagePresenter.swift */; }; + DB71E72FC92441C0155C6C2C15CDE623 /* TextMessageCollectionViewCellDefaultStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C42DE4E7BA84C9B0F5D1A68BE58C87 /* TextMessageCollectionViewCellDefaultStyle.swift */; }; + DB94084D0A44BA2D3F5ADC62B776414E /* Photos.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D2B2293D7D418420AB03F0584A71EB69 /* Photos.xcassets */; }; + DD4281675740E491D5281F0A3E77812E /* ChatDataSourceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4CD584C6291CFB386B93BF6ABDA0BF /* ChatDataSourceProtocol.swift */; }; + DED2BABE15E93002DCD0963164AA37D8 /* PhotoMessageCollectionViewCellDefaultStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC78D5C31DE842F5996D6DFE95CBE39 /* PhotoMessageCollectionViewCellDefaultStyle.swift */; }; + E85D3183B28EB3014429F9EAD6A4C663 /* BaseChatViewController+Scrolling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1734F95BAFB4255C92D1378576BB4531 /* BaseChatViewController+Scrolling.swift */; }; + EAC0E38ED8452A7F664DD63E918C95FE /* Chatto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0A636ED63D4950987B5410B6B50F1B4 /* Chatto.framework */; }; + EDF609BF0B29652FAA7CF6F1FD36CA11 /* PhotoMessageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7BFD9A3C31260386847F9B7920E6FC80 /* PhotoMessageAssets.xcassets */; }; + EFB74EE0A89287687BE1936EADE1CD3A /* CircleProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 167D53F6123B5236B27506A95BA7851A /* CircleProgressView.m */; }; + F194E1AB922FFF837278FCEC54B06449 /* PhotoMessagePresenterBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2C226C413CE617F8BF06BE47C11C73 /* PhotoMessagePresenterBuilder.swift */; }; + F431FE6FDD2A4F9EE27F1CEDB9AC1C99 /* KeyboardTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73346A0100218962F0E52CFE5FF10180 /* KeyboardTracker.swift */; }; + FA425B297903CF809BFA8C0238DA59B9 /* PhotoMessageCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E50EDA3F59861363F8D1562C64520389 /* PhotoMessageCollectionViewCell.swift */; }; + FB7FD6E6D7B54832D06B08301BED1537 /* PhotosInputCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E415AF9FF70A25E565DD75E7A5B741 /* PhotosInputCell.swift */; }; + FBDE5F94B066CE215DF944B8C852855B /* SerialTaskQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10AE579F456CD6AF66BDD70715FE2AD2 /* SerialTaskQueue.swift */; }; + FCBF2BA23C23C1F5C3281D0C5D34C968 /* PhotosChatInputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D102E537B24FD32C4408CDC03234189 /* PhotosChatInputItem.swift */; }; + FD65B50F2C2C231254D616FBE64BCE93 /* BaseMessageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCECC6BEBDCA29F005882EBE7E4A6CFA /* BaseMessageViewModel.swift */; }; + FFC8FDDB7D848CFBF68CF848AB9E5FD0 /* ChatInputBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F16CAF022D5603843128A2381A0B6887 /* ChatInputBar.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3A4012010BE69B97E46A5FB84F2302AC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = B4AE1BBB51A0170717EDE487936AC80E; + remoteInfo = Chatto; + }; + 4EE8DDA26FBDE4C7E6738F7506377ECB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = B4AE1BBB51A0170717EDE487936AC80E; + remoteInfo = Chatto; + }; + 75FE19E41E61A16534ECC3755AD1FB04 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7DD08A69500CBF4A4EFFEEE3FF9E3C54; + remoteInfo = ChattoAdditions; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 00C42DE4E7BA84C9B0F5D1A68BE58C87 /* TextMessageCollectionViewCellDefaultStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextMessageCollectionViewCellDefaultStyle.swift; sourceTree = ""; }; + 0115F92456789DC5293B80ADE95E0C9F /* TextMessageCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextMessageCollectionViewCell.swift; sourceTree = ""; }; + 0CE0C32F2E53D253FBD890532AA9201C /* TextChatInputItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextChatInputItem.swift; sourceTree = ""; }; + 10AE579F456CD6AF66BDD70715FE2AD2 /* SerialTaskQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SerialTaskQueue.swift; sourceTree = ""; }; + 1450F7E23B95E33D58368BB36C594CCF /* CircleIconView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CircleIconView.h; sourceTree = ""; }; + 167D53F6123B5236B27506A95BA7851A /* CircleProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CircleProgressView.m; sourceTree = ""; }; + 1734F95BAFB4255C92D1378576BB4531 /* BaseChatViewController+Scrolling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "BaseChatViewController+Scrolling.swift"; sourceTree = ""; }; + 1A14766A8E0032BB78606EC453D0E319 /* BaseChatItemPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BaseChatItemPresenter.swift; sourceTree = ""; }; + 23398C34333A5A585408BF38AE0C2065 /* ChatInputBarAppearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatInputBarAppearance.swift; sourceTree = ""; }; + 26CDE1DC9156413E1F1498B6E064FD9C /* BaseChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BaseChatViewController.swift; sourceTree = ""; }; + 2A0D073A6C8292215CF9C18BDE409BE1 /* Text.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = Text.xcassets; sourceTree = ""; }; + 2A560B5BC0929E09496CB42FC6FF4B42 /* BaseMessagePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BaseMessagePresenter.swift; sourceTree = ""; }; + 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-umbrella.h"; sourceTree = ""; }; + 2C1B14121609E9FEF78CC5A1F5D33C87 /* ChatCollectionViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatCollectionViewLayout.swift; sourceTree = ""; }; + 2FC91F230E6B87767585794C423F4732 /* PhotosInputViewItemSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotosInputViewItemSizeCalculator.swift; sourceTree = ""; }; + 31E6E29A9A89094B4B607C4C341D18FF /* AnimationUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnimationUtils.swift; sourceTree = ""; }; + 3333BED070BA5CD346B481AB6022E549 /* LiveCameraCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiveCameraCell.swift; sourceTree = ""; }; + 3D102E537B24FD32C4408CDC03234189 /* PhotosChatInputItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotosChatInputItem.swift; sourceTree = ""; }; + 3F06F0E819E1A4B623D5D5CB005332F5 /* AccessoryViewRevealer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccessoryViewRevealer.swift; sourceTree = ""; }; + 41A9B2AAC21030F2945A94BC7CBD1423 /* Chatto-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Chatto-dummy.m"; sourceTree = ""; }; + 42D8BFA51D1A4D7997DDA3DAEEC7BB3A /* Chatto-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Chatto-umbrella.h"; sourceTree = ""; }; + 4306E5B302B20801B08011A90E0FF1F8 /* PhotosInputCellProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotosInputCellProvider.swift; sourceTree = ""; }; + 4927E8B748B6DCD67DA10E42879EEC22 /* ChattoAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ChattoAdditions.h; sourceTree = ""; }; + 4AC819B1D861D4DAB565E0F55A285701 /* ChatInputBarPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatInputBarPresenter.swift; sourceTree = ""; }; + 58294E0D6B459AFD04DEA87154A8368F /* Chatto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Chatto.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5902D05B5BB1C50C7F4680DD211F6AA5 /* TextMessagePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextMessagePresenter.swift; sourceTree = ""; }; + 5A4BF7E99DD1960EA3ACDCE6F29D58BB /* ChattoAdditions-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChattoAdditions-umbrella.h"; sourceTree = ""; }; + 5EB60CC19EC06054D693A3635FC065C8 /* ReusableXibView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReusableXibView.swift; sourceTree = ""; }; + 637A06D57DDDE2353B5A90D3F0897A6C /* PhotosInputCameraPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotosInputCameraPicker.swift; sourceTree = ""; }; + 64098046251F40CFE18AABFF28F8AF30 /* ChatInputBar.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = ChatInputBar.xib; sourceTree = ""; }; + 664656BDB7A47AC9ECBA2D58EB550D51 /* Chatto.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Chatto.modulemap; sourceTree = ""; }; + 667C1CA3478EA3D81ADADD11F7EFB62C /* BaseMessageAssets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = BaseMessageAssets.xcassets; sourceTree = ""; }; + 681E03D75C85DD9F68B05EFA215C12DA /* ChatInputItemView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatInputItemView.swift; sourceTree = ""; }; + 7019E99B21789BA603247FD118DFB1AF /* TextMessageViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextMessageViewModel.swift; sourceTree = ""; }; + 73346A0100218962F0E52CFE5FF10180 /* KeyboardTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardTracker.swift; sourceTree = ""; }; + 737E2CF45205A77F92C3BB577EC402AC /* Chatto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Chatto.h; sourceTree = ""; }; + 73D0E435C33C19717B04811C0F73600E /* BaseMessageModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BaseMessageModel.swift; sourceTree = ""; }; + 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Pods.modulemap; sourceTree = ""; }; + 7BFD9A3C31260386847F9B7920E6FC80 /* PhotoMessageAssets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = PhotoMessageAssets.xcassets; sourceTree = ""; }; + 7DF19D1C33F02CDBE97223A0F2535E5C /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8544C25F17FD6BA40AE7191260F8B89D /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; + 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; + 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + 8A3C388748081057087ABCD9B0DDC950 /* ChatItemDecorationAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatItemDecorationAttributes.swift; sourceTree = ""; }; + 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 97AF83716E31AEE76D059FBFFCFB4AB9 /* BaseChatViewController+Changes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "BaseChatViewController+Changes.swift"; sourceTree = ""; }; + 97EC8D64F772F020E4A9E737D4A050C3 /* KeyedOperationQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyedOperationQueue.swift; sourceTree = ""; }; + 9B766F68048B2995D20C6DF8D77A6429 /* PhotoMessageViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotoMessageViewModel.swift; sourceTree = ""; }; + 9BE76FB30802E2048AEF7A804E8FA056 /* PhotosInputDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotosInputDataProvider.swift; sourceTree = ""; }; + 9CE13526223A899F54C1E16E05F8946F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + A090C4E7541E04C60FEC74B26A1983D8 /* PhotoBubbleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotoBubbleView.swift; sourceTree = ""; }; + A210C8B9CA993A2C831727CE2515A3DE /* ChattoAdditions-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChattoAdditions-prefix.pch"; sourceTree = ""; }; + A62E24EAB3E41E6298553D72F1AACB0B /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Observable.swift; sourceTree = ""; }; + A65DE185A12E70BE17EFA373F195C9E6 /* Chatto.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Chatto.xcconfig; sourceTree = ""; }; + A9160597BE3659155259293AABCB3555 /* CircleProgressIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CircleProgressIndicatorView.m; sourceTree = ""; }; + A91A17B65A0DFC2E91B06732D39DF4D8 /* ReadOnlyOrderedDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReadOnlyOrderedDictionary.swift; sourceTree = ""; }; + A9CAFD2207ED1C04D3BE9C9F4EF9C01C /* BaseChatViewController+Presenters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "BaseChatViewController+Presenters.swift"; sourceTree = ""; }; + AEC8B562575F15B1063DA3F12983E605 /* DummyChatItemPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DummyChatItemPresenter.swift; sourceTree = ""; }; + AF3827E052F4369A86F32B555BFE2E80 /* Chatto-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Chatto-prefix.pch"; sourceTree = ""; }; + AF5BD772CABAA008A4802F6B3A73307E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AFD067B2C43A39C8F29C6B70691FC7B8 /* CollectionChanges.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CollectionChanges.swift; sourceTree = ""; }; + B04C38B6EBC9EC62019D9CF55AA0238E /* PhotosInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotosInputView.swift; sourceTree = ""; }; + B6570F04FDD5CC8C2BC932E82306D690 /* TextBubbleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextBubbleView.swift; sourceTree = ""; }; + BA4CD584C6291CFB386B93BF6ABDA0BF /* ChatDataSourceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatDataSourceProtocol.swift; sourceTree = ""; }; + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BBC78D5C31DE842F5996D6DFE95CBE39 /* PhotoMessageCollectionViewCellDefaultStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotoMessageCollectionViewCellDefaultStyle.swift; sourceTree = ""; }; + BC886B6248C7ACE6B9152CC90B2CE25D /* CircleIconView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CircleIconView.m; sourceTree = ""; }; + C0EBAA11EA89A45AAD5EEC0671CB697E /* PhotoMessagePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotoMessagePresenter.swift; sourceTree = ""; }; + C117BD8C68DD05EFED4E96C19B341962 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C6BD0B70E57045A2F80FE71D185225EC /* ChatItemCompanion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatItemCompanion.swift; sourceTree = ""; }; + CA2CDE90F026B1E3CE3241BAF0CBDF42 /* CircleProgressIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CircleProgressIndicatorView.h; sourceTree = ""; }; + CBA0556F9682A8263E184A5F4851B9AD /* CircleProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CircleProgressView.h; sourceTree = ""; }; + CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; + CC2C226C413CE617F8BF06BE47C11C73 /* PhotoMessagePresenterBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotoMessagePresenterBuilder.swift; sourceTree = ""; }; + CCECC6BEBDCA29F005882EBE7E4A6CFA /* BaseMessageViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BaseMessageViewModel.swift; sourceTree = ""; }; + CE7CD41DBBB972864685F06362CCC494 /* ChattoAdditions.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChattoAdditions.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CEA37B6B7D260CE35E463E68DE47C0F0 /* TextMessagePresenterBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextMessagePresenterBuilder.swift; sourceTree = ""; }; + D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + D0A636ED63D4950987B5410B6B50F1B4 /* Chatto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Chatto.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D1B9575301EAF330DF2C9F01CFC35126 /* BaseMessageCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BaseMessageCollectionViewCell.swift; sourceTree = ""; }; + D24BCF073CE16056F253257894CF66DD /* ExpandableTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExpandableTextView.swift; sourceTree = ""; }; + D2B2293D7D418420AB03F0584A71EB69 /* Photos.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = Photos.xcassets; sourceTree = ""; }; + D38FF70C7961730494358A781BBD4266 /* PhotoMessageModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotoMessageModel.swift; sourceTree = ""; }; + D5E415AF9FF70A25E565DD75E7A5B741 /* PhotosInputCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotosInputCell.swift; sourceTree = ""; }; + D92F80EFA905D1D2B49E78A544CA770E /* TextMessageModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TextMessageModel.swift; sourceTree = ""; }; + DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + DA69C4842198E41E23867E01B0161612 /* CircleProgressIndicator.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = CircleProgressIndicator.xcassets; sourceTree = ""; }; + DAEDD66F204613F7909B6366489E5877 /* ChatItemProtocolDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatItemProtocolDefinitions.swift; sourceTree = ""; }; + DD7E5A5969A01E3A504D0135C6F25CFF /* ChattoAdditions.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChattoAdditions.xcconfig; sourceTree = ""; }; + E50EDA3F59861363F8D1562C64520389 /* PhotoMessageCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PhotoMessageCollectionViewCell.swift; sourceTree = ""; }; + E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-frameworks.sh"; sourceTree = ""; }; + E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EE14101F8C4BA1B959F36608FBAA4982 /* ChatInputItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatInputItem.swift; sourceTree = ""; }; + F16CAF022D5603843128A2381A0B6887 /* ChatInputBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatInputBar.swift; sourceTree = ""; }; + F4549EAD309CDA9A0C8B82AC7F9381D1 /* HorizontalStackScrollView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HorizontalStackScrollView.swift; sourceTree = ""; }; + F6269251CBD6458BEEDBEDA08B64C442 /* ViewDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ViewDefinitions.swift; sourceTree = ""; }; + F9295E06CBFBBA5200243C4EE50AFA67 /* BaseMessageCollectionViewCellDefaultSyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BaseMessageCollectionViewCellDefaultSyle.swift; sourceTree = ""; }; + FB5030FB81D772482E145FF745310021 /* ChattoAdditions-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChattoAdditions-dummy.m"; sourceTree = ""; }; + FC4E873D2874D2207B97F63437C9827E /* ChattoAdditions.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ChattoAdditions.modulemap; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 50EB32A161726B3296730BD11DCCF5A7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EAC0E38ED8452A7F664DD63E918C95FE /* Chatto.framework in Frameworks */, + CEEB179AC74112C35F06D166DC81D49E /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 81E830CF711532CDED131BBF230874E0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 520FAA44139958761E2F5F42771506B6 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E625D698677F51C1049B239AD65C4F60 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8471D19BA239ED6CACAAB5B4FBA78029 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 05D31F297955F0F0DD4FEC528EE49A5F /* UI Components */ = { + isa = PBXGroup; + children = ( + 2359A998D9C76796BE410695F6524156 /* CircleProgressIndicatorView */, + ); + path = "UI Components"; + sourceTree = ""; + }; + 0830C6876687803EBD18173FA46E6A63 /* Support Files */ = { + isa = PBXGroup; + children = ( + 664656BDB7A47AC9ECBA2D58EB550D51 /* Chatto.modulemap */, + A65DE185A12E70BE17EFA373F195C9E6 /* Chatto.xcconfig */, + 41A9B2AAC21030F2945A94BC7CBD1423 /* Chatto-dummy.m */, + AF3827E052F4369A86F32B555BFE2E80 /* Chatto-prefix.pch */, + 42D8BFA51D1A4D7997DDA3DAEEC7BB3A /* Chatto-umbrella.h */, + C117BD8C68DD05EFED4E96C19B341962 /* Info.plist */, + ); + name = "Support Files"; + path = "ChattoApp/Pods/Target Support Files/Chatto"; + sourceTree = ""; + }; + 0E7726F07BAD9AC95C0FB541855E2AE4 /* Resources */ = { + isa = PBXGroup; + children = ( + 6E5712D008F1D3582EB2F57000DC0F18 /* ChattoAdditions */, + ); + name = Resources; + sourceTree = ""; + }; + 1C8DD2806DDEC6C4DE1DE2F13C5295BA /* Text */ = { + isa = PBXGroup; + children = ( + 0CE0C32F2E53D253FBD890532AA9201C /* TextChatInputItem.swift */, + ); + path = Text; + sourceTree = ""; + }; + 2359A998D9C76796BE410695F6524156 /* CircleProgressIndicatorView */ = { + isa = PBXGroup; + children = ( + DA69C4842198E41E23867E01B0161612 /* CircleProgressIndicator.xcassets */, + ); + path = CircleProgressIndicatorView; + sourceTree = ""; + }; + 23CC058C87AD2CF0D378D217EE78620F /* PhotoMessages */ = { + isa = PBXGroup; + children = ( + A3643B3F3761685639739C82F2307E77 /* Views */, + ); + path = PhotoMessages; + sourceTree = ""; + }; + 34EB44D72143D7B39261756AA1BA58FE /* Chatto */ = { + isa = PBXGroup; + children = ( + E635D2FB885AFD96E992D9044C95EEF7 /* Source */, + ); + path = Chatto; + sourceTree = ""; + }; + 35784B943EDF77E81962AF955E2122E1 /* Views */ = { + isa = PBXGroup; + children = ( + A090C4E7541E04C60FEC74B26A1983D8 /* PhotoBubbleView.swift */, + E50EDA3F59861363F8D1562C64520389 /* PhotoMessageCollectionViewCell.swift */, + BBC78D5C31DE842F5996D6DFE95CBE39 /* PhotoMessageCollectionViewCellDefaultStyle.swift */, + ); + path = Views; + sourceTree = ""; + }; + 3882A61CF128C4409DEE2E421E4EA59D /* Chatto */ = { + isa = PBXGroup; + children = ( + 34EB44D72143D7B39261756AA1BA58FE /* Chatto */, + 0830C6876687803EBD18173FA46E6A63 /* Support Files */, + ); + name = Chatto; + path = ../..; + sourceTree = ""; + }; + 4132B6A0B82C9AD10C98563576173FA9 /* BaseMessage */ = { + isa = PBXGroup; + children = ( + 73D0E435C33C19717B04811C0F73600E /* BaseMessageModel.swift */, + 2A560B5BC0929E09496CB42FC6FF4B42 /* BaseMessagePresenter.swift */, + CCECC6BEBDCA29F005882EBE7E4A6CFA /* BaseMessageViewModel.swift */, + FFA8F01724F587E5E59A7FF51CB8DE82 /* Views */, + ); + path = BaseMessage; + sourceTree = ""; + }; + 43B2D39ACB83720FAE1D14EC5F213849 /* Views */ = { + isa = PBXGroup; + children = ( + B6570F04FDD5CC8C2BC932E82306D690 /* TextBubbleView.swift */, + 0115F92456789DC5293B80ADE95E0C9F /* TextMessageCollectionViewCell.swift */, + 00C42DE4E7BA84C9B0F5D1A68BE58C87 /* TextMessageCollectionViewCellDefaultStyle.swift */, + ); + path = Views; + sourceTree = ""; + }; + 506DC1B37003C9C4393D540E196DEF41 /* ChattoAdditions */ = { + isa = PBXGroup; + children = ( + 7F5203F70424BF8FE0A443C488977D78 /* ChattoAdditions */, + 0E7726F07BAD9AC95C0FB541855E2AE4 /* Resources */, + 5C4A68DF3D211320E5061770B0C3B112 /* Support Files */, + ); + name = ChattoAdditions; + path = ../..; + sourceTree = ""; + }; + 5C4A68DF3D211320E5061770B0C3B112 /* Support Files */ = { + isa = PBXGroup; + children = ( + FC4E873D2874D2207B97F63437C9827E /* ChattoAdditions.modulemap */, + DD7E5A5969A01E3A504D0135C6F25CFF /* ChattoAdditions.xcconfig */, + FB5030FB81D772482E145FF745310021 /* ChattoAdditions-dummy.m */, + A210C8B9CA993A2C831727CE2515A3DE /* ChattoAdditions-prefix.pch */, + 5A4BF7E99DD1960EA3ACDCE6F29D58BB /* ChattoAdditions-umbrella.h */, + AF5BD772CABAA008A4802F6B3A73307E /* Info.plist */, + ); + name = "Support Files"; + path = "ChattoApp/Pods/Target Support Files/ChattoAdditions"; + sourceTree = ""; + }; + 6C5B434C2A4737145DBA9318EF0B164D /* Input */ = { + isa = PBXGroup; + children = ( + 64098046251F40CFE18AABFF28F8AF30 /* ChatInputBar.xib */, + C322C204C7D59AB4720A2CAD6C38078B /* Photos */, + 8E746D60240566BFD95B5FDB0589F010 /* Text */, + ); + path = Input; + sourceTree = ""; + }; + 6E5712D008F1D3582EB2F57000DC0F18 /* ChattoAdditions */ = { + isa = PBXGroup; + children = ( + BDCB2EC04F318F528132F68C371EE9CD /* Source */, + ); + path = ChattoAdditions; + sourceTree = ""; + }; + 7468334D2E29C3979DE993CD32ACC1CC /* Input */ = { + isa = PBXGroup; + children = ( + F16CAF022D5603843128A2381A0B6887 /* ChatInputBar.swift */, + 23398C34333A5A585408BF38AE0C2065 /* ChatInputBarAppearance.swift */, + 4AC819B1D861D4DAB565E0F55A285701 /* ChatInputBarPresenter.swift */, + EE14101F8C4BA1B959F36608FBAA4982 /* ChatInputItem.swift */, + 681E03D75C85DD9F68B05EFA215C12DA /* ChatInputItemView.swift */, + D24BCF073CE16056F253257894CF66DD /* ExpandableTextView.swift */, + F4549EAD309CDA9A0C8B82AC7F9381D1 /* HorizontalStackScrollView.swift */, + 5EB60CC19EC06054D693A3635FC065C8 /* ReusableXibView.swift */, + 99CF1DE7C434899AC0FF56172A90C7B7 /* Photos */, + 1C8DD2806DDEC6C4DE1DE2F13C5295BA /* Text */, + ); + path = Input; + sourceTree = ""; + }; + 75D98FF52E597A11900E131B6C4E1ADA /* Pods */ = { + isa = PBXGroup; + children = ( + E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */, + 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */, + D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */, + 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */, + 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */, + E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */, + CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */, + 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */, + 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */, + DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */, + ); + name = Pods; + path = "Target Support Files/Pods"; + sourceTree = ""; + }; + 7B25C629ADCBF309A6CC76BE734D5A5B /* Source */ = { + isa = PBXGroup; + children = ( + 31E6E29A9A89094B4B607C4C341D18FF /* AnimationUtils.swift */, + 4927E8B748B6DCD67DA10E42879EEC22 /* ChattoAdditions.h */, + 97EC8D64F772F020E4A9E737D4A050C3 /* KeyedOperationQueue.swift */, + A62E24EAB3E41E6298553D72F1AACB0B /* Observable.swift */, + 8544C25F17FD6BA40AE7191260F8B89D /* Utils.swift */, + F6E06C5F7EB5590920E4A39BD92857FD /* Chat Items */, + 7468334D2E29C3979DE993CD32ACC1CC /* Input */, + AFB70FD5FE6FEDFA0F3361C99F63A627 /* UI Components */, + ); + path = Source; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + DF648B3CF24B9FDB22C46C8F894C25FE /* Development Pods */, + 82B4130D6842ED151D75732401A98763 /* Frameworks */, + C1BDB953EFC03352CF11E24248A50AA7 /* Products */, + B7B80995527643776607AFFA75B91E24 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 7F5203F70424BF8FE0A443C488977D78 /* ChattoAdditions */ = { + isa = PBXGroup; + children = ( + 7B25C629ADCBF309A6CC76BE734D5A5B /* Source */, + ); + path = ChattoAdditions; + sourceTree = ""; + }; + 82B4130D6842ED151D75732401A98763 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0A636ED63D4950987B5410B6B50F1B4 /* Chatto.framework */, + E166EAE657932B27CB37E9CBB9280FAF /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 8308D5FAF366D31B3354B31183E688CB /* ChatController */ = { + isa = PBXGroup; + children = ( + 3F06F0E819E1A4B623D5D5CB005332F5 /* AccessoryViewRevealer.swift */, + 26CDE1DC9156413E1F1498B6E064FD9C /* BaseChatViewController.swift */, + 97AF83716E31AEE76D059FBFFCFB4AB9 /* BaseChatViewController+Changes.swift */, + A9CAFD2207ED1C04D3BE9C9F4EF9C01C /* BaseChatViewController+Presenters.swift */, + 1734F95BAFB4255C92D1378576BB4531 /* BaseChatViewController+Scrolling.swift */, + 2C1B14121609E9FEF78CC5A1F5D33C87 /* ChatCollectionViewLayout.swift */, + BA4CD584C6291CFB386B93BF6ABDA0BF /* ChatDataSourceProtocol.swift */, + AFD067B2C43A39C8F29C6B70691FC7B8 /* CollectionChanges.swift */, + 73346A0100218962F0E52CFE5FF10180 /* KeyboardTracker.swift */, + ); + path = ChatController; + sourceTree = ""; + }; + 88E90BC196F83EB029881AAFB31CE452 /* CircleProgressIndicatorView */ = { + isa = PBXGroup; + children = ( + 1450F7E23B95E33D58368BB36C594CCF /* CircleIconView.h */, + BC886B6248C7ACE6B9152CC90B2CE25D /* CircleIconView.m */, + CA2CDE90F026B1E3CE3241BAF0CBDF42 /* CircleProgressIndicatorView.h */, + A9160597BE3659155259293AABCB3555 /* CircleProgressIndicatorView.m */, + CBA0556F9682A8263E184A5F4851B9AD /* CircleProgressView.h */, + 167D53F6123B5236B27506A95BA7851A /* CircleProgressView.m */, + ); + path = CircleProgressIndicatorView; + sourceTree = ""; + }; + 8E746D60240566BFD95B5FDB0589F010 /* Text */ = { + isa = PBXGroup; + children = ( + 2A0D073A6C8292215CF9C18BDE409BE1 /* Text.xcassets */, + ); + path = Text; + sourceTree = ""; + }; + 9486F27E9C712C62F6856EC5E1DFD468 /* BaseMessage */ = { + isa = PBXGroup; + children = ( + 9950012E86344A91EE5E3EF4834DEBC1 /* Views */, + ); + path = BaseMessage; + sourceTree = ""; + }; + 9950012E86344A91EE5E3EF4834DEBC1 /* Views */ = { + isa = PBXGroup; + children = ( + 667C1CA3478EA3D81ADADD11F7EFB62C /* BaseMessageAssets.xcassets */, + ); + path = Views; + sourceTree = ""; + }; + 99CF1DE7C434899AC0FF56172A90C7B7 /* Photos */ = { + isa = PBXGroup; + children = ( + 3333BED070BA5CD346B481AB6022E549 /* LiveCameraCell.swift */, + 3D102E537B24FD32C4408CDC03234189 /* PhotosChatInputItem.swift */, + 637A06D57DDDE2353B5A90D3F0897A6C /* PhotosInputCameraPicker.swift */, + D5E415AF9FF70A25E565DD75E7A5B741 /* PhotosInputCell.swift */, + 4306E5B302B20801B08011A90E0FF1F8 /* PhotosInputCellProvider.swift */, + 9BE76FB30802E2048AEF7A804E8FA056 /* PhotosInputDataProvider.swift */, + B04C38B6EBC9EC62019D9CF55AA0238E /* PhotosInputView.swift */, + 2FC91F230E6B87767585794C423F4732 /* PhotosInputViewItemSizeCalculator.swift */, + ); + path = Photos; + sourceTree = ""; + }; + A3643B3F3761685639739C82F2307E77 /* Views */ = { + isa = PBXGroup; + children = ( + 7BFD9A3C31260386847F9B7920E6FC80 /* PhotoMessageAssets.xcassets */, + ); + path = Views; + sourceTree = ""; + }; + A518D2A6B2CC93AD5FC6EF88205E08E8 /* Chat Items */ = { + isa = PBXGroup; + children = ( + 9486F27E9C712C62F6856EC5E1DFD468 /* BaseMessage */, + 23CC058C87AD2CF0D378D217EE78620F /* PhotoMessages */, + ); + path = "Chat Items"; + sourceTree = ""; + }; + AFB70FD5FE6FEDFA0F3361C99F63A627 /* UI Components */ = { + isa = PBXGroup; + children = ( + 88E90BC196F83EB029881AAFB31CE452 /* CircleProgressIndicatorView */, + ); + path = "UI Components"; + sourceTree = ""; + }; + B7B80995527643776607AFFA75B91E24 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 75D98FF52E597A11900E131B6C4E1ADA /* Pods */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + BDCB2EC04F318F528132F68C371EE9CD /* Source */ = { + isa = PBXGroup; + children = ( + A518D2A6B2CC93AD5FC6EF88205E08E8 /* Chat Items */, + 6C5B434C2A4737145DBA9318EF0B164D /* Input */, + 05D31F297955F0F0DD4FEC528EE49A5F /* UI Components */, + ); + path = Source; + sourceTree = ""; + }; + C19B2CEDAC61D49C34A8795FF721D06D /* Chat Items */ = { + isa = PBXGroup; + children = ( + 1A14766A8E0032BB78606EC453D0E319 /* BaseChatItemPresenter.swift */, + C6BD0B70E57045A2F80FE71D185225EC /* ChatItemCompanion.swift */, + DAEDD66F204613F7909B6366489E5877 /* ChatItemProtocolDefinitions.swift */, + AEC8B562575F15B1063DA3F12983E605 /* DummyChatItemPresenter.swift */, + ); + path = "Chat Items"; + sourceTree = ""; + }; + C1BDB953EFC03352CF11E24248A50AA7 /* Products */ = { + isa = PBXGroup; + children = ( + 58294E0D6B459AFD04DEA87154A8368F /* Chatto.framework */, + CE7CD41DBBB972864685F06362CCC494 /* ChattoAdditions.framework */, + 7DF19D1C33F02CDBE97223A0F2535E5C /* Pods.framework */, + ); + name = Products; + sourceTree = ""; + }; + C322C204C7D59AB4720A2CAD6C38078B /* Photos */ = { + isa = PBXGroup; + children = ( + D2B2293D7D418420AB03F0584A71EB69 /* Photos.xcassets */, + ); + path = Photos; + sourceTree = ""; + }; + CC27B0AA8783E403851467DA308D736D /* TextMessages */ = { + isa = PBXGroup; + children = ( + D92F80EFA905D1D2B49E78A544CA770E /* TextMessageModel.swift */, + 5902D05B5BB1C50C7F4680DD211F6AA5 /* TextMessagePresenter.swift */, + CEA37B6B7D260CE35E463E68DE47C0F0 /* TextMessagePresenterBuilder.swift */, + 7019E99B21789BA603247FD118DFB1AF /* TextMessageViewModel.swift */, + 43B2D39ACB83720FAE1D14EC5F213849 /* Views */, + ); + path = TextMessages; + sourceTree = ""; + }; + DF648B3CF24B9FDB22C46C8F894C25FE /* Development Pods */ = { + isa = PBXGroup; + children = ( + 3882A61CF128C4409DEE2E421E4EA59D /* Chatto */, + 506DC1B37003C9C4393D540E196DEF41 /* ChattoAdditions */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + E166EAE657932B27CB37E9CBB9280FAF /* iOS */ = { + isa = PBXGroup; + children = ( + 9CE13526223A899F54C1E16E05F8946F /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + E635D2FB885AFD96E992D9044C95EEF7 /* Source */ = { + isa = PBXGroup; + children = ( + 737E2CF45205A77F92C3BB577EC402AC /* Chatto.h */, + A91A17B65A0DFC2E91B06732D39DF4D8 /* ReadOnlyOrderedDictionary.swift */, + 10AE579F456CD6AF66BDD70715FE2AD2 /* SerialTaskQueue.swift */, + C19B2CEDAC61D49C34A8795FF721D06D /* Chat Items */, + 8308D5FAF366D31B3354B31183E688CB /* ChatController */, + ); + path = Source; + sourceTree = ""; + }; + EEAABA8E8443311507CD9BB41E35B286 /* PhotoMessages */ = { + isa = PBXGroup; + children = ( + D38FF70C7961730494358A781BBD4266 /* PhotoMessageModel.swift */, + C0EBAA11EA89A45AAD5EEC0671CB697E /* PhotoMessagePresenter.swift */, + CC2C226C413CE617F8BF06BE47C11C73 /* PhotoMessagePresenterBuilder.swift */, + 9B766F68048B2995D20C6DF8D77A6429 /* PhotoMessageViewModel.swift */, + 35784B943EDF77E81962AF955E2122E1 /* Views */, + ); + path = PhotoMessages; + sourceTree = ""; + }; + F6E06C5F7EB5590920E4A39BD92857FD /* Chat Items */ = { + isa = PBXGroup; + children = ( + 8A3C388748081057087ABCD9B0DDC950 /* ChatItemDecorationAttributes.swift */, + 4132B6A0B82C9AD10C98563576173FA9 /* BaseMessage */, + EEAABA8E8443311507CD9BB41E35B286 /* PhotoMessages */, + CC27B0AA8783E403851467DA308D736D /* TextMessages */, + ); + path = "Chat Items"; + sourceTree = ""; + }; + FFA8F01724F587E5E59A7FF51CB8DE82 /* Views */ = { + isa = PBXGroup; + children = ( + D1B9575301EAF330DF2C9F01CFC35126 /* BaseMessageCollectionViewCell.swift */, + F9295E06CBFBBA5200243C4EE50AFA67 /* BaseMessageCollectionViewCellDefaultSyle.swift */, + F6269251CBD6458BEEDBEDA08B64C442 /* ViewDefinitions.swift */, + ); + path = Views; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 70D77E6C8B815EBD66FF9CE04922FDF1 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B5DC5D3B818ED2A4F5D15261EB896837 /* Pods-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 930B77B0B215490568CD3228FA91E67A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1281E83BEA9A48C95D01A3CFFB17E893 /* ChattoAdditions-umbrella.h in Headers */, + A63CF3857F3FCC965E5D575410482B49 /* ChattoAdditions.h in Headers */, + 774ED369A498A948F1CB47492C70C331 /* CircleIconView.h in Headers */, + 4CCCFC26F93E395D9CA66219440F3D6F /* CircleProgressIndicatorView.h in Headers */, + 0938863B64F4AE791D7EAFDEFAD09085 /* CircleProgressView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E0030C7EA922E3758F5819660E29C792 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4239CAEE3F17556CF992547FD70C5FBF /* Chatto-umbrella.h in Headers */, + 71BF373B1A5E11AC51A7D5BA39FAE8C0 /* Chatto.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 7DD08A69500CBF4A4EFFEEE3FF9E3C54 /* ChattoAdditions */ = { + isa = PBXNativeTarget; + buildConfigurationList = E6ADA2C5706A6F1E0D5C504344DDFAB7 /* Build configuration list for PBXNativeTarget "ChattoAdditions" */; + buildPhases = ( + D0B57C30BF887C961A42D4EDC1A145B5 /* Sources */, + 50EB32A161726B3296730BD11DCCF5A7 /* Frameworks */, + 930B77B0B215490568CD3228FA91E67A /* Headers */, + BD76A104CEBAD30C83B8058DFDE61468 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 480D85CCE10ACF23367AB556C48F3FB4 /* PBXTargetDependency */, + ); + name = ChattoAdditions; + productName = ChattoAdditions; + productReference = CE7CD41DBBB972864685F06362CCC494 /* ChattoAdditions.framework */; + productType = "com.apple.product-type.framework"; + }; + AF6C60699C45E376AB593B5FA984954E /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3F635F51C46E8B20880BB7EF933DD874 /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + 659E3A6A1BC77CD2033B4E15551A6EB0 /* Sources */, + E625D698677F51C1049B239AD65C4F60 /* Frameworks */, + 70D77E6C8B815EBD66FF9CE04922FDF1 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 698E976767454CEA971282CD4122B5D2 /* PBXTargetDependency */, + E37197B156C72EB287049632D6C5DA8A /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = 7DF19D1C33F02CDBE97223A0F2535E5C /* Pods.framework */; + productType = "com.apple.product-type.framework"; + }; + B4AE1BBB51A0170717EDE487936AC80E /* Chatto */ = { + isa = PBXNativeTarget; + buildConfigurationList = E616269D5380592A7A57B16CF93B46FA /* Build configuration list for PBXNativeTarget "Chatto" */; + buildPhases = ( + EA4B7BB8CDE430F56706743613F69C6A /* Sources */, + 81E830CF711532CDED131BBF230874E0 /* Frameworks */, + E0030C7EA922E3758F5819660E29C792 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Chatto; + productName = Chatto; + productReference = 58294E0D6B459AFD04DEA87154A8368F /* Chatto.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = C1BDB953EFC03352CF11E24248A50AA7 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B4AE1BBB51A0170717EDE487936AC80E /* Chatto */, + 7DD08A69500CBF4A4EFFEEE3FF9E3C54 /* ChattoAdditions */, + AF6C60699C45E376AB593B5FA984954E /* Pods */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + BD76A104CEBAD30C83B8058DFDE61468 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 44A649D8B3231A80F0177C4B86571655 /* BaseMessageAssets.xcassets in Resources */, + AC410D8567E6C696227B566F9AFCC075 /* ChatInputBar.xib in Resources */, + 37FAE4CA5C70625D5AE777B5D3CC5429 /* CircleProgressIndicator.xcassets in Resources */, + EDF609BF0B29652FAA7CF6F1FD36CA11 /* PhotoMessageAssets.xcassets in Resources */, + DB94084D0A44BA2D3F5ADC62B776414E /* Photos.xcassets in Resources */, + BD7AB12D0B465616431F59E5229BE0A5 /* Text.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 659E3A6A1BC77CD2033B4E15551A6EB0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 68D0351426E0494FC782C18126BB7BDD /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D0B57C30BF887C961A42D4EDC1A145B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 21E7AEFC96DF3C318E59AFC99A5F2F87 /* AnimationUtils.swift in Sources */, + D7FCB154DF24B64737D8482138192E34 /* BaseMessageCollectionViewCell.swift in Sources */, + 74A62FD17620A7F212C97BAF348CC48C /* BaseMessageCollectionViewCellDefaultSyle.swift in Sources */, + 6C673786B8D417D72D1A4FD07403D332 /* BaseMessageModel.swift in Sources */, + 4CB5A1C529335B0491D9932407898317 /* BaseMessagePresenter.swift in Sources */, + FD65B50F2C2C231254D616FBE64BCE93 /* BaseMessageViewModel.swift in Sources */, + FFC8FDDB7D848CFBF68CF848AB9E5FD0 /* ChatInputBar.swift in Sources */, + 17C5314D4E48DD75B9B2D33978F8495A /* ChatInputBarAppearance.swift in Sources */, + 615290649C3A3BEA4EFA350B39B58488 /* ChatInputBarPresenter.swift in Sources */, + 4337838D91565AA2287EF6B034D13A7D /* ChatInputItem.swift in Sources */, + 60BB18C70C8E4E2D1D6F54E83E219A8B /* ChatInputItemView.swift in Sources */, + 7D52C857CF1B68DE68B2C4ACFF5F06BB /* ChatItemDecorationAttributes.swift in Sources */, + 09BD679DB19419AE64123C48BDA1D4E8 /* ChattoAdditions-dummy.m in Sources */, + 4DA84E57C97397BABF3DFEC7A20473A4 /* CircleIconView.m in Sources */, + 2FC2C1302FD5B8205152057E1B255477 /* CircleProgressIndicatorView.m in Sources */, + EFB74EE0A89287687BE1936EADE1CD3A /* CircleProgressView.m in Sources */, + 53EF802D8961B00EC0CFED2F0704E2F5 /* ExpandableTextView.swift in Sources */, + 3D557CE5B2A13E659FB504ED9E4351CB /* HorizontalStackScrollView.swift in Sources */, + C8DB6F6376D771949DBF44C56D2756D1 /* KeyedOperationQueue.swift in Sources */, + 1BEA3E8EE37844059E557750F6F3467D /* LiveCameraCell.swift in Sources */, + 88430EE95105DF1E3602E0B47D2551CC /* Observable.swift in Sources */, + 54DB1556763801347CC408FC15FE7D6F /* PhotoBubbleView.swift in Sources */, + FA425B297903CF809BFA8C0238DA59B9 /* PhotoMessageCollectionViewCell.swift in Sources */, + DED2BABE15E93002DCD0963164AA37D8 /* PhotoMessageCollectionViewCellDefaultStyle.swift in Sources */, + CA1A1BD015BDA5A8B58B7D2E0E533520 /* PhotoMessageModel.swift in Sources */, + DB179935E7B42289354103564BE69134 /* PhotoMessagePresenter.swift in Sources */, + F194E1AB922FFF837278FCEC54B06449 /* PhotoMessagePresenterBuilder.swift in Sources */, + 917F4BC3AF3D500040DD7417DDA921AA /* PhotoMessageViewModel.swift in Sources */, + FCBF2BA23C23C1F5C3281D0C5D34C968 /* PhotosChatInputItem.swift in Sources */, + 135C12037302D7FC90A29E5A12128734 /* PhotosInputCameraPicker.swift in Sources */, + FB7FD6E6D7B54832D06B08301BED1537 /* PhotosInputCell.swift in Sources */, + 172A7832E1A396868678E4EB69EC12D5 /* PhotosInputCellProvider.swift in Sources */, + BDA2BD34DA413B3F0CB3F7446318CBFF /* PhotosInputDataProvider.swift in Sources */, + 817B87B6772FDADDCC41A0A8E4499B2E /* PhotosInputView.swift in Sources */, + A8405C91165AB7A31FE6A88A333DD701 /* PhotosInputViewItemSizeCalculator.swift in Sources */, + 483FB1B75E6CF6007D39F9C9BE4FCD36 /* ReusableXibView.swift in Sources */, + 36820B14073A38BC33D0028CCCEF48D1 /* TextBubbleView.swift in Sources */, + C0E9BFF70A14D72F547A0FD8E54D12D2 /* TextChatInputItem.swift in Sources */, + A1F625687BCBD5B333CDCD9E609AE21C /* TextMessageCollectionViewCell.swift in Sources */, + DB71E72FC92441C0155C6C2C15CDE623 /* TextMessageCollectionViewCellDefaultStyle.swift in Sources */, + 33468BC8EC486396F2339403DDB8C8A3 /* TextMessageModel.swift in Sources */, + B5E09F29F0C9B6EC251B7350DFECBEA7 /* TextMessagePresenter.swift in Sources */, + 3C99EADA4754BC7B0BFB33A977FD5192 /* TextMessagePresenterBuilder.swift in Sources */, + 67137A4E85897A4235934C1AD67CD2E5 /* TextMessageViewModel.swift in Sources */, + 33CFA9817381D5D452D65F3CE2F73E1B /* Utils.swift in Sources */, + 3D5944B7FBF068C523CA6742F67FEF47 /* ViewDefinitions.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EA4B7BB8CDE430F56706743613F69C6A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 75DE942B1F0BCC571FC94D3450CFEACD /* AccessoryViewRevealer.swift in Sources */, + 71A04AA0639B0DAFD053BFDBFB478512 /* BaseChatItemPresenter.swift in Sources */, + C417103E0FCA3D932165F20C9D380795 /* BaseChatViewController+Changes.swift in Sources */, + 2BDF077C0D08BF17E44F73A568A546D2 /* BaseChatViewController+Presenters.swift in Sources */, + E85D3183B28EB3014429F9EAD6A4C663 /* BaseChatViewController+Scrolling.swift in Sources */, + A785A7F0413CCCEE79368F037F174942 /* BaseChatViewController.swift in Sources */, + 79E04E9DBEF95CEA8BC5189A4817999E /* ChatCollectionViewLayout.swift in Sources */, + DD4281675740E491D5281F0A3E77812E /* ChatDataSourceProtocol.swift in Sources */, + 732F36EE305570AB4434DD55E8909691 /* ChatItemCompanion.swift in Sources */, + 6B7672BC385B565FBA81FCB3FFAF450F /* ChatItemProtocolDefinitions.swift in Sources */, + 35D49ABC96CE7C0D3E8146B859EEA032 /* Chatto-dummy.m in Sources */, + 13DB1CF0CEFA2FF493E6BEAD2139936C /* CollectionChanges.swift in Sources */, + 23FC32666E623FE02FAE815267004565 /* DummyChatItemPresenter.swift in Sources */, + F431FE6FDD2A4F9EE27F1CEDB9AC1C99 /* KeyboardTracker.swift in Sources */, + 83A1E35E3030AEBFF2FFAB3EB12892E2 /* ReadOnlyOrderedDictionary.swift in Sources */, + FBDE5F94B066CE215DF944B8C852855B /* SerialTaskQueue.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 480D85CCE10ACF23367AB556C48F3FB4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Chatto; + target = B4AE1BBB51A0170717EDE487936AC80E /* Chatto */; + targetProxy = 4EE8DDA26FBDE4C7E6738F7506377ECB /* PBXContainerItemProxy */; + }; + 698E976767454CEA971282CD4122B5D2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Chatto; + target = B4AE1BBB51A0170717EDE487936AC80E /* Chatto */; + targetProxy = 3A4012010BE69B97E46A5FB84F2302AC /* PBXContainerItemProxy */; + }; + E37197B156C72EB287049632D6C5DA8A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ChattoAdditions; + target = 7DD08A69500CBF4A4EFFEEE3FF9E3C54 /* ChattoAdditions */; + targetProxy = 75FE19E41E61A16534ECC3755AD1FB04 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 31A4C2E8EED4E2085BB5E8A7F1D9FBBB /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DD7E5A5969A01E3A504D0135C6F25CFF /* ChattoAdditions.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ChattoAdditions/ChattoAdditions-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ChattoAdditions/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ChattoAdditions/ChattoAdditions.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = ChattoAdditions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 36440BE9E9EA3F580694F74AC894187D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DD7E5A5969A01E3A504D0135C6F25CFF /* ChattoAdditions.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ChattoAdditions/ChattoAdditions-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ChattoAdditions/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ChattoAdditions/ChattoAdditions.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = ChattoAdditions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7D60030793EA1E173153E1CAD0CEB10A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A65DE185A12E70BE17EFA373F195C9E6 /* Chatto.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Chatto/Chatto-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Chatto/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Chatto/Chatto.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Chatto; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 89B8E9418013682BBB19063064B2574C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A65DE185A12E70BE17EFA373F195C9E6 /* Chatto.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Chatto/Chatto-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Chatto/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Chatto/Chatto.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Chatto; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A70CDAD61F90AC503C7D04CC22DA2923 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + D1CBF7ED1C4CCB0A2600FEC5035FA59B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = Pods; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + DCE277310A043383EC97FC45344064D9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = Pods; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + FB45FFD90572718D82AB9092B750F0CA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A70CDAD61F90AC503C7D04CC22DA2923 /* Debug */, + FB45FFD90572718D82AB9092B750F0CA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3F635F51C46E8B20880BB7EF933DD874 /* Build configuration list for PBXNativeTarget "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DCE277310A043383EC97FC45344064D9 /* Debug */, + D1CBF7ED1C4CCB0A2600FEC5035FA59B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E616269D5380592A7A57B16CF93B46FA /* Build configuration list for PBXNativeTarget "Chatto" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 89B8E9418013682BBB19063064B2574C /* Debug */, + 7D60030793EA1E173153E1CAD0CEB10A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E6ADA2C5706A6F1E0D5C504344DDFAB7 /* Build configuration list for PBXNativeTarget "ChattoAdditions" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 31A4C2E8EED4E2085BB5E8A7F1D9FBBB /* Debug */, + 36440BE9E9EA3F580694F74AC894187D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chatto.xcscheme b/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chatto.xcscheme index bf9aa99..1a649cf 100644 --- a/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chatto.xcscheme +++ b/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chatto.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/ChattoAdditions.xcscheme b/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/ChattoAdditions.xcscheme index ed02913..1bc2171 100644 --- a/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/ChattoAdditions.xcscheme +++ b/ChattoApp/Pods/Pods.xcodeproj/xcshareddata/xcschemes/ChattoAdditions.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES">