From 82e8dd991ae29ae5c77f519f011446a249b3ed2a Mon Sep 17 00:00:00 2001 From: mrtuxa Date: Thu, 24 Nov 2022 01:29:43 +0100 Subject: [PATCH] Init --- README.md | 3 +- Training.xcodeproj/project.pbxproj | 351 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ .../Colors/Background.colorset/Contents.json | 38 ++ Training/Assets.xcassets/Colors/Contents.json | 6 + .../Colors/Icon.colorset/Contents.json | 38 ++ .../Colors/Text.colorset/Contents.json | 38 ++ Training/Assets.xcassets/Contents.json | 6 + .../Unbenannt-1.imageset/Contents.json | 21 ++ .../Unbenannt-1.imageset/Unbenannt-1.jpeg | Bin 0 -> 29380 bytes .../mrtuxa.imageset/Contents.json | 21 ++ .../mrtuxa.imageset/mrtuxa.png | Bin 0 -> 87195 bytes Training/ChatModel.swift | 61 +++ Training/ChatRow.swift | 60 +++ Training/ChatView.swift | 177 +++++++++ Training/ChatsViewModel.swift | 69 ++++ Training/ContentView.swift | 69 ++++ Training/Date+Helpers.swift | 40 ++ .../Preview Assets.xcassets/Contents.json | 6 + Training/TrainingApp.swift | 18 + 23 files changed, 1144 insertions(+), 2 deletions(-) create mode 100644 Training.xcodeproj/project.pbxproj create mode 100644 Training.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Training.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Training/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Training/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Training/Assets.xcassets/Colors/Background.colorset/Contents.json create mode 100644 Training/Assets.xcassets/Colors/Contents.json create mode 100644 Training/Assets.xcassets/Colors/Icon.colorset/Contents.json create mode 100644 Training/Assets.xcassets/Colors/Text.colorset/Contents.json create mode 100644 Training/Assets.xcassets/Contents.json create mode 100644 Training/Assets.xcassets/Unbenannt-1.imageset/Contents.json create mode 100644 Training/Assets.xcassets/Unbenannt-1.imageset/Unbenannt-1.jpeg create mode 100644 Training/Assets.xcassets/mrtuxa.imageset/Contents.json create mode 100644 Training/Assets.xcassets/mrtuxa.imageset/mrtuxa.png create mode 100644 Training/ChatModel.swift create mode 100644 Training/ChatRow.swift create mode 100644 Training/ChatView.swift create mode 100644 Training/ChatsViewModel.swift create mode 100644 Training/ContentView.swift create mode 100644 Training/Date+Helpers.swift create mode 100644 Training/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Training/TrainingApp.swift diff --git a/README.md b/README.md index 36f016c..1828c9a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1 @@ -# iMessageClone - +# iMessage Clone written in Swift diff --git a/Training.xcodeproj/project.pbxproj b/Training.xcodeproj/project.pbxproj new file mode 100644 index 0000000..857abe9 --- /dev/null +++ b/Training.xcodeproj/project.pbxproj @@ -0,0 +1,351 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 193322BA28BABE4C00ECECB0 /* ChatModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 193322B928BABE4C00ECECB0 /* ChatModel.swift */; }; + 193322BC28BAC60900ECECB0 /* Date+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 193322BB28BAC60900ECECB0 /* Date+Helpers.swift */; }; + 193322C028BAC92F00ECECB0 /* ChatsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 193322BF28BAC92F00ECECB0 /* ChatsViewModel.swift */; }; + 193322C228BACCDA00ECECB0 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 193322C128BACCDA00ECECB0 /* ChatView.swift */; }; + C07D316878F6AA0353D447AC /* ChatRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07D3D7C6B2D53FDE2D935E0 /* ChatRow.swift */; }; + C07D3754C665BEFBB6512D42 /* .gitignore in Resources */ = {isa = PBXBuildFile; fileRef = C07D3595FE6195CC1E0EF874 /* .gitignore */; }; + C07D39C9FDC07D92EA4484E8 /* TrainingApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07D3FD47910198196A071C6 /* TrainingApp.swift */; }; + C07D3B52F9476D6CBBDA9F86 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07D39E44D0D6D8CEE7B119B /* ContentView.swift */; }; + C07D3CE7CD14489A53B34593 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C07D3AC94044DC0078A9C96B /* Preview Assets.xcassets */; }; + C07D3EC1DF66197FCF10B04A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C07D323607E19080E00F500C /* Assets.xcassets */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 193322B928BABE4C00ECECB0 /* ChatModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatModel.swift; sourceTree = ""; }; + 193322BB28BAC60900ECECB0 /* Date+Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+Helpers.swift"; sourceTree = ""; }; + 193322BF28BAC92F00ECECB0 /* ChatsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatsViewModel.swift; sourceTree = ""; }; + 193322C128BACCDA00ECECB0 /* ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = ""; }; + C07D306AC5D69BF90D6B7837 /* Training.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Training.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C07D323607E19080E00F500C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + C07D3595FE6195CC1E0EF874 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = file.gitignore; path = .gitignore; sourceTree = ""; }; + C07D39E44D0D6D8CEE7B119B /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + C07D3AC94044DC0078A9C96B /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + C07D3D7C6B2D53FDE2D935E0 /* ChatRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatRow.swift; sourceTree = ""; }; + C07D3FD47910198196A071C6 /* TrainingApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingApp.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + C07D35D9F1DE858A42F9EA17 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + C07D31B1964ABAA1A810E3AF /* Training */ = { + isa = PBXGroup; + children = ( + C07D323607E19080E00F500C /* Assets.xcassets */, + C07D3D1BECC205B3E5399B3A /* Preview Content */, + C07D3FD47910198196A071C6 /* TrainingApp.swift */, + C07D39E44D0D6D8CEE7B119B /* ContentView.swift */, + C07D3D7C6B2D53FDE2D935E0 /* ChatRow.swift */, + 193322B928BABE4C00ECECB0 /* ChatModel.swift */, + 193322BB28BAC60900ECECB0 /* Date+Helpers.swift */, + 193322BF28BAC92F00ECECB0 /* ChatsViewModel.swift */, + 193322C128BACCDA00ECECB0 /* ChatView.swift */, + ); + path = Training; + sourceTree = ""; + }; + C07D371AFE61FD792BFD1B66 /* Products */ = { + isa = PBXGroup; + children = ( + C07D306AC5D69BF90D6B7837 /* Training.app */, + ); + name = Products; + sourceTree = ""; + }; + C07D39A49118DB20FD6FC2F6 = { + isa = PBXGroup; + children = ( + C07D371AFE61FD792BFD1B66 /* Products */, + C07D31B1964ABAA1A810E3AF /* Training */, + C07D3595FE6195CC1E0EF874 /* .gitignore */, + ); + sourceTree = ""; + }; + C07D3D1BECC205B3E5399B3A /* Preview Content */ = { + isa = PBXGroup; + children = ( + C07D3AC94044DC0078A9C96B /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + C07D358237A92B11CC514E20 /* Training */ = { + isa = PBXNativeTarget; + buildConfigurationList = C07D3105791B837A22B25329 /* Build configuration list for PBXNativeTarget "Training" */; + buildPhases = ( + C07D3E323FBC052ED49F708A /* Sources */, + C07D35D9F1DE858A42F9EA17 /* Frameworks */, + C07D3697D5A54CFD2B988BB1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Training; + productName = Training; + productReference = C07D306AC5D69BF90D6B7837 /* Training.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + C07D3850411372B23AADAF30 /* Project object */ = { + isa = PBXProject; + attributes = { + }; + buildConfigurationList = C07D319DD8CBD07A95D69AAC /* Build configuration list for PBXProject "Training" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + ); + mainGroup = C07D39A49118DB20FD6FC2F6; + productRefGroup = C07D371AFE61FD792BFD1B66 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + C07D358237A92B11CC514E20 /* Training */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + C07D3697D5A54CFD2B988BB1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C07D3EC1DF66197FCF10B04A /* Assets.xcassets in Resources */, + C07D3CE7CD14489A53B34593 /* Preview Assets.xcassets in Resources */, + C07D3754C665BEFBB6512D42 /* .gitignore in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + C07D3E323FBC052ED49F708A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 193322C028BAC92F00ECECB0 /* ChatsViewModel.swift in Sources */, + C07D39C9FDC07D92EA4484E8 /* TrainingApp.swift in Sources */, + C07D3B52F9476D6CBBDA9F86 /* ContentView.swift in Sources */, + C07D316878F6AA0353D447AC /* ChatRow.swift in Sources */, + 193322C228BACCDA00ECECB0 /* ChatView.swift in Sources */, + 193322BA28BABE4C00ECECB0 /* ChatModel.swift in Sources */, + 193322BC28BAC60900ECECB0 /* Date+Helpers.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + C07D3289C94B96864CE471AD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Training/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = mrtuxa.Training; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C07D35A68F4E4FB5617ECC75 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + C07D36637BD8CF8F50D1DF55 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Training/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = mrtuxa.Training; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + C07D3EBF265CF8C9E4BBA01B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C07D3105791B837A22B25329 /* Build configuration list for PBXNativeTarget "Training" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C07D3289C94B96864CE471AD /* Debug */, + C07D36637BD8CF8F50D1DF55 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C07D319DD8CBD07A95D69AAC /* Build configuration list for PBXProject "Training" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C07D35A68F4E4FB5617ECC75 /* Debug */, + C07D3EBF265CF8C9E4BBA01B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = C07D3850411372B23AADAF30 /* Project object */; +} diff --git a/Training.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Training.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Training.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Training.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Training.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Training.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Training/Assets.xcassets/AccentColor.colorset/Contents.json b/Training/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..0afb3cf --- /dev/null +++ b/Training/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors": [ + { + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/AppIcon.appiconset/Contents.json b/Training/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..faeb2bb --- /dev/null +++ b/Training/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images": [ + { + "idiom": "iphone", + "scale": "2x", + "size": "20x20" + }, + { + "idiom": "iphone", + "scale": "3x", + "size": "20x20" + }, + { + "idiom": "iphone", + "scale": "2x", + "size": "29x29" + }, + { + "idiom": "iphone", + "scale": "3x", + "size": "29x29" + }, + { + "idiom": "iphone", + "scale": "2x", + "size": "40x40" + }, + { + "idiom": "iphone", + "scale": "3x", + "size": "40x40" + }, + { + "idiom": "iphone", + "scale": "2x", + "size": "60x60" + }, + { + "idiom": "iphone", + "scale": "3x", + "size": "60x60" + }, + { + "idiom": "ipad", + "scale": "1x", + "size": "20x20" + }, + { + "idiom": "ipad", + "scale": "2x", + "size": "20x20" + }, + { + "idiom": "ipad", + "scale": "1x", + "size": "29x29" + }, + { + "idiom": "ipad", + "scale": "2x", + "size": "29x29" + }, + { + "idiom": "ipad", + "scale": "1x", + "size": "40x40" + }, + { + "idiom": "ipad", + "scale": "2x", + "size": "40x40" + }, + { + "idiom": "ipad", + "scale": "1x", + "size": "76x76" + }, + { + "idiom": "ipad", + "scale": "2x", + "size": "76x76" + }, + { + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" + }, + { + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/Colors/Background.colorset/Contents.json b/Training/Assets.xcassets/Colors/Background.colorset/Contents.json new file mode 100644 index 0000000..ca5ba7c --- /dev/null +++ b/Training/Assets.xcassets/Colors/Background.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors": [ + { + "color": { + "color-space": "srgb", + "components": { + "alpha": "1.000", + "blue": "1.000", + "green": "1.000", + "red": "1.000" + } + }, + "idiom": "universal" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "color": { + "color-space": "srgb", + "components": { + "alpha": "1.000", + "blue": "1.000", + "green": "1.000", + "red": "1.000" + } + }, + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/Colors/Contents.json b/Training/Assets.xcassets/Colors/Contents.json new file mode 100644 index 0000000..74d6a72 --- /dev/null +++ b/Training/Assets.xcassets/Colors/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/Colors/Icon.colorset/Contents.json b/Training/Assets.xcassets/Colors/Icon.colorset/Contents.json new file mode 100644 index 0000000..ca5ba7c --- /dev/null +++ b/Training/Assets.xcassets/Colors/Icon.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors": [ + { + "color": { + "color-space": "srgb", + "components": { + "alpha": "1.000", + "blue": "1.000", + "green": "1.000", + "red": "1.000" + } + }, + "idiom": "universal" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "color": { + "color-space": "srgb", + "components": { + "alpha": "1.000", + "blue": "1.000", + "green": "1.000", + "red": "1.000" + } + }, + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/Colors/Text.colorset/Contents.json b/Training/Assets.xcassets/Colors/Text.colorset/Contents.json new file mode 100644 index 0000000..ca5ba7c --- /dev/null +++ b/Training/Assets.xcassets/Colors/Text.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors": [ + { + "color": { + "color-space": "srgb", + "components": { + "alpha": "1.000", + "blue": "1.000", + "green": "1.000", + "red": "1.000" + } + }, + "idiom": "universal" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "color": { + "color-space": "srgb", + "components": { + "alpha": "1.000", + "blue": "1.000", + "green": "1.000", + "red": "1.000" + } + }, + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/Contents.json b/Training/Assets.xcassets/Contents.json new file mode 100644 index 0000000..74d6a72 --- /dev/null +++ b/Training/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/Unbenannt-1.imageset/Contents.json b/Training/Assets.xcassets/Unbenannt-1.imageset/Contents.json new file mode 100644 index 0000000..67b83bc --- /dev/null +++ b/Training/Assets.xcassets/Unbenannt-1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images": [ + { + "filename": "Unbenannt-1.jpeg", + "idiom": "universal", + "scale": "1x" + }, + { + "idiom": "universal", + "scale": "2x" + }, + { + "idiom": "universal", + "scale": "3x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/Unbenannt-1.imageset/Unbenannt-1.jpeg b/Training/Assets.xcassets/Unbenannt-1.imageset/Unbenannt-1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ac498a88d8e66123f9762475beb5cbbdd832e8e6 GIT binary patch literal 29380 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 Y(Y^2W|H*6bv)KMmuJ`Z$@3-y$1vx#8z5oCK literal 0 HcmV?d00001 diff --git a/Training/Assets.xcassets/mrtuxa.imageset/Contents.json b/Training/Assets.xcassets/mrtuxa.imageset/Contents.json new file mode 100644 index 0000000..3a3bb2a --- /dev/null +++ b/Training/Assets.xcassets/mrtuxa.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images": [ + { + "filename": "mrtuxa.png", + "idiom": "universal", + "scale": "1x" + }, + { + "idiom": "universal", + "scale": "2x" + }, + { + "idiom": "universal", + "scale": "3x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/Assets.xcassets/mrtuxa.imageset/mrtuxa.png b/Training/Assets.xcassets/mrtuxa.imageset/mrtuxa.png new file mode 100644 index 0000000000000000000000000000000000000000..899d2df9e9d8af0d518f0dc4ec7d7e8920e1d995 GIT binary patch literal 87195 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 a0RR6RFY5hXwg(je0000 String { + let date = Date() + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "dd.MM.yyyy" + return dateFormatter.string(from: date) +} diff --git a/Training/ChatView.swift b/Training/ChatView.swift new file mode 100644 index 0000000..738a264 --- /dev/null +++ b/Training/ChatView.swift @@ -0,0 +1,177 @@ +// +// ChatView.swift +// Training +// +// Created by mrtuxa on 28.08.22. +// + +import SwiftUI + + +struct ChatView: View { + + @EnvironmentObject var viewModel: ChatsViewModel + let chat: Chat + + @State private var text = "" + @FocusState private var isFocused + + @State private var messageIDToScroll: UUID? + + var navBarLeadingBtn: some View { + Button(action: {}) { + HStack { + Image(chat.person.imgString) + .resizable() + .frame(width: 40, height: 40) + .clipShape(Circle()) + + Text(chat.person.name).bold() + }.foregroundColor(.black) + } + } + + var navBarTrailingBtn: some View { + HStack { + Button(action: {}) { + Image(systemName: "video") + } + Button(action: {}) { + Image(systemName: "phone") + } + } + } + + var body: some View { + VStack { + GeometryReader { reader in + ScrollView { + ScrollViewReader { scrollReader in + getMessageView(viewWidth: reader.size.width) + .padding(.horizontal) + .onChange(of: messageIDToScroll) { _ in + if let messageID = messageIDToScroll { + scrollTo(messageID: messageID, shouldAnimate: true, scrollReader: scrollReader) + } + } + .onAppear { + if let messageID = chat.messages.last?.id { + scrollTo(messageID: messageID, anchor: .bottom, shouldAnimate: false, scrollReader: scrollReader) + } + } + } + + } + } + .padding(.bottom, 5) + + toolbarView() + } + .padding(.top, 1) + .navigationBarTitleDisplayMode(.inline) + .navigationBarItems(leading: navBarLeadingBtn, trailing: navBarTrailingBtn) + .onAppear { + viewModel.markAsUnread(false, chat: chat) + } + } + + + + func scrollTo(messageID: UUID, anchor: UnitPoint? = nil, shouldAnimate: Bool, scrollReader: ScrollViewProxy) { + DispatchQueue.main.async { + withAnimation(shouldAnimate ? Animation.easeIn : nil) { + scrollReader.scrollTo(messageID, anchor: anchor) + } + } + } + + + func toolbarView() -> some View { + VStack { + let height: CGFloat = 37 + HStack { + TextField("Message ...", text: $text) + .padding(.horizontal, 10) + .frame(height: height) + .background(Color(UIColor.lightGray)) + .clipShape(RoundedRectangle(cornerRadius: 13)) + .focused($isFocused) + + Button(action: sendMessage) { + Image(systemName: "paperplane.fill") + .foregroundColor(.white) + .frame(width: height, height: height) + .background( + Circle() + .foregroundColor(text.isEmpty ? .blue : .green) + ) + }.disabled(text.isEmpty) + }.frame(height: height) + } + .padding(.vertical) + .padding(.horizontal) + .background(.thickMaterial) + } + + func sendMessage() { + if let message = viewModel.sendMessage(text, in: chat) { + text = "" + messageIDToScroll = message.id + } + } + + + let columns = [GridItem(.flexible(minimum: 10))] + + func getMessageView(viewWidth: CGFloat) -> some View { + LazyVGrid(columns: columns, spacing: 0, pinnedViews: [.sectionHeaders]) { + let sectionMessages = viewModel.getSectionMessages(for: chat) + ForEach(sectionMessages.indices, id: \.self) { sectionIndex in + let messages = sectionMessages[sectionIndex] + Section(header: sectionHeader(firstMessage: messages.first!)) { + ForEach(messages) { message in + let isReceived = message.type == .Received + HStack { + ZStack { + Text(message.text) + .padding(.horizontal) + .padding(.vertical, 12) + .background(isReceived ? Color.black.opacity(0.2) : .green.opacity(0.9)) + .cornerRadius(13) + } + .background(Color.blue) + .padding(.vertical) + .frame(width: viewWidth * 0.7, alignment: isReceived ? .leading : .trailing) + + } + .frame(maxWidth: .infinity, alignment: isReceived ? .leading : .trailing) + .id(message.id) // important for automatic scrolling later! + } + } + } + } + } + + func sectionHeader(firstMessage message: Message) -> some View { + ZStack { + Text(message.date.descriptiveString(dateStyle: .medium)) + .foregroundColor(.white) + .font(.system(size: 14, weight: .regular)) + .frame(width: 120) + .padding(.vertical, 5) + .background(Capsule().foregroundColor(.cyan)) + } + .padding(.vertical, 5) + .frame(maxWidth: .infinity) + } +} + + +struct ChatView_Previews: PreviewProvider { + static var previews: some View { + NavigationView { + ChatView(chat: Chat.sampleChat[0]) + .environmentObject(ChatsViewModel()) + } + } +} diff --git a/Training/ChatsViewModel.swift b/Training/ChatsViewModel.swift new file mode 100644 index 0000000..cb26ae6 --- /dev/null +++ b/Training/ChatsViewModel.swift @@ -0,0 +1,69 @@ +// +// ChatsViewModel.swift +// Training +// +// Created by mrtuxa on 27.08.22. +// + +import Foundation + + +class ChatsViewModel: ObservableObject { + + @Published var chats = Chat.sampleChat + + func getSortedFilteredChats(query: String) -> [Chat] { + let sortedChats = chats.sorted { + guard let date1 = $0.messages.last?.date else { + return false + } + guard let date2 = $1.messages.last?.date else { + return false + } + return date1 > date2 + } + + if query == "" { + return sortedChats + } + return sortedChats.filter { + $0.person.name.lowercased().contains(query.lowercased()) + } + } + + func getSectionMessages(for chat: Chat) -> [[Message]] { + var res = [[Message]]() + var tmp = [Message]() + for message in chat.messages { + if let firstMessage = tmp.first { + let daysBetween = firstMessage.date.daysBetween(date: message.date) + if daysBetween >= 1 { + res.append(tmp) + tmp.removeAll() + tmp.append(message) + } else { + tmp.append(message) + } + } else { + tmp.append(message) + } + } + res.append(tmp) + return res + } + + func markAsUnread(_ newValue: Bool, chat: Chat) { + if let index = chat.messages.firstIndex(where: { $0.id == chat.id }) { + chats[index].hasUnreadMessage = newValue + } + } + + func sendMessage(_ text: String, in chat: Chat) -> Message? { + if let index = chats.firstIndex { $0.id == chat.id } { + let message = Message(text, type: .Sent) + chats[index].messages.append(message) + return message + } + return nil + } +} diff --git a/Training/ContentView.swift b/Training/ContentView.swift new file mode 100644 index 0000000..20c91d7 --- /dev/null +++ b/Training/ContentView.swift @@ -0,0 +1,69 @@ +// +// ContentView.swift +// Training +// +// Created by mrtuxa on 27.08.22. +// +// + +import SwiftUI + + +struct ContentView: View { + + @StateObject var viewModel = ChatsViewModel() + + @State private var query = "" + + + + var body: some View { + NavigationView { + List { + ForEach(viewModel.getSortedFilteredChats(query: query)) { chat in + + ZStack { + + ChatRow(chat: chat) + + NavigationLink(destination: { + ChatView(chat: chat) + .environmentObject(viewModel) + }) { + EmptyView() + } + .buttonStyle(PlainButtonStyle()) + .frame(width: 0) + .opacity(0) + } + .swipeActions(edge: .leading, allowsFullSwipe: true) { + Button(action: { + viewModel.markAsUnread(!chat.hasUnreadMessage, chat: chat) + }) { + if chat.hasUnreadMessage { + Label("Read", systemImage: "text.bubble") + } else { + Label("Unread", systemImage: "circle.fill") + } + } + .tint(.blue) + } + } + } + .listStyle(PlainListStyle()) + .searchable(text: $query) + .navigationTitle("Chats") + .navigationBarItems(trailing: Button(action: {}) { + Image(systemName: "square.and.pencil") + }) + } + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} + + diff --git a/Training/Date+Helpers.swift b/Training/Date+Helpers.swift new file mode 100644 index 0000000..e103fa8 --- /dev/null +++ b/Training/Date+Helpers.swift @@ -0,0 +1,40 @@ +// +// Date+Helpers.swift +// Training +// +// Created by mrtuxa on 27.08.22. +// + +import Foundation + +extension Date { + + func descriptiveString(dateStyle: DateFormatter.Style = .short) -> String { + + let formatter = DateFormatter() + formatter.dateStyle = dateStyle + + let daysBetween = self.daysBetween(date: Date()) + + if daysBetween == 0 { + return "Today" + } else if daysBetween == 1 { + return "Yesterday" + } else if daysBetween < 5 { + let weekdayIndex = Calendar.current.component(.weekday, from: self) - 1 + return formatter.weekdaySymbols[weekdayIndex] + } + return formatter.string(from: self) + } + + func daysBetween(date: Date) -> Int { + let calendar = Calendar.current + let date1 = calendar.startOfDay(for: self) + let date2 = calendar.startOfDay(for: date) + if let daysBetween = calendar.dateComponents([.day], from: date1, to: date2).day { + return daysBetween + } + return 0 + } + +} diff --git a/Training/Preview Content/Preview Assets.xcassets/Contents.json b/Training/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..74d6a72 --- /dev/null +++ b/Training/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Training/TrainingApp.swift b/Training/TrainingApp.swift new file mode 100644 index 0000000..76c4e03 --- /dev/null +++ b/Training/TrainingApp.swift @@ -0,0 +1,18 @@ +// +// TrainingApp.swift +// Training +// +// Created by mrtuxa on 27.08.22. +// +// + +import SwiftUI + +@main +struct TrainingApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +}