Bläddra i källkod

introduce new message kind for displaying photos with text

cyberta 5 år sedan
förälder
incheckning
e2a10cd6d1

+ 0 - 169
Pods/Pods.xcodeproj/project.pbxproj

@@ -529,7 +529,6 @@
 		0068D6969C4CAFAADC3062D7C424C5E9 /* CameraView.strings */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.strings; name = CameraView.strings; path = ALCameraViewController/CameraView.strings; sourceTree = "<group>"; };
 		007531F7696130C3E7AA26E0166285B7 /* DBColorPickerTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBColorPickerTableViewCell.h; path = DBDebugToolkit/Classes/Cells/ColorPicker/DBColorPickerTableViewCell.h; sourceTree = "<group>"; };
 		011B44AE4C33F4086F65FBF79E882A88 /* DBFPSCalculator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBFPSCalculator.h; path = DBDebugToolkit/Classes/Performance/DBFPSCalculator.h; sourceTree = "<group>"; };
-		017633526904CC46C29E2665CF233038 /* MessagesDisplayDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessagesDisplayDelegate.swift; path = Sources/Protocols/MessagesDisplayDelegate.swift; sourceTree = "<group>"; };
 		01E9C12D626354BD3A42C726CF8556D5 /* OptionRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionRow.swift; path = Source/Rows/OptionRow.swift; sourceTree = "<group>"; };
 		03247D233B2AC6170F3733E7A7085367 /* AutocompleteSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutocompleteSession.swift; path = InputBarAccessoryView/Plugins/AutocompleteManager/Models/AutocompleteSession.swift; sourceTree = "<group>"; };
 		04610EF8C16BAA90EB220ADB0DB4C3B7 /* CameraView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraView.swift; path = ALCameraViewController/Views/CameraView.swift; sourceTree = "<group>"; };
@@ -541,7 +540,6 @@
 		08ECEBCA5F7F43918DF95C1ACB2B2C56 /* DBLocationToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBLocationToolkit.m; path = DBDebugToolkit/Classes/Location/DBLocationToolkit.m; sourceTree = "<group>"; };
 		095AABA5B1540F1180572CA4F619EFC1 /* UICircularProgressRingDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UICircularProgressRingDelegate.swift; path = src/UICircularProgressRing/UICircularProgressRingDelegate.swift; sourceTree = "<group>"; };
 		097493F9D43893A0D8FAA99C090A7401 /* DBCustomLocationViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBCustomLocationViewController.storyboard; path = DBDebugToolkit/Resources/DBCustomLocationViewController.storyboard; sourceTree = "<group>"; };
-		09A05A43FE6F8908C2B998CA083D67D7 /* MessageContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageContentCell.swift; path = Sources/Views/Cells/MessageContentCell.swift; sourceTree = "<group>"; };
 		09EB7BEC1B974099213ED08F4D3ACD96 /* DBNetworkSettingsTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBNetworkSettingsTableViewController.storyboard; path = DBDebugToolkit/Resources/DBNetworkSettingsTableViewController.storyboard; sourceTree = "<group>"; };
 		0A369B59179C46D4560465DD7D545D16 /* DBTapTrigger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTapTrigger.h; path = DBDebugToolkit/Classes/Triggers/TapTrigger/DBTapTrigger.h; sourceTree = "<group>"; };
 		0BAB3329DC99B7CB2DBEBE6EACA13F70 /* NSURLSessionConfiguration+DBURLProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLSessionConfiguration+DBURLProtocol.h"; path = "DBDebugToolkit/Classes/Network/URLProtocol/NSURLSessionConfiguration+DBURLProtocol.h"; sourceTree = "<group>"; };
@@ -556,14 +554,11 @@
 		0DE84EC851A9A9BCA2D0A4F07BE93717 /* DBNetworkViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBNetworkViewController.m; path = DBDebugToolkit/Classes/Network/DBNetworkViewController.m; sourceTree = "<group>"; };
 		0E1DB29A2B834CD59DB4D754AF5825A5 /* UICircularProgressRing-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "UICircularProgressRing-Info.plist"; sourceTree = "<group>"; };
 		0F2F55E182C5888FBDA4C6180D6EE149 /* AutocompleteCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutocompleteCell.swift; path = InputBarAccessoryView/Plugins/AutocompleteManager/Views/AutocompleteCell.swift; sourceTree = "<group>"; };
-		0F35F10832C9285F3E0C53F54B59AC8D /* AvatarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AvatarView.swift; path = Sources/Views/AvatarView.swift; sourceTree = "<group>"; };
 		1098EB1DE43BE2118AEAFD77D09207AC /* DBGridOverlaySettingsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBGridOverlaySettingsTableViewController.h; path = DBDebugToolkit/Classes/UserInterface/GridOverlay/DBGridOverlaySettingsTableViewController.h; sourceTree = "<group>"; };
 		10C1034CBFCE32A405713024ABABE797 /* DBRequestTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBRequestTableViewCell.m; path = DBDebugToolkit/Classes/Cells/DBRequestTableViewCell.m; sourceTree = "<group>"; };
 		10E97A1D43C7B1E89CC7A3F276DA912C /* UIColor+DBUserInterfaceToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+DBUserInterfaceToolkit.m"; path = "DBDebugToolkit/Classes/UserInterface/Categories/UIColor+DBUserInterfaceToolkit.m"; sourceTree = "<group>"; };
 		10ECB4AAF25E0E0FB38EE4057DF84ACE /* DBResourcesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBResourcesTableViewController.h; path = DBDebugToolkit/Classes/Resources/DBResourcesTableViewController.h; sourceTree = "<group>"; };
 		11193FFE08FEB8678A638BB7FD1AA3B8 /* InputBarAccessoryView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "InputBarAccessoryView-Info.plist"; sourceTree = "<group>"; };
-		1241FD3C295C98EEF3067849232354F6 /* AudioMessageCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AudioMessageCell.swift; path = Sources/Views/Cells/AudioMessageCell.swift; sourceTree = "<group>"; };
-		126ACF3D1759186782F7251082DBE735 /* InsetLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InsetLabel.swift; path = Sources/Views/InsetLabel.swift; sourceTree = "<group>"; };
 		12C8EEFF9D3006316B751C6EBFA0E371 /* DBRequestModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBRequestModel.h; path = DBDebugToolkit/Classes/Network/RequestModel/DBRequestModel.h; sourceTree = "<group>"; };
 		1311CD5684FECC57E26F6270E55B579F /* DBCoreDataFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCoreDataFilter.m; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBCoreDataFilter.m; sourceTree = "<group>"; };
 		131AEC10BE2B9F44FCFBD3BCF580FC8D /* DBMenuTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBMenuTableViewController.h; path = DBDebugToolkit/Classes/Menu/DBMenuTableViewController.h; sourceTree = "<group>"; };
@@ -580,18 +575,14 @@
 		178081CAD3F46E85AAE789979865AFC0 /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = ALCameraViewController/Utilities/Utilities.swift; sourceTree = "<group>"; };
 		189F6EAC68ACD520F93302B32A6B8566 /* Pods-deltachat-ios-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-deltachat-ios-acknowledgements.markdown"; sourceTree = "<group>"; };
 		18D293906DA6AA6B8E32529C647CF598 /* AttachmentsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AttachmentsView.swift; path = InputBarAccessoryView/Plugins/AttachmentManager/Views/AttachmentsView.swift; sourceTree = "<group>"; };
-		1959392B95C8E1C3AB4A80F19A945A69 /* MessageKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MessageKit-prefix.pch"; sourceTree = "<group>"; };
 		197C5EE43AC17B50543219E689DB19A1 /* DBDebugToolkit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DBDebugToolkit-prefix.pch"; sourceTree = "<group>"; };
-		19815D3A60F1B9DE12D9C3E32A8CF5A6 /* MessageKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MessageKit-Info.plist"; sourceTree = "<group>"; };
 		19F17B6F96054DD9D115C766203AA168 /* DBDebugToolkit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DBDebugToolkit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		1A0CD002C4EB47E7E949EE92221C9998 /* JGProgressHUDIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.m; sourceTree = "<group>"; };
 		1AE16C693B55D5BD06992212C3AB5572 /* DBColorPickerTableViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = DBColorPickerTableViewCell.xib; path = DBDebugToolkit/Resources/DBColorPickerTableViewCell.xib; sourceTree = "<group>"; };
 		1C0A31F766FF4B4521183952093A3AEE /* DBFileTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBFileTableViewCell.h; path = DBDebugToolkit/Classes/Resources/Files/DBFileTableViewCell.h; sourceTree = "<group>"; };
-		1C170831175AEC979417598F83E3869D /* MessageKitError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageKitError.swift; path = Sources/Models/MessageKitError.swift; sourceTree = "<group>"; };
 		1CED51FD953BA4F3018626950BE1EA70 /* DBTextViewViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTextViewViewController.m; path = DBDebugToolkit/Classes/UserInterface/DBTextViewViewController.m; sourceTree = "<group>"; };
 		1DF13FD31D466C6D756D74BC52E894CF /* DBMenuSegmentedControlTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBMenuSegmentedControlTableViewCell.m; path = DBDebugToolkit/Classes/Cells/DBMenuSegmentedControlTableViewCell.m; sourceTree = "<group>"; };
 		1E2571DBE952CB79B6B135AAC9EB1290 /* DBTitleValueListViewModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTitleValueListViewModel.h; path = DBDebugToolkit/Classes/Resources/DBTitleValueListViewModel.h; sourceTree = "<group>"; };
-		1E7B7FE104774CA8A2BC5225013FCBCC /* MessageReusableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageReusableView.swift; path = Sources/Views/HeadersFooters/MessageReusableView.swift; sourceTree = "<group>"; };
 		1EFB9C0D094AD8C8092CA6D192B03E09 /* CameraViewAssets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = CameraViewAssets.xcassets; path = ALCameraViewController/CameraViewAssets.xcassets; sourceTree = "<group>"; };
 		1F5B18DB078F751C68B47BE6EDE150DE /* DBPresetLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBPresetLocation.h; path = DBDebugToolkit/Classes/Location/DBPresetLocation.h; sourceTree = "<group>"; };
 		1F771AC14455BD2D4837C9BAFE1E3F06 /* DBCoreDataFilterSettingsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCoreDataFilterSettingsTableViewController.h; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBCoreDataFilterSettingsTableViewController.h; sourceTree = "<group>"; };
@@ -606,14 +597,12 @@
 		23824B181216730312A775A961D880CD /* UICircularProgressRing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UICircularProgressRing.swift; path = src/UICircularProgressRing/UICircularProgressRing.swift; sourceTree = "<group>"; };
 		239BD151AF0CDED2E29ECB9CC1B7A9FD /* DBKeychainToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBKeychainToolkit.m; path = DBDebugToolkit/Classes/Resources/Keychain/DBKeychainToolkit.m; sourceTree = "<group>"; };
 		23C28E21888B72D81BF6705F592E7F7F /* Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Row.swift; path = Source/Protocol/Row.swift; sourceTree = "<group>"; };
-		24BA1E165733DA60DD6E2E116B6A6401 /* MessageContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageContainerView.swift; path = Sources/Views/MessageContainerView.swift; sourceTree = "<group>"; };
 		250E2106C4F364EC2B99A3C39221D6B4 /* DBSliderTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBSliderTableViewCell.m; path = DBDebugToolkit/Classes/Cells/DBSliderTableViewCell.m; sourceTree = "<group>"; };
 		25807FC06EA56FBA931C4F6671AEB4B1 /* DBColorCheckbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBColorCheckbox.h; path = DBDebugToolkit/Classes/Cells/ColorPicker/DBColorCheckbox.h; sourceTree = "<group>"; };
 		2660B31D480626FC3A1765AB0EE96EB8 /* DBOptionsListTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBOptionsListTableViewController.storyboard; path = DBDebugToolkit/Resources/DBOptionsListTableViewController.storyboard; sourceTree = "<group>"; };
 		291B6596397BC84FFEA246692449E42F /* JGProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUD.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUD.h; sourceTree = "<group>"; };
 		298D62467A81F42ED39282E5D400A8D1 /* DBCrashReportsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCrashReportsTableViewController.m; path = DBDebugToolkit/Classes/CrashReports/DBCrashReportsTableViewController.m; sourceTree = "<group>"; };
 		2ABD4F88F587647BBEB74714DFB65D9F /* DBCustomVariablesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCustomVariablesTableViewController.h; path = DBDebugToolkit/Classes/CustomVariables/DBCustomVariablesTableViewController.h; sourceTree = "<group>"; };
-		2AFC861CB066A5536665FEEE2B47FAF2 /* PlayButtonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlayButtonView.swift; path = Sources/Views/PlayButtonView.swift; sourceTree = "<group>"; };
 		2B1E3B7D09945B788889B8754C777A60 /* DBConsoleViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBConsoleViewController.m; path = DBDebugToolkit/Classes/Console/DBConsoleViewController.m; sourceTree = "<group>"; };
 		2B5D6C9B0E939F261001684091EDB029 /* CameraViewControllerConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraViewControllerConstraint.swift; path = ALCameraViewController/ViewController/CameraViewControllerConstraint.swift; sourceTree = "<group>"; };
 		2BA434959DFC2D0C9C304C7B7B5B9438 /* DBTopLevelViewsWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTopLevelViewsWrapper.h; path = DBDebugToolkit/Classes/TopLevelViews/DBTopLevelViewsWrapper.h; sourceTree = "<group>"; };
@@ -625,8 +614,6 @@
 		2F3AE9092BBC38A1162DE5C467278066 /* JGProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUD.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUD.m; sourceTree = "<group>"; };
 		3086D165B42063AD64FFE893457C886C /* UIApplication+DBDebugToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DBDebugToolkit.h"; path = "DBDebugToolkit/Classes/Categories/UIApplication+DBDebugToolkit.h"; sourceTree = "<group>"; };
 		30B260042533E4C300191946C8587FC3 /* ALCameraViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ALCameraViewController.modulemap; sourceTree = "<group>"; };
-		31760CB7F4305589A7EC118DF6B612B6 /* MessagesViewController+Menu.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MessagesViewController+Menu.swift"; path = "Sources/Controllers/MessagesViewController+Menu.swift"; sourceTree = "<group>"; };
-		318528AE5509FF1088A777CB530FE416 /* MediaItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MediaItem.swift; path = Sources/Protocols/MediaItem.swift; sourceTree = "<group>"; };
 		32444FD9B828D6451FAD08D06A1F62CE /* DBDebugToolkit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DBDebugToolkit-dummy.m"; sourceTree = "<group>"; };
 		3254A5636E50B35646D8F602A333493C /* DBGridOverlaySettingsTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBGridOverlaySettingsTableViewController.storyboard; path = DBDebugToolkit/Resources/DBGridOverlaySettingsTableViewController.storyboard; sourceTree = "<group>"; };
 		32BC4A22CBD11FCFC82054BCCB6ABCD8 /* JGProgressHUDIndeterminateIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDIndeterminateIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.m; sourceTree = "<group>"; };
@@ -637,8 +624,6 @@
 		3501C8D09579C8E89BF85BFACEF7D1AB /* DBNetworkToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBNetworkToolkit.h; path = DBDebugToolkit/Classes/Network/DBNetworkToolkit.h; sourceTree = "<group>"; };
 		35C8BD10ACF986404CDDC128C951FD64 /* Pods-deltachat-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-deltachat-ios-Info.plist"; sourceTree = "<group>"; };
 		36CC0D9A3AE2E92E9BA7D5C95493D00C /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; };
-		36E00875C8776F9B3FB700D037808664 /* MessageLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageLabel.swift; path = Sources/Views/MessageLabel.swift; sourceTree = "<group>"; };
-		3759041888B11174063953214BB5B090 /* CGRect+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGRect+Extensions.swift"; path = "Sources/Extensions/CGRect+Extensions.swift"; sourceTree = "<group>"; };
 		3775C6AB86022A9B45B5E7E89CCE9EAA /* SwiftyBeaver.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyBeaver.modulemap; sourceTree = "<group>"; };
 		37EA9B3AFECA678C4E52475D77C05D79 /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		37F0171AB3D69D4B941364A17B5107C8 /* TapActionRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TapActionRow.swift; path = Source/Rows/TapActionRow.swift; sourceTree = "<group>"; };
@@ -653,7 +638,6 @@
 		3D5A7735878961CE33850135055D0224 /* DBPersistentStoreCoordinatorsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBPersistentStoreCoordinatorsTableViewController.h; path = DBDebugToolkit/Classes/Resources/CoreData/DBPersistentStoreCoordinatorsTableViewController.h; sourceTree = "<group>"; };
 		3E9043748E4E5AFA63CB60886D30F3A5 /* InputTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InputTextView.swift; path = InputBarAccessoryView/Views/InputTextView.swift; sourceTree = "<group>"; };
 		3F8D7AB8CA6DC1BF1F118A09085BB1A6 /* DBCoreDataFilterTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCoreDataFilterTableViewController.h; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBCoreDataFilterTableViewController.h; sourceTree = "<group>"; };
-		408AEC021E18225342B0E25C32E572CF /* MessageKind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageKind.swift; path = Sources/Models/MessageKind.swift; sourceTree = "<group>"; };
 		4115C0821BB57E613797F65EBE400E77 /* DBTouchIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTouchIndicatorView.m; path = DBDebugToolkit/Classes/UserInterface/DBTouchIndicatorView.m; sourceTree = "<group>"; };
 		4155AA751C31EF83BD22CCE3CF15CDFE /* DBCustomVariable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCustomVariable.h; path = DBDebugToolkit/Classes/CustomVariables/DBCustomVariable.h; sourceTree = "<group>"; };
 		420CED6DE5D723D85BC976684771C5FD /* DBFilesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBFilesTableViewController.m; path = DBDebugToolkit/Classes/Resources/Files/DBFilesTableViewController.m; sourceTree = "<group>"; };
@@ -664,7 +648,6 @@
 		44B71FEE3B0C399CC07D3CAE340EBDF8 /* UIWindow+DBShakeTrigger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWindow+DBShakeTrigger.h"; path = "DBDebugToolkit/Classes/Triggers/ShakeTrigger/UIWindow+DBShakeTrigger.h"; sourceTree = "<group>"; };
 		454817C30AFC14EA66E40AF941F6DC53 /* jg_hud_error.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = jg_hud_error.png; path = JGProgressHUD/Resources/jg_hud_error.png; sourceTree = "<group>"; };
 		455E95E95CC98BA5BA0BC173646122B7 /* DBMenuSegmentedControlTableViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = DBMenuSegmentedControlTableViewCell.xib; path = DBDebugToolkit/Resources/DBMenuSegmentedControlTableViewCell.xib; sourceTree = "<group>"; };
-		457AAC28308C59CF00DEE229EEAD753F /* TypingIndicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TypingIndicator.swift; path = Sources/Views/TypingIndicator.swift; sourceTree = "<group>"; };
 		459F3DB15B1046DDA95A9A456CF18007 /* DBUserDefaultsToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBUserDefaultsToolkit.h; path = DBDebugToolkit/Classes/Resources/UserDefaults/DBUserDefaultsToolkit.h; sourceTree = "<group>"; };
 		45CA699A6D364B047A6EF7833D18A34A /* ImageFetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageFetcher.swift; path = ALCameraViewController/Utilities/ImageFetcher.swift; sourceTree = "<group>"; };
 		47B298E61946104C3F15958AD936DFB2 /* InputBarAccessoryViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InputBarAccessoryViewDelegate.swift; path = InputBarAccessoryView/Protocols/InputBarAccessoryViewDelegate.swift; sourceTree = "<group>"; };
@@ -680,7 +663,6 @@
 		4C2312AAC58EC101C87DF7CB0CBAA6C3 /* AutocompleteManagerDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutocompleteManagerDelegate.swift; path = InputBarAccessoryView/Plugins/AutocompleteManager/Protocols/AutocompleteManagerDelegate.swift; sourceTree = "<group>"; };
 		4C93BFEC47000326B0511B63C8E649C8 /* DBCoreDataFilterSettingsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCoreDataFilterSettingsTableViewController.m; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBCoreDataFilterSettingsTableViewController.m; sourceTree = "<group>"; };
 		4D6F5736C3E4696C6A0BE964BA9146C6 /* JGProgressHUDIndeterminateIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDIndeterminateIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h; sourceTree = "<group>"; };
-		4DDB96FE6149AE1B25461BDAF33B5939 /* DetectorType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DetectorType.swift; path = Sources/Models/DetectorType.swift; sourceTree = "<group>"; };
 		4E5E2D62BF49363AD28E7A9DC346029E /* DBFontFamiliesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBFontFamiliesTableViewController.m; path = DBDebugToolkit/Classes/UserInterface/DBFontFamiliesTableViewController.m; sourceTree = "<group>"; };
 		4E81FDBEF0E64E0AF9BDD6A0ABF650CE /* JGProgressHUDFadeZoomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDFadeZoomAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h; sourceTree = "<group>"; };
 		501F0D3F6675F98C655DB7AA7853C917 /* SwiftyBeaver.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyBeaver.xcconfig; sourceTree = "<group>"; };
@@ -697,7 +679,6 @@
 		58DCCEA9C6AB19182DBBE5DA8A442134 /* DBCoreDataFilterSettingsTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBCoreDataFilterSettingsTableViewController.storyboard; path = DBDebugToolkit/Resources/DBCoreDataFilterSettingsTableViewController.storyboard; sourceTree = "<group>"; };
 		5925D68557276CA4922FC1741B670685 /* UICircularProgressRing-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICircularProgressRing-umbrella.h"; sourceTree = "<group>"; };
 		592D0F676C430046D6D8BC9C687FA496 /* Configurable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configurable.swift; path = Source/Protocol/Configurable.swift; sourceTree = "<group>"; };
-		599685DF7351AA2F9C9B8BEF4AA1E1E7 /* MediaMessageCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MediaMessageCell.swift; path = Sources/Views/Cells/MediaMessageCell.swift; sourceTree = "<group>"; };
 		59C66B90E4F0BC06D036F7ED2880ED2C /* ALCameraViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ALCameraViewController.xcconfig; sourceTree = "<group>"; };
 		5A86E6D70A3E9A0DFDAD577B0D1B69A8 /* jg_hud_error@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_error@2x.png"; path = "JGProgressHUD/Resources/jg_hud_error@2x.png"; sourceTree = "<group>"; };
 		5ACBC73A2E0196847E84D35AB83FCC98 /* UIWindow+DBUserInterfaceToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWindow+DBUserInterfaceToolkit.m"; path = "DBDebugToolkit/Classes/UserInterface/Categories/UIWindow+DBUserInterfaceToolkit.m"; sourceTree = "<group>"; };
@@ -706,7 +687,6 @@
 		5D883879817F2C8C38660C1603E1958C /* DBUserInterfaceTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBUserInterfaceTableViewController.h; path = DBDebugToolkit/Classes/UserInterface/DBUserInterfaceTableViewController.h; sourceTree = "<group>"; };
 		5DCE572DFA94E089BA6675E0E52ED678 /* DBTitleValueListTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTitleValueListTableViewController.h; path = DBDebugToolkit/Classes/Resources/DBTitleValueListTableViewController.h; sourceTree = "<group>"; };
 		5E17656EF1809A9BC5CF71261A04384D /* NSOperationQueue+DBMainQueueOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSOperationQueue+DBMainQueueOperation.h"; path = "DBDebugToolkit/Classes/Network/MainQueueOperation/NSOperationQueue+DBMainQueueOperation.h"; sourceTree = "<group>"; };
-		5E45F7C4F805948433D6FAAFA5FF6947 /* ContactMessageCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContactMessageCell.swift; path = Sources/Views/Cells/ContactMessageCell.swift; sourceTree = "<group>"; };
 		5ED6BE89F03B86DE16251872A4880DA0 /* InputBarAccessoryView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = InputBarAccessoryView.xcconfig; sourceTree = "<group>"; };
 		60D92310125B7BBBBA810C542EC60E7A /* DBCookieDetailsTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBCookieDetailsTableViewController.storyboard; path = DBDebugToolkit/Resources/DBCookieDetailsTableViewController.storyboard; sourceTree = "<group>"; };
 		60FB1B9591B3EBDB1FEB3FCA93E88CAC /* DBTitleValueTableViewCellDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTitleValueTableViewCellDataSource.h; path = DBDebugToolkit/Classes/Cells/TitleValue/DBTitleValueTableViewCellDataSource.h; sourceTree = "<group>"; };
@@ -733,12 +713,10 @@
 		6A4ED8EF759016EA63A624D4742D17CB /* DBGridOverlayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBGridOverlayView.m; path = DBDebugToolkit/Classes/UserInterface/GridOverlay/DBGridOverlayView.m; sourceTree = "<group>"; };
 		6B17E1DED1B5FC851FA718852DC10889 /* DBDebugToolkitTriggerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBDebugToolkitTriggerDelegate.h; path = DBDebugToolkit/Classes/Triggers/DBDebugToolkitTriggerDelegate.h; sourceTree = "<group>"; };
 		6B8B63BB2AAAB3B28EF0EFE6D83D03A7 /* DBMainQueueOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBMainQueueOperation.m; path = DBDebugToolkit/Classes/Network/MainQueueOperation/DBMainQueueOperation.m; sourceTree = "<group>"; };
-		6C2F8667063B2F9B52ABEED2A23A91A7 /* Sender.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sender.swift; path = Sources/Models/Sender.swift; sourceTree = "<group>"; };
 		6D698220BB377C1788857C77A9469D67 /* Pods-deltachat-iosTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-deltachat-iosTests-umbrella.h"; sourceTree = "<group>"; };
 		6D7B3216A1A3E3DA515A1A9BCD8DD811 /* InputBarAccessoryView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "InputBarAccessoryView-dummy.m"; sourceTree = "<group>"; };
 		6D85859F4830FF2F39B01A9094EEE56E /* DBMenuChartTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBMenuChartTableViewCell.h; path = DBDebugToolkit/Classes/Cells/DBMenuChartTableViewCell.h; sourceTree = "<group>"; };
 		6D914C10A196ACBBA7D43DC19CF2A988 /* Pods-deltachat-iosTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-deltachat-iosTests-acknowledgements.plist"; sourceTree = "<group>"; };
-		6E1465C95E03D9D31DBAF0947967902B /* CellSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CellSizeCalculator.swift; path = Sources/Layout/CellSizeCalculator.swift; sourceTree = "<group>"; };
 		6E42F92CB607FBD6FCD2D39A704AE1D0 /* DBCookiesTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBCookiesTableViewController.storyboard; path = DBDebugToolkit/Resources/DBCookiesTableViewController.storyboard; sourceTree = "<group>"; };
 		6EE6065A87A8D5F67BC00A07508C9D0B /* DBRequestDataHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBRequestDataHandler.m; path = DBDebugToolkit/Classes/Network/RequestModel/DBRequestDataHandler.m; sourceTree = "<group>"; };
 		6F1DABAEE0D690D2F6DF682C73B80ECC /* DBTopLevelView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTopLevelView.m; path = DBDebugToolkit/Classes/TopLevelViews/DBTopLevelView.m; sourceTree = "<group>"; };
@@ -748,14 +726,11 @@
 		7047715E53AAE83838D6F0617640070E /* Reachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reachability.swift; path = Sources/Reachability.swift; sourceTree = "<group>"; };
 		71752EF8DC5545602142129163282246 /* ConfirmViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = ConfirmViewController.xib; path = ALCameraViewController/ViewController/ConfirmViewController.xib; sourceTree = "<group>"; };
 		718BB0DC93E32F1DA5C0DDE40F677193 /* Pods-deltachat-iosTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-deltachat-iosTests-dummy.m"; sourceTree = "<group>"; };
-		718E44B94F4806CE7AC495863ECEB9A8 /* AudioMessageSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AudioMessageSizeCalculator.swift; path = Sources/Layout/AudioMessageSizeCalculator.swift; sourceTree = "<group>"; };
 		71B03CAB6A1ABA9F73CFF9262E766C46 /* DBCoreDataFilterSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCoreDataFilterSettings.h; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBCoreDataFilterSettings.h; sourceTree = "<group>"; };
-		72BB49C3A6B1D8C21B2347A1AAD9BAEF /* MessagesViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessagesViewController.swift; path = Sources/Controllers/MessagesViewController.swift; sourceTree = "<group>"; };
 		73C446E77FD95DDCE9E0C6281BDE4FBF /* QuickTableViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = QuickTableViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		74842ECC9B036526DC8FA2B73B5A262C /* UICircularProgressRing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UICircularProgressRing.h; path = src/UICircularProgressRing/UICircularProgressRing.h; sourceTree = "<group>"; };
 		74890CF366C32BBB69DE0D470270877A /* DBRequestDetailsViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBRequestDetailsViewController.m; path = DBDebugToolkit/Classes/Network/DBRequestDetailsViewController.m; sourceTree = "<group>"; };
 		74E0D2D8584A77234211F80DBFDF41DF /* DBPerformanceTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBPerformanceTableViewController.h; path = DBDebugToolkit/Classes/Performance/DBPerformanceTableViewController.h; sourceTree = "<group>"; };
-		750C94CB910688E98051AE87324C85B0 /* MessagesDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessagesDataSource.swift; path = Sources/Protocols/MessagesDataSource.swift; sourceTree = "<group>"; };
 		75DC4EBF9A43A392384E4A5347E8D223 /* DBBodyPreviewViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBBodyPreviewViewController.m; path = DBDebugToolkit/Classes/Network/DBBodyPreviewViewController.m; sourceTree = "<group>"; };
 		76D42A9FB5F11A8FB8C0150956BAE412 /* DBCrashReportDetailsTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBCrashReportDetailsTableViewController.storyboard; path = DBDebugToolkit/Resources/DBCrashReportDetailsTableViewController.storyboard; sourceTree = "<group>"; };
 		77A0F44883BAA1C9386DE93BC8C033EB /* QuickTableViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = QuickTableViewController.xcconfig; sourceTree = "<group>"; };
@@ -770,40 +745,33 @@
 		7C93F4D82C41B7DC9AB1C394222E27EF /* ReachabilitySwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-prefix.pch"; sourceTree = "<group>"; };
 		7C9E4EE4F2B89A8AF2B818FF48B9F872 /* JGProgressHUDRingIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDRingIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.m; sourceTree = "<group>"; };
 		7CB6899F96158517BEDD0DA93F742677 /* SeparatorLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SeparatorLine.swift; path = InputBarAccessoryView/Views/SeparatorLine.swift; sourceTree = "<group>"; };
-		7CE8A398078AB3F4BCB9E5A786C34880 /* TypingIndicatorCellSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TypingIndicatorCellSizeCalculator.swift; path = Sources/Layout/TypingIndicatorCellSizeCalculator.swift; sourceTree = "<group>"; };
 		7CEB25D165E28AE92CCE15C10E0E0357 /* DBTitleValueTableViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = DBTitleValueTableViewCell.xib; path = DBDebugToolkit/Resources/DBTitleValueTableViewCell.xib; sourceTree = "<group>"; };
 		7DC5B1E4DFA7581FFDA14AD7FD7ABB96 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Filter.swift; sourceTree = "<group>"; };
 		7DE3D018FF874E6D567E18B21D25D2F9 /* Pods-deltachat-iosTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-deltachat-iosTests-Info.plist"; sourceTree = "<group>"; };
 		7E0C7060329A315B13D95E9A93D7105D /* DBGridOverlaySettingsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBGridOverlaySettingsTableViewController.m; path = DBDebugToolkit/Classes/UserInterface/GridOverlay/DBGridOverlaySettingsTableViewController.m; sourceTree = "<group>"; };
 		7E84D4D994AFE3A1D101FFF0906BE8B0 /* DBFileTableViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = DBFileTableViewCell.xib; path = DBDebugToolkit/Resources/DBFileTableViewCell.xib; sourceTree = "<group>"; };
 		7EE3F81AF26E5662730726E3B788703A /* DBCrashReportDetailsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCrashReportDetailsTableViewController.h; path = DBDebugToolkit/Classes/CrashReports/DBCrashReportDetailsTableViewController.h; sourceTree = "<group>"; };
-		7F1CDBE8B75C96381468BBA4DBD365E8 /* MessageKit+Availability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MessageKit+Availability.swift"; path = "Sources/Supporting/MessageKit+Availability.swift"; sourceTree = "<group>"; };
 		7F5C38227CDF98DE2BB468FB2969333C /* DBRequestDataHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBRequestDataHandler.h; path = DBDebugToolkit/Classes/Network/RequestModel/DBRequestDataHandler.h; sourceTree = "<group>"; };
 		7F9E725FBD32899034E2B54362D267BD /* Pods_deltachat_iosTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_deltachat_iosTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		800E9D0D598C9851DD1CF0418A5CAEDE /* NavigationRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigationRow.swift; path = Source/Rows/NavigationRow.swift; sourceTree = "<group>"; };
 		8081EA22D68E3D30F87D83C65C538778 /* DBMenuChartTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBMenuChartTableViewCell.m; path = DBDebugToolkit/Classes/Cells/DBMenuChartTableViewCell.m; sourceTree = "<group>"; };
 		80B379F5ACC66F5BCA53DE1F3464B529 /* Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reusable.swift; path = Source/Protocol/Reusable.swift; sourceTree = "<group>"; };
 		80FC5DD2B2D619C6584313314333DCBF /* InputItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InputItem.swift; path = InputBarAccessoryView/Protocols/InputItem.swift; sourceTree = "<group>"; };
-		824482471B01329904858439CBE579B5 /* MessagesViewController+Keyboard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MessagesViewController+Keyboard.swift"; path = "Sources/Controllers/MessagesViewController+Keyboard.swift"; sourceTree = "<group>"; };
 		8263487297CAA15549226652F49985B9 /* DBPerformanceTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBPerformanceTableViewController.m; path = DBDebugToolkit/Classes/Performance/DBPerformanceTableViewController.m; sourceTree = "<group>"; };
 		82C8996CFDA7362D17127CA9965D773C /* FileDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileDestination.swift; path = Sources/FileDestination.swift; sourceTree = "<group>"; };
 		83CE916944E3200B7F10CCA5B4FF698C /* DBCrashReportsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCrashReportsTableViewController.h; path = DBDebugToolkit/Classes/CrashReports/DBCrashReportsTableViewController.h; sourceTree = "<group>"; };
 		84F93D759AE6B6ABF7E4205C5FFA758A /* DBConsoleViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBConsoleViewController.storyboard; path = DBDebugToolkit/Resources/DBConsoleViewController.storyboard; sourceTree = "<group>"; };
 		850469A80DDB7CD757BBCEB26DE2272E /* DBCoreDataFilterTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCoreDataFilterTableViewController.m; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBCoreDataFilterTableViewController.m; sourceTree = "<group>"; };
-		855A2C36C48EB5853A918C0677F43335 /* ContactItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContactItem.swift; path = Sources/Protocols/ContactItem.swift; sourceTree = "<group>"; };
 		85A6F03C28D13402A11EF8E09F8B7E90 /* CropOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CropOverlay.swift; path = ALCameraViewController/Views/CropOverlay.swift; sourceTree = "<group>"; };
 		8691C6B0DE24E73D7AEDF4324768C268 /* Pods-deltachat-ios-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-deltachat-ios-frameworks.sh"; sourceTree = "<group>"; };
 		869995D45F172998904D42B97962F6D8 /* DBManagedObjectsListTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBManagedObjectsListTableViewController.storyboard; path = DBDebugToolkit/Resources/DBManagedObjectsListTableViewController.storyboard; sourceTree = "<group>"; };
-		8756002DE3D13281782F43AC2A775AFB /* BubbleCircle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleCircle.swift; path = Sources/Views/BubbleCircle.swift; sourceTree = "<group>"; };
 		875DB95B3B8266F627735C6EC2985429 /* CameraViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraViewController.swift; path = ALCameraViewController/ViewController/CameraViewController.swift; sourceTree = "<group>"; };
-		87835B19E9CCB3B569554B550774054C /* UIColor+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Extensions.swift"; path = "Sources/Extensions/UIColor+Extensions.swift"; sourceTree = "<group>"; };
 		8821E159418F653A5B44CAD3B9092FCE /* DBMenuSegmentedControlTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBMenuSegmentedControlTableViewCell.h; path = DBDebugToolkit/Classes/Cells/DBMenuSegmentedControlTableViewCell.h; sourceTree = "<group>"; };
 		882D4B239B6A165E6D02ADF55AE21BBA /* UICircularProgressRing.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UICircularProgressRing.xcconfig; sourceTree = "<group>"; };
 		897C817A17C82E5577142C279FB198AE /* UIView+DBUserInterfaceToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DBUserInterfaceToolkit.h"; path = "DBDebugToolkit/Classes/UserInterface/Categories/UIView+DBUserInterfaceToolkit.h"; sourceTree = "<group>"; };
 		89FB0962B35CAE4F09BAB043063029A8 /* DBUserDefaultsToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBUserDefaultsToolkit.m; path = DBDebugToolkit/Classes/Resources/UserDefaults/DBUserDefaultsToolkit.m; sourceTree = "<group>"; };
 		8A4F140EA8630022745973D64FF0E0F0 /* DBCookieDetailsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCookieDetailsTableViewController.h; path = DBDebugToolkit/Classes/Resources/Cookies/DBCookieDetailsTableViewController.h; sourceTree = "<group>"; };
 		8A664C569AF21573FAEAB61FAF870B52 /* Section.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Section.swift; path = Source/Model/Section.swift; sourceTree = "<group>"; };
-		8A7432BDC540EF0F97064324F42DC509 /* MessageSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageSizeCalculator.swift; path = Sources/Layout/MessageSizeCalculator.swift; sourceTree = "<group>"; };
 		8AEB958013A88DA460D64437BB1626E4 /* JGProgressHUDImageIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDImageIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDImageIndicatorView.h; sourceTree = "<group>"; };
 		8B26B1A5C986EF5BD055753511648F3E /* DBCustomVariable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCustomVariable.m; path = DBDebugToolkit/Classes/CustomVariables/DBCustomVariable.m; sourceTree = "<group>"; };
 		8B34D16812BA6715134A21C24F372726 /* DBManagedObjectTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBManagedObjectTableViewController.storyboard; path = DBDebugToolkit/Resources/DBManagedObjectTableViewController.storyboard; sourceTree = "<group>"; };
@@ -811,26 +779,21 @@
 		8B9B31CABD2FF1C890E4E44247A00345 /* DBGridOverlayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBGridOverlayView.h; path = DBDebugToolkit/Classes/UserInterface/GridOverlay/DBGridOverlayView.h; sourceTree = "<group>"; };
 		8CB35C74824B9DBE03AA52AAF95A3C66 /* DBRequestModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBRequestModel.m; path = DBDebugToolkit/Classes/Network/RequestModel/DBRequestModel.m; sourceTree = "<group>"; };
 		8D07C821B99A803154FF999FE9EA7B79 /* NSNotification+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSNotification+Extensions.swift"; path = "InputBarAccessoryView/Extensions/NSNotification+Extensions.swift"; sourceTree = "<group>"; };
-		8D49EF94CC108AFDDC3D131A77B0C309 /* TextMessageCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextMessageCell.swift; path = Sources/Views/Cells/TextMessageCell.swift; sourceTree = "<group>"; };
 		8D6F704EC8FEA0F3DCED2BBA779E58BC /* DBEntitiesTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBEntitiesTableViewController.storyboard; path = DBDebugToolkit/Resources/DBEntitiesTableViewController.storyboard; sourceTree = "<group>"; };
 		8DFC9DDFAF65E42472FF207AE7D85FAF /* DBDeviceInfoProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBDeviceInfoProvider.m; path = DBDebugToolkit/Classes/Device/DBDeviceInfoProvider.m; sourceTree = "<group>"; };
 		8E06191BE3785BA1040889EFF2396738 /* NSObject+DBDebugToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+DBDebugToolkit.m"; path = "DBDebugToolkit/Classes/Categories/NSObject+DBDebugToolkit.m"; sourceTree = "<group>"; };
 		8E3B6F633B1D1802C05D85A46298620C /* GoogleCloudDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GoogleCloudDestination.swift; path = Sources/GoogleCloudDestination.swift; sourceTree = "<group>"; };
-		8E3E45FA433746A84DC4095945F1A439 /* LocationMessageSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationMessageSizeCalculator.swift; path = Sources/Layout/LocationMessageSizeCalculator.swift; sourceTree = "<group>"; };
 		8F568A29B2243FA6F0D6B0555E7FB1F4 /* DBChartView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBChartView.m; path = DBDebugToolkit/Classes/Chart/DBChartView.m; sourceTree = "<group>"; };
 		8F76078B2946346397CE0A315F35439B /* UIView+AutoLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+AutoLayout.swift"; path = "InputBarAccessoryView/Extensions/UIView+AutoLayout.swift"; sourceTree = "<group>"; };
 		900C5E8376CD11441E3F62626657985F /* NSOperationQueue+DBMainQueueOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSOperationQueue+DBMainQueueOperation.m"; path = "DBDebugToolkit/Classes/Network/MainQueueOperation/NSOperationQueue+DBMainQueueOperation.m"; sourceTree = "<group>"; };
 		9055F08A29153193F31785F5DE30A0C5 /* CLLocationManager+DBLocationToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CLLocationManager+DBLocationToolkit.m"; path = "DBDebugToolkit/Classes/Location/CLLocationManager+DBLocationToolkit.m"; sourceTree = "<group>"; };
 		90794128F8567FC2EFAC022C35A9C757 /* JGProgressHUDShadow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDShadow.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.m; sourceTree = "<group>"; };
 		90F600E645C6DDCF5C8284575BDF9763 /* DBTitleValueListTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTitleValueListTableViewController.m; path = DBDebugToolkit/Classes/Resources/DBTitleValueListTableViewController.m; sourceTree = "<group>"; };
-		91083CE184E8CAB5777DB9676CBD404E /* UIEdgeInsets+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIEdgeInsets+Extensions.swift"; path = "Sources/Extensions/UIEdgeInsets+Extensions.swift"; sourceTree = "<group>"; };
 		9114C7BEB3D7CD9F3B36BBC2C0076285 /* SwiftFormat.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftFormat.xcconfig; sourceTree = "<group>"; };
 		920554CC81BBE196BA7C1A214393BDBF /* ALCameraViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ALCameraViewController-dummy.m"; sourceTree = "<group>"; };
-		921842F6F8810C00FFC8D96FCE0B7ABE /* Bundle+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bundle+Extensions.swift"; path = "Sources/Extensions/Bundle+Extensions.swift"; sourceTree = "<group>"; };
 		936C5ED8FE8A16FC99E07D9E155B1F7E /* JGProgressHUDAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDAnimation.m; sourceTree = "<group>"; };
 		939053D889D1A8DB6C36DA58A2B652E2 /* DBDebugToolkit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DBDebugToolkit-Info.plist"; sourceTree = "<group>"; };
 		939156CC2B77910F390C88962507BA09 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; };
-		9395868C34C6F8BD562F24C9A622CBDB /* MessagesCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessagesCollectionView.swift; path = Sources/Views/MessagesCollectionView.swift; sourceTree = "<group>"; };
 		9416569C5FD0E9A901130FCCFF729460 /* jg_hud_success.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = jg_hud_success.png; path = JGProgressHUD/Resources/jg_hud_success.png; sourceTree = "<group>"; };
 		9485320E4C849E58F8238C89AED5F55E /* JGProgressHUDShadow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDShadow.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.h; sourceTree = "<group>"; };
 		9490D904286E32BEBCF8C6304A561BC8 /* String+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extensions.swift"; path = "InputBarAccessoryView/Extensions/String+Extensions.swift"; sourceTree = "<group>"; };
@@ -841,36 +804,28 @@
 		96DD695C085610BCF95F6D8ACB51E198 /* DBCookieTableViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = DBCookieTableViewCell.xib; path = DBDebugToolkit/Resources/DBCookieTableViewCell.xib; sourceTree = "<group>"; };
 		979E3F00D5CE0EB500E893EC07235F9A /* NSConstraintLayoutSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSConstraintLayoutSet.swift; path = InputBarAccessoryView/Models/NSConstraintLayoutSet.swift; sourceTree = "<group>"; };
 		98354AA282B2A277DF72027FF0A06188 /* JGProgressHUDFadeAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDFadeAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.m; sourceTree = "<group>"; };
-		9871488E7E21A4292C775CA11014E6A6 /* MessageLabelDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageLabelDelegate.swift; path = Sources/Protocols/MessageLabelDelegate.swift; sourceTree = "<group>"; };
 		992EE2B8626D32756903A4DCF2643D69 /* SwiftyBeaver-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyBeaver-umbrella.h"; sourceTree = "<group>"; };
 		9995D4167BB23E316261811BC5C1D121 /* DBDebugToolkit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DBDebugToolkit.xcconfig; sourceTree = "<group>"; };
 		99B2FCC361B1061034D4EF279405C78A /* DBImageViewViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBImageViewViewController.storyboard; path = DBDebugToolkit/Resources/DBImageViewViewController.storyboard; sourceTree = "<group>"; };
 		9A5E303ACC0521A408BF4146F03228D3 /* JGProgressHUDErrorIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDErrorIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.h; sourceTree = "<group>"; };
-		9A9D3E335982112FC693D271F47D7274 /* MediaMessageSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MediaMessageSizeCalculator.swift; path = Sources/Layout/MediaMessageSizeCalculator.swift; sourceTree = "<group>"; };
 		9AB2C3FD7EDFBA68C282239986C36FA0 /* DBCrashReportDetailsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCrashReportDetailsTableViewController.m; path = DBDebugToolkit/Classes/CrashReports/DBCrashReportDetailsTableViewController.m; sourceTree = "<group>"; };
 		9AB6EF146F75F0E4C3C6EAB601D6D259 /* SwitchRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchRow.swift; path = Source/Rows/SwitchRow.swift; sourceTree = "<group>"; };
 		9B632E84A57FAF59FCFC2DFE6EDB9845 /* DBFontFamiliesTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBFontFamiliesTableViewController.storyboard; path = DBDebugToolkit/Resources/DBFontFamiliesTableViewController.storyboard; sourceTree = "<group>"; };
 		9B6AD77EF91D080EBBC6245A51186E39 /* AttachmentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AttachmentCell.swift; path = InputBarAccessoryView/Plugins/AttachmentManager/Views/AttachmentCell.swift; sourceTree = "<group>"; };
 		9BBC44EB0C6A8C6C82F66983DC316312 /* DBPerformanceWidgetView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBPerformanceWidgetView.m; path = DBDebugToolkit/Classes/Performance/Widget/DBPerformanceWidgetView.m; sourceTree = "<group>"; };
-		9C35E54B80B39F147C29D45EE1836C82 /* MessageKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MessageKit-umbrella.h"; sourceTree = "<group>"; };
 		9C7568767017F88DDBE0A19EA9313E5A /* UIApplication+DBDebugToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+DBDebugToolkit.m"; path = "DBDebugToolkit/Classes/Categories/UIApplication+DBDebugToolkit.m"; sourceTree = "<group>"; };
 		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
-		9E0D52DD19CBBFA5FEB9A0EEB416EE51 /* TypingIndicatorCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TypingIndicatorCell.swift; path = Sources/Views/Cells/TypingIndicatorCell.swift; sourceTree = "<group>"; };
 		9F73841FA123F5745F1C7903F7562177 /* DBFontPreviewViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBFontPreviewViewController.storyboard; path = DBDebugToolkit/Resources/DBFontPreviewViewController.storyboard; sourceTree = "<group>"; };
 		9FA836AD2AD076A249E36D5C59E6A6CB /* KeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardNotification.swift; path = InputBarAccessoryView/KeyboardManager/KeyboardNotification.swift; sourceTree = "<group>"; };
-		9FC5B9D9696390BDCF961FD1C9593967 /* AvatarPosition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AvatarPosition.swift; path = Sources/Models/AvatarPosition.swift; sourceTree = "<group>"; };
-		A0306EE318D1CA8968F944C85796D486 /* TextMessageSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextMessageSizeCalculator.swift; path = Sources/Layout/TextMessageSizeCalculator.swift; sourceTree = "<group>"; };
 		A05DA6F8172228C606DB42F0C9672322 /* DBResourcesTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBResourcesTableViewController.storyboard; path = DBDebugToolkit/Resources/DBResourcesTableViewController.storyboard; sourceTree = "<group>"; };
 		A2A77581E09B2FF73B9575CB5F963E7B /* DBTopLevelViewsWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTopLevelViewsWrapper.m; path = DBDebugToolkit/Classes/TopLevelViews/DBTopLevelViewsWrapper.m; sourceTree = "<group>"; };
 		A33A1E5D2CFDB04409CE7099757B8063 /* RowCompatible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowCompatible.swift; path = Source/Protocol/RowCompatible.swift; sourceTree = "<group>"; };
 		A3EB4FA955FDA6FA2184ADD610E2E2F7 /* DBUserInterfaceTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBUserInterfaceTableViewController.m; path = DBDebugToolkit/Classes/UserInterface/DBUserInterfaceTableViewController.m; sourceTree = "<group>"; };
 		A404EB7D2FDD3104D94E54D30A7534D1 /* DBLocationToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBLocationToolkit.h; path = DBDebugToolkit/Classes/Location/DBLocationToolkit.h; sourceTree = "<group>"; };
-		A5471B7C3040EB43402B339B90320277 /* LocationMessageSnapshotOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationMessageSnapshotOptions.swift; path = Sources/Models/LocationMessageSnapshotOptions.swift; sourceTree = "<group>"; };
 		A55F3CBCDC4CE375AE5DD5784BC28DD7 /* DBShakeTrigger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBShakeTrigger.m; path = DBDebugToolkit/Classes/Triggers/ShakeTrigger/DBShakeTrigger.m; sourceTree = "<group>"; };
 		A56A92278CC7A0C05A78DB9684FE11CF /* InputPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InputPlugin.swift; path = InputBarAccessoryView/Protocols/InputPlugin.swift; sourceTree = "<group>"; };
 		A59DA5CAE37B1ED8CB8D5A0FF24CB5FA /* DBDebugToolkit.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DBDebugToolkit.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
 		A6EA6A042BCB4B3370E467FB5A8C5495 /* DBDebugToolkit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DBDebugToolkit.modulemap; sourceTree = "<group>"; };
-		A701BD2389B4674D759384692CAD58E5 /* LocationMessageCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationMessageCell.swift; path = Sources/Views/Cells/LocationMessageCell.swift; sourceTree = "<group>"; };
 		A8D48A16E5E7AA5E93875DF923914726 /* DBOptionsListTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBOptionsListTableViewController.h; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBOptionsListTableViewController.h; sourceTree = "<group>"; };
 		A91B052442958DAE42D12F7BABD1DC8C /* DBNetworkViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBNetworkViewController.storyboard; path = DBDebugToolkit/Resources/DBNetworkViewController.storyboard; sourceTree = "<group>"; };
 		A95B23FA35ADA5554C9490B6E1573C73 /* NSObject+DBDebugToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+DBDebugToolkit.h"; path = "DBDebugToolkit/Classes/Categories/NSObject+DBDebugToolkit.h"; sourceTree = "<group>"; };
@@ -878,7 +833,6 @@
 		AA1617995FFA40200221436B2568E099 /* ALCameraViewController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ALCameraViewController-Info.plist"; sourceTree = "<group>"; };
 		AA50659BADAA7CFD2F81D2A09BDDD492 /* DBCustomLocationViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCustomLocationViewController.m; path = DBDebugToolkit/Classes/Location/DBCustomLocationViewController.m; sourceTree = "<group>"; };
 		AA6265AF24BA1C227A14C4573EEC2C7B /* JGProgressHUDSuccessIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDSuccessIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h; sourceTree = "<group>"; };
-		AAB0A80DE0C75AA84DF02B1E51A09EB6 /* MessageInputBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageInputBar.swift; path = Sources/Supporting/MessageInputBar.swift; sourceTree = "<group>"; };
 		AAB23367BCA0FF3324579EE628CD67E9 /* InputBarAccessoryView+Availability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "InputBarAccessoryView+Availability.swift"; path = "InputBarAccessoryView/Supporting Files/InputBarAccessoryView+Availability.swift"; sourceTree = "<group>"; };
 		AAD6F56A02499CC905FABFEFB1CF87A0 /* NSPersistentStoreCoordinator+DBCoreDataToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPersistentStoreCoordinator+DBCoreDataToolkit.m"; path = "DBDebugToolkit/Classes/Resources/CoreData/NSPersistentStoreCoordinator+DBCoreDataToolkit.m"; sourceTree = "<group>"; };
 		AB505D15EBC19213F722E1928CA45FFA /* ALCameraViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ALCameraViewController-prefix.pch"; sourceTree = "<group>"; };
@@ -886,12 +840,9 @@
 		ABE2ABD4054299AF228EECBF2B216CDD /* UILabel+DBDebugToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+DBDebugToolkit.h"; path = "DBDebugToolkit/Classes/Categories/UILabel+DBDebugToolkit.h"; sourceTree = "<group>"; };
 		ACBA5D3F25CD1ACBBC7642271D834C2A /* DBAuthenticationChallengeSender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBAuthenticationChallengeSender.h; path = DBDebugToolkit/Classes/Network/URLProtocol/DBAuthenticationChallengeSender.h; sourceTree = "<group>"; };
 		ACC28D74F7B8DD3D20822FF87631D977 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
-		AD316C4331A5C3ACBA98B61C07891AD7 /* MessagesCollectionViewFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessagesCollectionViewFlowLayout.swift; path = Sources/Layout/MessagesCollectionViewFlowLayout.swift; sourceTree = "<group>"; };
 		AE15FE8483A266800DC050ACB0B54A7F /* JGProgressHUDRingIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDRingIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.h; sourceTree = "<group>"; };
 		AE6317E236612F9E009FABEC3C9EE60B /* DBCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCrashReport.h; path = DBDebugToolkit/Classes/CrashReports/DBCrashReport.h; sourceTree = "<group>"; };
-		AF13576C7A275756BBD7B845F75952D9 /* LabelAlignment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LabelAlignment.swift; path = Sources/Models/LabelAlignment.swift; sourceTree = "<group>"; };
 		AF26DDAA681963B6F25005D2DE334593 /* DBTextViewTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTextViewTableViewCell.m; path = DBDebugToolkit/Classes/Cells/DBTextViewTableViewCell.m; sourceTree = "<group>"; };
-		AF2CC289A97440C7EA6012F10F9888FC /* NSAttributedString+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSAttributedString+Extensions.swift"; path = "Sources/Extensions/NSAttributedString+Extensions.swift"; sourceTree = "<group>"; };
 		B006EB0AF5694C41B6EE9617A0AFA2AD /* DBCookiesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCookiesTableViewController.m; path = DBDebugToolkit/Classes/Resources/Cookies/DBCookiesTableViewController.m; sourceTree = "<group>"; };
 		B02AE7778F883524BE8E515AD2E5F262 /* SwiftyBeaver.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyBeaver.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		B0774281609BF4091C35E17EBB11B95E /* DBSliderTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBSliderTableViewCell.h; path = DBDebugToolkit/Classes/Cells/DBSliderTableViewCell.h; sourceTree = "<group>"; };
@@ -902,33 +853,26 @@
 		B4C40F01A791DD024457C71978D43609 /* DBPerformanceTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBPerformanceTableViewController.storyboard; path = DBDebugToolkit/Resources/DBPerformanceTableViewController.storyboard; sourceTree = "<group>"; };
 		B56200B92B27AD3694E5CB6680BF9B18 /* DBPerformanceWidgetView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = DBPerformanceWidgetView.xib; path = DBDebugToolkit/Resources/DBPerformanceWidgetView.xib; sourceTree = "<group>"; };
 		B5C6093F682538412A2BDA91BB37C111 /* JGProgressHUDAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDAnimation.h; sourceTree = "<group>"; };
-		B647E47F1761C357521009B7F05884FC /* LocationItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationItem.swift; path = Sources/Protocols/LocationItem.swift; sourceTree = "<group>"; };
 		B6BD8685A7F10C4C4B0ECA99142C0932 /* DBTextViewTableViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = DBTextViewTableViewCell.xib; path = DBDebugToolkit/Resources/DBTextViewTableViewCell.xib; sourceTree = "<group>"; };
 		B7953F19CFEB5C600CE04FAB31D14408 /* DBUserInterfaceToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBUserInterfaceToolkit.h; path = DBDebugToolkit/Classes/UserInterface/DBUserInterfaceToolkit.h; sourceTree = "<group>"; };
 		B7CCB937CA435AE3E3FECF9217EC2C4C /* ReachabilitySwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ReachabilitySwift-Info.plist"; sourceTree = "<group>"; };
 		B7F90E3208EA1F8F8481E6A52BEEC7D8 /* jg_hud_success@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_success@2x.png"; path = "JGProgressHUD/Resources/jg_hud_success@2x.png"; sourceTree = "<group>"; };
 		B83A691C3D8069DCE4E965EF343BD373 /* DBCookiesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCookiesTableViewController.h; path = DBDebugToolkit/Classes/Resources/Cookies/DBCookiesTableViewController.h; sourceTree = "<group>"; };
-		B865A892DEDEC0FF592ECA0F5AFBE56C /* MessageCellDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageCellDelegate.swift; path = Sources/Protocols/MessageCellDelegate.swift; sourceTree = "<group>"; };
 		B9614B8D5D12387AA9697B4943CD3064 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
-		BB1D8A1BC1190A68B9ADF3415FC4A2B9 /* MessageKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MessageKit-dummy.m"; sourceTree = "<group>"; };
 		BB9876B7CEAA7A8EB6F914B98B38F682 /* DBRequestDetailsViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBRequestDetailsViewController.storyboard; path = DBDebugToolkit/Resources/DBRequestDetailsViewController.storyboard; sourceTree = "<group>"; };
 		BC6EF0C91FD20E5C76890DA9C5209EB2 /* UICircularRingLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UICircularRingLayer.swift; path = src/UICircularProgressRing/UICircularRingLayer.swift; sourceTree = "<group>"; };
 		BD1C7BB602E9876B22CBD935238D64B4 /* JGProgressHUDPieIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDPieIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.m; sourceTree = "<group>"; };
 		BDC86E378ECF2DB8F0AD747AB8823443 /* KeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardManager.swift; path = InputBarAccessoryView/KeyboardManager/KeyboardManager.swift; sourceTree = "<group>"; };
 		BEE7A256F2BF9DFA6A5E64076FEDD51E /* DBTopLevelView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTopLevelView.h; path = DBDebugToolkit/Classes/TopLevelViews/DBTopLevelView.h; sourceTree = "<group>"; };
 		BF5799BDF86A35C255B252B753A10BA1 /* DBCustomAction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCustomAction.m; path = DBDebugToolkit/Classes/CustomActions/DBCustomAction.m; sourceTree = "<group>"; };
-		BFCA663ADCDE362C6D977E5C0B1CC811 /* ContactMessageSizeCalculator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContactMessageSizeCalculator.swift; path = Sources/Layout/ContactMessageSizeCalculator.swift; sourceTree = "<group>"; };
 		BFD66C584C896158CD301FB7462ACF8F /* SwiftyBeaver-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyBeaver-prefix.pch"; sourceTree = "<group>"; };
 		BFFEEF4676F9162A5894925E7F0F9C64 /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = src/UICircularProgressRing/Extensions.swift; sourceTree = "<group>"; };
 		C11F409FDCB64645CA411488F7EE79BE /* SingleImageFetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleImageFetcher.swift; path = ALCameraViewController/Utilities/SingleImageFetcher.swift; sourceTree = "<group>"; };
 		C18DF9240D4C7ABC6ECE6EDEC77CDF69 /* DBLongPressTrigger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBLongPressTrigger.h; path = DBDebugToolkit/Classes/Triggers/LongPressTrigger/DBLongPressTrigger.h; sourceTree = "<group>"; };
 		C190828306305706C07B2FC80AFA27E6 /* DBDebugToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBDebugToolkit.m; path = DBDebugToolkit/Classes/DBDebugToolkit.m; sourceTree = "<group>"; };
-		C19B4B6AA4627279C23C3B95A70C72D1 /* MessageCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageCollectionViewCell.swift; path = Sources/Views/Cells/MessageCollectionViewCell.swift; sourceTree = "<group>"; };
 		C1A8C8E4AA969A18444058CF5EE6DEBB /* ReachabilitySwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.xcconfig; sourceTree = "<group>"; };
 		C1A9D05452AF384C0825F8551C06914E /* DBFilesTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBFilesTableViewController.storyboard; path = DBDebugToolkit/Resources/DBFilesTableViewController.storyboard; sourceTree = "<group>"; };
 		C26A357479E69FE8C29E26486B86B74E /* UIButtonExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIButtonExtensions.swift; path = ALCameraViewController/Utilities/UIButtonExtensions.swift; sourceTree = "<group>"; };
-		C2BD95727E4BEC5E2CCB968CAF27B013 /* TypingBubble.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TypingBubble.swift; path = Sources/Views/TypingBubble.swift; sourceTree = "<group>"; };
-		C3171673FED3BEB0E7367A789AC306A2 /* SenderType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SenderType.swift; path = Sources/Protocols/SenderType.swift; sourceTree = "<group>"; };
 		C4598F68CD4EDA13A02B8D96AE8D20EA /* Pods-deltachat-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-deltachat-ios.release.xcconfig"; sourceTree = "<group>"; };
 		C485D9FAC5C066D921AA74D0DE9A9361 /* DBCookieTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCookieTableViewCell.m; path = DBDebugToolkit/Classes/Resources/Cookies/DBCookieTableViewCell.m; sourceTree = "<group>"; };
 		C4A78F81E7F27D5AF56FEE794E22C55D /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Sources/Extensions.swift; sourceTree = "<group>"; };
@@ -936,13 +880,10 @@
 		C4F7E3195E6B9E543F2B6929E3A219B0 /* DBTouchIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTouchIndicatorView.h; path = DBDebugToolkit/Classes/UserInterface/DBTouchIndicatorView.h; sourceTree = "<group>"; };
 		C5BB2454829198C2DE557985783353E9 /* DBManagedObjectsListTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBManagedObjectsListTableViewController.m; path = DBDebugToolkit/Classes/Resources/CoreData/DBManagedObjectsListTableViewController.m; sourceTree = "<group>"; };
 		C626A72CA21289D6A9E59AAB88E31A52 /* DBURLProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBURLProtocol.m; path = DBDebugToolkit/Classes/Network/URLProtocol/DBURLProtocol.m; sourceTree = "<group>"; };
-		C67203ECC6CEB553F6439B1AD1BA162D /* AudioItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AudioItem.swift; path = Sources/Protocols/AudioItem.swift; sourceTree = "<group>"; };
 		C6E145B0900846F45E026508AF4F75C9 /* DBKeychainToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBKeychainToolkit.h; path = DBDebugToolkit/Classes/Resources/Keychain/DBKeychainToolkit.h; sourceTree = "<group>"; };
 		C6EB6691BC6060FCC9BA47476C0B095B /* InputBarSendButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InputBarSendButton.swift; path = InputBarAccessoryView/Controls/InputBarSendButton.swift; sourceTree = "<group>"; };
-		C7E0ACF23F8C5ABE0CC00EB3D3A1BE5A /* UIImage+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Extension.swift"; path = "Sources/Extensions/UIImage+Extension.swift"; sourceTree = "<group>"; };
 		C9D57B220EB74DA29A65ACC45A04B5C2 /* AttachmentManagerDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AttachmentManagerDelegate.swift; path = InputBarAccessoryView/Plugins/AttachmentManager/Protocols/AttachmentManagerDelegate.swift; sourceTree = "<group>"; };
 		CA5A66FCAFA6746EF112AE5E0E2554A8 /* DBOptionsListTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBOptionsListTableViewController.m; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBOptionsListTableViewController.m; sourceTree = "<group>"; };
-		CADD4971B504F91C29539452EEDB2B77 /* Avatar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Avatar.swift; path = Sources/Models/Avatar.swift; sourceTree = "<group>"; };
 		CB1C44D1D455AD76C3D67A284CB9FEC6 /* DBTextViewTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBTextViewTableViewCell.h; path = DBDebugToolkit/Classes/Cells/DBTextViewTableViewCell.h; sourceTree = "<group>"; };
 		CBE458CF13D76A7BA8EBEFC9AE578E3B /* CroppingParameters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CroppingParameters.swift; path = ALCameraViewController/Utilities/CroppingParameters.swift; sourceTree = "<group>"; };
 		CC40E24295A387B30BFC6B07B1C081C9 /* DBFontFamiliesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBFontFamiliesTableViewController.h; path = DBDebugToolkit/Classes/UserInterface/DBFontFamiliesTableViewController.h; sourceTree = "<group>"; };
@@ -957,7 +898,6 @@
 		D11516866E4953DEDA198FAD74BE8839 /* ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist"; sourceTree = "<group>"; };
 		D1549F2EC494C92819C359DD75BB5DF9 /* SwiftyBeaver-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyBeaver-dummy.m"; sourceTree = "<group>"; };
 		D22D65ED32FC8DE6A6ED631CCD016712 /* DBDebugToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBDebugToolkit.h; path = DBDebugToolkit/Classes/DBDebugToolkit.h; sourceTree = "<group>"; };
-		D27882E74F13E970710FF59B770D294D /* Images */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = Images; path = Assets/MessageKitAssets.bundle/Images; sourceTree = "<group>"; };
 		D28AFE674909E1275247AE9FA0062109 /* DBRequestOutcome.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBRequestOutcome.h; path = DBDebugToolkit/Classes/Network/RequestModel/DBRequestOutcome.h; sourceTree = "<group>"; };
 		D2F06ED627E5A8FED91D2F3142F703C3 /* DBConsoleOutputCaptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBConsoleOutputCaptor.m; path = DBDebugToolkit/Classes/Console/DBConsoleOutputCaptor.m; sourceTree = "<group>"; };
 		D320607DD3881D5CAD17FE9967920522 /* QuickTableViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = QuickTableViewController.modulemap; sourceTree = "<group>"; };
@@ -969,13 +909,10 @@
 		D5A5F4B1D60F8B62756DBB19046FDF44 /* ImageCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCell.swift; path = ALCameraViewController/Views/ImageCell.swift; sourceTree = "<group>"; };
 		D5B2E328CB6F144E13614F39078E7A3C /* JGProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JGProgressHUD.modulemap; sourceTree = "<group>"; };
 		D5E3FA97D9E85C54A3EB067116C8EAD4 /* RadioSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadioSection.swift; path = Source/Model/RadioSection.swift; sourceTree = "<group>"; };
-		D5E8158D68641C882EE01C38B615E478 /* HorizontalEdgeInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalEdgeInsets.swift; path = Sources/Models/HorizontalEdgeInsets.swift; sourceTree = "<group>"; };
-		D63BE799B5DCB8AEBA9D0629E376EB30 /* MessagesCollectionViewLayoutAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessagesCollectionViewLayoutAttributes.swift; path = Sources/Layout/MessagesCollectionViewLayoutAttributes.swift; sourceTree = "<group>"; };
 		D73B7064173766E236D6BADF4EE00386 /* DBCrashReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCrashReport.m; path = DBDebugToolkit/Classes/CrashReports/DBCrashReport.m; sourceTree = "<group>"; };
 		D7B4B6220B652DA1BE44DC0FECFFC2FA /* BaseDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseDestination.swift; path = Sources/BaseDestination.swift; sourceTree = "<group>"; };
 		D81D8E1B68B176C5A974B4F8CF56F974 /* DBTextViewViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBTextViewViewController.storyboard; path = DBDebugToolkit/Resources/DBTextViewViewController.storyboard; sourceTree = "<group>"; };
 		D863C4D6D8E08D80027EF244B64566D8 /* DBMenuSwitchTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBMenuSwitchTableViewCell.h; path = DBDebugToolkit/Classes/Cells/DBMenuSwitchTableViewCell.h; sourceTree = "<group>"; };
-		D86E6705890CDDC974316E6C07306291 /* NSConstraintLayoutSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSConstraintLayoutSet.swift; path = Sources/Models/NSConstraintLayoutSet.swift; sourceTree = "<group>"; };
 		D918029F30CC0071E6899151F2013785 /* DBCoreDataToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCoreDataToolkit.h; path = DBDebugToolkit/Classes/Resources/CoreData/DBCoreDataToolkit.h; sourceTree = "<group>"; };
 		D93D23BBFB63833B55519A26782EF5C8 /* DBMenuTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBMenuTableViewController.m; path = DBDebugToolkit/Classes/Menu/DBMenuTableViewController.m; sourceTree = "<group>"; };
 		D95417377B4BC47CF6CE68185B8BB1B6 /* ImageAttachmentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageAttachmentCell.swift; path = InputBarAccessoryView/Plugins/AttachmentManager/Views/ImageAttachmentCell.swift; sourceTree = "<group>"; };
@@ -993,12 +930,9 @@
 		DDF61DF344E148D163B13F12B825F12E /* DBRequestDetailsViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBRequestDetailsViewController.h; path = DBDebugToolkit/Classes/Network/DBRequestDetailsViewController.h; sourceTree = "<group>"; };
 		DED8C189F56BE3A2EB836951880C1FEB /* JGProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JGProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		DEE08740570B83175CC6FFA491811F10 /* Pods-deltachat-iosTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-deltachat-iosTests.modulemap"; sourceTree = "<group>"; };
-		DF513DE3C9D44492382B491527E2F64D /* MessageKitDateFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageKitDateFormatter.swift; path = Sources/Models/MessageKitDateFormatter.swift; sourceTree = "<group>"; };
-		E00E7C125EA4CFEC5B4830F32E3CD1EA /* UIView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Extensions.swift"; path = "Sources/Extensions/UIView+Extensions.swift"; sourceTree = "<group>"; };
 		E026DE5D5B92DFF74F6DB69E827567B7 /* JGProgressHUDFadeZoomAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDFadeZoomAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m; sourceTree = "<group>"; };
 		E03726573B843E293D0E45B2B6AC6F6A /* DBCoreDataFilterOperator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBCoreDataFilterOperator.h; path = DBDebugToolkit/Classes/Resources/CoreData/Filters/DBCoreDataFilterOperator.h; sourceTree = "<group>"; };
 		E06861AD060908DE2DB8F7820D6C2231 /* UICircularProgressRing-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UICircularProgressRing-dummy.m"; sourceTree = "<group>"; };
-		E1FAD38D43037FDD86E6EE549962853C /* MessageStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageStyle.swift; path = Sources/Models/MessageStyle.swift; sourceTree = "<group>"; };
 		E248156D3051F5CEFC7A2EACC1EBEB49 /* DBDeviceInfoProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBDeviceInfoProvider.h; path = DBDebugToolkit/Classes/Device/DBDeviceInfoProvider.h; sourceTree = "<group>"; };
 		E261591557C8CD94276992B43F0D6FE7 /* Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecated.swift; path = Source/Model/Deprecated.swift; sourceTree = "<group>"; };
 		E2AE30F565B3FF55C5DC60A180370F12 /* DBURLProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBURLProtocol.h; path = DBDebugToolkit/Classes/Network/URLProtocol/DBURLProtocol.h; sourceTree = "<group>"; };
@@ -1006,7 +940,6 @@
 		E2E47FB75E22FDA26B1906BDF647EC62 /* NSBundle+DBDebugToolkit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+DBDebugToolkit.h"; path = "DBDebugToolkit/Classes/Categories/NSBundle+DBDebugToolkit.h"; sourceTree = "<group>"; };
 		E3741BFD8C793DB441C71D01E7E68317 /* QuickTableViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickTableViewController.swift; path = Source/QuickTableViewController.swift; sourceTree = "<group>"; };
 		E4DB32E69DBEE567D2B41E4C51C70229 /* CameraShot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraShot.swift; path = ALCameraViewController/Utilities/CameraShot.swift; sourceTree = "<group>"; };
-		E4E77D726B20687EA9423A77BDA7F641 /* MessageKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MessageKit.xcconfig; sourceTree = "<group>"; };
 		E62BB3E79D3C03FFC61450481DB44BE6 /* DBTitleValueTableViewCellDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTitleValueTableViewCellDataSource.m; path = DBDebugToolkit/Classes/Cells/TitleValue/DBTitleValueTableViewCellDataSource.m; sourceTree = "<group>"; };
 		E6921A53BE2092332BE9D3B5CD30C351 /* UICircularRingStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UICircularRingStyle.swift; path = src/UICircularProgressRing/UICircularRingStyle.swift; sourceTree = "<group>"; };
 		E6FBCE27DEE8A60CDEA75B6E52BF075A /* HorizontalEdgeInsets.swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalEdgeInsets.swift.swift; path = InputBarAccessoryView/Models/HorizontalEdgeInsets.swift.swift; sourceTree = "<group>"; };
@@ -1017,7 +950,6 @@
 		E9FB925740E7FBD304957C173659E767 /* JGProgressHUDPieIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDPieIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.h; sourceTree = "<group>"; };
 		EAB5B32563019025EC011C6D8E4812F5 /* DBFontPreviewViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBFontPreviewViewController.h; path = DBDebugToolkit/Classes/UserInterface/DBFontPreviewViewController.h; sourceTree = "<group>"; };
 		EC1446C8006126DB7E9E07054F774C1D /* InputBarAccessoryView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InputBarAccessoryView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		EC5305F0AFDE521FFC745101E9A0C64F /* AccessoryPosition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessoryPosition.swift; path = Sources/Models/AccessoryPosition.swift; sourceTree = "<group>"; };
 		EFF27D80746797BA12936774F3760EF6 /* DBNetworkToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBNetworkToolkit.m; path = DBDebugToolkit/Classes/Network/DBNetworkToolkit.m; sourceTree = "<group>"; };
 		F03830A825B694749EBF888A41FE990E /* DBTitleValueListTableViewController.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DBTitleValueListTableViewController.storyboard; path = DBDebugToolkit/Resources/DBTitleValueListTableViewController.storyboard; sourceTree = "<group>"; };
 		F0D242D411E2639915AE894931799DCE /* JGProgressHUDIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.h; sourceTree = "<group>"; };
@@ -1025,11 +957,8 @@
 		F27883EA0EF80E20C2DE403115075B18 /* DBTapTrigger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBTapTrigger.m; path = DBDebugToolkit/Classes/Triggers/TapTrigger/DBTapTrigger.m; sourceTree = "<group>"; };
 		F30F9F465A74A5A9CDC97B97E05A490E /* DBCoreDataToolkit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBCoreDataToolkit.m; path = DBDebugToolkit/Classes/Resources/CoreData/DBCoreDataToolkit.m; sourceTree = "<group>"; };
 		F32CC41A607413FA9F665EC57D997A4C /* InputBarAccessoryView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "InputBarAccessoryView-umbrella.h"; sourceTree = "<group>"; };
-		F385C082A51DF3FC02F1E0ED7E11AE97 /* MessageType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageType.swift; path = Sources/Protocols/MessageType.swift; sourceTree = "<group>"; };
-		F44E888B3FC2E87D4BBD1F6F7433D685 /* ResourceBundle-MessageKitAssets-MessageKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MessageKitAssets-MessageKit-Info.plist"; sourceTree = "<group>"; };
 		F5B44A46C19900BC09CCB2C1AC138F9E /* AutocompleteTableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutocompleteTableView.swift; path = InputBarAccessoryView/Plugins/AutocompleteManager/Views/AutocompleteTableView.swift; sourceTree = "<group>"; };
 		F7460FEFF225998CDD13FC6143645DF0 /* Pods-deltachat-iosTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-deltachat-iosTests.debug.xcconfig"; sourceTree = "<group>"; };
-		F78E363D16C6A268BC8932A429E85730 /* MessageKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MessageKit.modulemap; sourceTree = "<group>"; };
 		F7AAA2795D55521FCBB671DB2D0AA2A0 /* DBPerformanceSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBPerformanceSection.h; path = DBDebugToolkit/Classes/Performance/DBPerformanceSection.h; sourceTree = "<group>"; };
 		F86AF286211889F467E38091E221BD5E /* Pods-deltachat-ios-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-deltachat-ios-dummy.m"; sourceTree = "<group>"; };
 		F91DF448ABE8AFBA4C6C6AB8D96E9681 /* UIWindow+DBShakeTrigger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWindow+DBShakeTrigger.m"; path = "DBDebugToolkit/Classes/Triggers/ShakeTrigger/UIWindow+DBShakeTrigger.m"; sourceTree = "<group>"; };
@@ -1043,7 +972,6 @@
 		FB6D48D8F511504ED99F0271051361ED /* Pods_deltachat_ios.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_deltachat_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		FBF6D613818A24C320A546D53871D00B /* DBRequestTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBRequestTableViewCell.h; path = DBDebugToolkit/Classes/Cells/DBRequestTableViewCell.h; sourceTree = "<group>"; };
 		FC1EBEC976B7A98420F713A2EF96021A /* DBNetworkSettingsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBNetworkSettingsTableViewController.h; path = DBDebugToolkit/Classes/Network/DBNetworkSettingsTableViewController.h; sourceTree = "<group>"; };
-		FCC3FCBBC7C2D118ABF831125BE2E760 /* MessagesLayoutDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessagesLayoutDelegate.swift; path = Sources/Protocols/MessagesLayoutDelegate.swift; sourceTree = "<group>"; };
 		FD61B011B5D2DCBBB36ED9EE9858F27C /* AutocompleteCompletion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutocompleteCompletion.swift; path = InputBarAccessoryView/Plugins/AutocompleteManager/Models/AutocompleteCompletion.swift; sourceTree = "<group>"; };
 		FE4B79AF28B0D1758EB9CF5C590E0D5D /* DBEntitiesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBEntitiesTableViewController.h; path = DBDebugToolkit/Classes/Resources/CoreData/DBEntitiesTableViewController.h; sourceTree = "<group>"; };
 		FE6FD3C1F36204E723EE6DEB833568FB /* QuickTableViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "QuickTableViewController-umbrella.h"; sourceTree = "<group>"; };
@@ -1398,79 +1326,6 @@
 			path = SwiftyBeaver;
 			sourceTree = "<group>";
 		};
-		158B93A396AE72231425F697560FC7F2 /* MessageKit */ = {
-			isa = PBXGroup;
-			children = (
-				EC5305F0AFDE521FFC745101E9A0C64F /* AccessoryPosition.swift */,
-				C67203ECC6CEB553F6439B1AD1BA162D /* AudioItem.swift */,
-				1241FD3C295C98EEF3067849232354F6 /* AudioMessageCell.swift */,
-				718E44B94F4806CE7AC495863ECEB9A8 /* AudioMessageSizeCalculator.swift */,
-				CADD4971B504F91C29539452EEDB2B77 /* Avatar.swift */,
-				9FC5B9D9696390BDCF961FD1C9593967 /* AvatarPosition.swift */,
-				0F35F10832C9285F3E0C53F54B59AC8D /* AvatarView.swift */,
-				8756002DE3D13281782F43AC2A775AFB /* BubbleCircle.swift */,
-				921842F6F8810C00FFC8D96FCE0B7ABE /* Bundle+Extensions.swift */,
-				6E1465C95E03D9D31DBAF0947967902B /* CellSizeCalculator.swift */,
-				3759041888B11174063953214BB5B090 /* CGRect+Extensions.swift */,
-				855A2C36C48EB5853A918C0677F43335 /* ContactItem.swift */,
-				5E45F7C4F805948433D6FAAFA5FF6947 /* ContactMessageCell.swift */,
-				BFCA663ADCDE362C6D977E5C0B1CC811 /* ContactMessageSizeCalculator.swift */,
-				4DDB96FE6149AE1B25461BDAF33B5939 /* DetectorType.swift */,
-				D5E8158D68641C882EE01C38B615E478 /* HorizontalEdgeInsets.swift */,
-				126ACF3D1759186782F7251082DBE735 /* InsetLabel.swift */,
-				AF13576C7A275756BBD7B845F75952D9 /* LabelAlignment.swift */,
-				B647E47F1761C357521009B7F05884FC /* LocationItem.swift */,
-				A701BD2389B4674D759384692CAD58E5 /* LocationMessageCell.swift */,
-				8E3E45FA433746A84DC4095945F1A439 /* LocationMessageSizeCalculator.swift */,
-				A5471B7C3040EB43402B339B90320277 /* LocationMessageSnapshotOptions.swift */,
-				318528AE5509FF1088A777CB530FE416 /* MediaItem.swift */,
-				599685DF7351AA2F9C9B8BEF4AA1E1E7 /* MediaMessageCell.swift */,
-				9A9D3E335982112FC693D271F47D7274 /* MediaMessageSizeCalculator.swift */,
-				B865A892DEDEC0FF592ECA0F5AFBE56C /* MessageCellDelegate.swift */,
-				C19B4B6AA4627279C23C3B95A70C72D1 /* MessageCollectionViewCell.swift */,
-				24BA1E165733DA60DD6E2E116B6A6401 /* MessageContainerView.swift */,
-				09A05A43FE6F8908C2B998CA083D67D7 /* MessageContentCell.swift */,
-				AAB0A80DE0C75AA84DF02B1E51A09EB6 /* MessageInputBar.swift */,
-				408AEC021E18225342B0E25C32E572CF /* MessageKind.swift */,
-				7F1CDBE8B75C96381468BBA4DBD365E8 /* MessageKit+Availability.swift */,
-				DF513DE3C9D44492382B491527E2F64D /* MessageKitDateFormatter.swift */,
-				1C170831175AEC979417598F83E3869D /* MessageKitError.swift */,
-				36E00875C8776F9B3FB700D037808664 /* MessageLabel.swift */,
-				9871488E7E21A4292C775CA11014E6A6 /* MessageLabelDelegate.swift */,
-				1E7B7FE104774CA8A2BC5225013FCBCC /* MessageReusableView.swift */,
-				9395868C34C6F8BD562F24C9A622CBDB /* MessagesCollectionView.swift */,
-				AD316C4331A5C3ACBA98B61C07891AD7 /* MessagesCollectionViewFlowLayout.swift */,
-				D63BE799B5DCB8AEBA9D0629E376EB30 /* MessagesCollectionViewLayoutAttributes.swift */,
-				750C94CB910688E98051AE87324C85B0 /* MessagesDataSource.swift */,
-				017633526904CC46C29E2665CF233038 /* MessagesDisplayDelegate.swift */,
-				8A7432BDC540EF0F97064324F42DC509 /* MessageSizeCalculator.swift */,
-				FCC3FCBBC7C2D118ABF831125BE2E760 /* MessagesLayoutDelegate.swift */,
-				E1FAD38D43037FDD86E6EE549962853C /* MessageStyle.swift */,
-				72BB49C3A6B1D8C21B2347A1AAD9BAEF /* MessagesViewController.swift */,
-				824482471B01329904858439CBE579B5 /* MessagesViewController+Keyboard.swift */,
-				31760CB7F4305589A7EC118DF6B612B6 /* MessagesViewController+Menu.swift */,
-				F385C082A51DF3FC02F1E0ED7E11AE97 /* MessageType.swift */,
-				AF2CC289A97440C7EA6012F10F9888FC /* NSAttributedString+Extensions.swift */,
-				D86E6705890CDDC974316E6C07306291 /* NSConstraintLayoutSet.swift */,
-				2AFC861CB066A5536665FEEE2B47FAF2 /* PlayButtonView.swift */,
-				6C2F8667063B2F9B52ABEED2A23A91A7 /* Sender.swift */,
-				C3171673FED3BEB0E7367A789AC306A2 /* SenderType.swift */,
-				8D49EF94CC108AFDDC3D131A77B0C309 /* TextMessageCell.swift */,
-				A0306EE318D1CA8968F944C85796D486 /* TextMessageSizeCalculator.swift */,
-				C2BD95727E4BEC5E2CCB968CAF27B013 /* TypingBubble.swift */,
-				457AAC28308C59CF00DEE229EEAD753F /* TypingIndicator.swift */,
-				9E0D52DD19CBBFA5FEB9A0EEB416EE51 /* TypingIndicatorCell.swift */,
-				7CE8A398078AB3F4BCB9E5A786C34880 /* TypingIndicatorCellSizeCalculator.swift */,
-				87835B19E9CCB3B569554B550774054C /* UIColor+Extensions.swift */,
-				91083CE184E8CAB5777DB9676CBD404E /* UIEdgeInsets+Extensions.swift */,
-				C7E0ACF23F8C5ABE0CC00EB3D3A1BE5A /* UIImage+Extension.swift */,
-				E00E7C125EA4CFEC5B4830F32E3CD1EA /* UIView+Extensions.swift */,
-				641C910E0107F563B935343D66893E99 /* Resources */,
-				9BF9532247A645A80EAC6F2C7FE32797 /* Support Files */,
-			);
-			path = MessageKit;
-			sourceTree = "<group>";
-		};
 		1943E02B01C18C75FC9864E3D5699384 /* Support Files */ = {
 			isa = PBXGroup;
 			children = (
@@ -1605,14 +1460,6 @@
 			path = QuickTableViewController;
 			sourceTree = "<group>";
 		};
-		641C910E0107F563B935343D66893E99 /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				D27882E74F13E970710FF59B770D294D /* Images */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
 		66D9732A9F7ECD169C03940FC42A0147 /* Support Files */ = {
 			isa = PBXGroup;
 			children = (
@@ -1684,7 +1531,6 @@
 				079FDA0DB78A47D00818F76A0D349D7F /* DBDebugToolkit */,
 				932747233B1D3C15175F0E9CFD48A9E9 /* InputBarAccessoryView */,
 				D2F38F9935035F78B223E844E3FC8A7F /* JGProgressHUD */,
-				158B93A396AE72231425F697560FC7F2 /* MessageKit */,
 				5540E2A10B457FF7EB0E09046B68D110 /* QuickTableViewController */,
 				488C59D20BF409C4182FCFB87BD428B4 /* ReachabilitySwift */,
 				4CFAFD33C49FE3171F8D321630E89391 /* SwiftFormat */,
@@ -1738,21 +1584,6 @@
 			path = InputBarAccessoryView;
 			sourceTree = "<group>";
 		};
-		9BF9532247A645A80EAC6F2C7FE32797 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				F78E363D16C6A268BC8932A429E85730 /* MessageKit.modulemap */,
-				E4E77D726B20687EA9423A77BDA7F641 /* MessageKit.xcconfig */,
-				BB1D8A1BC1190A68B9ADF3415FC4A2B9 /* MessageKit-dummy.m */,
-				19815D3A60F1B9DE12D9C3E32A8CF5A6 /* MessageKit-Info.plist */,
-				1959392B95C8E1C3AB4A80F19A945A69 /* MessageKit-prefix.pch */,
-				9C35E54B80B39F147C29D45EE1836C82 /* MessageKit-umbrella.h */,
-				F44E888B3FC2E87D4BBD1F6F7433D685 /* ResourceBundle-MessageKitAssets-MessageKit-Info.plist */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/MessageKit";
-			sourceTree = "<group>";
-		};
 		A90BFF296395F34810E987C1057199DA /* Products */ = {
 			isa = PBXGroup;
 			children = (

+ 12 - 0
deltachat-ios.xcodeproj/project.pbxproj

@@ -7,6 +7,9 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		300C509D234B551900F8AE22 /* TextMediaMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300C509C234B551900F8AE22 /* TextMediaMessageCell.swift */; };
+		300C509F234B6D6C00F8AE22 /* TextMediaMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300C509E234B6D6C00F8AE22 /* TextMediaMessageCell.swift */; };
+		300C50A1234BDAB800F8AE22 /* TextMediaMessageSizeCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300C50A0234BDAB800F8AE22 /* TextMediaMessageSizeCalculator.swift */; };
 		30149D9322F21129003C12B5 /* QrViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30149D9222F21129003C12B5 /* QrViewController.swift */; };
 		3022E6BE22E8768800763272 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3022E6C022E8768800763272 /* InfoPlist.strings */; };
 		305961CC2346125100C80F33 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305961822346125000C80F33 /* UIView+Extensions.swift */; };
@@ -149,6 +152,9 @@
 /* Begin PBXFileReference section */
 		21EE28844E7A690D73BF5285 /* Pods-deltachat-iosTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-deltachat-iosTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-deltachat-iosTests/Pods-deltachat-iosTests.debug.xcconfig"; sourceTree = "<group>"; };
 		2F7009234DB9408201A6CDCB /* Pods_deltachat_iosTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_deltachat_iosTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		300C509C234B551900F8AE22 /* TextMediaMessageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextMediaMessageCell.swift; sourceTree = "<group>"; };
+		300C509E234B6D6C00F8AE22 /* TextMediaMessageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TextMediaMessageCell.swift; path = "deltachat-ios/MessageKit/Views/Cells/TextMediaMessageCell.swift"; sourceTree = SOURCE_ROOT; };
+		300C50A0234BDAB800F8AE22 /* TextMediaMessageSizeCalculator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextMediaMessageSizeCalculator.swift; sourceTree = "<group>"; };
 		30149D9222F21129003C12B5 /* QrViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QrViewController.swift; sourceTree = "<group>"; };
 		3022E6BF22E8768800763272 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		3022E6C122E8768C00763272 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@@ -482,6 +488,7 @@
 		305961AD2346125100C80F33 /* Cells */ = {
 			isa = PBXGroup;
 			children = (
+				300C509C234B551900F8AE22 /* TextMediaMessageCell.swift */,
 				305961AE2346125100C80F33 /* ContactMessageCell.swift */,
 				305961AF2346125100C80F33 /* LocationMessageCell.swift */,
 				305961B02346125100C80F33 /* MediaMessageCell.swift */,
@@ -505,12 +512,14 @@
 		305961C12346125100C80F33 /* Layout */ = {
 			isa = PBXGroup;
 			children = (
+				300C509E234B6D6C00F8AE22 /* TextMediaMessageCell.swift */,
 				305961C22346125100C80F33 /* CellSizeCalculator.swift */,
 				305961C32346125100C80F33 /* MessagesCollectionViewLayoutAttributes.swift */,
 				305961C42346125100C80F33 /* ContactMessageSizeCalculator.swift */,
 				305961C52346125100C80F33 /* TypingIndicatorCellSizeCalculator.swift */,
 				305961C62346125100C80F33 /* MessagesCollectionViewFlowLayout.swift */,
 				305961C72346125100C80F33 /* MediaMessageSizeCalculator.swift */,
+				300C50A0234BDAB800F8AE22 /* TextMediaMessageSizeCalculator.swift */,
 				305961C82346125100C80F33 /* AudioMessageSizeCalculator.swift */,
 				305961C92346125100C80F33 /* TextMessageSizeCalculator.swift */,
 				305961CA2346125100C80F33 /* LocationMessageSizeCalculator.swift */,
@@ -1060,6 +1069,7 @@
 				305961D02346125100C80F33 /* NSAttributedString+Extensions.swift in Sources */,
 				305961CF2346125100C80F33 /* UIColor+Extensions.swift in Sources */,
 				AEACE2E51FB32E1900DCDD78 /* Utils.swift in Sources */,
+				300C509D234B551900F8AE22 /* TextMediaMessageCell.swift in Sources */,
 				305961E92346125100C80F33 /* MessageKind.swift in Sources */,
 				305962022346125100C80F33 /* BubbleCircle.swift in Sources */,
 				305961DD2346125100C80F33 /* SenderType.swift in Sources */,
@@ -1092,11 +1102,13 @@
 				305961D92346125100C80F33 /* ContactItem.swift in Sources */,
 				305961FB2346125100C80F33 /* TypingIndicator.swift in Sources */,
 				7092474120B3869500AF8799 /* ContactDetailViewController.swift in Sources */,
+				300C50A1234BDAB800F8AE22 /* TextMediaMessageSizeCalculator.swift in Sources */,
 				AE18F292228C17BC0007B1BE /* PortSettingsController.swift in Sources */,
 				305961F12346125100C80F33 /* ContactMessageCell.swift in Sources */,
 				AE851AD0227DF50900ED86F0 /* GroupChatDetailViewController.swift in Sources */,
 				305961D12346125100C80F33 /* Bundle+Extensions.swift in Sources */,
 				305962002346125100C80F33 /* MessagesCollectionView.swift in Sources */,
+				300C509F234B6D6C00F8AE22 /* TextMediaMessageCell.swift in Sources */,
 				7A451DB01FB1F84900177250 /* AppCoordinator.swift in Sources */,
 				AE38B31822672DFC00EC37A1 /* ActionCell.swift in Sources */,
 				AE9DAF0D22C1215D004C9591 /* EditContactController.swift in Sources */,

+ 4 - 0
deltachat-ios/Controller/ChatViewController.swift

@@ -390,6 +390,10 @@ class ChatViewController: MessagesViewController {
             let cell = messagesCollectionView.dequeueReusableCell(MediaMessageCell.self, for: indexPath)
             cell.configure(with: message, at: indexPath, and: messagesCollectionView)
             return cell
+        case .photoText:
+            let cell = messagesCollectionView.dequeueReusableCell(TextMediaMessageCell.self, for: indexPath)
+            cell.configure(with: message, at: indexPath, and: messagesCollectionView)
+            return cell
         case .location:
             let cell = messagesCollectionView.dequeueReusableCell(LocationMessageCell.self, for: indexPath)
             cell.configure(with: message, at: indexPath, and: messagesCollectionView)

+ 4 - 1
deltachat-ios/DC/Wrapper.swift

@@ -473,7 +473,10 @@ class DcMsg: MessageType {
 
         switch self.viewtype! {
         case .image:
-            return MessageKind.photo(Media(image: image))
+            if text.isEmpty {
+                return MessageKind.photo(Media(image: image))
+            }
+            return MessageKind.photoText(Media(image: image, text: NSAttributedString(string: text)))
         case .video:
             return MessageKind.video(Media(url: fileURL))
         default:

+ 6 - 0
deltachat-ios/Extensions/NSAttributedString+Extensions.swift

@@ -34,4 +34,10 @@ internal extension NSAttributedString {
         return rect.width
         
     }
+
+    func height(withConstrainedWidth width: CGFloat) -> CGFloat {
+        let constraintBox = CGSize(width: width, height: .greatestFiniteMagnitude)
+        let rect = self.boundingRect(with: constraintBox, options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil)
+        return rect.height
+    }
 }

+ 9 - 2
deltachat-ios/MessageKit/Controllers/MessagesViewController.swift

@@ -282,6 +282,10 @@ UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
             let cell = messagesCollectionView.dequeueReusableCell(MediaMessageCell.self, for: indexPath)
             cell.configure(with: message, at: indexPath, and: messagesCollectionView)
             return cell
+        case .photoText:
+            let cell = messagesCollectionView.dequeueReusableCell(TextMediaMessageCell.self, for: indexPath)
+            cell.configure(with: message, at: indexPath, and: messagesCollectionView)
+            return cell
         case .location:
             let cell = messagesCollectionView.dequeueReusableCell(LocationMessageCell.self, for: indexPath)
             cell.configure(with: message, at: indexPath, and: messagesCollectionView)
@@ -368,7 +372,7 @@ UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
         let message = messagesDataSource.messageForItem(at: indexPath, in: messagesCollectionView)
 
         switch message.kind {
-        case .text, .attributedText, .emoji, .photo:
+        case .text, .attributedText, .emoji, .photo, .photoText:
             selectedIndexPathForMenu = indexPath
             return true
         default:
@@ -397,6 +401,9 @@ UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
             pasteBoard.string = attributedText.string
         case .photo(let mediaItem):
             pasteBoard.image = mediaItem.image ?? mediaItem.placeholderImage
+        case .photoText(let mediaItem):
+            pasteBoard.image = mediaItem.image ?? mediaItem.placeholderImage
+            pasteBoard.string = mediaItem.text?.string
         default:
             break
         }
@@ -408,7 +415,7 @@ UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
         NotificationCenter.default.addObserver(
             self, selector: #selector(clearMemoryCache), name: UIApplication.didReceiveMemoryWarningNotification, object: nil)
     }
-    
+
     private func removeObservers() {
         NotificationCenter.default.removeObserver(self, name: UIApplication.didReceiveMemoryWarningNotification, object: nil)
     }

+ 21 - 17
deltachat-ios/MessageKit/Layout/MessagesCollectionViewFlowLayout.swift

@@ -163,6 +163,7 @@ open class MessagesCollectionViewFlowLayout: UICollectionViewFlowLayout {
         sizeCalculator.messageLabelFont = UIFont.systemFont(ofSize: sizeCalculator.messageLabelFont.pointSize * 2)
         return sizeCalculator
     }()
+    lazy open var photoTextMessageSizeCalculator = TextMediaMessageSizeCalculator(layout: self)
     lazy open var photoMessageSizeCalculator = MediaMessageSizeCalculator(layout: self)
     lazy open var videoMessageSizeCalculator = MediaMessageSizeCalculator(layout: self)
     lazy open var locationMessageSizeCalculator = LocationMessageSizeCalculator(layout: self)
@@ -189,6 +190,8 @@ open class MessagesCollectionViewFlowLayout: UICollectionViewFlowLayout {
             return emojiMessageSizeCalculator
         case .photo:
             return photoMessageSizeCalculator
+        case .photoText:
+            return photoTextMessageSizeCalculator
         case .video:
             return videoMessageSizeCalculator
         case .location:
@@ -206,22 +209,22 @@ open class MessagesCollectionViewFlowLayout: UICollectionViewFlowLayout {
         let calculator = cellSizeCalculatorForItem(at: indexPath)
         return calculator.sizeForItem(at: indexPath)
     }
-    
+
     /// Set `incomingAvatarSize` of all `MessageSizeCalculator`s
     public func setMessageIncomingAvatarSize(_ newSize: CGSize) {
         messageSizeCalculators().forEach { $0.incomingAvatarSize = newSize }
     }
-    
+
     /// Set `outgoingAvatarSize` of all `MessageSizeCalculator`s
     public func setMessageOutgoingAvatarSize(_ newSize: CGSize) {
         messageSizeCalculators().forEach { $0.outgoingAvatarSize = newSize }
     }
-    
+
     /// Set `incomingAvatarPosition` of all `MessageSizeCalculator`s
     public func setMessageIncomingAvatarPosition(_ newPosition: AvatarPosition) {
         messageSizeCalculators().forEach { $0.incomingAvatarPosition = newPosition }
     }
-    
+
     /// Set `outgoingAvatarPosition` of all `MessageSizeCalculator`s
     public func setMessageOutgoingAvatarPosition(_ newPosition: AvatarPosition) {
         messageSizeCalculators().forEach { $0.outgoingAvatarPosition = newPosition }
@@ -231,52 +234,52 @@ open class MessagesCollectionViewFlowLayout: UICollectionViewFlowLayout {
     public func setAvatarLeadingTrailingPadding(_ newPadding: CGFloat) {
         messageSizeCalculators().forEach { $0.avatarLeadingTrailingPadding = newPadding }
     }
-    
+
     /// Set `incomingMessagePadding` of all `MessageSizeCalculator`s
     public func setMessageIncomingMessagePadding(_ newPadding: UIEdgeInsets) {
         messageSizeCalculators().forEach { $0.incomingMessagePadding = newPadding }
     }
-    
+
     /// Set `outgoingMessagePadding` of all `MessageSizeCalculator`s
     public func setMessageOutgoingMessagePadding(_ newPadding: UIEdgeInsets) {
         messageSizeCalculators().forEach { $0.outgoingMessagePadding = newPadding }
     }
-    
+
     /// Set `incomingCellTopLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageIncomingCellTopLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.incomingCellTopLabelAlignment = newAlignment }
     }
-    
+
     /// Set `outgoingCellTopLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageOutgoingCellTopLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.outgoingCellTopLabelAlignment = newAlignment }
     }
-    
+
     /// Set `incomingCellBottomLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageIncomingCellBottomLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.incomingCellBottomLabelAlignment = newAlignment }
     }
-    
+
     /// Set `outgoingCellBottomLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageOutgoingCellBottomLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.outgoingCellBottomLabelAlignment = newAlignment }
     }
-    
+
     /// Set `incomingMessageTopLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageIncomingMessageTopLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.incomingMessageTopLabelAlignment = newAlignment }
     }
-    
+
     /// Set `outgoingMessageTopLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageOutgoingMessageTopLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.outgoingMessageTopLabelAlignment = newAlignment }
     }
-    
+
     /// Set `incomingMessageBottomLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageIncomingMessageBottomLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.incomingMessageBottomLabelAlignment = newAlignment }
     }
-    
+
     /// Set `outgoingMessageBottomLabelAlignment` of all `MessageSizeCalculator`s
     public func setMessageOutgoingMessageBottomLabelAlignment(_ newAlignment: LabelAlignment) {
         messageSizeCalculators().forEach { $0.outgoingMessageBottomLabelAlignment = newAlignment }
@@ -301,12 +304,12 @@ open class MessagesCollectionViewFlowLayout: UICollectionViewFlowLayout {
     public func setMessageOutgoingAccessoryViewPadding(_ newPadding: HorizontalEdgeInsets) {
         messageSizeCalculators().forEach { $0.outgoingAccessoryViewPadding = newPadding }
     }
-    
+
     /// Set `incomingAccessoryViewPosition` of all `MessageSizeCalculator`s
     public func setMessageIncomingAccessoryViewPosition(_ newPosition: AccessoryPosition) {
         messageSizeCalculators().forEach { $0.incomingAccessoryViewPosition = newPosition }
     }
-    
+
     /// Set `outgoingAccessoryViewPosition` of all `MessageSizeCalculator`s
     public func setMessageOutgoingAccessoryViewPosition(_ newPosition: AccessoryPosition) {
         messageSizeCalculators().forEach { $0.outgoingAccessoryViewPosition = newPosition }
@@ -317,6 +320,7 @@ open class MessagesCollectionViewFlowLayout: UICollectionViewFlowLayout {
         return [textMessageSizeCalculator,
                 attributedTextMessageSizeCalculator,
                 emojiMessageSizeCalculator,
+                photoTextMessageSizeCalculator,
                 photoMessageSizeCalculator,
                 videoMessageSizeCalculator,
                 locationMessageSizeCalculator,
@@ -324,5 +328,5 @@ open class MessagesCollectionViewFlowLayout: UICollectionViewFlowLayout {
                 contactMessageSizeCalculator
         ]
     }
-    
+
 }

+ 108 - 0
deltachat-ios/MessageKit/Layout/TextMediaMessageSizeCalculator.swift

@@ -0,0 +1,108 @@
+/*
+ MIT License
+
+ Copyright (c) 2017-2019 MessageKit
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ */
+
+import Foundation
+import UIKit
+
+open class TextMediaMessageSizeCalculator: MessageSizeCalculator {
+
+    public var incomingMessageLabelInsets = UIEdgeInsets(top: TextMediaMessageCell.insetTop,
+                                                         left: TextMediaMessageCell.insetHorizontalBig,
+                                                         bottom: TextMediaMessageCell.insetBottom,
+                                                         right: TextMediaMessageCell.insetHorizontalSmall)
+    public var outgoingMessageLabelInsets = UIEdgeInsets(top: TextMediaMessageCell.insetTop,
+                                                         left: TextMediaMessageCell.insetHorizontalSmall,
+                                                         bottom: TextMediaMessageCell.insetBottom,
+                                                         right: TextMediaMessageCell.insetHorizontalBig)
+
+    public var messageLabelFont = UIFont.preferredFont(forTextStyle: .body)
+
+    internal func messageLabelInsets(for message: MessageType) -> UIEdgeInsets {
+        let dataSource = messagesLayout.messagesDataSource
+        let isFromCurrentSender = dataSource.isFromCurrentSender(message: message)
+        return isFromCurrentSender ? outgoingMessageLabelInsets : incomingMessageLabelInsets
+    }
+
+    open override func messageContainerMaxWidth(for message: MessageType) -> CGFloat {
+        let maxWidth = super.messageContainerMaxWidth(for: message)
+        return maxWidth - incomingMessageLabelInsets.left - incomingMessageLabelInsets.right
+    }
+
+    open override func messageContainerSize(for message: MessageType) -> CGSize {
+        let maxWidth = messageContainerMaxWidth(for: message)
+        let sizeForMediaItem = { (maxWidth: CGFloat, item: MediaItem) -> CGSize in
+            var imageHeight = item.size.height
+            var itemWidth = item.size.width
+
+            if maxWidth < item.size.width {
+                // Maintain the ratio if width is too great
+                imageHeight = maxWidth * item.size.height / item.size.width
+                itemWidth = maxWidth
+            }
+
+            var messageContainerSize = CGSize(width: itemWidth, height: imageHeight)
+            switch message.kind {
+            case .photoText(let mediaItem):
+                if let text = mediaItem.text {
+                    let textHeight = text.height(withConstrainedWidth: maxWidth)
+                    //let messageInsets = self.messageLabelInsets(for: message)
+                    messageContainerSize.height += textHeight
+                    //messageContainerSize.height += messageInsets.vertical
+                }
+                return messageContainerSize
+            default:
+                return messageContainerSize
+            }
+        }
+
+        switch message.kind {
+        case .photoText(let item):
+            return sizeForMediaItem(maxWidth, item)
+        default:
+            fatalError("messageContainerSize received unhandled MessageDataType: \(message.kind)")
+        }
+    }
+
+    open override func configure(attributes: UICollectionViewLayoutAttributes) {
+        super.configure(attributes: attributes)
+        guard let attributes = attributes as? MessagesCollectionViewLayoutAttributes else { return }
+
+        let dataSource = messagesLayout.messagesDataSource
+        let indexPath = attributes.indexPath
+        let message = dataSource.messageForItem(at: indexPath, in: messagesLayout.messagesCollectionView)
+
+        switch message.kind {
+        case .photoText(let textMediaItem):
+            attributes.messageLabelInsets = messageLabelInsets(for: message)
+            attributes.messageLabelFont = messageLabelFont
+            guard !textMediaItem.text!.string.isEmpty else { return }
+            guard let font = textMediaItem.text!.attribute(.font, at: 0, effectiveRange: nil) as? UIFont else { return }
+            attributes.messageLabelFont = font
+        default:
+            break
+        }
+    }
+
+
+}

+ 4 - 1
deltachat-ios/MessageKit/Models/MessageKind.swift

@@ -35,13 +35,16 @@ public enum MessageKind {
     /// Using `MessageKind.attributedText(NSAttributedString)` doesn't require you
     /// to set this property and results in higher performance.
     case text(String)
-    
+
     /// A message with attributed text.
     case attributedText(NSAttributedString)
 
     /// A photo message.
     case photo(MediaItem)
 
+    /// A photo message with a textual description
+    case photoText(MediaItem)
+
     /// A video message.
     case video(MediaItem)
 

+ 2 - 0
deltachat-ios/MessageKit/Protocols/MediaItem.swift

@@ -40,4 +40,6 @@ public protocol MediaItem {
     /// The size of the media item.
     var size: CGSize { get }
 
+    var text: NSAttributedString? { get }
+
 }

+ 122 - 0
deltachat-ios/MessageKit/Views/Cells/TextMediaMessageCell.swift

@@ -0,0 +1,122 @@
+import UIKit
+
+// A subclass of `MessageContentCell` used to display mixed media messages.
+open class TextMediaMessageCell: MessageContentCell {
+
+    public static let insetTop: CGFloat = 12
+    public static let insetBottom: CGFloat = 12
+    public static let insetHorizontalBig: CGFloat = 23
+    public static let insetHorizontalSmall: CGFloat = 12
+
+
+    // MARK: - Properties
+    /// The `MessageCellDelegate` for the cell.
+    open override weak var delegate: MessageCellDelegate? {
+        didSet {
+            messageLabel.delegate = delegate
+        }
+    }
+
+    /// The label used to display the message's text.
+    open var messageLabel = MessageLabel()
+
+    /// The image view display the media content.
+    open var imageView: UIImageView = {
+        let imageView = UIImageView()
+        imageView.contentMode = .scaleAspectFill
+        imageView.translatesAutoresizingMaskIntoConstraints = false
+        return imageView
+    }()
+
+    // MARK: - Methods
+
+    open override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
+        super.apply(layoutAttributes)
+        if let attributes = layoutAttributes as? MessagesCollectionViewLayoutAttributes {
+            messageLabel.textInsets = attributes.messageLabelInsets
+            messageLabel.messageLabelFont = attributes.messageLabelFont
+        }
+    }
+
+    func getMessageLabelHeight() -> CGFloat {
+        if let text = messageLabel.attributedText {
+            let height = (text.height(withConstrainedWidth:
+                messageContainerView.frame.width -
+                    TextMediaMessageCell.insetHorizontalSmall -
+                    TextMediaMessageCell.insetHorizontalBig))
+            print("height for message label: ", height)
+            return height + TextMediaMessageCell.insetBottom + TextMediaMessageCell.insetTop
+        }
+        return 0
+    }
+
+    /// Responsible for setting up the constraints of the cell's subviews.
+    open func setupConstraints() {
+        messageContainerView.removeConstraints(messageContainerView.constraints)
+        let imageViewHeight = messageContainerView.frame.height - getMessageLabelHeight()
+
+        let imageViewConstraints = [imageView.constraintCenterXTo(messageContainerView),
+                                    imageView.constraintAlignLeadingTo(messageContainerView),
+                                    imageView.constraintAlignTrailingTo(messageContainerView),
+                                    imageView.constraintAlignTopTo(messageContainerView),
+                                    imageView.heightAnchor.constraint(equalToConstant: imageViewHeight)
+                                    ]
+
+        messageContainerView.addConstraints(imageViewConstraints)
+        messageLabel.frame = CGRect(x: 0,
+                                    y: messageContainerView.frame.height - getMessageLabelHeight(),
+                                    width: messageContainerView.frame.width,
+                                    height: getMessageLabelHeight())
+    }
+
+    open override func prepareForReuse() {
+        super.prepareForReuse()
+        self.imageView.image = nil
+        self.messageLabel.attributedText = nil
+        self.messageLabel.text = nil
+    }
+
+    open override func setupSubviews() {
+        super.setupSubviews()
+        messageContainerView.addSubview(imageView)
+        messageContainerView.addSubview(messageLabel)
+    }
+
+    open override func configure(with message: MessageType, at indexPath: IndexPath, and messagesCollectionView: MessagesCollectionView) {
+        super.configure(with: message, at: indexPath, and: messagesCollectionView)
+
+        guard let displayDelegate = messagesCollectionView.messagesDisplayDelegate else {
+            fatalError(MessageKitError.nilMessagesDisplayDelegate)
+        }
+
+        let enabledDetectors = displayDelegate.enabledDetectors(for: message, at: indexPath, in: messagesCollectionView)
+
+
+        switch message.kind {
+        case .photoText(let mediaItem):
+            imageView.image = mediaItem.image ?? mediaItem.placeholderImage
+
+            messageLabel.configure {
+               messageLabel.enabledDetectors = enabledDetectors
+               for detector in enabledDetectors {
+                   let attributes = displayDelegate.detectorAttributes(for: detector, and: message, at: indexPath)
+                   messageLabel.setAttributes(attributes, detector: detector)
+               }
+                messageLabel.attributedText = mediaItem.text
+            }
+
+            setupConstraints()
+        default:
+            fatalError("Unexpected message kind in TextMediaMessageCell")
+        }
+
+        displayDelegate.configureMediaMessageImageView(imageView, for: message, at: indexPath, in: messagesCollectionView)
+    }
+
+      /// Used to handle the cell's contentView's tap gesture.
+      /// Return false when the contentView does not need to handle the gesture.
+      open override func cellContentView(canHandle touchPoint: CGPoint) -> Bool {
+          return messageLabel.handleGesture(touchPoint)
+      }
+
+}

+ 1 - 0
deltachat-ios/MessageKit/Views/MessagesCollectionView.swift

@@ -75,6 +75,7 @@ open class MessagesCollectionView: UICollectionView {
     private func registerReusableViews() {
         register(TextMessageCell.self)
         register(MediaMessageCell.self)
+        register(TextMediaMessageCell.self)
         register(LocationMessageCell.self)
         register(AudioMessageCell.self)
         register(ContactMessageCell.self)

+ 4 - 1
deltachat-ios/Model/Media.swift

@@ -9,6 +9,8 @@ struct Media: MediaItem {
 
     var placeholderImage: UIImage = UIImage(named: "ic_attach_file_36pt")!
 
+    var text: NSAttributedString?
+
     var size: CGSize {
         if let image = image {
             return image.size
@@ -17,8 +19,9 @@ struct Media: MediaItem {
         }
     }
 
-    init(url: URL? = nil, image: UIImage? = nil) {
+    init(url: URL? = nil, image: UIImage? = nil, text: NSAttributedString? = nil) {
         self.url = url
         self.image = image
+        self.text = text
     }
 }