From 7aa8fab7f5c96a0666916cef8bdc1054144ad821 Mon Sep 17 00:00:00 2001 From: aminecmi Date: Thu, 11 Jul 2024 12:38:11 +0200 Subject: [PATCH] Initial Commit --- .gitignore | 131 ++++++ Screaming Reminder.xcodeproj/project.pbxproj | 406 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcschemes/Screaming Reminder.xcscheme | 78 ++++ .../xcschemes/xcschememanagement.plist | 22 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 14 + .../AppIcon.appiconset/Frame 1(1).png | Bin 0 -> 102866 bytes .../Assets.xcassets/Contents.json | 6 + Screaming Reminder/Models/Extensions.swift | 33 ++ Screaming Reminder/Models/Notification.swift | 35 ++ Screaming Reminder/Models/Reminder.swift | 33 ++ .../Preview Assets.xcassets/Contents.json | 6 + .../Screaming_ReminderApp.swift | 64 +++ .../Utils/NotificationDelegate.swift | 44 ++ .../Utils/NotificationsUtils.swift | 35 ++ Screaming Reminder/Views/ContentView.swift | 90 ++++ Screaming Reminder/Views/SheetView.swift | 96 +++++ TODO.md | 8 + 20 files changed, 1127 insertions(+) create mode 100644 .gitignore create mode 100644 Screaming Reminder.xcodeproj/project.pbxproj create mode 100644 Screaming Reminder.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Screaming Reminder.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Screaming Reminder.xcodeproj/xcshareddata/xcschemes/Screaming Reminder.xcscheme create mode 100644 Screaming Reminder.xcodeproj/xcuserdata/amine.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Screaming Reminder/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Screaming Reminder/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Screaming Reminder/Assets.xcassets/AppIcon.appiconset/Frame 1(1).png create mode 100644 Screaming Reminder/Assets.xcassets/Contents.json create mode 100644 Screaming Reminder/Models/Extensions.swift create mode 100644 Screaming Reminder/Models/Notification.swift create mode 100644 Screaming Reminder/Models/Reminder.swift create mode 100644 Screaming Reminder/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Screaming Reminder/Screaming_ReminderApp.swift create mode 100644 Screaming Reminder/Utils/NotificationDelegate.swift create mode 100644 Screaming Reminder/Utils/NotificationsUtils.swift create mode 100644 Screaming Reminder/Views/ContentView.swift create mode 100644 Screaming Reminder/Views/SheetView.swift create mode 100644 TODO.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f6e847 --- /dev/null +++ b/.gitignore @@ -0,0 +1,131 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/osx,swift,xcode +# Edit at https://www.toptal.com/developers/gitignore?templates=osx,swift,xcode + +### OSX ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Swift ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +### Xcode ### + +## Xcode 8 and earlier + +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcodeproj/project.xcworkspace/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno +**/xcshareddata/WorkspaceSettings.xcsettings + +# End of https://www.toptal.com/developers/gitignore/api/osx,swift,xcode diff --git a/Screaming Reminder.xcodeproj/project.pbxproj b/Screaming Reminder.xcodeproj/project.pbxproj new file mode 100644 index 0000000..615baf5 --- /dev/null +++ b/Screaming Reminder.xcodeproj/project.pbxproj @@ -0,0 +1,406 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 67CF41D22C3FED90002906E5 /* Screaming_ReminderApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CF41D12C3FED90002906E5 /* Screaming_ReminderApp.swift */; }; + 67CF41D42C3FED90002906E5 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CF41D32C3FED90002906E5 /* ContentView.swift */; }; + 67CF41D62C3FED90002906E5 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CF41D52C3FED90002906E5 /* Notification.swift */; }; + 67CF41D82C3FED91002906E5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 67CF41D72C3FED91002906E5 /* Assets.xcassets */; }; + 67CF41DB2C3FED91002906E5 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 67CF41DA2C3FED91002906E5 /* Preview Assets.xcassets */; }; + 67CF41E52C4080DE002906E5 /* Reminder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CF41E42C4080DE002906E5 /* Reminder.swift */; }; + 67CF41E72C408E73002906E5 /* NotificationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CF41E62C408E73002906E5 /* NotificationDelegate.swift */; }; + 67CF41EB2C4157DA002906E5 /* NotificationsUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CF41EA2C4157DA002906E5 /* NotificationsUtils.swift */; }; + 67E5F0382C4BED68005DDD7A /* SheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E5F0372C4BED68005DDD7A /* SheetView.swift */; }; + 67E5F03A2C504501005DDD7A /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E5F0392C504501005DDD7A /* Extensions.swift */; }; + 67E5F0402C53D898005DDD7A /* .gitignore in Resources */ = {isa = PBXBuildFile; fileRef = 67E5F03F2C53D898005DDD7A /* .gitignore */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 67CF41CE2C3FED90002906E5 /* Screaming Reminder.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Screaming Reminder.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 67CF41D12C3FED90002906E5 /* Screaming_ReminderApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Screaming_ReminderApp.swift; sourceTree = ""; }; + 67CF41D32C3FED90002906E5 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 67CF41D52C3FED90002906E5 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; }; + 67CF41D72C3FED91002906E5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 67CF41DA2C3FED91002906E5 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 67CF41E42C4080DE002906E5 /* Reminder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Reminder.swift; sourceTree = ""; }; + 67CF41E62C408E73002906E5 /* NotificationDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationDelegate.swift; sourceTree = ""; }; + 67CF41EA2C4157DA002906E5 /* NotificationsUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsUtils.swift; sourceTree = ""; }; + 67CF41EC2C41C5DF002906E5 /* TODO.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = TODO.md; sourceTree = ""; }; + 67E5F0372C4BED68005DDD7A /* SheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetView.swift; sourceTree = ""; }; + 67E5F0392C504501005DDD7A /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; + 67E5F03F2C53D898005DDD7A /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 67CF41CB2C3FED90002906E5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 67CF41C52C3FED90002906E5 = { + isa = PBXGroup; + children = ( + 67E5F03F2C53D898005DDD7A /* .gitignore */, + 67CF41D02C3FED90002906E5 /* Screaming Reminder */, + 67CF41CF2C3FED90002906E5 /* Products */, + ); + sourceTree = ""; + }; + 67CF41CF2C3FED90002906E5 /* Products */ = { + isa = PBXGroup; + children = ( + 67CF41CE2C3FED90002906E5 /* Screaming Reminder.app */, + ); + name = Products; + sourceTree = ""; + }; + 67CF41D02C3FED90002906E5 /* Screaming Reminder */ = { + isa = PBXGroup; + children = ( + 67E5F03C2C53CDD7005DDD7A /* Views */, + 67E5F03B2C53CDC3005DDD7A /* Models */, + 67CF41E12C406895002906E5 /* Utils */, + 67CF41D12C3FED90002906E5 /* Screaming_ReminderApp.swift */, + 67CF41D72C3FED91002906E5 /* Assets.xcassets */, + 67CF41D92C3FED91002906E5 /* Preview Content */, + 67CF41EC2C41C5DF002906E5 /* TODO.md */, + ); + path = "Screaming Reminder"; + sourceTree = ""; + }; + 67CF41D92C3FED91002906E5 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 67CF41DA2C3FED91002906E5 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 67CF41E12C406895002906E5 /* Utils */ = { + isa = PBXGroup; + children = ( + 67CF41E62C408E73002906E5 /* NotificationDelegate.swift */, + 67CF41EA2C4157DA002906E5 /* NotificationsUtils.swift */, + ); + path = Utils; + sourceTree = ""; + }; + 67E5F03B2C53CDC3005DDD7A /* Models */ = { + isa = PBXGroup; + children = ( + 67E5F0392C504501005DDD7A /* Extensions.swift */, + 67CF41D52C3FED90002906E5 /* Notification.swift */, + 67CF41E42C4080DE002906E5 /* Reminder.swift */, + ); + path = Models; + sourceTree = ""; + }; + 67E5F03C2C53CDD7005DDD7A /* Views */ = { + isa = PBXGroup; + children = ( + 67CF41D32C3FED90002906E5 /* ContentView.swift */, + 67E5F0372C4BED68005DDD7A /* SheetView.swift */, + ); + path = Views; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 67CF41CD2C3FED90002906E5 /* Screaming Reminder */ = { + isa = PBXNativeTarget; + buildConfigurationList = 67CF41DE2C3FED91002906E5 /* Build configuration list for PBXNativeTarget "Screaming Reminder" */; + buildPhases = ( + 67CF41CA2C3FED90002906E5 /* Sources */, + 67CF41CB2C3FED90002906E5 /* Frameworks */, + 67CF41CC2C3FED90002906E5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Screaming Reminder"; + productName = "Screaming Reminder"; + productReference = 67CF41CE2C3FED90002906E5 /* Screaming Reminder.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 67CF41C62C3FED90002906E5 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1540; + LastUpgradeCheck = 1540; + TargetAttributes = { + 67CF41CD2C3FED90002906E5 = { + CreatedOnToolsVersion = 15.4; + }; + }; + }; + buildConfigurationList = 67CF41C92C3FED90002906E5 /* Build configuration list for PBXProject "Screaming Reminder" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = fr; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + fr, + ); + mainGroup = 67CF41C52C3FED90002906E5; + productRefGroup = 67CF41CF2C3FED90002906E5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 67CF41CD2C3FED90002906E5 /* Screaming Reminder */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 67CF41CC2C3FED90002906E5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 67CF41DB2C3FED91002906E5 /* Preview Assets.xcassets in Resources */, + 67E5F0402C53D898005DDD7A /* .gitignore in Resources */, + 67CF41D82C3FED91002906E5 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 67CF41CA2C3FED90002906E5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 67CF41E72C408E73002906E5 /* NotificationDelegate.swift in Sources */, + 67E5F03A2C504501005DDD7A /* Extensions.swift in Sources */, + 67CF41D42C3FED90002906E5 /* ContentView.swift in Sources */, + 67CF41EB2C4157DA002906E5 /* NotificationsUtils.swift in Sources */, + 67CF41D62C3FED90002906E5 /* Notification.swift in Sources */, + 67CF41D22C3FED90002906E5 /* Screaming_ReminderApp.swift in Sources */, + 67E5F0382C4BED68005DDD7A /* SheetView.swift in Sources */, + 67CF41E52C4080DE002906E5 /* Reminder.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 67CF41DC2C3FED91002906E5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 17.5; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 67CF41DD2C3FED91002906E5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 17.5; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 67CF41DF2C3FED91002906E5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Screaming Reminder/Preview Content\""; + DEVELOPMENT_TEAM = SH3XZXB7R8; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "REMINDER!"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "apps.amine.bou.Screaming-Reminder"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 67CF41E02C3FED91002906E5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Screaming Reminder/Preview Content\""; + DEVELOPMENT_TEAM = SH3XZXB7R8; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "REMINDER!"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "apps.amine.bou.Screaming-Reminder"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 67CF41C92C3FED90002906E5 /* Build configuration list for PBXProject "Screaming Reminder" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 67CF41DC2C3FED91002906E5 /* Debug */, + 67CF41DD2C3FED91002906E5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 67CF41DE2C3FED91002906E5 /* Build configuration list for PBXNativeTarget "Screaming Reminder" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 67CF41DF2C3FED91002906E5 /* Debug */, + 67CF41E02C3FED91002906E5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 67CF41C62C3FED90002906E5 /* Project object */; +} diff --git a/Screaming Reminder.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Screaming Reminder.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Screaming Reminder.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Screaming Reminder.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Screaming Reminder.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Screaming Reminder.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Screaming Reminder.xcodeproj/xcshareddata/xcschemes/Screaming Reminder.xcscheme b/Screaming Reminder.xcodeproj/xcshareddata/xcschemes/Screaming Reminder.xcscheme new file mode 100644 index 0000000..0cb2931 --- /dev/null +++ b/Screaming Reminder.xcodeproj/xcshareddata/xcschemes/Screaming Reminder.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Screaming Reminder.xcodeproj/xcuserdata/amine.xcuserdatad/xcschemes/xcschememanagement.plist b/Screaming Reminder.xcodeproj/xcuserdata/amine.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d3dc0e0 --- /dev/null +++ b/Screaming Reminder.xcodeproj/xcuserdata/amine.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + Screaming Reminder.xcscheme_^#shared#^_ + + orderHint + 0 + + + SuppressBuildableAutocreation + + 67CF41CD2C3FED90002906E5 + + primary + + + + + diff --git a/Screaming Reminder/Assets.xcassets/AccentColor.colorset/Contents.json b/Screaming Reminder/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Screaming Reminder/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Screaming Reminder/Assets.xcassets/AppIcon.appiconset/Contents.json b/Screaming Reminder/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..8582a6c --- /dev/null +++ b/Screaming Reminder/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "Frame 1(1).png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Screaming Reminder/Assets.xcassets/AppIcon.appiconset/Frame 1(1).png b/Screaming Reminder/Assets.xcassets/AppIcon.appiconset/Frame 1(1).png new file mode 100644 index 0000000000000000000000000000000000000000..4f4ce064a8abb8566b4e7f00cd90cfbb0fec81e8 GIT binary patch literal 102866 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 Date { + var dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: self) + dateComponents.hour = hour + dateComponents.minute = 0 + return Calendar.current.date(from: dateComponents).unsafelyUnwrapped + } + + func atZeroMinutes() -> Date { + var dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: self) + dateComponents.minute = 0 + return Calendar.current.date(from: dateComponents).unsafelyUnwrapped + } + +} + +extension Set { + mutating func insertAll(_ newMembers: [Set.Element]) { + newMembers.forEach { (member) in + self.insert(member) + } + } + +} diff --git a/Screaming Reminder/Models/Notification.swift b/Screaming Reminder/Models/Notification.swift new file mode 100644 index 0000000..f24c966 --- /dev/null +++ b/Screaming Reminder/Models/Notification.swift @@ -0,0 +1,35 @@ +// +// Item.swift +// Screaming Reminder +// +// Created by Amine Bou on 11/07/2024. +// + +import Foundation +import SwiftUI + +final class Notification: CustomStringConvertible { + var reminder: Reminder + var triggers: [UNCalendarNotificationTrigger] + + + init(reminder: Reminder) { + self.reminder = reminder + self.triggers = getTriggersForReminder(reminder: reminder) + } + + public var description: String { return "\(reminder) + \(triggers)" } + + +} + +func getTriggersForReminder(reminder: Reminder) -> [UNCalendarNotificationTrigger] { + return reminder.when.map { + let components = NSCalendar.current.dateComponents([.second, .minute, .hour], from: $0) + return UNCalendarNotificationTrigger(dateMatching: components, repeats: true) + } +} + +func getIdentifier(reminder: Reminder, trigger: UNCalendarNotificationTrigger) -> String { + return "\(reminder.label)-\(trigger.dateComponents.hour ?? -1)-\(trigger.dateComponents.minute ?? -1)" +} diff --git a/Screaming Reminder/Models/Reminder.swift b/Screaming Reminder/Models/Reminder.swift new file mode 100644 index 0000000..3200b25 --- /dev/null +++ b/Screaming Reminder/Models/Reminder.swift @@ -0,0 +1,33 @@ +// +// Reminder.swift +// Screaming Reminder +// +// Created by Amine Bou on 11/07/2024. +// +import SwiftUI +import SwiftData + + +@Model +final class Reminder: CustomStringConvertible { + + var label: String + var when: [Date] + + + required init(label: String, when: [Date]) { + self.label = label + self.when = when + + } + + public var description: String { + let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.timeStyle = .short + return formatter + }() + let smallestDate = self.when.sorted()[0] + return "\(label) - Tous les jours, à partir de \(dateFormatter.string(from: smallestDate))" + } +} diff --git a/Screaming Reminder/Preview Content/Preview Assets.xcassets/Contents.json b/Screaming Reminder/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Screaming Reminder/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Screaming Reminder/Screaming_ReminderApp.swift b/Screaming Reminder/Screaming_ReminderApp.swift new file mode 100644 index 0000000..db053b0 --- /dev/null +++ b/Screaming Reminder/Screaming_ReminderApp.swift @@ -0,0 +1,64 @@ +// +// Screaming_ReminderApp.swift +// Screaming Reminder +// +// Created by Amine Bou on 11/07/2024. +// + +import SwiftUI +import SwiftData + +@main +struct Screaming_ReminderApp: App { + private var notificDelegate : NotificationDelegate = NotificationDelegate() + let modelContainer: ModelContainer + + var body: some Scene { + WindowGroup { + ContentView() + } + .modelContainer(modelContainer) + } + + init() { + do { + let schema = Schema([ + Reminder.self, + ]) + let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false) + + modelContainer = try ModelContainer(for: schema, configurations: [modelConfiguration]) + } catch { + fatalError("Could not create ModelContainer: \(error)") + } + registerForNotification() + + // Define the custom actions. + let doneAction = UNNotificationAction(identifier: "DONE_ACTION", + title: "Fait !", + options: []) + + let notificationCategory = + UNNotificationCategory(identifier: "CAT", + actions: [doneAction], + intentIdentifiers: [], + hiddenPreviewsBodyPlaceholder: "", + options: .customDismissAction) + // Register the reminder type. + let notificationCenter = UNUserNotificationCenter.current() + notificationCenter.setNotificationCategories([notificationCategory]) + + UNUserNotificationCenter.current().delegate = notificDelegate + + } + + func registerForNotification() { + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in + if success { + } else { + exit(0) + } + } + } + +} diff --git a/Screaming Reminder/Utils/NotificationDelegate.swift b/Screaming Reminder/Utils/NotificationDelegate.swift new file mode 100644 index 0000000..a9f942c --- /dev/null +++ b/Screaming Reminder/Utils/NotificationDelegate.swift @@ -0,0 +1,44 @@ +// +// NotificationDelegate.swift +// Screaming Reminder +// +// Created by Amine Bou on 12/07/2024. +// + +import Foundation +import SwiftUI +import SwiftData + +class NotificationDelegate: NSObject , UNUserNotificationCenterDelegate{ + + func userNotificationCenter(_ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: + @escaping () -> Void) { + + let title = response.notification.request.content.title + switch response.actionIdentifier { + case "DONE_ACTION": + let content = UNMutableNotificationContent() + content.title = "Bravo !" + content.subtitle = "Tu as fais ce que tu devais faire ! (Il faudra ignorer les autres notifications 😅)" + content.sound = UNNotificationSound.default + + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false) + + // choose a random identifier + let request = UNNotificationRequest(identifier: "\(title)-done", content: content, trigger: trigger) + + // add our reminder request + UNUserNotificationCenter.current().add(request) + + break + default: + exit(0) + break + } + + // Always call the completion handler when done. + completionHandler() + } +} diff --git a/Screaming Reminder/Utils/NotificationsUtils.swift b/Screaming Reminder/Utils/NotificationsUtils.swift new file mode 100644 index 0000000..091969a --- /dev/null +++ b/Screaming Reminder/Utils/NotificationsUtils.swift @@ -0,0 +1,35 @@ +// +// NotificationsUtils.swift +// Screaming Reminder +// +// Created by Amine Bou on 12/07/2024. +// + +import Foundation +import SwiftUI +import SwiftData + + +func scheduleNotifications(reminder: Reminder) { + let notification = Notification(reminder: reminder) + notification.triggers.forEach { + let content = UNMutableNotificationContent() + content.title = notification.reminder.label + content.sound = UNNotificationSound.defaultCritical + content.categoryIdentifier = "CAT" + + let request = UNNotificationRequest(identifier: getIdentifier(reminder: reminder, trigger: $0), content: content, trigger: $0) + + // add our reminder request + UNUserNotificationCenter.current().add(request) + } +} + +func cancelNotifications(reminder: Reminder) { + let identifiers = getTriggersForReminder(reminder: reminder).map { + getIdentifier(reminder: reminder, trigger: $0) + } + + UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers) + UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: identifiers) +} diff --git a/Screaming Reminder/Views/ContentView.swift b/Screaming Reminder/Views/ContentView.swift new file mode 100644 index 0000000..fb6a96e --- /dev/null +++ b/Screaming Reminder/Views/ContentView.swift @@ -0,0 +1,90 @@ +// +// ContentView.swift +// Screaming Reminder +// +// Created by Amine Bou on 11/07/2024. +// + +import SwiftUI +import SwiftData + +struct ContentView: View { + @Query private var reminders: [Reminder] + + @State var shouldPresentSheet = false + @State var selectedLabel: String = "" + @State var selectedReminder: Reminder? + @State var selectedDate = [Date()] + @State var showingAlert: Bool = false + + var body: some View { + NavigationSplitView { + List { + ForEach(reminders) { reminder in + Button { + showModal(reminder: reminder) + } label: { + Text("\(reminder)") + } + } + } + .toolbar { + ToolbarItem { + Button { + showModal() + } label : { + Label("Add Item", systemImage: "plus") + } + } + #if targetEnvironment(simulator) + ToolbarItem { + Button(action: testNotifs) { + Label("Test notifs", systemImage: "volume") + } + } + ToolbarItem { + Button(action: { + UNUserNotificationCenter.current().removeAllPendingNotificationRequests() + }) { + Label("Delete", systemImage: "speaker.slash") + } + } +#endif + }.sheet(isPresented: $shouldPresentSheet) { + selectedDate = [Date()] + selectedReminder = nil + selectedLabel = "" + } content: { + SheetView(selectedLabel: $selectedLabel, selectedReminder: $selectedReminder, selectedDate: $selectedDate) + } + } detail: { + Text("Select a reminder") + } + } + + private func testNotifs() { + UNUserNotificationCenter.current().getPendingNotificationRequests(completionHandler: { + for notification in $0 { + print("\(notification.identifier) - \(notification.trigger!) \((notification.trigger! as! UNCalendarNotificationTrigger).nextTriggerDate())") + } + + }) + } + + private func showModal(reminder: Reminder? = nil) { + withAnimation { + if (reminder != nil) { + selectedReminder = reminder + selectedLabel = reminder!.label + selectedDate = reminder!.when + } + shouldPresentSheet = true + } + } + +} + +#Preview { + ContentView() + .modelContainer(for: Reminder.self, inMemory: true) +} diff --git a/Screaming Reminder/Views/SheetView.swift b/Screaming Reminder/Views/SheetView.swift new file mode 100644 index 0000000..7c98357 --- /dev/null +++ b/Screaming Reminder/Views/SheetView.swift @@ -0,0 +1,96 @@ +// +// SheetView.swift +// Screaming Reminder +// +// Created by Amine Bou on 20/07/2024. +// + +import SwiftUI +import SwiftData + +struct SheetView: View { + @Environment(\.dismiss) private var dismiss + @Environment(\.modelContext) private var modelContext + + + @Binding var selectedLabel: String + @Binding var selectedReminder: Reminder? + @Binding var selectedDate: [Date] + + var body: some View { + + Form { + LabeledContent { + TextField("", text: $selectedLabel) + } label: { + Text("Nom") + } + + VStack { + ForEach($selectedDate.indices, id: \.self) { i in + HStack { + DatePicker("Quand", selection: $selectedDate[i], displayedComponents: .hourAndMinute) + Button(action: { + selectedDate.remove(at: i) + }) { + Label("", systemImage: "minus.circle.fill") + }.buttonStyle(.borderless) + .disabled(selectedDate.count == 1) + } + + } + } + + Button(action: { + selectedDate.append(selectedDate.last!) + }) { + Label("Ajouter une notification", systemImage: "plus") + }.buttonStyle(.borderless) + + HStack { + Button("Cancel") { + dismiss() + } + if ($selectedReminder.wrappedValue != nil) { + Spacer() + Button("Supprimer") { + deleteReminder() + dismiss() + }.buttonStyle(.bordered) + } + Spacer() + Button("Confirm") { + upsertReminder() + dismiss() + }.buttonStyle(.borderedProminent) + } + }.formStyle(.grouped) + .textFieldStyle(.roundedBorder) + + } + + private func deleteReminder() { + withAnimation { + cancelNotifications(reminder: $selectedReminder.wrappedValue!) + modelContext.delete($selectedReminder.wrappedValue!) + } + } + private func upsertReminder() { + withAnimation { + let reminder: Reminder + if (selectedReminder != nil) { + cancelNotifications(reminder: $selectedReminder.wrappedValue!) + // Should i Wait ? + + selectedReminder!.label = $selectedLabel.wrappedValue + selectedReminder!.when = $selectedDate.wrappedValue + reminder = selectedReminder! + } else { + reminder = Reminder(label: $selectedLabel.wrappedValue, when: $selectedDate.wrappedValue) + modelContext.insert(reminder) + } + scheduleNotifications(reminder: reminder) + } + } + +} diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..0121b46 --- /dev/null +++ b/TODO.md @@ -0,0 +1,8 @@ +# TODO + +- Au lieu de virer toutes les notifs, ignorer les suivantes aujourd'hui + +# Later + +- TimeDiffs manuelles +