diff --git a/Example/ChatLayout.xcodeproj/project.pbxproj b/Example/ChatLayout.xcodeproj/project.pbxproj index c58c9990..d1a27d28 100644 --- a/Example/ChatLayout.xcodeproj/project.pbxproj +++ b/Example/ChatLayout.xcodeproj/project.pbxproj @@ -8,10 +8,64 @@ /* Begin PBXBuildFile section */ 017E5EA5A707CF0065C9C060 /* Pods_ChatLayout_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 187B89468A68AF411025A59A /* Pods_ChatLayout_Example.framework */; }; + 1BE54BC5C70CB9FA1260B54D /* ChatDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE544BF8E723F3D86B4D774 /* ChatDateFormatter.swift */; }; + 4504F3F324FA66F600385590 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3AB24FA66F500385590 /* Constants.swift */; }; + 4504F3F424FA66F600385590 /* ChatControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3AD24FA66F500385590 /* ChatControllerDelegate.swift */; }; + 4504F3F524FA66F600385590 /* DefaultChatController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3AE24FA66F500385590 /* DefaultChatController.swift */; }; + 4504F3F624FA66F600385590 /* ChatController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3AF24FA66F500385590 /* ChatController.swift */; }; + 4504F3F724FA66F600385590 /* DefaultRandomDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3B124FA66F500385590 /* DefaultRandomDataProvider.swift */; }; + 4504F3F824FA66F600385590 /* TypingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3B324FA66F500385590 /* TypingState.swift */; }; + 4504F3F924FA66F600385590 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3B424FA66F500385590 /* Cell.swift */; }; + 4504F3FA24FA66F600385590 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3B524FA66F500385590 /* Message.swift */; }; + 4504F3FB24FA66F600385590 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3B624FA66F500385590 /* User.swift */; }; + 4504F3FC24FA66F600385590 /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3B724FA66F500385590 /* Section.swift */; }; + 4504F3FD24FA66F600385590 /* RawMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3B824FA66F500385590 /* RawMessage.swift */; }; + 4504F3FE24FA66F600385590 /* CacheableImageKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3BB24FA66F500385590 /* CacheableImageKey.swift */; }; + 4504F3FF24FA66F600385590 /* ImageForUrlCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3BC24FA66F500385590 /* ImageForUrlCache.swift */; }; + 4504F40024FA66F600385590 /* AsyncKeyValueCaching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3BE24FA66F500385590 /* AsyncKeyValueCaching.swift */; }; + 4504F40124FA66F600385590 /* KeyValueCaching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3BF24FA66F500385590 /* KeyValueCaching.swift */; }; + 4504F40224FA66F600385590 /* IterativeCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3C124FA66F500385590 /* IterativeCache.swift */; }; + 4504F40324FA66F600385590 /* MemoryDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3C224FA66F500385590 /* MemoryDataCache.swift */; }; + 4504F40424FA66F600385590 /* PersistentDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3C324FA66F500385590 /* PersistentDataCache.swift */; }; + 4504F40524FA66F600385590 /* MetaDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3C524FA66F500385590 /* MetaDataCache.swift */; }; + 4504F40624FA66F600385590 /* CacheError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3C624FA66F500385590 /* CacheError.swift */; }; + 4504F40724FA66F600385590 /* TextGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3C724FA66F500385590 /* TextGenerator.swift */; }; + 4504F40824FA66F600385590 /* Caches.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3C824FA66F500385590 /* Caches.swift */; }; + 4504F40924FA66F600385590 /* ChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3CA24FA66F500385590 /* ChatViewController.swift */; }; + 4504F40A24FA66F600385590 /* StatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3CC24FA66F500385590 /* StatusView.swift */; }; + 4504F40B24FA66F600385590 /* ChatCollectionDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3CE24FA66F500385590 /* ChatCollectionDataSource.swift */; }; + 4504F40C24FA66F600385590 /* DefaultChatCollectionDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3CF24FA66F500385590 /* DefaultChatCollectionDataSource.swift */; }; + 4504F40D24FA66F600385590 /* TextMessageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D124FA66F500385590 /* TextMessageController.swift */; }; + 4504F40E24FA66F600385590 /* TextMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D224FA66F500385590 /* TextMessageView.swift */; }; + 4504F40F24FA66F600385590 /* BubbleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D424FA66F500385590 /* BubbleController.swift */; }; + 4504F41024FA66F600385590 /* TextBubbleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D524FA66F500385590 /* TextBubbleController.swift */; }; + 4504F41124FA66F600385590 /* FullCellContentBubbleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D624FA66F500385590 /* FullCellContentBubbleController.swift */; }; + 4504F41224FA66F600385590 /* EditNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D724FA66F500385590 /* EditNotifier.swift */; }; + 4504F41324FA66F600385590 /* DefaultBubbleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D824FA66F500385590 /* DefaultBubbleController.swift */; }; + 4504F41424FA66F600385590 /* EditNotifierDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3D924FA66F500385590 /* EditNotifierDelegate.swift */; }; + 4504F41524FA66F600385590 /* AvatarPlaceholderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3DB24FA66F500385590 /* AvatarPlaceholderView.swift */; }; + 4504F41624FA66F600385590 /* AvatarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3DC24FA66F500385590 /* AvatarView.swift */; }; + 4504F41724FA66F600385590 /* AvatarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3DD24FA66F500385590 /* AvatarViewController.swift */; }; + 4504F41824FA66F600385590 /* URLView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3DF24FA66F500385590 /* URLView.swift */; }; + 4504F41924FA66F600385590 /* URLController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E024FA66F500385590 /* URLController.swift */; }; + 4504F41A24FA66F600385590 /* URLSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E124FA66F500385590 /* URLSource.swift */; }; + 4504F41B24FA66F600385590 /* ImageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E324FA66F500385590 /* ImageController.swift */; }; + 4504F41C24FA66F600385590 /* ImageMessageSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E424FA66F500385590 /* ImageMessageSource.swift */; }; + 4504F41D24FA66F600385590 /* CachingImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E624FA66F500385590 /* CachingImageLoader.swift */; }; + 4504F41E24FA66F600385590 /* ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E724FA66F600385590 /* ImageLoader.swift */; }; + 4504F41F24FA66F600385590 /* DefaultImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E824FA66F600385590 /* DefaultImageLoader.swift */; }; + 4504F42024FA66F600385590 /* ImageViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3E924FA66F600385590 /* ImageViewState.swift */; }; + 4504F42124FA66F600385590 /* ImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3EA24FA66F600385590 /* ImageView.swift */; }; + 4504F42224FA66F600385590 /* ReloadDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3EB24FA66F600385590 /* ReloadDelegate.swift */; }; + 4504F42324FA66F600385590 /* SetActor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3ED24FA66F600385590 /* SetActor.swift */; }; + 4504F42424FA66F600385590 /* DifferenceKit+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3EE24FA66F600385590 /* DifferenceKit+Extension.swift */; }; + 4504F42524FA66F600385590 /* EditingAccessoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3F024FA66F600385590 /* EditingAccessoryController.swift */; }; + 4504F42624FA66F600385590 /* EditingAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3F124FA66F600385590 /* EditingAccessoryView.swift */; }; + 4504F42724FA66F600385590 /* KeyboardListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F3F224FA66F600385590 /* KeyboardListener.swift */; }; + 4504F42B24FA67F400385590 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4504F42A24FA67F400385590 /* SceneDelegate.swift */; }; + 4504F43024FA685E00385590 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4504F42F24FA685E00385590 /* Assets.xcassets */; }; 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; - 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 65D4D44932474631D9677C50 /* Pods_ChatLayout_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12FB56A5FF321AA24C456635 /* Pods_ChatLayout_Tests.framework */; }; @@ -30,13 +84,67 @@ /* Begin PBXFileReference section */ 12FB56A5FF321AA24C456635 /* Pods_ChatLayout_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ChatLayout_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 187B89468A68AF411025A59A /* Pods_ChatLayout_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ChatLayout_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1BE544BF8E723F3D86B4D774 /* ChatDateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatDateFormatter.swift; sourceTree = ""; }; 1E094931D1426F33B8D1D082 /* Pods-ChatLayout_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ChatLayout_Tests.debug.xcconfig"; path = "Target Support Files/Pods-ChatLayout_Tests/Pods-ChatLayout_Tests.debug.xcconfig"; sourceTree = ""; }; + 4504F3AB24FA66F500385590 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 4504F3AD24FA66F500385590 /* ChatControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatControllerDelegate.swift; sourceTree = ""; }; + 4504F3AE24FA66F500385590 /* DefaultChatController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultChatController.swift; sourceTree = ""; }; + 4504F3AF24FA66F500385590 /* ChatController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatController.swift; sourceTree = ""; }; + 4504F3B124FA66F500385590 /* DefaultRandomDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultRandomDataProvider.swift; sourceTree = ""; }; + 4504F3B324FA66F500385590 /* TypingState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypingState.swift; sourceTree = ""; }; + 4504F3B424FA66F500385590 /* Cell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cell.swift; sourceTree = ""; }; + 4504F3B524FA66F500385590 /* Message.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; + 4504F3B624FA66F500385590 /* User.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; + 4504F3B724FA66F500385590 /* Section.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Section.swift; sourceTree = ""; }; + 4504F3B824FA66F500385590 /* RawMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RawMessage.swift; sourceTree = ""; }; + 4504F3BB24FA66F500385590 /* CacheableImageKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CacheableImageKey.swift; sourceTree = ""; }; + 4504F3BC24FA66F500385590 /* ImageForUrlCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageForUrlCache.swift; sourceTree = ""; }; + 4504F3BE24FA66F500385590 /* AsyncKeyValueCaching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncKeyValueCaching.swift; sourceTree = ""; }; + 4504F3BF24FA66F500385590 /* KeyValueCaching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyValueCaching.swift; sourceTree = ""; }; + 4504F3C124FA66F500385590 /* IterativeCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IterativeCache.swift; sourceTree = ""; }; + 4504F3C224FA66F500385590 /* MemoryDataCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MemoryDataCache.swift; sourceTree = ""; }; + 4504F3C324FA66F500385590 /* PersistentDataCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PersistentDataCache.swift; sourceTree = ""; }; + 4504F3C524FA66F500385590 /* MetaDataCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaDataCache.swift; sourceTree = ""; }; + 4504F3C624FA66F500385590 /* CacheError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CacheError.swift; sourceTree = ""; }; + 4504F3C724FA66F500385590 /* TextGenerator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextGenerator.swift; sourceTree = ""; }; + 4504F3C824FA66F500385590 /* Caches.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Caches.swift; sourceTree = ""; }; + 4504F3CA24FA66F500385590 /* ChatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatViewController.swift; sourceTree = ""; }; + 4504F3CC24FA66F500385590 /* StatusView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusView.swift; sourceTree = ""; }; + 4504F3CE24FA66F500385590 /* ChatCollectionDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatCollectionDataSource.swift; sourceTree = ""; }; + 4504F3CF24FA66F500385590 /* DefaultChatCollectionDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultChatCollectionDataSource.swift; sourceTree = ""; }; + 4504F3D124FA66F500385590 /* TextMessageController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextMessageController.swift; sourceTree = ""; }; + 4504F3D224FA66F500385590 /* TextMessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextMessageView.swift; sourceTree = ""; }; + 4504F3D424FA66F500385590 /* BubbleController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleController.swift; sourceTree = ""; }; + 4504F3D524FA66F500385590 /* TextBubbleController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextBubbleController.swift; sourceTree = ""; }; + 4504F3D624FA66F500385590 /* FullCellContentBubbleController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FullCellContentBubbleController.swift; sourceTree = ""; }; + 4504F3D724FA66F500385590 /* EditNotifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditNotifier.swift; sourceTree = ""; }; + 4504F3D824FA66F500385590 /* DefaultBubbleController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultBubbleController.swift; sourceTree = ""; }; + 4504F3D924FA66F500385590 /* EditNotifierDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditNotifierDelegate.swift; sourceTree = ""; }; + 4504F3DB24FA66F500385590 /* AvatarPlaceholderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvatarPlaceholderView.swift; sourceTree = ""; }; + 4504F3DC24FA66F500385590 /* AvatarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvatarView.swift; sourceTree = ""; }; + 4504F3DD24FA66F500385590 /* AvatarViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvatarViewController.swift; sourceTree = ""; }; + 4504F3DF24FA66F500385590 /* URLView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLView.swift; sourceTree = ""; }; + 4504F3E024FA66F500385590 /* URLController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLController.swift; sourceTree = ""; }; + 4504F3E124FA66F500385590 /* URLSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSource.swift; sourceTree = ""; }; + 4504F3E324FA66F500385590 /* ImageController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageController.swift; sourceTree = ""; }; + 4504F3E424FA66F500385590 /* ImageMessageSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageMessageSource.swift; sourceTree = ""; }; + 4504F3E624FA66F500385590 /* CachingImageLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachingImageLoader.swift; sourceTree = ""; }; + 4504F3E724FA66F600385590 /* ImageLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageLoader.swift; sourceTree = ""; }; + 4504F3E824FA66F600385590 /* DefaultImageLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultImageLoader.swift; sourceTree = ""; }; + 4504F3E924FA66F600385590 /* ImageViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewState.swift; sourceTree = ""; }; + 4504F3EA24FA66F600385590 /* ImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageView.swift; sourceTree = ""; }; + 4504F3EB24FA66F600385590 /* ReloadDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReloadDelegate.swift; sourceTree = ""; }; + 4504F3ED24FA66F600385590 /* SetActor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetActor.swift; sourceTree = ""; }; + 4504F3EE24FA66F600385590 /* DifferenceKit+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DifferenceKit+Extension.swift"; sourceTree = ""; }; + 4504F3F024FA66F600385590 /* EditingAccessoryController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditingAccessoryController.swift; sourceTree = ""; }; + 4504F3F124FA66F600385590 /* EditingAccessoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditingAccessoryView.swift; sourceTree = ""; }; + 4504F3F224FA66F600385590 /* KeyboardListener.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardListener.swift; sourceTree = ""; }; + 4504F42A24FA67F400385590 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 4504F42F24FA685E00385590 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 607FACD01AFB9204008FA782 /* ChatLayout_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ChatLayout_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 607FACE51AFB9204008FA782 /* ChatLayout_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChatLayout_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -78,6 +186,219 @@ name = Frameworks; sourceTree = ""; }; + 4504F3AA24FA66F500385590 /* Chat */ = { + isa = PBXGroup; + children = ( + 4504F3AB24FA66F500385590 /* Constants.swift */, + 4504F3AC24FA66F500385590 /* Controller */, + 4504F3B024FA66F500385590 /* Model */, + 4504F3C924FA66F500385590 /* View */, + ); + path = Chat; + sourceTree = ""; + }; + 4504F3AC24FA66F500385590 /* Controller */ = { + isa = PBXGroup; + children = ( + 4504F3AD24FA66F500385590 /* ChatControllerDelegate.swift */, + 4504F3AE24FA66F500385590 /* DefaultChatController.swift */, + 4504F3AF24FA66F500385590 /* ChatController.swift */, + ); + path = Controller; + sourceTree = ""; + }; + 4504F3B024FA66F500385590 /* Model */ = { + isa = PBXGroup; + children = ( + 4504F3B124FA66F500385590 /* DefaultRandomDataProvider.swift */, + 4504F3B224FA66F500385590 /* Data Objects */, + 4504F3B924FA66F500385590 /* Caching */, + 4504F3C724FA66F500385590 /* TextGenerator.swift */, + 4504F3C824FA66F500385590 /* Caches.swift */, + 1BE544BF8E723F3D86B4D774 /* ChatDateFormatter.swift */, + ); + path = Model; + sourceTree = ""; + }; + 4504F3B224FA66F500385590 /* Data Objects */ = { + isa = PBXGroup; + children = ( + 4504F3B324FA66F500385590 /* TypingState.swift */, + 4504F3B424FA66F500385590 /* Cell.swift */, + 4504F3B524FA66F500385590 /* Message.swift */, + 4504F3B624FA66F500385590 /* User.swift */, + 4504F3B724FA66F500385590 /* Section.swift */, + 4504F3B824FA66F500385590 /* RawMessage.swift */, + ); + path = "Data Objects"; + sourceTree = ""; + }; + 4504F3B924FA66F500385590 /* Caching */ = { + isa = PBXGroup; + children = ( + 4504F3BA24FA66F500385590 /* Image */, + 4504F3BD24FA66F500385590 /* Type Erasure */, + 4504F3BE24FA66F500385590 /* AsyncKeyValueCaching.swift */, + 4504F3BF24FA66F500385590 /* KeyValueCaching.swift */, + 4504F3C024FA66F500385590 /* Data */, + 4504F3C424FA66F500385590 /* Metadata */, + 4504F3C624FA66F500385590 /* CacheError.swift */, + ); + path = Caching; + sourceTree = ""; + }; + 4504F3BA24FA66F500385590 /* Image */ = { + isa = PBXGroup; + children = ( + 4504F3BB24FA66F500385590 /* CacheableImageKey.swift */, + 4504F3BC24FA66F500385590 /* ImageForUrlCache.swift */, + ); + path = Image; + sourceTree = ""; + }; + 4504F3BD24FA66F500385590 /* Type Erasure */ = { + isa = PBXGroup; + children = ( + ); + path = "Type Erasure"; + sourceTree = ""; + }; + 4504F3C024FA66F500385590 /* Data */ = { + isa = PBXGroup; + children = ( + 4504F3C124FA66F500385590 /* IterativeCache.swift */, + 4504F3C224FA66F500385590 /* MemoryDataCache.swift */, + 4504F3C324FA66F500385590 /* PersistentDataCache.swift */, + ); + path = Data; + sourceTree = ""; + }; + 4504F3C424FA66F500385590 /* Metadata */ = { + isa = PBXGroup; + children = ( + 4504F3C524FA66F500385590 /* MetaDataCache.swift */, + ); + path = Metadata; + sourceTree = ""; + }; + 4504F3C924FA66F500385590 /* View */ = { + isa = PBXGroup; + children = ( + 4504F3CA24FA66F500385590 /* ChatViewController.swift */, + 4504F3CB24FA66F500385590 /* Status View */, + 4504F3CD24FA66F500385590 /* Data Source */, + 4504F3D024FA66F500385590 /* Text Message View */, + 4504F3D324FA66F500385590 /* Other */, + 4504F3DA24FA66F500385590 /* Avatar View */, + 4504F3DE24FA66F500385590 /* URL */, + 4504F3E224FA66F500385590 /* Image */, + 4504F3EB24FA66F600385590 /* ReloadDelegate.swift */, + 4504F3EC24FA66F600385590 /* Helpers */, + 4504F3EF24FA66F600385590 /* Editing Accessory View */, + 4504F3F224FA66F600385590 /* KeyboardListener.swift */, + ); + path = View; + sourceTree = ""; + }; + 4504F3CB24FA66F500385590 /* Status View */ = { + isa = PBXGroup; + children = ( + 4504F3CC24FA66F500385590 /* StatusView.swift */, + ); + path = "Status View"; + sourceTree = ""; + }; + 4504F3CD24FA66F500385590 /* Data Source */ = { + isa = PBXGroup; + children = ( + 4504F3CE24FA66F500385590 /* ChatCollectionDataSource.swift */, + 4504F3CF24FA66F500385590 /* DefaultChatCollectionDataSource.swift */, + ); + path = "Data Source"; + sourceTree = ""; + }; + 4504F3D024FA66F500385590 /* Text Message View */ = { + isa = PBXGroup; + children = ( + 4504F3D124FA66F500385590 /* TextMessageController.swift */, + 4504F3D224FA66F500385590 /* TextMessageView.swift */, + ); + path = "Text Message View"; + sourceTree = ""; + }; + 4504F3D324FA66F500385590 /* Other */ = { + isa = PBXGroup; + children = ( + 4504F3D424FA66F500385590 /* BubbleController.swift */, + 4504F3D524FA66F500385590 /* TextBubbleController.swift */, + 4504F3D624FA66F500385590 /* FullCellContentBubbleController.swift */, + 4504F3D724FA66F500385590 /* EditNotifier.swift */, + 4504F3D824FA66F500385590 /* DefaultBubbleController.swift */, + 4504F3D924FA66F500385590 /* EditNotifierDelegate.swift */, + ); + path = Other; + sourceTree = ""; + }; + 4504F3DA24FA66F500385590 /* Avatar View */ = { + isa = PBXGroup; + children = ( + 4504F3DB24FA66F500385590 /* AvatarPlaceholderView.swift */, + 4504F3DC24FA66F500385590 /* AvatarView.swift */, + 4504F3DD24FA66F500385590 /* AvatarViewController.swift */, + ); + path = "Avatar View"; + sourceTree = ""; + }; + 4504F3DE24FA66F500385590 /* URL */ = { + isa = PBXGroup; + children = ( + 4504F3DF24FA66F500385590 /* URLView.swift */, + 4504F3E024FA66F500385590 /* URLController.swift */, + 4504F3E124FA66F500385590 /* URLSource.swift */, + ); + path = URL; + sourceTree = ""; + }; + 4504F3E224FA66F500385590 /* Image */ = { + isa = PBXGroup; + children = ( + 4504F3E324FA66F500385590 /* ImageController.swift */, + 4504F3E424FA66F500385590 /* ImageMessageSource.swift */, + 4504F3E524FA66F500385590 /* Loader */, + 4504F3E924FA66F600385590 /* ImageViewState.swift */, + 4504F3EA24FA66F600385590 /* ImageView.swift */, + ); + path = Image; + sourceTree = ""; + }; + 4504F3E524FA66F500385590 /* Loader */ = { + isa = PBXGroup; + children = ( + 4504F3E624FA66F500385590 /* CachingImageLoader.swift */, + 4504F3E724FA66F600385590 /* ImageLoader.swift */, + 4504F3E824FA66F600385590 /* DefaultImageLoader.swift */, + ); + path = Loader; + sourceTree = ""; + }; + 4504F3EC24FA66F600385590 /* Helpers */ = { + isa = PBXGroup; + children = ( + 4504F3ED24FA66F600385590 /* SetActor.swift */, + 4504F3EE24FA66F600385590 /* DifferenceKit+Extension.swift */, + ); + path = Helpers; + sourceTree = ""; + }; + 4504F3EF24FA66F600385590 /* Editing Accessory View */ = { + isa = PBXGroup; + children = ( + 4504F3F024FA66F600385590 /* EditingAccessoryController.swift */, + 4504F3F124FA66F600385590 /* EditingAccessoryView.swift */, + ); + path = "Editing Accessory View"; + sourceTree = ""; + }; 607FACC71AFB9204008FA782 = { isa = PBXGroup; children = ( @@ -102,10 +423,11 @@ 607FACD21AFB9204008FA782 /* Example for ChatLayout */ = { isa = PBXGroup; children = ( + 4504F3AA24FA66F500385590 /* Chat */, 607FACD51AFB9204008FA782 /* AppDelegate.swift */, + 4504F42A24FA67F400385590 /* SceneDelegate.swift */, + 4504F42F24FA685E00385590 /* Assets.xcassets */, 607FACD71AFB9204008FA782 /* ViewController.swift */, - 607FACD91AFB9204008FA782 /* Main.storyboard */, - 607FACDC1AFB9204008FA782 /* Images.xcassets */, 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 607FACD31AFB9204008FA782 /* Supporting Files */, ); @@ -246,9 +568,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, + 4504F43024FA685E00385590 /* Assets.xcassets in Resources */, 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -292,10 +613,14 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ChatLayout_Example/Pods-ChatLayout_Example-frameworks.sh", "${BUILT_PRODUCTS_DIR}/ChatLayout/ChatLayout.framework", + "${BUILT_PRODUCTS_DIR}/DifferenceKit/DifferenceKit.framework", + "${BUILT_PRODUCTS_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ChatLayout.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DifferenceKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/InputBarAccessoryView.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -331,8 +656,63 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4504F42324FA66F600385590 /* SetActor.swift in Sources */, + 4504F3F824FA66F600385590 /* TypingState.swift in Sources */, + 4504F40124FA66F600385590 /* KeyValueCaching.swift in Sources */, + 4504F40724FA66F600385590 /* TextGenerator.swift in Sources */, + 4504F40F24FA66F600385590 /* BubbleController.swift in Sources */, + 4504F41B24FA66F600385590 /* ImageController.swift in Sources */, + 4504F3FF24FA66F600385590 /* ImageForUrlCache.swift in Sources */, + 4504F42424FA66F600385590 /* DifferenceKit+Extension.swift in Sources */, + 4504F40424FA66F600385590 /* PersistentDataCache.swift in Sources */, + 4504F42524FA66F600385590 /* EditingAccessoryController.swift in Sources */, 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, + 4504F40824FA66F600385590 /* Caches.swift in Sources */, + 4504F41724FA66F600385590 /* AvatarViewController.swift in Sources */, 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, + 4504F42224FA66F600385590 /* ReloadDelegate.swift in Sources */, + 4504F41A24FA66F600385590 /* URLSource.swift in Sources */, + 4504F42124FA66F600385590 /* ImageView.swift in Sources */, + 4504F40C24FA66F600385590 /* DefaultChatCollectionDataSource.swift in Sources */, + 4504F41024FA66F600385590 /* TextBubbleController.swift in Sources */, + 4504F42024FA66F600385590 /* ImageViewState.swift in Sources */, + 4504F3F424FA66F600385590 /* ChatControllerDelegate.swift in Sources */, + 4504F40624FA66F600385590 /* CacheError.swift in Sources */, + 4504F41924FA66F600385590 /* URLController.swift in Sources */, + 4504F40224FA66F600385590 /* IterativeCache.swift in Sources */, + 4504F42624FA66F600385590 /* EditingAccessoryView.swift in Sources */, + 4504F40324FA66F600385590 /* MemoryDataCache.swift in Sources */, + 4504F3F324FA66F600385590 /* Constants.swift in Sources */, + 4504F40024FA66F600385590 /* AsyncKeyValueCaching.swift in Sources */, + 4504F41D24FA66F600385590 /* CachingImageLoader.swift in Sources */, + 4504F40A24FA66F600385590 /* StatusView.swift in Sources */, + 4504F40524FA66F600385590 /* MetaDataCache.swift in Sources */, + 4504F41124FA66F600385590 /* FullCellContentBubbleController.swift in Sources */, + 4504F42724FA66F600385590 /* KeyboardListener.swift in Sources */, + 4504F40D24FA66F600385590 /* TextMessageController.swift in Sources */, + 4504F3F924FA66F600385590 /* Cell.swift in Sources */, + 4504F42B24FA67F400385590 /* SceneDelegate.swift in Sources */, + 4504F40E24FA66F600385590 /* TextMessageView.swift in Sources */, + 4504F41224FA66F600385590 /* EditNotifier.swift in Sources */, + 4504F3F524FA66F600385590 /* DefaultChatController.swift in Sources */, + 4504F41324FA66F600385590 /* DefaultBubbleController.swift in Sources */, + 4504F41524FA66F600385590 /* AvatarPlaceholderView.swift in Sources */, + 4504F41624FA66F600385590 /* AvatarView.swift in Sources */, + 4504F41C24FA66F600385590 /* ImageMessageSource.swift in Sources */, + 4504F40B24FA66F600385590 /* ChatCollectionDataSource.swift in Sources */, + 4504F3FA24FA66F600385590 /* Message.swift in Sources */, + 4504F40924FA66F600385590 /* ChatViewController.swift in Sources */, + 4504F3F724FA66F600385590 /* DefaultRandomDataProvider.swift in Sources */, + 4504F41E24FA66F600385590 /* ImageLoader.swift in Sources */, + 4504F41424FA66F600385590 /* EditNotifierDelegate.swift in Sources */, + 4504F3FC24FA66F600385590 /* Section.swift in Sources */, + 4504F3F624FA66F600385590 /* ChatController.swift in Sources */, + 4504F41F24FA66F600385590 /* DefaultImageLoader.swift in Sources */, + 4504F3FB24FA66F600385590 /* User.swift in Sources */, + 4504F3FE24FA66F600385590 /* CacheableImageKey.swift in Sources */, + 4504F41824FA66F600385590 /* URLView.swift in Sources */, + 4504F3FD24FA66F600385590 /* RawMessage.swift in Sources */, + 1BE54BC5C70CB9FA1260B54D /* ChatDateFormatter.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -355,14 +735,6 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 607FACD91AFB9204008FA782 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 607FACDA1AFB9204008FA782 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { isa = PBXVariantGroup; children = ( @@ -482,10 +854,11 @@ IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "ie.ekazaev.demo.ChatLayout-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -498,10 +871,11 @@ IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "ie.ekazaev.demo.ChatLayout-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; diff --git a/Example/ChatLayout/AppDelegate.swift b/Example/ChatLayout/AppDelegate.swift index 68b5b51d..aa5402b6 100644 --- a/Example/ChatLayout/AppDelegate.swift +++ b/Example/ChatLayout/AppDelegate.swift @@ -14,31 +14,39 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. + func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + if #available(iOS 13.0, *) { + } else { + let window = UIWindow() + let dataProvider = DefaultRandomDataProvider(receiverId: 0, usersIds: [1, 2, 3]) + let messageController = DefaultChatController(dataProvider: dataProvider, userId: 0) + dataProvider.delegate = messageController + + let messageViewController = ChatViewController(chatController: messageController) + messageController.delegate = messageViewController + let viewController = UINavigationController(rootViewController: messageViewController) + + self.window = window + window.rootViewController = viewController + window.makeKeyAndVisible() + + } return true } - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } + // MARK: UISceneSession Lifecycle - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + @available(iOS 13.0, *) + func application(_: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options _: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + @available(iOS 13.0, *) + func application(_: UIApplication, didDiscardSceneSessions _: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - } diff --git a/Example/ChatLayout/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/ChatLayout/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..9221b9bb --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/Contents.json b/Example/ChatLayout/Assets.xcassets/Bubbles/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Bubbles/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/Contents.json new file mode 100644 index 00000000..2ade9316 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bubble_full.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bubble_full@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bubble_full@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full.png b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full.png new file mode 100644 index 00000000..16884f97 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full.png differ diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full@2x.png b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full@2x.png new file mode 100644 index 00000000..96c1da23 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full@2x.png differ diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full@3x.png b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full@3x.png new file mode 100644 index 00000000..fdac5492 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full.imageset/bubble_full@3x.png differ diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/Contents.json new file mode 100644 index 00000000..3e8ac87a --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "bubble_full_tail_v2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bubble_full_tail_v2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bubble_full_tail_v2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2.png b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2.png new file mode 100644 index 00000000..71a86a56 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2.png differ diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2@2x.png b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2@2x.png new file mode 100644 index 00000000..4d837f95 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2@2x.png differ diff --git a/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2@3x.png b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2@3x.png new file mode 100644 index 00000000..afd826d0 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Bubbles/bubble_full_tail.imageset/bubble_full_tail_v2@3x.png differ diff --git a/Example/ChatLayout/Assets.xcassets/Contents.json b/Example/ChatLayout/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Example/ChatLayout/Assets.xcassets/Demo Images/Contents.json b/Example/ChatLayout/Assets.xcassets/Demo Images/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Demo Images/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Demo Images/demo1.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Demo Images/demo1.imageset/Contents.json new file mode 100644 index 00000000..8fca3dfd --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Demo Images/demo1.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "IMG_4156.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Demo Images/demo1.imageset/IMG_4156.jpg b/Example/ChatLayout/Assets.xcassets/Demo Images/demo1.imageset/IMG_4156.jpg new file mode 100644 index 00000000..95a1a0ea Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Demo Images/demo1.imageset/IMG_4156.jpg differ diff --git a/Example/ChatLayout/Assets.xcassets/Demo Images/demo2.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Demo Images/demo2.imageset/Contents.json new file mode 100644 index 00000000..ee91ce1d --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Demo Images/demo2.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "IMG_5135.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Demo Images/demo2.imageset/IMG_5135.jpg b/Example/ChatLayout/Assets.xcassets/Demo Images/demo2.imageset/IMG_5135.jpg new file mode 100644 index 00000000..5e3b26b6 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Demo Images/demo2.imageset/IMG_5135.jpg differ diff --git a/Example/ChatLayout/Assets.xcassets/Demo Images/demo3.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Demo Images/demo3.imageset/Contents.json new file mode 100644 index 00000000..04114db2 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Demo Images/demo3.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "IMG_7190.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Demo Images/demo3.imageset/IMG_7190.jpg b/Example/ChatLayout/Assets.xcassets/Demo Images/demo3.imageset/IMG_7190.jpg new file mode 100644 index 00000000..ef5d32f1 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Demo Images/demo3.imageset/IMG_7190.jpg differ diff --git a/Example/ChatLayout/Assets.xcassets/Users/Cathal.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Users/Cathal.imageset/Contents.json new file mode 100644 index 00000000..d25d2f84 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Users/Cathal.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "cathal.jpeg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Users/Cathal.imageset/cathal.jpeg b/Example/ChatLayout/Assets.xcassets/Users/Cathal.imageset/cathal.jpeg new file mode 100644 index 00000000..b112b559 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Users/Cathal.imageset/cathal.jpeg differ diff --git a/Example/ChatLayout/Assets.xcassets/Users/Contents.json b/Example/ChatLayout/Assets.xcassets/Users/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Users/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Users/Eugene.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Users/Eugene.imageset/Contents.json new file mode 100644 index 00000000..c908d91c --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Users/Eugene.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "eugene.jpeg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Users/Eugene.imageset/eugene.jpeg b/Example/ChatLayout/Assets.xcassets/Users/Eugene.imageset/eugene.jpeg new file mode 100644 index 00000000..99849cc3 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Users/Eugene.imageset/eugene.jpeg differ diff --git a/Example/ChatLayout/Assets.xcassets/Users/Sasha.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/Users/Sasha.imageset/Contents.json new file mode 100644 index 00000000..718e30bc --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/Users/Sasha.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "sasha.jpeg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/ChatLayout/Assets.xcassets/Users/Sasha.imageset/sasha.jpeg b/Example/ChatLayout/Assets.xcassets/Users/Sasha.imageset/sasha.jpeg new file mode 100644 index 00000000..391fe6c7 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/Users/Sasha.imageset/sasha.jpeg differ diff --git a/Example/ChatLayout/Assets.xcassets/read_status.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/read_status.imageset/Contents.json new file mode 100644 index 00000000..4ca27c37 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/read_status.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "ReFresh Copy 3.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Example/ChatLayout/Assets.xcassets/read_status.imageset/ReFresh Copy 3.pdf b/Example/ChatLayout/Assets.xcassets/read_status.imageset/ReFresh Copy 3.pdf new file mode 100644 index 00000000..0e6e040a Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/read_status.imageset/ReFresh Copy 3.pdf differ diff --git a/Example/ChatLayout/Assets.xcassets/sent_status.imageset/Contents.json b/Example/ChatLayout/Assets.xcassets/sent_status.imageset/Contents.json new file mode 100644 index 00000000..4ca27c37 --- /dev/null +++ b/Example/ChatLayout/Assets.xcassets/sent_status.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "ReFresh Copy 3.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Example/ChatLayout/Assets.xcassets/sent_status.imageset/ReFresh Copy 3.pdf b/Example/ChatLayout/Assets.xcassets/sent_status.imageset/ReFresh Copy 3.pdf new file mode 100644 index 00000000..fbc36cb3 Binary files /dev/null and b/Example/ChatLayout/Assets.xcassets/sent_status.imageset/ReFresh Copy 3.pdf differ diff --git a/Example/ChatLayout/Base.lproj/LaunchScreen.storyboard b/Example/ChatLayout/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..865e9329 --- /dev/null +++ b/Example/ChatLayout/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/ChatLayout/Base.lproj/LaunchScreen.xib b/Example/ChatLayout/Base.lproj/LaunchScreen.xib index b57127aa..be99ce96 100644 --- a/Example/ChatLayout/Base.lproj/LaunchScreen.xib +++ b/Example/ChatLayout/Base.lproj/LaunchScreen.xib @@ -1,12 +1,9 @@ - - - - + + - - + @@ -16,14 +13,16 @@ -