├── .gitignore ├── Alarm Clock.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── Alarm Clock.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── Alarm Clock ├── AppDelegate.swift ├── Background │ ├── GradientView.swift │ └── SunView.swift ├── Base.lproj │ └── LaunchScreen.storyboard ├── Button.swift ├── Info.plist ├── Main.storyboard ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon.png │ │ │ ├── icon_20pt@2x.png │ │ │ ├── icon_20pt@3x.png │ │ │ ├── icon_29pt@2x.png │ │ │ ├── icon_29pt@3x.png │ │ │ ├── icon_40pt@2x.png │ │ │ ├── icon_40pt@3x.png │ │ │ ├── icon_60pt@2x.png │ │ │ └── icon_60pt@3x.png │ │ ├── Contents.json │ │ ├── launch-screen-background.imageset │ │ │ ├── Contents.json │ │ │ └── launch-screen-background.png │ │ ├── sun-bright.imageset │ │ │ ├── Contents.json │ │ │ ├── sun-bright.png │ │ │ ├── sun-bright@2x.png │ │ │ └── sun-bright@3x.png │ │ └── sun.imageset │ │ │ ├── Contents.json │ │ │ ├── Oreol_small_1x.png │ │ │ ├── Oreol_small_2x.png │ │ │ └── Oreol_small_3x.png │ └── Montserrat-SemiBold.ttf ├── UIViewHelpers.swift └── ViewController.swift ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── ACSlider │ ├── ACSlider │ │ ├── Assets │ │ │ ├── BebasNeueWhatever.ttf │ │ │ └── Montserrat-SemiBold.ttf │ │ └── Classes │ │ │ ├── ACSlider.swift │ │ │ ├── CircleView.swift │ │ │ ├── PodFontsHelper.swift │ │ │ ├── ThumbView.swift │ │ │ └── UIViewHelpers.swift │ ├── LICENSE │ └── README.md ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj └── Target Support Files │ ├── ACSlider │ ├── ACSlider-dummy.m │ ├── ACSlider-prefix.pch │ ├── ACSlider-umbrella.h │ ├── ACSlider.modulemap │ ├── ACSlider.xcconfig │ ├── Info.plist │ └── ResourceBundle-ACSlider-Info.plist │ └── Pods-Alarm Clock │ ├── Info.plist │ ├── Pods-Alarm Clock-acknowledgements.markdown │ ├── Pods-Alarm Clock-acknowledgements.plist │ ├── Pods-Alarm Clock-dummy.m │ ├── Pods-Alarm Clock-frameworks.sh │ ├── Pods-Alarm Clock-resources.sh │ ├── Pods-Alarm Clock-umbrella.h │ ├── Pods-Alarm Clock.debug.xcconfig │ ├── Pods-Alarm Clock.modulemap │ └── Pods-Alarm Clock.release.xcconfig ├── README.md ├── header.svg ├── preview.gif ├── robot.svg └── xcode-interface-builder.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | # Package.pins 40 | # Package.resolved 41 | .build/ 42 | 43 | # CocoaPods 44 | # 45 | # We recommend against adding the Pods directory to your .gitignore. However 46 | # you should judge for yourself, the pros and cons are mentioned at: 47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 48 | # 49 | # Pods/ 50 | 51 | # Carthage 52 | # 53 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 54 | # Carthage/Checkouts 55 | 56 | Carthage/Build 57 | 58 | # fastlane 59 | # 60 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 61 | # screenshots whenever they are needed. 62 | # For more information about the recommended setup visit: 63 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 64 | 65 | fastlane/report.xml 66 | fastlane/Preview.html 67 | fastlane/screenshots/**/*.png 68 | fastlane/test_output 69 | -------------------------------------------------------------------------------- /Alarm Clock.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 516D825E21D500190067FE99 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516D825121D500180067FE99 /* ViewController.swift */; }; 11 | 516D825F21D500190067FE99 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516D825221D500180067FE99 /* Button.swift */; }; 12 | 516D826021D500190067FE99 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 516D825321D500190067FE99 /* Main.storyboard */; }; 13 | 516D826121D500190067FE99 /* Montserrat-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 516D825421D500190067FE99 /* Montserrat-SemiBold.ttf */; }; 14 | 516D826221D500190067FE99 /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516D825521D500190067FE99 /* GradientView.swift */; }; 15 | 516D826321D500190067FE99 /* SunView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516D825621D500190067FE99 /* SunView.swift */; }; 16 | 516D826721D500190067FE99 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516D825A21D500190067FE99 /* AppDelegate.swift */; }; 17 | 516D826821D500190067FE99 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 516D825B21D500190067FE99 /* Assets.xcassets */; }; 18 | 516D826A21D500190067FE99 /* UIViewHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516D825D21D500190067FE99 /* UIViewHelpers.swift */; }; 19 | 5182966321D4FF3D00AE1D19 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5182966121D4FF3D00AE1D19 /* LaunchScreen.storyboard */; }; 20 | BA4374ECC8C932CFE6D1C652 /* Pods_Alarm_Clock.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0254FB384532014C71B92B88 /* Pods_Alarm_Clock.framework */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXFileReference section */ 24 | 0254FB384532014C71B92B88 /* Pods_Alarm_Clock.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Alarm_Clock.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | 516D825121D500180067FE99 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 26 | 516D825221D500180067FE99 /* Button.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; 27 | 516D825321D500190067FE99 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 28 | 516D825421D500190067FE99 /* Montserrat-SemiBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-SemiBold.ttf"; sourceTree = ""; }; 29 | 516D825521D500190067FE99 /* GradientView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GradientView.swift; sourceTree = ""; }; 30 | 516D825621D500190067FE99 /* SunView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SunView.swift; sourceTree = ""; }; 31 | 516D825A21D500190067FE99 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 32 | 516D825B21D500190067FE99 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 33 | 516D825D21D500190067FE99 /* UIViewHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewHelpers.swift; sourceTree = ""; }; 34 | 5182965521D4FF3B00AE1D19 /* Alarm Clock.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Alarm Clock.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 5182966221D4FF3D00AE1D19 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 36 | 5182966421D4FF3D00AE1D19 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 37 | 9B6C82D0FC391629FD69F32A /* Pods-Alarm Clock.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Alarm Clock.release.xcconfig"; path = "Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock.release.xcconfig"; sourceTree = ""; }; 38 | DE0A54EC718C3085BF516808 /* Pods-Alarm Clock.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Alarm Clock.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock.debug.xcconfig"; sourceTree = ""; }; 39 | /* End PBXFileReference section */ 40 | 41 | /* Begin PBXFrameworksBuildPhase section */ 42 | 5182965221D4FF3B00AE1D19 /* Frameworks */ = { 43 | isa = PBXFrameworksBuildPhase; 44 | buildActionMask = 2147483647; 45 | files = ( 46 | BA4374ECC8C932CFE6D1C652 /* Pods_Alarm_Clock.framework in Frameworks */, 47 | ); 48 | runOnlyForDeploymentPostprocessing = 0; 49 | }; 50 | /* End PBXFrameworksBuildPhase section */ 51 | 52 | /* Begin PBXGroup section */ 53 | 0A23A587471C448ADB239D64 /* Pods */ = { 54 | isa = PBXGroup; 55 | children = ( 56 | DE0A54EC718C3085BF516808 /* Pods-Alarm Clock.debug.xcconfig */, 57 | 9B6C82D0FC391629FD69F32A /* Pods-Alarm Clock.release.xcconfig */, 58 | ); 59 | name = Pods; 60 | sourceTree = ""; 61 | }; 62 | 3EC6185A2DD91EFB05816080 /* Frameworks */ = { 63 | isa = PBXGroup; 64 | children = ( 65 | 0254FB384532014C71B92B88 /* Pods_Alarm_Clock.framework */, 66 | ); 67 | name = Frameworks; 68 | sourceTree = ""; 69 | }; 70 | 516D826D21D501930067FE99 /* Resources */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 516D825B21D500190067FE99 /* Assets.xcassets */, 74 | 516D825421D500190067FE99 /* Montserrat-SemiBold.ttf */, 75 | ); 76 | path = Resources; 77 | sourceTree = ""; 78 | }; 79 | 516D826F21D5029D0067FE99 /* Background */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 516D825521D500190067FE99 /* GradientView.swift */, 83 | 516D825621D500190067FE99 /* SunView.swift */, 84 | ); 85 | path = Background; 86 | sourceTree = ""; 87 | }; 88 | 5182964C21D4FF3B00AE1D19 = { 89 | isa = PBXGroup; 90 | children = ( 91 | 5182965721D4FF3B00AE1D19 /* Alarm Clock */, 92 | 5182965621D4FF3B00AE1D19 /* Products */, 93 | 0A23A587471C448ADB239D64 /* Pods */, 94 | 3EC6185A2DD91EFB05816080 /* Frameworks */, 95 | ); 96 | sourceTree = ""; 97 | }; 98 | 5182965621D4FF3B00AE1D19 /* Products */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 5182965521D4FF3B00AE1D19 /* Alarm Clock.app */, 102 | ); 103 | name = Products; 104 | sourceTree = ""; 105 | }; 106 | 5182965721D4FF3B00AE1D19 /* Alarm Clock */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 516D826D21D501930067FE99 /* Resources */, 110 | 5182966421D4FF3D00AE1D19 /* Info.plist */, 111 | 516D825A21D500190067FE99 /* AppDelegate.swift */, 112 | 5182966121D4FF3D00AE1D19 /* LaunchScreen.storyboard */, 113 | 516D825321D500190067FE99 /* Main.storyboard */, 114 | 516D825221D500180067FE99 /* Button.swift */, 115 | 516D825D21D500190067FE99 /* UIViewHelpers.swift */, 116 | 516D826F21D5029D0067FE99 /* Background */, 117 | 516D825121D500180067FE99 /* ViewController.swift */, 118 | ); 119 | path = "Alarm Clock"; 120 | sourceTree = ""; 121 | }; 122 | /* End PBXGroup section */ 123 | 124 | /* Begin PBXNativeTarget section */ 125 | 5182965421D4FF3B00AE1D19 /* Alarm Clock */ = { 126 | isa = PBXNativeTarget; 127 | buildConfigurationList = 5182966721D4FF3D00AE1D19 /* Build configuration list for PBXNativeTarget "Alarm Clock" */; 128 | buildPhases = ( 129 | B6E34D83694A9EBA132B7C0A /* [CP] Check Pods Manifest.lock */, 130 | 5182965121D4FF3B00AE1D19 /* Sources */, 131 | 5182965221D4FF3B00AE1D19 /* Frameworks */, 132 | 5182965321D4FF3B00AE1D19 /* Resources */, 133 | 609DF668951297449F54B177 /* [CP] Embed Pods Frameworks */, 134 | ); 135 | buildRules = ( 136 | ); 137 | dependencies = ( 138 | ); 139 | name = "Alarm Clock"; 140 | productName = "Alarm Clock"; 141 | productReference = 5182965521D4FF3B00AE1D19 /* Alarm Clock.app */; 142 | productType = "com.apple.product-type.application"; 143 | }; 144 | /* End PBXNativeTarget section */ 145 | 146 | /* Begin PBXProject section */ 147 | 5182964D21D4FF3B00AE1D19 /* Project object */ = { 148 | isa = PBXProject; 149 | attributes = { 150 | LastSwiftUpdateCheck = 1010; 151 | LastUpgradeCheck = 1010; 152 | ORGANIZATIONNAME = Redmadrobot; 153 | TargetAttributes = { 154 | 5182965421D4FF3B00AE1D19 = { 155 | CreatedOnToolsVersion = 10.1; 156 | LastSwiftMigration = 1010; 157 | }; 158 | }; 159 | }; 160 | buildConfigurationList = 5182965021D4FF3B00AE1D19 /* Build configuration list for PBXProject "Alarm Clock" */; 161 | compatibilityVersion = "Xcode 9.3"; 162 | developmentRegion = en; 163 | hasScannedForEncodings = 0; 164 | knownRegions = ( 165 | en, 166 | Base, 167 | ); 168 | mainGroup = 5182964C21D4FF3B00AE1D19; 169 | productRefGroup = 5182965621D4FF3B00AE1D19 /* Products */; 170 | projectDirPath = ""; 171 | projectRoot = ""; 172 | targets = ( 173 | 5182965421D4FF3B00AE1D19 /* Alarm Clock */, 174 | ); 175 | }; 176 | /* End PBXProject section */ 177 | 178 | /* Begin PBXResourcesBuildPhase section */ 179 | 5182965321D4FF3B00AE1D19 /* Resources */ = { 180 | isa = PBXResourcesBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | 516D826121D500190067FE99 /* Montserrat-SemiBold.ttf in Resources */, 184 | 5182966321D4FF3D00AE1D19 /* LaunchScreen.storyboard in Resources */, 185 | 516D826021D500190067FE99 /* Main.storyboard in Resources */, 186 | 516D826821D500190067FE99 /* Assets.xcassets in Resources */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXResourcesBuildPhase section */ 191 | 192 | /* Begin PBXShellScriptBuildPhase section */ 193 | 609DF668951297449F54B177 /* [CP] Embed Pods Frameworks */ = { 194 | isa = PBXShellScriptBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | ); 198 | inputPaths = ( 199 | "${SRCROOT}/Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-frameworks.sh", 200 | "${BUILT_PRODUCTS_DIR}/ACSlider/ACSlider.framework", 201 | ); 202 | name = "[CP] Embed Pods Frameworks"; 203 | outputPaths = ( 204 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ACSlider.framework", 205 | ); 206 | runOnlyForDeploymentPostprocessing = 0; 207 | shellPath = /bin/sh; 208 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-frameworks.sh\"\n"; 209 | showEnvVarsInLog = 0; 210 | }; 211 | B6E34D83694A9EBA132B7C0A /* [CP] Check Pods Manifest.lock */ = { 212 | isa = PBXShellScriptBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | ); 216 | inputPaths = ( 217 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 218 | "${PODS_ROOT}/Manifest.lock", 219 | ); 220 | name = "[CP] Check Pods Manifest.lock"; 221 | outputPaths = ( 222 | "$(DERIVED_FILE_DIR)/Pods-Alarm Clock-checkManifestLockResult.txt", 223 | ); 224 | runOnlyForDeploymentPostprocessing = 0; 225 | shellPath = /bin/sh; 226 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 227 | showEnvVarsInLog = 0; 228 | }; 229 | /* End PBXShellScriptBuildPhase section */ 230 | 231 | /* Begin PBXSourcesBuildPhase section */ 232 | 5182965121D4FF3B00AE1D19 /* Sources */ = { 233 | isa = PBXSourcesBuildPhase; 234 | buildActionMask = 2147483647; 235 | files = ( 236 | 516D825E21D500190067FE99 /* ViewController.swift in Sources */, 237 | 516D826A21D500190067FE99 /* UIViewHelpers.swift in Sources */, 238 | 516D826321D500190067FE99 /* SunView.swift in Sources */, 239 | 516D825F21D500190067FE99 /* Button.swift in Sources */, 240 | 516D826721D500190067FE99 /* AppDelegate.swift in Sources */, 241 | 516D826221D500190067FE99 /* GradientView.swift in Sources */, 242 | ); 243 | runOnlyForDeploymentPostprocessing = 0; 244 | }; 245 | /* End PBXSourcesBuildPhase section */ 246 | 247 | /* Begin PBXVariantGroup section */ 248 | 5182966121D4FF3D00AE1D19 /* LaunchScreen.storyboard */ = { 249 | isa = PBXVariantGroup; 250 | children = ( 251 | 5182966221D4FF3D00AE1D19 /* Base */, 252 | ); 253 | name = LaunchScreen.storyboard; 254 | sourceTree = ""; 255 | }; 256 | /* End PBXVariantGroup section */ 257 | 258 | /* Begin XCBuildConfiguration section */ 259 | 5182966521D4FF3D00AE1D19 /* Debug */ = { 260 | isa = XCBuildConfiguration; 261 | buildSettings = { 262 | ALWAYS_SEARCH_USER_PATHS = NO; 263 | CLANG_ANALYZER_NONNULL = YES; 264 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 265 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 266 | CLANG_CXX_LIBRARY = "libc++"; 267 | CLANG_ENABLE_MODULES = YES; 268 | CLANG_ENABLE_OBJC_ARC = YES; 269 | CLANG_ENABLE_OBJC_WEAK = YES; 270 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 271 | CLANG_WARN_BOOL_CONVERSION = YES; 272 | CLANG_WARN_COMMA = YES; 273 | CLANG_WARN_CONSTANT_CONVERSION = YES; 274 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 275 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 276 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 277 | CLANG_WARN_EMPTY_BODY = YES; 278 | CLANG_WARN_ENUM_CONVERSION = YES; 279 | CLANG_WARN_INFINITE_RECURSION = YES; 280 | CLANG_WARN_INT_CONVERSION = YES; 281 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 282 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 283 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 284 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 285 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 286 | CLANG_WARN_STRICT_PROTOTYPES = YES; 287 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 288 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 289 | CLANG_WARN_UNREACHABLE_CODE = YES; 290 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 291 | CODE_SIGN_IDENTITY = "iPhone Developer"; 292 | COPY_PHASE_STRIP = NO; 293 | DEBUG_INFORMATION_FORMAT = dwarf; 294 | ENABLE_STRICT_OBJC_MSGSEND = YES; 295 | ENABLE_TESTABILITY = YES; 296 | GCC_C_LANGUAGE_STANDARD = gnu11; 297 | GCC_DYNAMIC_NO_PIC = NO; 298 | GCC_NO_COMMON_BLOCKS = YES; 299 | GCC_OPTIMIZATION_LEVEL = 0; 300 | GCC_PREPROCESSOR_DEFINITIONS = ( 301 | "DEBUG=1", 302 | "$(inherited)", 303 | ); 304 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 305 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 306 | GCC_WARN_UNDECLARED_SELECTOR = YES; 307 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 308 | GCC_WARN_UNUSED_FUNCTION = YES; 309 | GCC_WARN_UNUSED_VARIABLE = YES; 310 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 311 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 312 | MTL_FAST_MATH = YES; 313 | ONLY_ACTIVE_ARCH = YES; 314 | SDKROOT = iphoneos; 315 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 316 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 317 | }; 318 | name = Debug; 319 | }; 320 | 5182966621D4FF3D00AE1D19 /* Release */ = { 321 | isa = XCBuildConfiguration; 322 | buildSettings = { 323 | ALWAYS_SEARCH_USER_PATHS = NO; 324 | CLANG_ANALYZER_NONNULL = YES; 325 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 326 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 327 | CLANG_CXX_LIBRARY = "libc++"; 328 | CLANG_ENABLE_MODULES = YES; 329 | CLANG_ENABLE_OBJC_ARC = YES; 330 | CLANG_ENABLE_OBJC_WEAK = YES; 331 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 332 | CLANG_WARN_BOOL_CONVERSION = YES; 333 | CLANG_WARN_COMMA = YES; 334 | CLANG_WARN_CONSTANT_CONVERSION = YES; 335 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 336 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 337 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 338 | CLANG_WARN_EMPTY_BODY = YES; 339 | CLANG_WARN_ENUM_CONVERSION = YES; 340 | CLANG_WARN_INFINITE_RECURSION = YES; 341 | CLANG_WARN_INT_CONVERSION = YES; 342 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 343 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 344 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 345 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 346 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 347 | CLANG_WARN_STRICT_PROTOTYPES = YES; 348 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 349 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 350 | CLANG_WARN_UNREACHABLE_CODE = YES; 351 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 352 | CODE_SIGN_IDENTITY = "iPhone Developer"; 353 | COPY_PHASE_STRIP = NO; 354 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 355 | ENABLE_NS_ASSERTIONS = NO; 356 | ENABLE_STRICT_OBJC_MSGSEND = YES; 357 | GCC_C_LANGUAGE_STANDARD = gnu11; 358 | GCC_NO_COMMON_BLOCKS = YES; 359 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 360 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 361 | GCC_WARN_UNDECLARED_SELECTOR = YES; 362 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 363 | GCC_WARN_UNUSED_FUNCTION = YES; 364 | GCC_WARN_UNUSED_VARIABLE = YES; 365 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 366 | MTL_ENABLE_DEBUG_INFO = NO; 367 | MTL_FAST_MATH = YES; 368 | SDKROOT = iphoneos; 369 | SWIFT_COMPILATION_MODE = wholemodule; 370 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 371 | VALIDATE_PRODUCT = YES; 372 | }; 373 | name = Release; 374 | }; 375 | 5182966821D4FF3D00AE1D19 /* Debug */ = { 376 | isa = XCBuildConfiguration; 377 | baseConfigurationReference = DE0A54EC718C3085BF516808 /* Pods-Alarm Clock.debug.xcconfig */; 378 | buildSettings = { 379 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 380 | CLANG_ENABLE_MODULES = YES; 381 | CODE_SIGN_STYLE = Automatic; 382 | DEVELOPMENT_TEAM = KD5WU9VVKX; 383 | INFOPLIST_FILE = "Alarm Clock/Info.plist"; 384 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 385 | LD_RUNPATH_SEARCH_PATHS = ( 386 | "$(inherited)", 387 | "@executable_path/Frameworks", 388 | ); 389 | PRODUCT_BUNDLE_IDENTIFIER = "com.redmadrobot.Alarm-Clock"; 390 | PRODUCT_NAME = "$(TARGET_NAME)"; 391 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 392 | SWIFT_VERSION = 4.2; 393 | TARGETED_DEVICE_FAMILY = 1; 394 | }; 395 | name = Debug; 396 | }; 397 | 5182966921D4FF3D00AE1D19 /* Release */ = { 398 | isa = XCBuildConfiguration; 399 | baseConfigurationReference = 9B6C82D0FC391629FD69F32A /* Pods-Alarm Clock.release.xcconfig */; 400 | buildSettings = { 401 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 402 | CLANG_ENABLE_MODULES = YES; 403 | CODE_SIGN_STYLE = Automatic; 404 | DEVELOPMENT_TEAM = KD5WU9VVKX; 405 | INFOPLIST_FILE = "Alarm Clock/Info.plist"; 406 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 407 | LD_RUNPATH_SEARCH_PATHS = ( 408 | "$(inherited)", 409 | "@executable_path/Frameworks", 410 | ); 411 | PRODUCT_BUNDLE_IDENTIFIER = "com.redmadrobot.Alarm-Clock"; 412 | PRODUCT_NAME = "$(TARGET_NAME)"; 413 | SWIFT_VERSION = 4.2; 414 | TARGETED_DEVICE_FAMILY = 1; 415 | }; 416 | name = Release; 417 | }; 418 | /* End XCBuildConfiguration section */ 419 | 420 | /* Begin XCConfigurationList section */ 421 | 5182965021D4FF3B00AE1D19 /* Build configuration list for PBXProject "Alarm Clock" */ = { 422 | isa = XCConfigurationList; 423 | buildConfigurations = ( 424 | 5182966521D4FF3D00AE1D19 /* Debug */, 425 | 5182966621D4FF3D00AE1D19 /* Release */, 426 | ); 427 | defaultConfigurationIsVisible = 0; 428 | defaultConfigurationName = Release; 429 | }; 430 | 5182966721D4FF3D00AE1D19 /* Build configuration list for PBXNativeTarget "Alarm Clock" */ = { 431 | isa = XCConfigurationList; 432 | buildConfigurations = ( 433 | 5182966821D4FF3D00AE1D19 /* Debug */, 434 | 5182966921D4FF3D00AE1D19 /* Release */, 435 | ); 436 | defaultConfigurationIsVisible = 0; 437 | defaultConfigurationName = Release; 438 | }; 439 | /* End XCConfigurationList section */ 440 | }; 441 | rootObject = 5182964D21D4FF3B00AE1D19 /* Project object */; 442 | } 443 | -------------------------------------------------------------------------------- /Alarm Clock.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Alarm Clock.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Alarm Clock.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Alarm Clock.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Alarm Clock/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Alarm Clock 4 | // 5 | // Created by Roman Churkin on 12/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | return true 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Alarm Clock/Background/GradientView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GradientView.swift 3 | // Alarm Clock 4 | // 5 | // Created by Roman Churkin on 14/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | @IBDesignable 13 | final class GradientView: UIView { 14 | 15 | @IBInspectable var progress: CGFloat = 0 { 16 | didSet { updateGradient() } 17 | } 18 | 19 | 20 | // MARK: - 21 | 22 | private let startGradient: Gradient = { 23 | return Gradient(startColor: #colorLiteral(red: 1, green: 0.4156862745, blue: 0, alpha: 1), endColor: #colorLiteral(red: 0, green: 0.2941176471, blue: 0.8705882353, alpha: 1)) 24 | }() 25 | private let endGradient: Gradient = { 26 | return Gradient(startColor: #colorLiteral(red: 1, green: 0.2862745098, blue: 0, alpha: 1), endColor: #colorLiteral(red: 0.0431372549, green: 0, blue: 0.4980392157, alpha: 1)) 27 | }() 28 | 29 | 30 | // MARK: - 31 | 32 | override class var layerClass : AnyClass { return CAGradientLayer.self } 33 | 34 | 35 | // MARK: - 36 | 37 | private func updateGradient() { 38 | let startColor = startGradient.color(for: progress) 39 | let endColor = endGradient.color(for: progress) 40 | 41 | let layer = self.layer as! CAGradientLayer 42 | layer.colors = [startColor.cgColor, endColor.cgColor] 43 | layer.startPoint = CGPoint(x: 1, y: 0) 44 | layer.endPoint = CGPoint(x: 0, y: 1) 45 | } 46 | 47 | } 48 | 49 | 50 | private struct Gradient { 51 | 52 | private struct ColorRGB { 53 | 54 | let red: CGFloat 55 | let green: CGFloat 56 | let blue: CGFloat 57 | let alpha: CGFloat 58 | 59 | init(_ color: UIColor) { 60 | var red: CGFloat = 0 61 | var green: CGFloat = 0 62 | var blue: CGFloat = 0 63 | var alpha: CGFloat = 0 64 | 65 | color.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 66 | 67 | self.red = red 68 | self.green = green 69 | self.blue = blue 70 | self.alpha = alpha 71 | } 72 | 73 | } 74 | 75 | private let startColor: ColorRGB 76 | private let endColor: ColorRGB 77 | 78 | init(startColor: UIColor, endColor: UIColor) { 79 | self.startColor = ColorRGB(startColor) 80 | self.endColor = ColorRGB(endColor) 81 | } 82 | 83 | func color(for progress: CGFloat) -> UIColor { 84 | let red = startColor.red + progress * (endColor.red - startColor.red ) 85 | let green = startColor.green + progress * (endColor.green - startColor.green) 86 | let blue = startColor.blue + progress * (endColor.blue - startColor.blue ) 87 | 88 | return UIColor(red: red, 89 | green: green, 90 | blue: blue, 91 | alpha: min(startColor.alpha, endColor.alpha)) 92 | } 93 | 94 | } 95 | 96 | -------------------------------------------------------------------------------- /Alarm Clock/Background/SunView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SunView.swift 3 | // Alarm Clock 4 | // 5 | // Created by Roman Churkin on 25/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | final class SunView: UIView { 13 | 14 | private let sun = UIImageView(image: #imageLiteral(resourceName: "sun")) 15 | private let brightSun = UIImageView(image: #imageLiteral(resourceName: "sun-bright")) 16 | 17 | 18 | // MARK: - 19 | 20 | override init(frame: CGRect) { 21 | super.init(frame: frame) 22 | configure() 23 | } 24 | 25 | required init?(coder aDecoder: NSCoder) { 26 | super.init(coder: aDecoder) 27 | configure() 28 | } 29 | 30 | private func configure() { 31 | addSubview(sun) 32 | addSubview(brightSun) 33 | 34 | sun.alpha = 0.0 35 | brightSun.alpha = 1.0 36 | 37 | UIView.animateLoop(withDuration: 3, { 38 | self.sun.alpha = 1.0 39 | self.brightSun.alpha = 0.0 40 | }) 41 | } 42 | 43 | override var intrinsicContentSize: CGSize { 44 | let sunSize = sun.image!.size 45 | let brightSunSize = brightSun.image!.size 46 | 47 | return CGSize(width: max(sunSize.width, brightSunSize.width), 48 | height: max(sunSize.height, brightSunSize.height)) 49 | } 50 | 51 | override func layoutSubviews() { 52 | super.layoutSubviews() 53 | 54 | let sunSize = sun.image!.size 55 | sun.frame = CGRect(origin: CGPoint(x: bounds.midX - sunSize.width/2, 56 | y: bounds.midY - sunSize.height/2), 57 | size: sunSize) 58 | 59 | let brightSunSize = brightSun.image!.size 60 | brightSun.frame = CGRect(origin: CGPoint(x: bounds.midX - brightSunSize.width/2, 61 | y: bounds.midY - brightSunSize.height/2), 62 | size: brightSunSize) 63 | 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Alarm Clock/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Alarm Clock/Button.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Button.swift 3 | // Alarm Clock 4 | // 5 | // Created by Roman Churkin on 25/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | @IBDesignable 13 | final class Button: UIButton { 14 | 15 | static func make() -> Button { 16 | let button = Button(type: .system) 17 | button.configure() 18 | 19 | return button 20 | } 21 | 22 | override func awakeFromNib() { 23 | super.awakeFromNib() 24 | configure() 25 | } 26 | 27 | override func prepareForInterfaceBuilder() { 28 | super.prepareForInterfaceBuilder() 29 | configure() 30 | } 31 | 32 | override func tintColorDidChange() { 33 | super.tintColorDidChange() 34 | layer.borderColor = tintColor.cgColor 35 | } 36 | 37 | override func layoutSubviews() { 38 | super.layoutSubviews() 39 | layer.cornerRadius = min(bounds.width, bounds.height) / 2 40 | } 41 | 42 | private func configure() { 43 | contentEdgeInsets = UIEdgeInsets(top: 18, 44 | left: contentEdgeInsets.left, 45 | bottom: 16, 46 | right: contentEdgeInsets.right) 47 | 48 | layer.borderWidth = 2 49 | layer.borderColor = tintColor.cgColor 50 | 51 | titleLabel?.font = UIFont(name: "Montserrat-SemiBold", size: 14) 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /Alarm Clock/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIAppFonts 24 | 25 | Montserrat-SemiBold.ttf 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UIStatusBarStyle 36 | UIStatusBarStyleLightContent 37 | UISupportedInterfaceOrientations 38 | 39 | UIInterfaceOrientationPortrait 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Alarm Clock/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Montserrat-SemiBold 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "icon_20pt@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "icon_20pt@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon_29pt@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "icon_29pt@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "icon_40pt@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "icon_40pt@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "icon_60pt@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "icon_60pt@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "1024x1024", 53 | "idiom" : "ios-marketing", 54 | "filename" : "Icon.png", 55 | "scale" : "1x" 56 | } 57 | ], 58 | "info" : { 59 | "version" : 1, 60 | "author" : "xcode" 61 | } 62 | } -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/launch-screen-background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "launch-screen-background.png" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "original" 14 | } 15 | } -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/launch-screen-background.imageset/launch-screen-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/launch-screen-background.imageset/launch-screen-background.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun-bright.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sun-bright.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "sun-bright@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "sun-bright@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun-bright.imageset/sun-bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/sun-bright.imageset/sun-bright.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun-bright.imageset/sun-bright@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/sun-bright.imageset/sun-bright@2x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun-bright.imageset/sun-bright@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/sun-bright.imageset/sun-bright@3x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Oreol_small_1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Oreol_small_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Oreol_small_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun.imageset/Oreol_small_1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/sun.imageset/Oreol_small_1x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun.imageset/Oreol_small_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/sun.imageset/Oreol_small_2x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Assets.xcassets/sun.imageset/Oreol_small_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Assets.xcassets/sun.imageset/Oreol_small_3x.png -------------------------------------------------------------------------------- /Alarm Clock/Resources/Montserrat-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Alarm Clock/Resources/Montserrat-SemiBold.ttf -------------------------------------------------------------------------------- /Alarm Clock/UIViewHelpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewHelpers.swift 3 | // Alarm Clock 4 | // 5 | // Created by Roman Churkin on 25/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | extension UIView { 13 | 14 | class func animateEasy(withDuration duration: TimeInterval = 0.15, 15 | _ animations: @escaping () -> Void) { 16 | UIView.animate(withDuration: duration, 17 | delay: 0, 18 | options: .curveEaseInOut, 19 | animations: animations, 20 | completion: nil) 21 | 22 | } 23 | 24 | class func animateLoop(withDuration duration: TimeInterval = 0.15, 25 | _ animations: @escaping () -> Void) { 26 | UIView.animate(withDuration: duration, 27 | delay: 0, 28 | options: [.curveEaseInOut, .repeat, .autoreverse], 29 | animations: animations, 30 | completion: nil) 31 | 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Alarm Clock/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Alarm Clock 4 | // 5 | // Created by Roman Churkin on 12/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ACSlider 11 | 12 | 13 | final class ViewController: UIViewController { 14 | 15 | @IBOutlet var headerLabel: UILabel! { 16 | didSet { 17 | guard let text = headerLabel.text else { return } 18 | headerLabel.attributedText = 19 | NSAttributedString(string: text, attributes: [NSAttributedString.Key.kern: 3.5]) 20 | } 21 | } 22 | @IBOutlet var hoursSlider: ACSlider! 23 | @IBOutlet var minsSlider: ACSlider! 24 | 25 | 26 | // MARK: - 27 | 28 | private var customView: GradientView { 29 | return self.view as! GradientView 30 | } 31 | private let sunView = SunView(frame: .zero) 32 | 33 | 34 | // MARK: - 35 | 36 | override var preferredStatusBarStyle: UIStatusBarStyle { 37 | return .lightContent 38 | } 39 | 40 | override func viewDidLoad() { 41 | super.viewDidLoad() 42 | view.insertSubview(sunView, at: 0) 43 | } 44 | 45 | override func viewWillAppear(_ animated: Bool) { 46 | super.viewWillAppear(animated) 47 | sliderUpdate() 48 | } 49 | 50 | 51 | // MARK: - 52 | 53 | private func updateSun(for progress: CGFloat) { 54 | let size = sunView.intrinsicContentSize 55 | let y = view.bounds.height * progress 56 | let sunOrigin = CGPoint(x: view.bounds.midX - size.width/2, y: y) 57 | sunView.frame = CGRect(origin: sunOrigin, size: size) 58 | } 59 | 60 | 61 | // MARK: - 62 | 63 | @IBAction func sliderUpdate() { 64 | var progress = hoursSlider.value/hoursSlider.maxValue 65 | progress += minsSlider.value/minsSlider.maxValue/hoursSlider.maxValue 66 | progress = abs(progress - 0.5) / 0.5 67 | 68 | customView.progress = progress 69 | 70 | UIView.animateEasy { self.updateSun(for: progress) } 71 | } 72 | 73 | } 74 | 75 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Redmadrobot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | 4 | target 'Alarm Clock' do 5 | 6 | pod 'ACSlider' 7 | 8 | end 9 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ACSlider (1.0.2) 3 | 4 | DEPENDENCIES: 5 | - ACSlider 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - ACSlider 10 | 11 | SPEC CHECKSUMS: 12 | ACSlider: dfc421d970c21c2546f1cfb3b2d6fa241bca1c43 13 | 14 | PODFILE CHECKSUM: 5dce3a43c686b9410103c119e5b32af305be16e1 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Pods/ACSlider/ACSlider/Assets/BebasNeueWhatever.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Pods/ACSlider/ACSlider/Assets/BebasNeueWhatever.ttf -------------------------------------------------------------------------------- /Pods/ACSlider/ACSlider/Assets/Montserrat-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/Pods/ACSlider/ACSlider/Assets/Montserrat-SemiBold.ttf -------------------------------------------------------------------------------- /Pods/ACSlider/ACSlider/Classes/ACSlider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ACSlider.swift 3 | // ACSlider 4 | // 5 | // Created by Roman Churkin on 12/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | @IBDesignable 13 | public final class ACSlider: UIControl { 14 | 15 | @IBInspectable var title: String? { 16 | get { return thumbView.title } 17 | set { thumbView.title = newValue } 18 | } 19 | @IBInspectable public var maxValue: CGFloat = 23 20 | 21 | 22 | // MARK: - 23 | 24 | private(set) public var value: CGFloat = 0 { 25 | didSet { thumbView.value = String(format: "%02.0f", value) } 26 | } 27 | 28 | private var thumbSize: CGSize { 29 | return thumbView.intrinsicContentSize 30 | } 31 | 32 | private let thumbView: ThumbView = { 33 | let thumbView = ThumbView(frame: .zero) 34 | thumbView.frame = CGRect(origin: .zero, size: thumbView.intrinsicContentSize) 35 | thumbView.isUserInteractionEnabled = false 36 | return thumbView 37 | }() 38 | 39 | 40 | private let minTrackView: UIView = ACSlider.prepareTrackView() 41 | private let maxTrackView: UIView = ACSlider.prepareTrackView() 42 | 43 | private static func prepareTrackView() -> UIView { 44 | let view = UIView(frame: .zero) 45 | view.layer.cornerRadius = 1 46 | view.isUserInteractionEnabled = false 47 | return view 48 | } 49 | 50 | 51 | // MARK: - 52 | 53 | override public var intrinsicContentSize: CGSize { 54 | return CGSize(width: UIView.noIntrinsicMetric, 55 | height: thumbSize.height) 56 | } 57 | 58 | override init(frame: CGRect) { 59 | super.init(frame: frame) 60 | configure() 61 | } 62 | 63 | required init?(coder aDecoder: NSCoder) { 64 | super.init(coder: aDecoder) 65 | configure() 66 | } 67 | 68 | func configure() { 69 | tintColorUpdate() 70 | 71 | addSubview(minTrackView) 72 | addSubview(maxTrackView) 73 | addSubview(thumbView) 74 | } 75 | 76 | override public func prepareForInterfaceBuilder() { 77 | super.prepareForInterfaceBuilder() 78 | value = CGFloat(Int.random(in: 0..(start: T, end: T, x: T ) -> T where T : Comparable { 118 | return max(start, min(end, x)) 119 | } 120 | 121 | private func updateValue(for touch: UITouch, animated: Bool = false) { 122 | let x = checkBounds(start: thumbSize.width / 2, 123 | end: bounds.width - thumbSize.width / 2, 124 | x: touch.location(in: self).x) 125 | 126 | let position = x - thumbSize.width / 2 127 | 128 | let progress = position / (bounds.width - thumbSize.width) 129 | 130 | value = maxValue * progress 131 | 132 | if animated { 133 | UIView.animateEasy { self.recalculateFrames() } 134 | } else { 135 | recalculateFrames() 136 | } 137 | 138 | sendActions(for: .valueChanged) 139 | } 140 | 141 | 142 | // MARK: - 143 | 144 | override public func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { 145 | let result = super.beginTracking(touch, with: event) 146 | let insideThumb = thumbView.frame.contains(touch.location(in: self)) 147 | 148 | if result && insideThumb { 149 | thumbView.animateTrackingBegin() 150 | updateValue(for: touch, animated: true) 151 | } 152 | 153 | return result && insideThumb 154 | } 155 | 156 | override public func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { 157 | updateValue(for: touch, animated: false) 158 | return super.continueTracking(touch, with: event) 159 | } 160 | 161 | override public func endTracking(_ touch: UITouch?, with event: UIEvent?) { 162 | thumbView.animateTrackingEnd() 163 | 164 | value = value.rounded() 165 | 166 | UIView.animateEasy { self.recalculateFrames() } 167 | 168 | sendActions(for: .valueChanged) 169 | } 170 | 171 | } 172 | -------------------------------------------------------------------------------- /Pods/ACSlider/ACSlider/Classes/CircleView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CircleView.swift 3 | // ACSlider 4 | // 5 | // Created by Roman Churkin on 25/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | @IBDesignable 13 | final class CircleView: UIView { 14 | 15 | override init(frame: CGRect) { 16 | super.init(frame: frame) 17 | configure() 18 | } 19 | 20 | required init?(coder aDecoder: NSCoder) { 21 | super.init(coder: aDecoder) 22 | configure() 23 | } 24 | 25 | private func configure() { 26 | layer.borderColor = tintColor.cgColor 27 | layer.borderWidth = 2 28 | } 29 | 30 | override func tintColorDidChange() { 31 | super.tintColorDidChange() 32 | layer.borderColor = tintColor.cgColor 33 | } 34 | 35 | override func layoutSubviews() { 36 | super.layoutSubviews() 37 | layer.cornerRadius = min(bounds.height, bounds.width) / 2 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /Pods/ACSlider/ACSlider/Classes/PodFontsHelper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIFont.swift 3 | // ACSlider 4 | // 5 | // Created by Roman Churkin on 15/01/2019. 6 | // 7 | 8 | import UIKit 9 | 10 | 11 | struct PodFontsHelper { 12 | 13 | static var fonts = false 14 | 15 | static func registerFonts() { 16 | guard !fonts else { return } 17 | fonts = true 18 | 19 | self.registerFont(fontName: "BebasNeueWhatever", fontExtension: "ttf") 20 | self.registerFont(fontName: "Montserrat-SemiBold", fontExtension: "ttf") 21 | } 22 | 23 | static func registerFont(fontName: String, 24 | fontExtension: String) { 25 | 26 | let bundle = Bundle(for: ACSlider.self) 27 | 28 | guard let resourcesBundleURL = bundle.url(forResource: "ACSlider", 29 | withExtension: "bundle"), 30 | let resourcesBundle = Bundle(url: resourcesBundleURL) else { 31 | fatalError("Couldn't find resources bundle") 32 | } 33 | 34 | guard let fontURL = resourcesBundle.url(forResource: fontName, withExtension: fontExtension) else { 35 | fatalError("Couldn't find font \(fontName)") 36 | } 37 | 38 | guard let fontDataProvider = CGDataProvider(url: fontURL as CFURL) else { 39 | fatalError("Couldn't load data from the font \(fontName)") 40 | } 41 | 42 | guard let font = CGFont(fontDataProvider) else { 43 | fatalError("Couldn't create font from data") 44 | } 45 | 46 | var error: Unmanaged? 47 | let success = CTFontManagerRegisterGraphicsFont(font, &error) 48 | guard success else { 49 | print("Error registering font. Maybe it was already registered.") 50 | return 51 | } 52 | 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /Pods/ACSlider/ACSlider/Classes/ThumbView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThumbView.swift 3 | // ACSlider 4 | // 5 | // Created by Roman Churkin on 25/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | @IBDesignable 13 | final class ThumbView: UIView { 14 | 15 | var title: String? { 16 | get { return titleLabel.text } 17 | set { titleLabel.text = newValue } 18 | } 19 | 20 | var value: String? { 21 | get { return valueLabel.text } 22 | set { valueLabel.text = newValue } 23 | } 24 | 25 | 26 | // MARK: - 27 | 28 | private var valueLabel: UILabel = { 29 | let label = UILabel(frame: .zero) 30 | label.textAlignment = .center 31 | label.text = "00" 32 | 33 | return label 34 | }() 35 | 36 | private var titleLabel: UILabel = { 37 | let label = UILabel(frame: .zero) 38 | label.textAlignment = .center 39 | 40 | return label 41 | }() 42 | 43 | private var thumbView: UIView = { 44 | return CircleView(frame: .zero) 45 | }() 46 | 47 | override var intrinsicContentSize: CGSize { 48 | return CGSize(width: 60, height: 86) 49 | } 50 | 51 | 52 | // MARK: - 53 | 54 | override init(frame: CGRect) { 55 | super.init(frame: frame) 56 | configure() 57 | } 58 | 59 | required init?(coder aDecoder: NSCoder) { 60 | super.init(coder: aDecoder) 61 | configure() 62 | } 63 | 64 | private func configure() { 65 | PodFontsHelper.registerFonts() 66 | valueLabel.font = UIFont(name: "BebasNeueWhatever", size: 56) 67 | titleLabel.font = UIFont(name: "Montserrat-SemiBold", size: 14) 68 | 69 | addSubview(titleLabel) 70 | addSubview(valueLabel) 71 | addSubview(thumbView) 72 | 73 | configureLayout() 74 | 75 | valueLabel.textColor = tintColor 76 | titleLabel.textColor = tintColor 77 | thumbView.tintColor = tintColor 78 | 79 | thumbView.transform = CGAffineTransform(scaleX: 0, 80 | y: 0) 81 | thumbView.alpha = 0 82 | } 83 | 84 | private func configureLayout() { 85 | valueLabel.frame = CGRect(x: 0, 86 | y: 0, 87 | width: intrinsicContentSize.width, 88 | height: intrinsicContentSize.height) 89 | 90 | thumbView.frame = CGRect(x: intrinsicContentSize.width/2 - 22, 91 | y: intrinsicContentSize.height/2 - 22, 92 | width: 44, 93 | height: 44) 94 | 95 | titleLabel.frame = CGRect(x: 0, 96 | y: intrinsicContentSize.height - 18, 97 | width: intrinsicContentSize.width, 98 | height: 18) 99 | } 100 | 101 | override func tintColorDidChange() { 102 | super.tintColorDidChange() 103 | 104 | valueLabel.textColor = tintColor 105 | titleLabel.textColor = tintColor 106 | thumbView.tintColor = tintColor 107 | } 108 | 109 | 110 | // MARK: - 111 | 112 | func animateTrackingBegin() { 113 | UIView.animateEasy { 114 | self.valueLabel.transform = CGAffineTransform(translationX: 0, y: -50) 115 | self.thumbView.transform = CGAffineTransform.identity 116 | self.thumbView.alpha = 1 117 | } 118 | } 119 | 120 | func animateTrackingEnd() { 121 | UIView.animateEasy { 122 | self.valueLabel.transform = CGAffineTransform.identity 123 | self.thumbView.transform = CGAffineTransform(scaleX: 0, 124 | y: 0) 125 | self.thumbView.alpha = 0 126 | } 127 | } 128 | 129 | } 130 | 131 | 132 | -------------------------------------------------------------------------------- /Pods/ACSlider/ACSlider/Classes/UIViewHelpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewHelpers.swift 3 | // ACSlider 4 | // 5 | // Created by Roman Churkin on 25/12/2018. 6 | // Copyright © 2018 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | extension UIView { 13 | 14 | class func animateEasy(withDuration duration: TimeInterval = 0.15, 15 | _ animations: @escaping () -> Void) { 16 | UIView.animate(withDuration: duration, 17 | delay: 0, 18 | options: .curveEaseInOut, 19 | animations: animations, 20 | completion: nil) 21 | 22 | } 23 | 24 | class func animateLoop(withDuration duration: TimeInterval = 0.15, 25 | _ animations: @escaping () -> Void) { 26 | UIView.animate(withDuration: duration, 27 | delay: 0, 28 | options: [.curveEaseInOut, .repeat, .autoreverse], 29 | animations: animations, 30 | completion: nil) 31 | 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Pods/ACSlider/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Redmadrobot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/ACSlider/README.md: -------------------------------------------------------------------------------- 1 | [![Redmadrobot](https://github.com/Redmadrobot/ACSlider/blob/master/header.svg)](http://redmadrobot.com) 2 | 3 |
4 | 5 | # 🎚 ACSlider 6 | [![Redmadrobot](https://img.shields.io/badge/made%20by%20robots-for%20humans-EB5440.svg)](https://github.com/RedMadRobot) [![Version](https://img.shields.io/cocoapods/v/ACSlider.svg?style=flat)](https://cocoapods.org/pods/ACSlider) [![License](https://img.shields.io/cocoapods/l/ACSlider.svg?style=flat)](https://cocoapods.org/pods/ACSlider) [![Platform](https://img.shields.io/cocoapods/p/ACSlider.svg?style=flat)](https://cocoapods.org/pods/ACSlider) 7 | 8 |
9 | 10 | Slider which designed specially for our [Alarm Clock concept](https://dribbble.com/shots/5054031-Colored-Alarm-Clock-Interface). 11 | 12 | 13 | 14 | Implemented as a subclass of UIControl. You can set slider title and max value right in Attributes Inspector in Interface Builder, thanks to @IBInspectable. Also you can choose Slider color using Tint Color property. And there is no need to run simulator to see final result – it is fully rendered in storyboard by @IBDesignable. 15 | 16 |
17 | 18 | Feel free to use this code in your projects and [![](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/Firmach) me if you have any questions or suggestions. 19 | 20 |
21 | 22 | ## Example 23 | 24 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 25 | 26 |
27 | 28 | ## Installation 29 | 30 | ACSlider is available through [CocoaPods](https://cocoapods.org). To install 31 | it, simply add the following line to your Podfile: 32 | 33 | ```ruby 34 | pod 'ACSlider' 35 | ``` 36 | 37 |
38 | 39 | ## License 40 | 41 | ACSlider is available under the MIT license. 42 | 43 |
44 | 45 | [![Redmadrobot](https://github.com/Redmadrobot/ACSlider/blob/master/robot.svg)](http://redmadrobot.com) 46 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ACSlider (1.0.2) 3 | 4 | DEPENDENCIES: 5 | - ACSlider 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - ACSlider 10 | 11 | SPEC CHECKSUMS: 12 | ACSlider: dfc421d970c21c2546f1cfb3b2d6fa241bca1c43 13 | 14 | PODFILE CHECKSUM: 5dce3a43c686b9410103c119e5b32af305be16e1 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0995D3B1E000E06DE17408B40B374AD2 /* ACSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0872547CDB9C52A15B1AAD6730352D6F /* ACSlider.swift */; }; 11 | 208912AE53AA4B8EB13F6FA7ED21D373 /* CircleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C453062D672C4D07C1017CC5D69E66B /* CircleView.swift */; }; 12 | 325132908EC6DA2A749B79968F454A00 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A16F4CFC63FAC439D7A04994F579A03 /* Foundation.framework */; }; 13 | 3C9BE8A80ADCE5694644A03A88E7F5E1 /* ACSlider-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8324E150D8EDCB2B5A5E9C9CE33C1A69 /* ACSlider-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 5E681CD54944B041D51B637D047AF280 /* Montserrat-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0444FD606D9A13B4A952F46BCCADC842 /* Montserrat-SemiBold.ttf */; }; 15 | 64397C1575A4DB61E713DFC6292392BC /* ACSlider.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 757CB626190C98FF56D99164E6A955E7 /* ACSlider.bundle */; }; 16 | 7A2ADE6DE642D5C99AE740C8C37050CE /* Pods-Alarm Clock-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 28CCF9AC85153593766CDE05AAF233BB /* Pods-Alarm Clock-dummy.m */; }; 17 | AB944ED33F025002FFCB25593D3EC3EC /* BebasNeueWhatever.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AABF0DF3DB7D044CE36AC8C470334E36 /* BebasNeueWhatever.ttf */; }; 18 | B417247487BBE7B590FB6EEA488BA7EB /* Pods-Alarm Clock-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 689F9BB50B973438786C1A73E1DFE3C6 /* Pods-Alarm Clock-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | C9F4CD7F7697CBC38D72310A7D0E3875 /* ACSlider-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 770E5D065A49FD124904FAC09C0CFCE7 /* ACSlider-dummy.m */; }; 20 | CA7F9F3A07718AFDBDDF0B34C393BC6B /* ThumbView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F478C37CE26CEC57830E86B6C3F2C877 /* ThumbView.swift */; }; 21 | F924550F06991D723D7147B0CC0CF886 /* PodFontsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334AEF3C5FDF027D10DD693D49FF1542 /* PodFontsHelper.swift */; }; 22 | FB1FEC4EF3D05EE229D836A7D6062A25 /* UIViewHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F22836BEF7988C84A122C20C297AA60D /* UIViewHelpers.swift */; }; 23 | FF026FE1C8DF8BDDA03D8A5F4F877A3E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A16F4CFC63FAC439D7A04994F579A03 /* Foundation.framework */; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | 8596120A745FCDD638EE85B61C5799C3 /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 30 | proxyType = 1; 31 | remoteGlobalIDString = 8B06F41799DCB3B15F7D6D5BB5B58CBA; 32 | remoteInfo = ACSlider; 33 | }; 34 | F6278E3ABBB856C97EA64FE8A10BA08C /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = 3B8E8FED8A25D43AF547BCA88ADA635F; 39 | remoteInfo = "ACSlider-ACSlider"; 40 | }; 41 | /* End PBXContainerItemProxy section */ 42 | 43 | /* Begin PBXFileReference section */ 44 | 0444FD606D9A13B4A952F46BCCADC842 /* Montserrat-SemiBold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Montserrat-SemiBold.ttf"; path = "ACSlider/Assets/Montserrat-SemiBold.ttf"; sourceTree = ""; }; 45 | 0872547CDB9C52A15B1AAD6730352D6F /* ACSlider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ACSlider.swift; path = ACSlider/Classes/ACSlider.swift; sourceTree = ""; }; 46 | 139F10079F852BC98DA2EE35DE3D7E38 /* ResourceBundle-ACSlider-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ACSlider-Info.plist"; sourceTree = ""; }; 47 | 1C453062D672C4D07C1017CC5D69E66B /* CircleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleView.swift; path = ACSlider/Classes/CircleView.swift; sourceTree = ""; }; 48 | 1EC4DFF9EDE436156F18D76F9CAD7DBA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 49 | 28CCF9AC85153593766CDE05AAF233BB /* Pods-Alarm Clock-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Alarm Clock-dummy.m"; sourceTree = ""; }; 50 | 28FAA5A48145EF67A92D8CB842764E07 /* Pods-Alarm Clock.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Alarm Clock.debug.xcconfig"; sourceTree = ""; }; 51 | 334AEF3C5FDF027D10DD693D49FF1542 /* PodFontsHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PodFontsHelper.swift; path = ACSlider/Classes/PodFontsHelper.swift; sourceTree = ""; }; 52 | 391DF823FB6141926850AB3AA20A325E /* Pods-Alarm Clock.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Alarm Clock.modulemap"; sourceTree = ""; }; 53 | 3983813C1B8386196130834C14EC09F5 /* Pods-Alarm Clock-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Alarm Clock-resources.sh"; sourceTree = ""; }; 54 | 39CB10A55587C7B537E197E69EEBBA90 /* Pods_Alarm_Clock.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Alarm_Clock.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 3F225107DAA93F3A118ADE77EE2A814F /* ACSlider.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ACSlider.xcconfig; sourceTree = ""; }; 56 | 55ED51985251FB7915290B152675F2BF /* Pods-Alarm Clock.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Alarm Clock.release.xcconfig"; sourceTree = ""; }; 57 | 5A16F4CFC63FAC439D7A04994F579A03 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 58 | 5DCFF69BF3BE87E89E80A0FC698EBA62 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 59 | 689F9BB50B973438786C1A73E1DFE3C6 /* Pods-Alarm Clock-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Alarm Clock-umbrella.h"; sourceTree = ""; }; 60 | 72CC695EE43F0DDFD539C06AB428468E /* Pods-Alarm Clock-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Alarm Clock-frameworks.sh"; sourceTree = ""; }; 61 | 757CB626190C98FF56D99164E6A955E7 /* ACSlider.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ACSlider.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | 770E5D065A49FD124904FAC09C0CFCE7 /* ACSlider-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ACSlider-dummy.m"; sourceTree = ""; }; 63 | 8324E150D8EDCB2B5A5E9C9CE33C1A69 /* ACSlider-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ACSlider-umbrella.h"; sourceTree = ""; }; 64 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 65 | AABF0DF3DB7D044CE36AC8C470334E36 /* BebasNeueWhatever.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = BebasNeueWhatever.ttf; path = ACSlider/Assets/BebasNeueWhatever.ttf; sourceTree = ""; }; 66 | CB75BD64B0BA4C268410257B2348B756 /* Pods-Alarm Clock-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Alarm Clock-acknowledgements.markdown"; sourceTree = ""; }; 67 | D63B1E843DB579CF4784A51672584932 /* ACSlider.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ACSlider.modulemap; sourceTree = ""; }; 68 | F22836BEF7988C84A122C20C297AA60D /* UIViewHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewHelpers.swift; path = ACSlider/Classes/UIViewHelpers.swift; sourceTree = ""; }; 69 | F478C37CE26CEC57830E86B6C3F2C877 /* ThumbView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThumbView.swift; path = ACSlider/Classes/ThumbView.swift; sourceTree = ""; }; 70 | F7075E841B25A1E44049526EA0739E25 /* Pods-Alarm Clock-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Alarm Clock-acknowledgements.plist"; sourceTree = ""; }; 71 | F7825988D939A8FD5179CE3FF26AE20F /* ACSlider-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ACSlider-prefix.pch"; sourceTree = ""; }; 72 | F7DF19212964B0F6CBE23461FEAFBC7D /* ACSlider.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ACSlider.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 73 | /* End PBXFileReference section */ 74 | 75 | /* Begin PBXFrameworksBuildPhase section */ 76 | 3537815BE6F1757DBF721F0C3AB427D1 /* Frameworks */ = { 77 | isa = PBXFrameworksBuildPhase; 78 | buildActionMask = 2147483647; 79 | files = ( 80 | ); 81 | runOnlyForDeploymentPostprocessing = 0; 82 | }; 83 | 6B2C663D374AA56C3DB87F117391D754 /* Frameworks */ = { 84 | isa = PBXFrameworksBuildPhase; 85 | buildActionMask = 2147483647; 86 | files = ( 87 | 325132908EC6DA2A749B79968F454A00 /* Foundation.framework in Frameworks */, 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | 8CE6F11EEC9FA3C76ECFE397227FB072 /* Frameworks */ = { 92 | isa = PBXFrameworksBuildPhase; 93 | buildActionMask = 2147483647; 94 | files = ( 95 | FF026FE1C8DF8BDDA03D8A5F4F877A3E /* Foundation.framework in Frameworks */, 96 | ); 97 | runOnlyForDeploymentPostprocessing = 0; 98 | }; 99 | /* End PBXFrameworksBuildPhase section */ 100 | 101 | /* Begin PBXGroup section */ 102 | 10051208B12ECF73612DAE3A0303DDEC /* Pods-Alarm Clock */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 1EC4DFF9EDE436156F18D76F9CAD7DBA /* Info.plist */, 106 | 391DF823FB6141926850AB3AA20A325E /* Pods-Alarm Clock.modulemap */, 107 | CB75BD64B0BA4C268410257B2348B756 /* Pods-Alarm Clock-acknowledgements.markdown */, 108 | F7075E841B25A1E44049526EA0739E25 /* Pods-Alarm Clock-acknowledgements.plist */, 109 | 28CCF9AC85153593766CDE05AAF233BB /* Pods-Alarm Clock-dummy.m */, 110 | 72CC695EE43F0DDFD539C06AB428468E /* Pods-Alarm Clock-frameworks.sh */, 111 | 3983813C1B8386196130834C14EC09F5 /* Pods-Alarm Clock-resources.sh */, 112 | 689F9BB50B973438786C1A73E1DFE3C6 /* Pods-Alarm Clock-umbrella.h */, 113 | 28FAA5A48145EF67A92D8CB842764E07 /* Pods-Alarm Clock.debug.xcconfig */, 114 | 55ED51985251FB7915290B152675F2BF /* Pods-Alarm Clock.release.xcconfig */, 115 | ); 116 | name = "Pods-Alarm Clock"; 117 | path = "Target Support Files/Pods-Alarm Clock"; 118 | sourceTree = ""; 119 | }; 120 | 33CB717581DFB70928FCEF6E7BFD2E7C /* Products */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | 757CB626190C98FF56D99164E6A955E7 /* ACSlider.bundle */, 124 | F7DF19212964B0F6CBE23461FEAFBC7D /* ACSlider.framework */, 125 | 39CB10A55587C7B537E197E69EEBBA90 /* Pods_Alarm_Clock.framework */, 126 | ); 127 | name = Products; 128 | sourceTree = ""; 129 | }; 130 | 423448C9E6FB6C19F3E3E5A5D696F85D /* Pods */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 6A09A4728B0B0385EDF7434E54AC9C74 /* ACSlider */, 134 | ); 135 | name = Pods; 136 | sourceTree = ""; 137 | }; 138 | 4DE568F7220BE90BCDD225DEA213F04C /* Targets Support Files */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | 10051208B12ECF73612DAE3A0303DDEC /* Pods-Alarm Clock */, 142 | ); 143 | name = "Targets Support Files"; 144 | sourceTree = ""; 145 | }; 146 | 5B941EC0A7768076CCB2A697E38C58B6 /* Resources */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | AABF0DF3DB7D044CE36AC8C470334E36 /* BebasNeueWhatever.ttf */, 150 | 0444FD606D9A13B4A952F46BCCADC842 /* Montserrat-SemiBold.ttf */, 151 | ); 152 | name = Resources; 153 | sourceTree = ""; 154 | }; 155 | 5E0D919E635D23B70123790B8308F8EF /* iOS */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | 5A16F4CFC63FAC439D7A04994F579A03 /* Foundation.framework */, 159 | ); 160 | name = iOS; 161 | sourceTree = ""; 162 | }; 163 | 6A09A4728B0B0385EDF7434E54AC9C74 /* ACSlider */ = { 164 | isa = PBXGroup; 165 | children = ( 166 | 0872547CDB9C52A15B1AAD6730352D6F /* ACSlider.swift */, 167 | 1C453062D672C4D07C1017CC5D69E66B /* CircleView.swift */, 168 | 334AEF3C5FDF027D10DD693D49FF1542 /* PodFontsHelper.swift */, 169 | F478C37CE26CEC57830E86B6C3F2C877 /* ThumbView.swift */, 170 | F22836BEF7988C84A122C20C297AA60D /* UIViewHelpers.swift */, 171 | 5B941EC0A7768076CCB2A697E38C58B6 /* Resources */, 172 | B958FF21FADA4C56A9FA272AD7967F00 /* Support Files */, 173 | ); 174 | path = ACSlider; 175 | sourceTree = ""; 176 | }; 177 | 7DB346D0F39D3F0E887471402A8071AB = { 178 | isa = PBXGroup; 179 | children = ( 180 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 181 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 182 | 423448C9E6FB6C19F3E3E5A5D696F85D /* Pods */, 183 | 33CB717581DFB70928FCEF6E7BFD2E7C /* Products */, 184 | 4DE568F7220BE90BCDD225DEA213F04C /* Targets Support Files */, 185 | ); 186 | sourceTree = ""; 187 | }; 188 | B958FF21FADA4C56A9FA272AD7967F00 /* Support Files */ = { 189 | isa = PBXGroup; 190 | children = ( 191 | D63B1E843DB579CF4784A51672584932 /* ACSlider.modulemap */, 192 | 3F225107DAA93F3A118ADE77EE2A814F /* ACSlider.xcconfig */, 193 | 770E5D065A49FD124904FAC09C0CFCE7 /* ACSlider-dummy.m */, 194 | F7825988D939A8FD5179CE3FF26AE20F /* ACSlider-prefix.pch */, 195 | 8324E150D8EDCB2B5A5E9C9CE33C1A69 /* ACSlider-umbrella.h */, 196 | 5DCFF69BF3BE87E89E80A0FC698EBA62 /* Info.plist */, 197 | 139F10079F852BC98DA2EE35DE3D7E38 /* ResourceBundle-ACSlider-Info.plist */, 198 | ); 199 | name = "Support Files"; 200 | path = "../Target Support Files/ACSlider"; 201 | sourceTree = ""; 202 | }; 203 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | 5E0D919E635D23B70123790B8308F8EF /* iOS */, 207 | ); 208 | name = Frameworks; 209 | sourceTree = ""; 210 | }; 211 | /* End PBXGroup section */ 212 | 213 | /* Begin PBXHeadersBuildPhase section */ 214 | 2DA489079D4214DEC25E1C38125493A9 /* Headers */ = { 215 | isa = PBXHeadersBuildPhase; 216 | buildActionMask = 2147483647; 217 | files = ( 218 | 3C9BE8A80ADCE5694644A03A88E7F5E1 /* ACSlider-umbrella.h in Headers */, 219 | ); 220 | runOnlyForDeploymentPostprocessing = 0; 221 | }; 222 | 8E3C40FAEDC971477338B5CB580F6D2F /* Headers */ = { 223 | isa = PBXHeadersBuildPhase; 224 | buildActionMask = 2147483647; 225 | files = ( 226 | B417247487BBE7B590FB6EEA488BA7EB /* Pods-Alarm Clock-umbrella.h in Headers */, 227 | ); 228 | runOnlyForDeploymentPostprocessing = 0; 229 | }; 230 | /* End PBXHeadersBuildPhase section */ 231 | 232 | /* Begin PBXNativeTarget section */ 233 | 28874AAC518CD14AEC0059C431C3A177 /* Pods-Alarm Clock */ = { 234 | isa = PBXNativeTarget; 235 | buildConfigurationList = 3424472FAA7B96BF86FC12042DDD1A1E /* Build configuration list for PBXNativeTarget "Pods-Alarm Clock" */; 236 | buildPhases = ( 237 | 287FBB3BA341D62D7B87C13462A17B0D /* Sources */, 238 | 6B2C663D374AA56C3DB87F117391D754 /* Frameworks */, 239 | 8E3C40FAEDC971477338B5CB580F6D2F /* Headers */, 240 | ); 241 | buildRules = ( 242 | ); 243 | dependencies = ( 244 | 6F0BAD491EEF783A3B130EB5FFDD5BB8 /* PBXTargetDependency */, 245 | ); 246 | name = "Pods-Alarm Clock"; 247 | productName = "Pods-Alarm Clock"; 248 | productReference = 39CB10A55587C7B537E197E69EEBBA90 /* Pods_Alarm_Clock.framework */; 249 | productType = "com.apple.product-type.framework"; 250 | }; 251 | 3B8E8FED8A25D43AF547BCA88ADA635F /* ACSlider-ACSlider */ = { 252 | isa = PBXNativeTarget; 253 | buildConfigurationList = 922B4F271D0EA9A910FB2D745C084F88 /* Build configuration list for PBXNativeTarget "ACSlider-ACSlider" */; 254 | buildPhases = ( 255 | FF9AD45DB0451B84A05AEED29641AA24 /* Sources */, 256 | 3537815BE6F1757DBF721F0C3AB427D1 /* Frameworks */, 257 | 0DC120ECBEDF0661BD04DAA719D57892 /* Resources */, 258 | ); 259 | buildRules = ( 260 | ); 261 | dependencies = ( 262 | ); 263 | name = "ACSlider-ACSlider"; 264 | productName = "ACSlider-ACSlider"; 265 | productReference = 757CB626190C98FF56D99164E6A955E7 /* ACSlider.bundle */; 266 | productType = "com.apple.product-type.bundle"; 267 | }; 268 | 8B06F41799DCB3B15F7D6D5BB5B58CBA /* ACSlider */ = { 269 | isa = PBXNativeTarget; 270 | buildConfigurationList = 565A1C0AEE2ED41B05E008CD2ADA8911 /* Build configuration list for PBXNativeTarget "ACSlider" */; 271 | buildPhases = ( 272 | 8CE1D769AE39D6647592CFC074DDE309 /* Sources */, 273 | 8CE6F11EEC9FA3C76ECFE397227FB072 /* Frameworks */, 274 | B03264035D57BE17190B1C017F48AC9E /* Resources */, 275 | 2DA489079D4214DEC25E1C38125493A9 /* Headers */, 276 | ); 277 | buildRules = ( 278 | ); 279 | dependencies = ( 280 | 8FAFDACC9C76799ABD4484B511944CC3 /* PBXTargetDependency */, 281 | ); 282 | name = ACSlider; 283 | productName = ACSlider; 284 | productReference = F7DF19212964B0F6CBE23461FEAFBC7D /* ACSlider.framework */; 285 | productType = "com.apple.product-type.framework"; 286 | }; 287 | /* End PBXNativeTarget section */ 288 | 289 | /* Begin PBXProject section */ 290 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 291 | isa = PBXProject; 292 | attributes = { 293 | LastSwiftUpdateCheck = 0930; 294 | LastUpgradeCheck = 1010; 295 | }; 296 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 297 | compatibilityVersion = "Xcode 3.2"; 298 | developmentRegion = English; 299 | hasScannedForEncodings = 0; 300 | knownRegions = ( 301 | en, 302 | ); 303 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 304 | productRefGroup = 33CB717581DFB70928FCEF6E7BFD2E7C /* Products */; 305 | projectDirPath = ""; 306 | projectRoot = ""; 307 | targets = ( 308 | 8B06F41799DCB3B15F7D6D5BB5B58CBA /* ACSlider */, 309 | 3B8E8FED8A25D43AF547BCA88ADA635F /* ACSlider-ACSlider */, 310 | 28874AAC518CD14AEC0059C431C3A177 /* Pods-Alarm Clock */, 311 | ); 312 | }; 313 | /* End PBXProject section */ 314 | 315 | /* Begin PBXResourcesBuildPhase section */ 316 | 0DC120ECBEDF0661BD04DAA719D57892 /* Resources */ = { 317 | isa = PBXResourcesBuildPhase; 318 | buildActionMask = 2147483647; 319 | files = ( 320 | AB944ED33F025002FFCB25593D3EC3EC /* BebasNeueWhatever.ttf in Resources */, 321 | 5E681CD54944B041D51B637D047AF280 /* Montserrat-SemiBold.ttf in Resources */, 322 | ); 323 | runOnlyForDeploymentPostprocessing = 0; 324 | }; 325 | B03264035D57BE17190B1C017F48AC9E /* Resources */ = { 326 | isa = PBXResourcesBuildPhase; 327 | buildActionMask = 2147483647; 328 | files = ( 329 | 64397C1575A4DB61E713DFC6292392BC /* ACSlider.bundle in Resources */, 330 | ); 331 | runOnlyForDeploymentPostprocessing = 0; 332 | }; 333 | /* End PBXResourcesBuildPhase section */ 334 | 335 | /* Begin PBXSourcesBuildPhase section */ 336 | 287FBB3BA341D62D7B87C13462A17B0D /* Sources */ = { 337 | isa = PBXSourcesBuildPhase; 338 | buildActionMask = 2147483647; 339 | files = ( 340 | 7A2ADE6DE642D5C99AE740C8C37050CE /* Pods-Alarm Clock-dummy.m in Sources */, 341 | ); 342 | runOnlyForDeploymentPostprocessing = 0; 343 | }; 344 | 8CE1D769AE39D6647592CFC074DDE309 /* Sources */ = { 345 | isa = PBXSourcesBuildPhase; 346 | buildActionMask = 2147483647; 347 | files = ( 348 | C9F4CD7F7697CBC38D72310A7D0E3875 /* ACSlider-dummy.m in Sources */, 349 | 0995D3B1E000E06DE17408B40B374AD2 /* ACSlider.swift in Sources */, 350 | 208912AE53AA4B8EB13F6FA7ED21D373 /* CircleView.swift in Sources */, 351 | F924550F06991D723D7147B0CC0CF886 /* PodFontsHelper.swift in Sources */, 352 | CA7F9F3A07718AFDBDDF0B34C393BC6B /* ThumbView.swift in Sources */, 353 | FB1FEC4EF3D05EE229D836A7D6062A25 /* UIViewHelpers.swift in Sources */, 354 | ); 355 | runOnlyForDeploymentPostprocessing = 0; 356 | }; 357 | FF9AD45DB0451B84A05AEED29641AA24 /* Sources */ = { 358 | isa = PBXSourcesBuildPhase; 359 | buildActionMask = 2147483647; 360 | files = ( 361 | ); 362 | runOnlyForDeploymentPostprocessing = 0; 363 | }; 364 | /* End PBXSourcesBuildPhase section */ 365 | 366 | /* Begin PBXTargetDependency section */ 367 | 6F0BAD491EEF783A3B130EB5FFDD5BB8 /* PBXTargetDependency */ = { 368 | isa = PBXTargetDependency; 369 | name = ACSlider; 370 | target = 8B06F41799DCB3B15F7D6D5BB5B58CBA /* ACSlider */; 371 | targetProxy = 8596120A745FCDD638EE85B61C5799C3 /* PBXContainerItemProxy */; 372 | }; 373 | 8FAFDACC9C76799ABD4484B511944CC3 /* PBXTargetDependency */ = { 374 | isa = PBXTargetDependency; 375 | name = "ACSlider-ACSlider"; 376 | target = 3B8E8FED8A25D43AF547BCA88ADA635F /* ACSlider-ACSlider */; 377 | targetProxy = F6278E3ABBB856C97EA64FE8A10BA08C /* PBXContainerItemProxy */; 378 | }; 379 | /* End PBXTargetDependency section */ 380 | 381 | /* Begin XCBuildConfiguration section */ 382 | 1C7D067881137D61BCA6E521CE66ED26 /* Release */ = { 383 | isa = XCBuildConfiguration; 384 | baseConfigurationReference = 55ED51985251FB7915290B152675F2BF /* Pods-Alarm Clock.release.xcconfig */; 385 | buildSettings = { 386 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 387 | CLANG_ENABLE_OBJC_WEAK = NO; 388 | CODE_SIGN_IDENTITY = ""; 389 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 390 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 391 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 392 | CURRENT_PROJECT_VERSION = 1; 393 | DEFINES_MODULE = YES; 394 | DYLIB_COMPATIBILITY_VERSION = 1; 395 | DYLIB_CURRENT_VERSION = 1; 396 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 397 | INFOPLIST_FILE = "Target Support Files/Pods-Alarm Clock/Info.plist"; 398 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 399 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 400 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 401 | MACH_O_TYPE = staticlib; 402 | MODULEMAP_FILE = "Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock.modulemap"; 403 | OTHER_LDFLAGS = ""; 404 | OTHER_LIBTOOLFLAGS = ""; 405 | PODS_ROOT = "$(SRCROOT)"; 406 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 407 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 408 | SDKROOT = iphoneos; 409 | SKIP_INSTALL = YES; 410 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 411 | TARGETED_DEVICE_FAMILY = "1,2"; 412 | VALIDATE_PRODUCT = YES; 413 | VERSIONING_SYSTEM = "apple-generic"; 414 | VERSION_INFO_PREFIX = ""; 415 | }; 416 | name = Release; 417 | }; 418 | 553022A828EE1991F07D2D73F565AEF8 /* Debug */ = { 419 | isa = XCBuildConfiguration; 420 | buildSettings = { 421 | ALWAYS_SEARCH_USER_PATHS = NO; 422 | CLANG_ANALYZER_NONNULL = YES; 423 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 424 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 425 | CLANG_CXX_LIBRARY = "libc++"; 426 | CLANG_ENABLE_MODULES = YES; 427 | CLANG_ENABLE_OBJC_ARC = YES; 428 | CLANG_ENABLE_OBJC_WEAK = YES; 429 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 430 | CLANG_WARN_BOOL_CONVERSION = YES; 431 | CLANG_WARN_COMMA = YES; 432 | CLANG_WARN_CONSTANT_CONVERSION = YES; 433 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 434 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 435 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 436 | CLANG_WARN_EMPTY_BODY = YES; 437 | CLANG_WARN_ENUM_CONVERSION = YES; 438 | CLANG_WARN_INFINITE_RECURSION = YES; 439 | CLANG_WARN_INT_CONVERSION = YES; 440 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 441 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 442 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 443 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 444 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 445 | CLANG_WARN_STRICT_PROTOTYPES = YES; 446 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 447 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 448 | CLANG_WARN_UNREACHABLE_CODE = YES; 449 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 450 | CODE_SIGNING_ALLOWED = NO; 451 | CODE_SIGNING_REQUIRED = NO; 452 | COPY_PHASE_STRIP = NO; 453 | DEBUG_INFORMATION_FORMAT = dwarf; 454 | ENABLE_STRICT_OBJC_MSGSEND = YES; 455 | ENABLE_TESTABILITY = YES; 456 | GCC_C_LANGUAGE_STANDARD = gnu11; 457 | GCC_DYNAMIC_NO_PIC = NO; 458 | GCC_NO_COMMON_BLOCKS = YES; 459 | GCC_OPTIMIZATION_LEVEL = 0; 460 | GCC_PREPROCESSOR_DEFINITIONS = ( 461 | "POD_CONFIGURATION_DEBUG=1", 462 | "DEBUG=1", 463 | "$(inherited)", 464 | ); 465 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 466 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 467 | GCC_WARN_UNDECLARED_SELECTOR = YES; 468 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 469 | GCC_WARN_UNUSED_FUNCTION = YES; 470 | GCC_WARN_UNUSED_VARIABLE = YES; 471 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 472 | MTL_ENABLE_DEBUG_INFO = YES; 473 | ONLY_ACTIVE_ARCH = YES; 474 | PRODUCT_NAME = "$(TARGET_NAME)"; 475 | STRIP_INSTALLED_PRODUCT = NO; 476 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 477 | SYMROOT = "${SRCROOT}/../build"; 478 | }; 479 | name = Debug; 480 | }; 481 | 58CE816B060A41D32CEC095441D0E3E0 /* Release */ = { 482 | isa = XCBuildConfiguration; 483 | buildSettings = { 484 | ALWAYS_SEARCH_USER_PATHS = NO; 485 | CLANG_ANALYZER_NONNULL = YES; 486 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 487 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 488 | CLANG_CXX_LIBRARY = "libc++"; 489 | CLANG_ENABLE_MODULES = YES; 490 | CLANG_ENABLE_OBJC_ARC = YES; 491 | CLANG_ENABLE_OBJC_WEAK = YES; 492 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 493 | CLANG_WARN_BOOL_CONVERSION = YES; 494 | CLANG_WARN_COMMA = YES; 495 | CLANG_WARN_CONSTANT_CONVERSION = YES; 496 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 497 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 498 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 499 | CLANG_WARN_EMPTY_BODY = YES; 500 | CLANG_WARN_ENUM_CONVERSION = YES; 501 | CLANG_WARN_INFINITE_RECURSION = YES; 502 | CLANG_WARN_INT_CONVERSION = YES; 503 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 504 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 505 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 506 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 507 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 508 | CLANG_WARN_STRICT_PROTOTYPES = YES; 509 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 510 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 511 | CLANG_WARN_UNREACHABLE_CODE = YES; 512 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 513 | CODE_SIGNING_ALLOWED = NO; 514 | CODE_SIGNING_REQUIRED = NO; 515 | COPY_PHASE_STRIP = NO; 516 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 517 | ENABLE_NS_ASSERTIONS = NO; 518 | ENABLE_STRICT_OBJC_MSGSEND = YES; 519 | GCC_C_LANGUAGE_STANDARD = gnu11; 520 | GCC_NO_COMMON_BLOCKS = YES; 521 | GCC_PREPROCESSOR_DEFINITIONS = ( 522 | "POD_CONFIGURATION_RELEASE=1", 523 | "$(inherited)", 524 | ); 525 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 526 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 527 | GCC_WARN_UNDECLARED_SELECTOR = YES; 528 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 529 | GCC_WARN_UNUSED_FUNCTION = YES; 530 | GCC_WARN_UNUSED_VARIABLE = YES; 531 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 532 | MTL_ENABLE_DEBUG_INFO = NO; 533 | PRODUCT_NAME = "$(TARGET_NAME)"; 534 | STRIP_INSTALLED_PRODUCT = NO; 535 | SWIFT_COMPILATION_MODE = wholemodule; 536 | SYMROOT = "${SRCROOT}/../build"; 537 | }; 538 | name = Release; 539 | }; 540 | 69097D58FC64AB697C4056601DD97CF9 /* Debug */ = { 541 | isa = XCBuildConfiguration; 542 | baseConfigurationReference = 3F225107DAA93F3A118ADE77EE2A814F /* ACSlider.xcconfig */; 543 | buildSettings = { 544 | CODE_SIGN_IDENTITY = "iPhone Developer"; 545 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ACSlider"; 546 | INFOPLIST_FILE = "Target Support Files/ACSlider/ResourceBundle-ACSlider-Info.plist"; 547 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 548 | PRODUCT_NAME = ACSlider; 549 | SDKROOT = iphoneos; 550 | SKIP_INSTALL = YES; 551 | TARGETED_DEVICE_FAMILY = "1,2"; 552 | WRAPPER_EXTENSION = bundle; 553 | }; 554 | name = Debug; 555 | }; 556 | 6A4709E61A486649C2D7E52988BE7F5F /* Debug */ = { 557 | isa = XCBuildConfiguration; 558 | baseConfigurationReference = 3F225107DAA93F3A118ADE77EE2A814F /* ACSlider.xcconfig */; 559 | buildSettings = { 560 | CLANG_ENABLE_OBJC_WEAK = NO; 561 | CODE_SIGN_IDENTITY = ""; 562 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 563 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 564 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 565 | CURRENT_PROJECT_VERSION = 1; 566 | DEFINES_MODULE = YES; 567 | DYLIB_COMPATIBILITY_VERSION = 1; 568 | DYLIB_CURRENT_VERSION = 1; 569 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 570 | GCC_PREFIX_HEADER = "Target Support Files/ACSlider/ACSlider-prefix.pch"; 571 | INFOPLIST_FILE = "Target Support Files/ACSlider/Info.plist"; 572 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 573 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 574 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 575 | MODULEMAP_FILE = "Target Support Files/ACSlider/ACSlider.modulemap"; 576 | PRODUCT_MODULE_NAME = ACSlider; 577 | PRODUCT_NAME = ACSlider; 578 | SDKROOT = iphoneos; 579 | SKIP_INSTALL = YES; 580 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 581 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 582 | SWIFT_VERSION = 4.2; 583 | TARGETED_DEVICE_FAMILY = "1,2"; 584 | VERSIONING_SYSTEM = "apple-generic"; 585 | VERSION_INFO_PREFIX = ""; 586 | }; 587 | name = Debug; 588 | }; 589 | 700BB24D1439E90A47023C31B6BEF20E /* Release */ = { 590 | isa = XCBuildConfiguration; 591 | baseConfigurationReference = 3F225107DAA93F3A118ADE77EE2A814F /* ACSlider.xcconfig */; 592 | buildSettings = { 593 | CLANG_ENABLE_OBJC_WEAK = NO; 594 | CODE_SIGN_IDENTITY = ""; 595 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 596 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 597 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 598 | CURRENT_PROJECT_VERSION = 1; 599 | DEFINES_MODULE = YES; 600 | DYLIB_COMPATIBILITY_VERSION = 1; 601 | DYLIB_CURRENT_VERSION = 1; 602 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 603 | GCC_PREFIX_HEADER = "Target Support Files/ACSlider/ACSlider-prefix.pch"; 604 | INFOPLIST_FILE = "Target Support Files/ACSlider/Info.plist"; 605 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 606 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 607 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 608 | MODULEMAP_FILE = "Target Support Files/ACSlider/ACSlider.modulemap"; 609 | PRODUCT_MODULE_NAME = ACSlider; 610 | PRODUCT_NAME = ACSlider; 611 | SDKROOT = iphoneos; 612 | SKIP_INSTALL = YES; 613 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 614 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 615 | SWIFT_VERSION = 4.2; 616 | TARGETED_DEVICE_FAMILY = "1,2"; 617 | VALIDATE_PRODUCT = YES; 618 | VERSIONING_SYSTEM = "apple-generic"; 619 | VERSION_INFO_PREFIX = ""; 620 | }; 621 | name = Release; 622 | }; 623 | 7A5F79F17D42B9C7456EC4871C6948F2 /* Release */ = { 624 | isa = XCBuildConfiguration; 625 | baseConfigurationReference = 3F225107DAA93F3A118ADE77EE2A814F /* ACSlider.xcconfig */; 626 | buildSettings = { 627 | CODE_SIGN_IDENTITY = "iPhone Developer"; 628 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ACSlider"; 629 | INFOPLIST_FILE = "Target Support Files/ACSlider/ResourceBundle-ACSlider-Info.plist"; 630 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 631 | PRODUCT_NAME = ACSlider; 632 | SDKROOT = iphoneos; 633 | SKIP_INSTALL = YES; 634 | TARGETED_DEVICE_FAMILY = "1,2"; 635 | WRAPPER_EXTENSION = bundle; 636 | }; 637 | name = Release; 638 | }; 639 | B82DA789B1A6F343421860951B0DC91A /* Debug */ = { 640 | isa = XCBuildConfiguration; 641 | baseConfigurationReference = 28FAA5A48145EF67A92D8CB842764E07 /* Pods-Alarm Clock.debug.xcconfig */; 642 | buildSettings = { 643 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 644 | CLANG_ENABLE_OBJC_WEAK = NO; 645 | CODE_SIGN_IDENTITY = ""; 646 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 647 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 648 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 649 | CURRENT_PROJECT_VERSION = 1; 650 | DEFINES_MODULE = YES; 651 | DYLIB_COMPATIBILITY_VERSION = 1; 652 | DYLIB_CURRENT_VERSION = 1; 653 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 654 | INFOPLIST_FILE = "Target Support Files/Pods-Alarm Clock/Info.plist"; 655 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 656 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 657 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 658 | MACH_O_TYPE = staticlib; 659 | MODULEMAP_FILE = "Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock.modulemap"; 660 | OTHER_LDFLAGS = ""; 661 | OTHER_LIBTOOLFLAGS = ""; 662 | PODS_ROOT = "$(SRCROOT)"; 663 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 664 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 665 | SDKROOT = iphoneos; 666 | SKIP_INSTALL = YES; 667 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 668 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 669 | TARGETED_DEVICE_FAMILY = "1,2"; 670 | VERSIONING_SYSTEM = "apple-generic"; 671 | VERSION_INFO_PREFIX = ""; 672 | }; 673 | name = Debug; 674 | }; 675 | /* End XCBuildConfiguration section */ 676 | 677 | /* Begin XCConfigurationList section */ 678 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 679 | isa = XCConfigurationList; 680 | buildConfigurations = ( 681 | 553022A828EE1991F07D2D73F565AEF8 /* Debug */, 682 | 58CE816B060A41D32CEC095441D0E3E0 /* Release */, 683 | ); 684 | defaultConfigurationIsVisible = 0; 685 | defaultConfigurationName = Release; 686 | }; 687 | 3424472FAA7B96BF86FC12042DDD1A1E /* Build configuration list for PBXNativeTarget "Pods-Alarm Clock" */ = { 688 | isa = XCConfigurationList; 689 | buildConfigurations = ( 690 | B82DA789B1A6F343421860951B0DC91A /* Debug */, 691 | 1C7D067881137D61BCA6E521CE66ED26 /* Release */, 692 | ); 693 | defaultConfigurationIsVisible = 0; 694 | defaultConfigurationName = Release; 695 | }; 696 | 565A1C0AEE2ED41B05E008CD2ADA8911 /* Build configuration list for PBXNativeTarget "ACSlider" */ = { 697 | isa = XCConfigurationList; 698 | buildConfigurations = ( 699 | 6A4709E61A486649C2D7E52988BE7F5F /* Debug */, 700 | 700BB24D1439E90A47023C31B6BEF20E /* Release */, 701 | ); 702 | defaultConfigurationIsVisible = 0; 703 | defaultConfigurationName = Release; 704 | }; 705 | 922B4F271D0EA9A910FB2D745C084F88 /* Build configuration list for PBXNativeTarget "ACSlider-ACSlider" */ = { 706 | isa = XCConfigurationList; 707 | buildConfigurations = ( 708 | 69097D58FC64AB697C4056601DD97CF9 /* Debug */, 709 | 7A5F79F17D42B9C7456EC4871C6948F2 /* Release */, 710 | ); 711 | defaultConfigurationIsVisible = 0; 712 | defaultConfigurationName = Release; 713 | }; 714 | /* End XCConfigurationList section */ 715 | }; 716 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 717 | } 718 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ACSlider/ACSlider-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ACSlider : NSObject 3 | @end 4 | @implementation PodsDummy_ACSlider 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ACSlider/ACSlider-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ACSlider/ACSlider-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double ACSliderVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char ACSliderVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ACSlider/ACSlider.modulemap: -------------------------------------------------------------------------------- 1 | framework module ACSlider { 2 | umbrella header "ACSlider-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ACSlider/ACSlider.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ACSlider 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/ACSlider 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ACSlider/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ACSlider/ResourceBundle-ACSlider-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | ${PRODUCT_BUNDLE_IDENTIFIER} 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | ${PRODUCT_NAME} 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0.2 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## ACSlider 5 | 6 | MIT License 7 | 8 | Copyright (c) 2019 Redmadrobot 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2019 Redmadrobot 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | ACSlider 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Alarm_Clock : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Alarm_Clock 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | 145 | if [[ "$CONFIGURATION" == "Debug" ]]; then 146 | install_framework "${BUILT_PRODUCTS_DIR}/ACSlider/ACSlider.framework" 147 | fi 148 | if [[ "$CONFIGURATION" == "Release" ]]; then 149 | install_framework "${BUILT_PRODUCTS_DIR}/ACSlider/ACSlider.framework" 150 | fi 151 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 152 | wait 153 | fi 154 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_Alarm_ClockVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_Alarm_ClockVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ACSlider" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ACSlider/ACSlider.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "ACSlider" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Alarm_Clock { 2 | umbrella header "Pods-Alarm Clock-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Alarm Clock/Pods-Alarm Clock.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ACSlider" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ACSlider/ACSlider.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "ACSlider" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Redmadrobot](https://github.com/Redmadrobot/Alarm-Clock/blob/master/header.svg)](http://redmadrobot.com) 2 | 3 | 4 |
5 | 6 | # ⏰ Alarm Clock 7 | [![Redmadrobot](https://img.shields.io/badge/made%20by%20robots-for%20humans-EB5440.svg)](https://github.com/RedMadRobot) [![Redmadrobot](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RedMadRobot/Alarm-Clock/blob/master/LICENSE) 8 | 9 | 10 |
11 | 12 | Proof of concept for our [Colored Alarm Clock Interface shot @ Dribbble](https://dribbble.com/shots/5054031-Colored-Alarm-Clock-Interface) 13 | 14 | 15 | 16 | We've [opensourced](https://github.com/Redmadrobot/ACSlider) slider implemented for this shot. Enjoy! 17 | 18 | Slider implemented as a subclass of UIControl. You can set its title and max value right in Attributes Inspector in Interface Builder, thanks to @IBInspectable. Also you can choose Slider color using Tint Color property. And there is no need to run simulator to see final result – components are fully rendered in storyboard by @IBDesignable. 19 | 20 | 21 | 22 | Feel free to use this code in your projects and [![](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/Firmach) me if you have any questions or suggestions. 23 | 24 |
25 | 26 | ## License 27 | 28 | Alarm Clock is available under the MIT license. 29 | 30 |
31 | 32 | [![Redmadrobot](https://github.com/Redmadrobot/Alarm-Clock/blob/master/robot.svg)](http://redmadrobot.com) 33 | -------------------------------------------------------------------------------- /header.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 14 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/preview.gif -------------------------------------------------------------------------------- /robot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 15 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /xcode-interface-builder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/Alarm-Clock/f989dd3bc24a6cdc6ef99c6eb5e1cfa07b80c03a/xcode-interface-builder.png --------------------------------------------------------------------------------