From 176c6cdd288558851c4aa1be4b68ccfc393d7cdd Mon Sep 17 00:00:00 2001 From: martinpucik Date: Fri, 20 Mar 2020 13:56:20 +0100 Subject: [PATCH] documentation: Loading remote image messages in Example project --- Example/ChatExample.xcodeproj/project.pbxproj | 32 ++++++--- Example/Podfile | 1 + Example/Podfile.lock | 27 ++++++- .../Sources/Data Generation/SampleData.swift | 42 ++++++----- .../Settings+UserDefaults.swift | 0 Example/Sources/Models/MockMessage.swift | 10 +++ Example/Sources/Models/MockSocket.swift | 8 +-- .../AppIcon.appiconset/30243544-1024.png | Bin .../AppIcon.appiconset/30243544-20.png | Bin .../AppIcon.appiconset/30243544-20@2x.png | Bin .../AppIcon.appiconset/30243544-20@3x.png | Bin .../AppIcon.appiconset/30243544-29.png | Bin .../AppIcon.appiconset/30243544-29@2x.png | Bin .../AppIcon.appiconset/30243544-29@3x.png | Bin .../AppIcon.appiconset/30243544-40.png | Bin .../AppIcon.appiconset/30243544-40@2x.png | Bin .../AppIcon.appiconset/30243544-40@3x.png | Bin .../AppIcon.appiconset/30243544-60@2x.png | Bin .../AppIcon.appiconset/30243544-60@3x.png | Bin .../AppIcon.appiconset/30243544-76.png | Bin .../AppIcon.appiconset/30243544-76@2x.png | Bin .../AppIcon.appiconset/30243544-83.5@2x.png | Bin .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 .../Dan-Leonard.imageset/Contents.json | 0 .../Dan-Leonard.imageset/NiceSelfi.jpg | Bin .../Nathan-Tannar.imageset/Contents.json | 0 .../Nathan-Tannar.imageset/Nathan.jpg | Bin .../Steve-Jobs.imageset/Contents.json | 0 .../Steve-Jobs.imageset/Steve-Jobs.jpeg | Bin .../Steven-Deutsch.imageset/7445580.jpeg | Bin .../Steven-Deutsch.imageset/Contents.json | 0 .../Tim-Cook.imageset/Contents.json | 0 .../Tim-Cook.imageset/Tim-Cook.jpeg | Bin .../Wu-Zhong.imageset/5061845.png | Bin .../Wu-Zhong.imageset/Contents.json | 0 .../ic_appstore.imageset/Contents.json | 0 .../icons8-apple_app_store_filled.png | Bin .../ic_at.imageset/Contents.json | 0 .../ic_at.imageset/icons8-email.png | Bin .../ic_camera.imageset/Contents.json | 0 .../ic_camera.imageset/icons8-camera.png | Bin .../ic_hashtag.imageset/Contents.json | 0 .../ic_hashtag.imageset/icons8-hashtag.png | Bin .../ic_info.imageset/Contents.json | 0 .../ic_info.imageset/icons8-info.png | Bin .../ic_keyboard.imageset/Contents.json | 0 .../ic_keyboard.imageset/icons8-keyboard.png | Bin .../ic_library.imageset/Contents.json | 0 .../icons8-medium_icons.png | Bin .../ic_like.imageset/Contents.json | 0 .../ic_like.imageset/icons8-like_it.png | Bin .../ic_map_marker.imageset/Contents.json | 0 .../icons8-map_pin-1.png | Bin .../ic_mic.imageset/Contents.json | 0 .../ic_mic.imageset/icons8-microphone.png | Bin .../ic_send.imageset/Contents.json | 0 .../ic_send.imageset/icons8-sent.png | Bin .../ic_typing.imageset/Contents.json | 0 .../icons8-hand_with_pen.png | Bin .../ic_up.imageset/Contents.json | 0 .../ic_up.imageset/icons8-up_arrow.png | Bin .../Contents.json | 12 ++++ .../image_message_placeholder.pdf | Bin 0 -> 5232 bytes .../img1.imageset/Contents.json | 0 ...crowned-crane-bird-crane-animal-45853.jpeg | Bin .../img2.imageset/Contents.json | 0 .../img2.imageset/pexels-photo-145939.jpeg | Bin .../mklogo.imageset/Contents.json | 0 .../mklogo.imageset/mklogo.png | Bin .../mkorglogo.imageset/30243544.png | Bin .../mkorglogo.imageset/Contents.json | 0 .../pin.imageset/Contents.json | 0 .../Assets.xcassets/pin.imageset/pin.png | Bin .../Assets.xcassets/pin.imageset/pin@2x.png | Bin .../Assets.xcassets/pin.imageset/pin@3x.png | Bin .../Base.lproj/LaunchScreen.storyboard | 0 Example/Sources/{ => Resources}/Info.plist | 0 .../AdvancedExampleViewController.swift | 9 +++ .../AutocompleteExampleViewController.swift | 9 +++ .../BasicExampleViewController.swift | 9 +++ .../View Controllers/ChatViewController.swift | 66 +++++++++--------- .../SettingsViewController.swift | 2 +- .../MessagesViewController+Keyboard.swift | 1 - 84 files changed, 155 insertions(+), 73 deletions(-) rename Example/Sources/{ => Extensions}/Settings+UserDefaults.swift (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-1024.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-20.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-20@2x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-20@3x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-29.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-29@2x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-29@3x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-40.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-40@2x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-40@3x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-60@2x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-60@3x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-76.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-76@2x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/30243544-83.5@2x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Dan-Leonard.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Dan-Leonard.imageset/NiceSelfi.jpg (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Nathan-Tannar.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Nathan-Tannar.imageset/Nathan.jpg (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Steve-Jobs.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Steve-Jobs.imageset/Steve-Jobs.jpeg (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Steven-Deutsch.imageset/7445580.jpeg (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Steven-Deutsch.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Tim-Cook.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Tim-Cook.imageset/Tim-Cook.jpeg (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Wu-Zhong.imageset/5061845.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/Wu-Zhong.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_appstore.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_appstore.imageset/icons8-apple_app_store_filled.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_at.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_at.imageset/icons8-email.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_camera.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_camera.imageset/icons8-camera.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_hashtag.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_hashtag.imageset/icons8-hashtag.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_info.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_info.imageset/icons8-info.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_keyboard.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_keyboard.imageset/icons8-keyboard.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_library.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_library.imageset/icons8-medium_icons.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_like.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_like.imageset/icons8-like_it.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_map_marker.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_map_marker.imageset/icons8-map_pin-1.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_mic.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_mic.imageset/icons8-microphone.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_send.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_send.imageset/icons8-sent.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_typing.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_typing.imageset/icons8-hand_with_pen.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_up.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/ic_up.imageset/icons8-up_arrow.png (100%) create mode 100644 Example/Sources/Resources/Assets.xcassets/image_message_placeholder.imageset/Contents.json create mode 100644 Example/Sources/Resources/Assets.xcassets/image_message_placeholder.imageset/image_message_placeholder.pdf rename Example/Sources/{ => Resources}/Assets.xcassets/img1.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/img1.imageset/grey-crowned-crane-bird-crane-animal-45853.jpeg (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/img2.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/img2.imageset/pexels-photo-145939.jpeg (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/mklogo.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/mklogo.imageset/mklogo.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/mkorglogo.imageset/30243544.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/mkorglogo.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/pin.imageset/Contents.json (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/pin.imageset/pin.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/pin.imageset/pin@2x.png (100%) rename Example/Sources/{ => Resources}/Assets.xcassets/pin.imageset/pin@3x.png (100%) rename Example/Sources/{ => Resources}/Base.lproj/LaunchScreen.storyboard (100%) rename Example/Sources/{ => Resources}/Info.plist (100%) diff --git a/Example/ChatExample.xcodeproj/project.pbxproj b/Example/ChatExample.xcodeproj/project.pbxproj index dacdddf3..73778894 100644 --- a/Example/ChatExample.xcodeproj/project.pbxproj +++ b/Example/ChatExample.xcodeproj/project.pbxproj @@ -142,6 +142,16 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 13FCBEED2424D36900CB489F /* Resources */ = { + isa = PBXGroup; + children = ( + 882B5E7F1CF7D53600B6E160 /* Info.plist */, + 882B5E791CF7D53600B6E160 /* Assets.xcassets */, + 882B5E7A1CF7D53600B6E160 /* LaunchScreen.storyboard */, + ); + path = Resources; + sourceTree = ""; + }; 385C2924211FF3310010B4BA /* Views */ = { isa = PBXGroup; children = ( @@ -172,6 +182,7 @@ 385C2933211FF3670010B4BA /* Extensions */ = { isa = PBXGroup; children = ( + 385C292A211FF3450010B4BA /* Settings+UserDefaults.swift */, 385C292F211FF3630010B4BA /* UIColor+Extensions.swift */, 385C2930211FF3630010B4BA /* UIViewController+Extensions.swift */, ); @@ -259,17 +270,14 @@ children = ( 882B5E781CF7D53600B6E160 /* AppDelegate.swift */, 50739F9421C5075D008CA369 /* AudioController */, - 385C2949211FF3930010B4BA /* View Controllers */, 385C293A211FF3800010B4BA /* Data Generation */, + 385C2933211FF3670010B4BA /* Extensions */, 385C292E211FF3540010B4BA /* Layout */, 385C2929211FF33D0010B4BA /* Models */, - 385C2924211FF3310010B4BA /* Views */, + 13FCBEED2424D36900CB489F /* Resources */, 5074EF4B2163554900D82952 /* Sounds */, - 882B5E791CF7D53600B6E160 /* Assets.xcassets */, - 882B5E7F1CF7D53600B6E160 /* Info.plist */, - 882B5E7A1CF7D53600B6E160 /* LaunchScreen.storyboard */, - 385C292A211FF3450010B4BA /* Settings+UserDefaults.swift */, - 385C2933211FF3670010B4BA /* Extensions */, + 385C2949211FF3930010B4BA /* View Controllers */, + 385C2924211FF3310010B4BA /* Views */, ); path = Sources; sourceTree = ""; @@ -483,11 +491,17 @@ "${PODS_ROOT}/Target Support Files/Pods-ChatExample/Pods-ChatExample-frameworks.sh", "${BUILT_PRODUCTS_DIR}/InputBarAccessoryView/InputBarAccessoryView.framework", "${BUILT_PRODUCTS_DIR}/MessageKit/MessageKit.framework", + "${BUILT_PRODUCTS_DIR}/PINCache/PINCache.framework", + "${BUILT_PRODUCTS_DIR}/PINOperation/PINOperation.framework", + "${BUILT_PRODUCTS_DIR}/PINRemoteImage/PINRemoteImage.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/InputBarAccessoryView.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MessageKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PINCache.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PINOperation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PINRemoteImage.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -714,7 +728,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/Resources/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.messagekit.ChatExample; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -728,7 +742,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/Resources/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.messagekit.ChatExample; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Example/Podfile b/Example/Podfile index de4002d1..b8a13964 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -6,6 +6,7 @@ target 'ChatExample' do use_frameworks! pod 'MessageKit', :path => '../' pod 'SwiftLint', '~> 0.39.1' + pod 'PINRemoteImage', '~> 3.0.0', :subspecs => ['iOS', 'PINCache'] target 'ChatExampleTests' do inherit! :search_paths diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 1559e4fe..0b1fa87a 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -4,15 +4,35 @@ PODS: - InputBarAccessoryView/Core (4.3.2) - MessageKit (3.1.0): - InputBarAccessoryView (~> 4.3.0) + - PINCache (3.0.1-beta.8): + - PINCache/Arc-exception-safe (= 3.0.1-beta.8) + - PINCache/Core (= 3.0.1-beta.8) + - PINCache/Arc-exception-safe (3.0.1-beta.8): + - PINCache/Core + - PINCache/Core (3.0.1-beta.8): + - PINOperation (~> 1.1.1) + - PINOperation (1.1.2) + - PINRemoteImage/Core (3.0.0): + - PINOperation + - PINRemoteImage/iOS (3.0.0): + - PINRemoteImage/Core + - PINRemoteImage/PINCache (3.0.0): + - PINCache (= 3.0.1-beta.8) + - PINRemoteImage/Core - SwiftLint (0.39.1) DEPENDENCIES: - MessageKit (from `../`) + - PINRemoteImage/iOS (~> 3.0.0) + - PINRemoteImage/PINCache (~> 3.0.0) - SwiftLint (~> 0.39.1) SPEC REPOS: trunk: - InputBarAccessoryView + - PINCache + - PINOperation + - PINRemoteImage - SwiftLint EXTERNAL SOURCES: @@ -22,8 +42,11 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: InputBarAccessoryView: 7985d418040a05fe894bd4b8328dd43ab35517c3 MessageKit: 3c593dc22f7465f74822e4a873ef3157a3e05080 + PINCache: 534fd41d358d828dfdf227a0d327f3673a65e20b + PINOperation: 24b774353ca248fcf87d67b2d61eef42087c125a + PINRemoteImage: e2b89e19fb6e77ffc099f9d9f3b3fe1745e3f9f9 SwiftLint: 55e96a4a4d537d4a3156859fc1c54bd24851a046 -PODFILE CHECKSUM: 3d2d8513a2319438f3480a9f1397e1f78b0a5021 +PODFILE CHECKSUM: cf0af8a506e2b58d4d51b99e165b58c56c26d619 -COCOAPODS: 1.9.1 +COCOAPODS: 1.9.0 diff --git a/Example/Sources/Data Generation/SampleData.swift b/Example/Sources/Data Generation/SampleData.swift index 9fa50d29..525d05da 100644 --- a/Example/Sources/Data Generation/SampleData.swift +++ b/Example/Sources/Data Generation/SampleData.swift @@ -36,6 +36,7 @@ final internal class SampleData { case Text case AttributedText case Photo + case PhotoFromURL = "Photo from URL" case Video case Audio case Emoji @@ -69,6 +70,11 @@ final internal class SampleData { var now = Date() let messageImages: [UIImage] = [#imageLiteral(resourceName: "img1"), #imageLiteral(resourceName: "img2")] + let messageImageURLs: [URL] = [URL(string: "https://placekitten.com/g/200/300")!, + URL(string: "https://placekitten.com/g/300/300")!, + URL(string: "https://placekitten.com/g/300/400")!, + URL(string: "https://placekitten.com/g/400/400")!] + let emojis = [ "👍", "😂😂😂", @@ -143,21 +149,16 @@ final internal class SampleData { } func randomMessageType() -> MessageTypes { - var messageTypes = [MessageTypes]() - for type in MessageTypes.allCases { - if UserDefaults.standard.bool(forKey: "\(type.rawValue)" + " Messages") { - messageTypes.append(type) - } - } - return messageTypes.random()! + return MessageTypes.allCases.compactMap { + guard UserDefaults.standard.bool(forKey: "\($0.rawValue)" + " Messages") else { return nil } + return $0 + }.random()! } // swiftlint:disable cyclomatic_complexity func randomMessage(allowedSenders: [MockUser]) -> MockMessage { - let randomNumberSender = Int(arc4random_uniform(UInt32(allowedSenders.count))) - let uniqueID = UUID().uuidString - let user = allowedSenders[randomNumberSender] + let user = allowedSenders.random()! let date = dateAddingRandomTime() switch randomMessageType() { @@ -169,23 +170,21 @@ final internal class SampleData { let attributedText = attributedString(with: randomSentence) return MockMessage(attributedText: attributedText, user: user, messageId: uniqueID, date: date) case .Photo: - let randomNumberImage = Int(arc4random_uniform(UInt32(messageImages.count))) - let image = messageImages[randomNumberImage] + let image = messageImages.random()! return MockMessage(image: image, user: user, messageId: uniqueID, date: date) + case .PhotoFromURL: + let imageURL: URL = messageImageURLs.random()! + return MockMessage(imageURL: imageURL, user: user, messageId: uniqueID, date: date) case .Video: - let randomNumberImage = Int(arc4random_uniform(UInt32(messageImages.count))) - let image = messageImages[randomNumberImage] + let image = messageImages.random()! return MockMessage(thumbnail: image, user: user, messageId: uniqueID, date: date) case .Audio: - let randomNumberSound = Int(arc4random_uniform(UInt32(sounds.count))) - let soundURL = sounds[randomNumberSound] + let soundURL = sounds.random()! return MockMessage(audioURL: soundURL, user: user, messageId: uniqueID, date: date) case .Emoji: - let randomNumberEmoji = Int(arc4random_uniform(UInt32(emojis.count))) - return MockMessage(emoji: emojis[randomNumberEmoji], user: user, messageId: uniqueID, date: date) + return MockMessage(emoji: emojis.random()!, user: user, messageId: uniqueID, date: date) case .Location: - let randomNumberLocation = Int(arc4random_uniform(UInt32(locations.count))) - return MockMessage(location: locations[randomNumberLocation], user: user, messageId: uniqueID, date: date) + return MockMessage(location: locations.random()!, user: user, messageId: uniqueID, date: date) case .Url: return MockMessage(text: "https://github.com/MessageKit", user: user, messageId: uniqueID, date: date) case .Phone: @@ -193,8 +192,7 @@ final internal class SampleData { case .Custom: return MockMessage(custom: "Someone left the conversation", user: system, messageId: uniqueID, date: date) case .ShareContact: - let randomContact = Int(arc4random_uniform(UInt32(contactsToShare.count))) - return MockMessage(contact: contactsToShare[randomContact], user: user, messageId: uniqueID, date: date) + return MockMessage(contact: contactsToShare.random()!, user: user, messageId: uniqueID, date: date) } } // swiftlint:enable cyclomatic_complexity diff --git a/Example/Sources/Settings+UserDefaults.swift b/Example/Sources/Extensions/Settings+UserDefaults.swift similarity index 100% rename from Example/Sources/Settings+UserDefaults.swift rename to Example/Sources/Extensions/Settings+UserDefaults.swift diff --git a/Example/Sources/Models/MockMessage.swift b/Example/Sources/Models/MockMessage.swift index a5eb6ce1..82911b08 100644 --- a/Example/Sources/Models/MockMessage.swift +++ b/Example/Sources/Models/MockMessage.swift @@ -52,6 +52,11 @@ private struct ImageMediaItem: MediaItem { self.placeholderImage = UIImage() } + init(imageURL: URL) { + self.url = imageURL + self.size = CGSize(width: 240, height: 240) + self.placeholderImage = UIImage(imageLiteralResourceName: "image_message_placeholder") + } } private struct MockAudiotem: AudioItem { @@ -121,6 +126,11 @@ internal struct MockMessage: MessageType { self.init(kind: .photo(mediaItem), user: user, messageId: messageId, date: date) } + init(imageURL: URL, user: MockUser, messageId: String, date: Date) { + let mediaItem = ImageMediaItem(imageURL: imageURL) + self.init(kind: .photo(mediaItem), user: user, messageId: messageId, date: date) + } + init(thumbnail: UIImage, user: MockUser, messageId: String, date: Date) { let mediaItem = ImageMediaItem(image: thumbnail) self.init(kind: .video(mediaItem), user: user, messageId: messageId, date: date) diff --git a/Example/Sources/Models/MockSocket.swift b/Example/Sources/Models/MockSocket.swift index b23c5bcf..bdf1b63f 100644 --- a/Example/Sources/Models/MockSocket.swift +++ b/Example/Sources/Models/MockSocket.swift @@ -76,12 +76,10 @@ final class MockSocket { onNewMessageCode?(message) queuedMessage = nil } else { - let sender = arc4random_uniform(1) % 2 == 0 ? connectedUsers.first! : connectedUsers.last! - SampleData.shared.getMessages(count: 1, allowedSenders: [sender]) { (message) in - queuedMessage = message.first - } + let sender = connectedUsers.random()! + let message = SampleData.shared.randomMessage(allowedSenders: [sender]) + queuedMessage = message onTypingStatusCode?() } } - } diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-1024.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-1024.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-1024.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-1024.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-20.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-20.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-20.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-20.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-20@2x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-20@2x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-20@2x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-20@2x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-20@3x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-20@3x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-20@3x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-20@3x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-29.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-29.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-29.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-29.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-29@2x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-29@2x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-29@2x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-29@2x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-29@3x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-29@3x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-29@3x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-29@3x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-40.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-40.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-40.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-40.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-40@2x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-40@2x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-40@2x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-40@2x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-40@3x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-40@3x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-40@3x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-40@3x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-60@2x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-60@2x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-60@2x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-60@2x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-60@3x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-60@3x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-60@3x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-60@3x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-76.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-76.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-76.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-76.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-76@2x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-76@2x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-76@2x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-76@2x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-83.5@2x.png b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-83.5@2x.png similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/30243544-83.5@2x.png rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/30243544-83.5@2x.png diff --git a/Example/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Example/Sources/Assets.xcassets/Contents.json b/Example/Sources/Resources/Assets.xcassets/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/Contents.json rename to Example/Sources/Resources/Assets.xcassets/Contents.json diff --git a/Example/Sources/Assets.xcassets/Dan-Leonard.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/Dan-Leonard.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/Dan-Leonard.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/Dan-Leonard.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/Dan-Leonard.imageset/NiceSelfi.jpg b/Example/Sources/Resources/Assets.xcassets/Dan-Leonard.imageset/NiceSelfi.jpg similarity index 100% rename from Example/Sources/Assets.xcassets/Dan-Leonard.imageset/NiceSelfi.jpg rename to Example/Sources/Resources/Assets.xcassets/Dan-Leonard.imageset/NiceSelfi.jpg diff --git a/Example/Sources/Assets.xcassets/Nathan-Tannar.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/Nathan-Tannar.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/Nathan-Tannar.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/Nathan-Tannar.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/Nathan-Tannar.imageset/Nathan.jpg b/Example/Sources/Resources/Assets.xcassets/Nathan-Tannar.imageset/Nathan.jpg similarity index 100% rename from Example/Sources/Assets.xcassets/Nathan-Tannar.imageset/Nathan.jpg rename to Example/Sources/Resources/Assets.xcassets/Nathan-Tannar.imageset/Nathan.jpg diff --git a/Example/Sources/Assets.xcassets/Steve-Jobs.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/Steve-Jobs.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/Steve-Jobs.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/Steve-Jobs.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/Steve-Jobs.imageset/Steve-Jobs.jpeg b/Example/Sources/Resources/Assets.xcassets/Steve-Jobs.imageset/Steve-Jobs.jpeg similarity index 100% rename from Example/Sources/Assets.xcassets/Steve-Jobs.imageset/Steve-Jobs.jpeg rename to Example/Sources/Resources/Assets.xcassets/Steve-Jobs.imageset/Steve-Jobs.jpeg diff --git a/Example/Sources/Assets.xcassets/Steven-Deutsch.imageset/7445580.jpeg b/Example/Sources/Resources/Assets.xcassets/Steven-Deutsch.imageset/7445580.jpeg similarity index 100% rename from Example/Sources/Assets.xcassets/Steven-Deutsch.imageset/7445580.jpeg rename to Example/Sources/Resources/Assets.xcassets/Steven-Deutsch.imageset/7445580.jpeg diff --git a/Example/Sources/Assets.xcassets/Steven-Deutsch.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/Steven-Deutsch.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/Steven-Deutsch.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/Steven-Deutsch.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/Tim-Cook.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/Tim-Cook.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/Tim-Cook.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/Tim-Cook.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/Tim-Cook.imageset/Tim-Cook.jpeg b/Example/Sources/Resources/Assets.xcassets/Tim-Cook.imageset/Tim-Cook.jpeg similarity index 100% rename from Example/Sources/Assets.xcassets/Tim-Cook.imageset/Tim-Cook.jpeg rename to Example/Sources/Resources/Assets.xcassets/Tim-Cook.imageset/Tim-Cook.jpeg diff --git a/Example/Sources/Assets.xcassets/Wu-Zhong.imageset/5061845.png b/Example/Sources/Resources/Assets.xcassets/Wu-Zhong.imageset/5061845.png similarity index 100% rename from Example/Sources/Assets.xcassets/Wu-Zhong.imageset/5061845.png rename to Example/Sources/Resources/Assets.xcassets/Wu-Zhong.imageset/5061845.png diff --git a/Example/Sources/Assets.xcassets/Wu-Zhong.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/Wu-Zhong.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/Wu-Zhong.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/Wu-Zhong.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_appstore.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_appstore.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_appstore.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_appstore.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_appstore.imageset/icons8-apple_app_store_filled.png b/Example/Sources/Resources/Assets.xcassets/ic_appstore.imageset/icons8-apple_app_store_filled.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_appstore.imageset/icons8-apple_app_store_filled.png rename to Example/Sources/Resources/Assets.xcassets/ic_appstore.imageset/icons8-apple_app_store_filled.png diff --git a/Example/Sources/Assets.xcassets/ic_at.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_at.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_at.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_at.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_at.imageset/icons8-email.png b/Example/Sources/Resources/Assets.xcassets/ic_at.imageset/icons8-email.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_at.imageset/icons8-email.png rename to Example/Sources/Resources/Assets.xcassets/ic_at.imageset/icons8-email.png diff --git a/Example/Sources/Assets.xcassets/ic_camera.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_camera.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_camera.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_camera.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_camera.imageset/icons8-camera.png b/Example/Sources/Resources/Assets.xcassets/ic_camera.imageset/icons8-camera.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_camera.imageset/icons8-camera.png rename to Example/Sources/Resources/Assets.xcassets/ic_camera.imageset/icons8-camera.png diff --git a/Example/Sources/Assets.xcassets/ic_hashtag.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_hashtag.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_hashtag.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_hashtag.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_hashtag.imageset/icons8-hashtag.png b/Example/Sources/Resources/Assets.xcassets/ic_hashtag.imageset/icons8-hashtag.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_hashtag.imageset/icons8-hashtag.png rename to Example/Sources/Resources/Assets.xcassets/ic_hashtag.imageset/icons8-hashtag.png diff --git a/Example/Sources/Assets.xcassets/ic_info.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_info.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_info.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_info.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_info.imageset/icons8-info.png b/Example/Sources/Resources/Assets.xcassets/ic_info.imageset/icons8-info.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_info.imageset/icons8-info.png rename to Example/Sources/Resources/Assets.xcassets/ic_info.imageset/icons8-info.png diff --git a/Example/Sources/Assets.xcassets/ic_keyboard.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_keyboard.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_keyboard.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_keyboard.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_keyboard.imageset/icons8-keyboard.png b/Example/Sources/Resources/Assets.xcassets/ic_keyboard.imageset/icons8-keyboard.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_keyboard.imageset/icons8-keyboard.png rename to Example/Sources/Resources/Assets.xcassets/ic_keyboard.imageset/icons8-keyboard.png diff --git a/Example/Sources/Assets.xcassets/ic_library.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_library.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_library.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_library.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_library.imageset/icons8-medium_icons.png b/Example/Sources/Resources/Assets.xcassets/ic_library.imageset/icons8-medium_icons.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_library.imageset/icons8-medium_icons.png rename to Example/Sources/Resources/Assets.xcassets/ic_library.imageset/icons8-medium_icons.png diff --git a/Example/Sources/Assets.xcassets/ic_like.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_like.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_like.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_like.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_like.imageset/icons8-like_it.png b/Example/Sources/Resources/Assets.xcassets/ic_like.imageset/icons8-like_it.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_like.imageset/icons8-like_it.png rename to Example/Sources/Resources/Assets.xcassets/ic_like.imageset/icons8-like_it.png diff --git a/Example/Sources/Assets.xcassets/ic_map_marker.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_map_marker.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_map_marker.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_map_marker.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_map_marker.imageset/icons8-map_pin-1.png b/Example/Sources/Resources/Assets.xcassets/ic_map_marker.imageset/icons8-map_pin-1.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_map_marker.imageset/icons8-map_pin-1.png rename to Example/Sources/Resources/Assets.xcassets/ic_map_marker.imageset/icons8-map_pin-1.png diff --git a/Example/Sources/Assets.xcassets/ic_mic.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_mic.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_mic.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_mic.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_mic.imageset/icons8-microphone.png b/Example/Sources/Resources/Assets.xcassets/ic_mic.imageset/icons8-microphone.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_mic.imageset/icons8-microphone.png rename to Example/Sources/Resources/Assets.xcassets/ic_mic.imageset/icons8-microphone.png diff --git a/Example/Sources/Assets.xcassets/ic_send.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_send.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_send.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_send.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_send.imageset/icons8-sent.png b/Example/Sources/Resources/Assets.xcassets/ic_send.imageset/icons8-sent.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_send.imageset/icons8-sent.png rename to Example/Sources/Resources/Assets.xcassets/ic_send.imageset/icons8-sent.png diff --git a/Example/Sources/Assets.xcassets/ic_typing.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_typing.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_typing.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_typing.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_typing.imageset/icons8-hand_with_pen.png b/Example/Sources/Resources/Assets.xcassets/ic_typing.imageset/icons8-hand_with_pen.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_typing.imageset/icons8-hand_with_pen.png rename to Example/Sources/Resources/Assets.xcassets/ic_typing.imageset/icons8-hand_with_pen.png diff --git a/Example/Sources/Assets.xcassets/ic_up.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/ic_up.imageset/Contents.json similarity index 100% rename from Example/Sources/Assets.xcassets/ic_up.imageset/Contents.json rename to Example/Sources/Resources/Assets.xcassets/ic_up.imageset/Contents.json diff --git a/Example/Sources/Assets.xcassets/ic_up.imageset/icons8-up_arrow.png b/Example/Sources/Resources/Assets.xcassets/ic_up.imageset/icons8-up_arrow.png similarity index 100% rename from Example/Sources/Assets.xcassets/ic_up.imageset/icons8-up_arrow.png rename to Example/Sources/Resources/Assets.xcassets/ic_up.imageset/icons8-up_arrow.png diff --git a/Example/Sources/Resources/Assets.xcassets/image_message_placeholder.imageset/Contents.json b/Example/Sources/Resources/Assets.xcassets/image_message_placeholder.imageset/Contents.json new file mode 100644 index 00000000..ade8d418 --- /dev/null +++ b/Example/Sources/Resources/Assets.xcassets/image_message_placeholder.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "image_message_placeholder.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/Sources/Resources/Assets.xcassets/image_message_placeholder.imageset/image_message_placeholder.pdf b/Example/Sources/Resources/Assets.xcassets/image_message_placeholder.imageset/image_message_placeholder.pdf new file mode 100644 index 0000000000000000000000000000000000000000..69de86ee31789bc210e2e80313c120ab645fdd51 GIT binary patch literal 5232 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 SenderType { return SampleData.shared.currentSender } - + func numberOfSections(in messagesCollectionView: MessagesCollectionView) -> Int { return messageList.count } - + func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageType { return messageList[indexPath.section] } - + func cellTopLabelAttributedText(for message: MessageType, at indexPath: IndexPath) -> NSAttributedString? { if indexPath.section % 3 == 0 { return NSAttributedString(string: MessageKitDateFormatter.shared.string(from: message.sentDate), attributes: [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 10), NSAttributedString.Key.foregroundColor: UIColor.darkGray]) } return nil } - + func cellBottomLabelAttributedText(for message: MessageType, at indexPath: IndexPath) -> NSAttributedString? { - return NSAttributedString(string: "Read", attributes: [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 10), NSAttributedString.Key.foregroundColor: UIColor.darkGray]) } - + func messageTopLabelAttributedText(for message: MessageType, at indexPath: IndexPath) -> NSAttributedString? { let name = message.sender.displayName return NSAttributedString(string: name, attributes: [NSAttributedString.Key.font: UIFont.preferredFont(forTextStyle: .caption1)]) } - + func messageBottomLabelAttributedText(for message: MessageType, at indexPath: IndexPath) -> NSAttributedString? { - let dateString = formatter.string(from: message.sentDate) return NSAttributedString(string: dateString, attributes: [NSAttributedString.Key.font: UIFont.preferredFont(forTextStyle: .caption2)]) } - } // MARK: - MessageCellDelegate extension ChatViewController: MessageCellDelegate { - func didTapAvatar(in cell: MessageCollectionViewCell) { print("Avatar tapped") } @@ -261,7 +265,6 @@ extension ChatViewController: MessageCellDelegate { // MARK: - MessageLabelDelegate extension ChatViewController: MessageLabelDelegate { - func didSelectAddress(_ addressComponents: [String: String]) { print("Address Selected: \(addressComponents)") } @@ -293,15 +296,12 @@ extension ChatViewController: MessageLabelDelegate { func didSelectCustom(_ pattern: String, match: String?) { print("Custom data detector patter selected: \(pattern)") } - } // MARK: - MessageInputBarDelegate extension ChatViewController: InputBarAccessoryViewDelegate { - func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) { - // Here we can parse for which substrings were autocompleted let attributedText = messageInputBar.inputTextView.attributedText! let range = NSRange(location: 0, length: attributedText.length) diff --git a/Example/Sources/View Controllers/SettingsViewController.swift b/Example/Sources/View Controllers/SettingsViewController.swift index 92235e52..137e1f3a 100644 --- a/Example/Sources/View Controllers/SettingsViewController.swift +++ b/Example/Sources/View Controllers/SettingsViewController.swift @@ -33,7 +33,7 @@ final internal class SettingsViewController: UITableViewController { return .lightContent } - let cells = ["Mock messages count", "Text Messages", "AttributedText Messages", "Photo Messages", "Video Messages", "Audio Messages", "Emoji Messages", "Location Messages", "Url Messages", "Phone Messages", "ShareContact Messages"] + let cells = ["Mock messages count", "Text Messages", "AttributedText Messages", "Photo Messages", "Photo from URL Messages", "Video Messages", "Audio Messages", "Emoji Messages", "Location Messages", "Url Messages", "Phone Messages", "ShareContact Messages"] // MARK: - Picker diff --git a/Sources/Controllers/MessagesViewController+Keyboard.swift b/Sources/Controllers/MessagesViewController+Keyboard.swift index 816a9ad1..bb905d3e 100644 --- a/Sources/Controllers/MessagesViewController+Keyboard.swift +++ b/Sources/Controllers/MessagesViewController+Keyboard.swift @@ -130,5 +130,4 @@ internal extension MessagesViewController { private var automaticallyAddedBottomInset: CGFloat { return messagesCollectionView.adjustedContentInset.bottom - messagesCollectionView.contentInset.bottom } - }