Showing
100 changed files
with
4669 additions
and
0 deletions
Too many changes to show.
To preserve performance only 100 of 100+ files are displayed.
Fonts + Extension/Fonts + Extension.swift
0 → 100644
| 1 | +// | ||
| 2 | +// Fonts + Extension.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 02.06.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +enum SkModernistFontType: String { | ||
| 11 | + case bold = "Sk-Modernist-Bold" | ||
| 12 | + case mono = "Sk-Modernist-Mono" | ||
| 13 | + case regular = "Sk-Modernist-Regular" | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +extension UIFont { | ||
| 17 | + static func roboto(type: SkModernistFontType, ofSize: CGFloat) -> UIFont { | ||
| 18 | + if let font = UIFont(name: type.rawValue, size: ofSize) { | ||
| 19 | + return font | ||
| 20 | + } else { | ||
| 21 | + fatalError("Font '\(type.rawValue)' does not exist.❌") | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | +} |
InterQR-Internship.xcodeproj/project.pbxproj
0 → 100644
| 1 | +// !$*UTF8*$! | ||
| 2 | +{ | ||
| 3 | + archiveVersion = 1; | ||
| 4 | + classes = { | ||
| 5 | + }; | ||
| 6 | + objectVersion = 55; | ||
| 7 | + objects = { | ||
| 8 | + | ||
| 9 | +/* Begin PBXBuildFile section */ | ||
| 10 | + 17058D52284A4F150078DD82 /* CodeVerificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17058D51284A4F150078DD82 /* CodeVerificationViewController.swift */; }; | ||
| 11 | + 17058D54284A4F670078DD82 /* CodeVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17058D53284A4F670078DD82 /* CodeVerificationView.swift */; }; | ||
| 12 | + 17287C602848AD8D00AA7113 /* Fonts + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17287C5F2848AD8D00AA7113 /* Fonts + Extension.swift */; }; | ||
| 13 | + 17287C692848C69600AA7113 /* Sk-Modernist-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 17287C642848C69600AA7113 /* Sk-Modernist-Bold.otf */; }; | ||
| 14 | + 17287C6A2848C69600AA7113 /* Sk-Modernist-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 17287C652848C69600AA7113 /* Sk-Modernist-Regular.otf */; }; | ||
| 15 | + 17287C6B2848C69600AA7113 /* license.txt in Resources */ = {isa = PBXBuildFile; fileRef = 17287C662848C69600AA7113 /* license.txt */; }; | ||
| 16 | + 17287C6C2848C69600AA7113 /* fontsme.com.url in Resources */ = {isa = PBXBuildFile; fileRef = 17287C672848C69600AA7113 /* fontsme.com.url */; }; | ||
| 17 | + 17287C6D2848C69600AA7113 /* Sk-Modernist-Mono.otf in Resources */ = {isa = PBXBuildFile; fileRef = 17287C682848C69600AA7113 /* Sk-Modernist-Mono.otf */; }; | ||
| 18 | + 1729E21D28465163006C7C29 /* PhoneService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729E21C28465162006C7C29 /* PhoneService.swift */; }; | ||
| 19 | + 1729E21F28465595006C7C29 /* PhoneNumberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729E21E28465595006C7C29 /* PhoneNumberView.swift */; }; | ||
| 20 | + 1729E22128465DA9006C7C29 /* PhonePickerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729E22028465DA9006C7C29 /* PhonePickerModel.swift */; }; | ||
| 21 | + 1732AC71284769B50042C9F7 /* TextFieldWithPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1732AC70284769B50042C9F7 /* TextFieldWithPadding.swift */; }; | ||
| 22 | + 1732AC7328477BB40042C9F7 /* PickerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1732AC7228477BB40042C9F7 /* PickerViewCell.swift */; }; | ||
| 23 | + 17CF9EE12844ED8F000D8077 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EE02844ED8F000D8077 /* AppDelegate.swift */; }; | ||
| 24 | + 17CF9EE32844ED8F000D8077 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EE22844ED8F000D8077 /* SceneDelegate.swift */; }; | ||
| 25 | + 17CF9EE52844ED8F000D8077 /* VerificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EE42844ED8F000D8077 /* VerificationViewController.swift */; }; | ||
| 26 | + 17CF9EEA2844ED90000D8077 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 17CF9EE92844ED90000D8077 /* Assets.xcassets */; }; | ||
| 27 | + 17CF9EED2844ED90000D8077 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 17CF9EEB2844ED90000D8077 /* LaunchScreen.storyboard */; }; | ||
| 28 | + 17CF9EF72844EF8B000D8077 /* VerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EF62844EF8B000D8077 /* VerificationView.swift */; }; | ||
| 29 | + CADC9D02EAEA6638FF235EF7 /* Pods_InterQR_Internship.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C589B3DBEEEE67D9D0AD2A /* Pods_InterQR_Internship.framework */; }; | ||
| 30 | +/* End PBXBuildFile section */ | ||
| 31 | + | ||
| 32 | +/* Begin PBXFileReference section */ | ||
| 33 | + 17058D51284A4F150078DD82 /* CodeVerificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeVerificationViewController.swift; sourceTree = "<group>"; }; | ||
| 34 | + 17058D53284A4F670078DD82 /* CodeVerificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeVerificationView.swift; sourceTree = "<group>"; }; | ||
| 35 | + 17287C5F2848AD8D00AA7113 /* Fonts + Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Fonts + Extension.swift"; sourceTree = "<group>"; }; | ||
| 36 | + 17287C642848C69600AA7113 /* Sk-Modernist-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Sk-Modernist-Bold.otf"; sourceTree = "<group>"; }; | ||
| 37 | + 17287C652848C69600AA7113 /* Sk-Modernist-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Sk-Modernist-Regular.otf"; sourceTree = "<group>"; }; | ||
| 38 | + 17287C662848C69600AA7113 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = license.txt; path = "../../../../../../Downloads/Sk-Modernist/license.txt"; sourceTree = "<group>"; }; | ||
| 39 | + 17287C672848C69600AA7113 /* fontsme.com.url */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = fontsme.com.url; path = "../../../../../../Downloads/Sk-Modernist/fontsme.com.url"; sourceTree = "<group>"; }; | ||
| 40 | + 17287C682848C69600AA7113 /* Sk-Modernist-Mono.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Sk-Modernist-Mono.otf"; sourceTree = "<group>"; }; | ||
| 41 | + 1729E21C28465162006C7C29 /* PhoneService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneService.swift; sourceTree = "<group>"; }; | ||
| 42 | + 1729E21E28465595006C7C29 /* PhoneNumberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneNumberView.swift; sourceTree = "<group>"; }; | ||
| 43 | + 1729E22028465DA9006C7C29 /* PhonePickerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhonePickerModel.swift; sourceTree = "<group>"; }; | ||
| 44 | + 1732AC70284769B50042C9F7 /* TextFieldWithPadding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldWithPadding.swift; sourceTree = "<group>"; }; | ||
| 45 | + 1732AC7228477BB40042C9F7 /* PickerViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickerViewCell.swift; sourceTree = "<group>"; }; | ||
| 46 | + 17CF9EDD2844ED8F000D8077 /* InterQR-Internship.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "InterQR-Internship.app"; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 47 | + 17CF9EE02844ED8F000D8077 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | ||
| 48 | + 17CF9EE22844ED8F000D8077 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; | ||
| 49 | + 17CF9EE42844ED8F000D8077 /* VerificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerificationViewController.swift; sourceTree = "<group>"; }; | ||
| 50 | + 17CF9EE92844ED90000D8077 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | ||
| 51 | + 17CF9EEC2844ED90000D8077 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | ||
| 52 | + 17CF9EEE2844ED90000D8077 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | ||
| 53 | + 17CF9EF62844EF8B000D8077 /* VerificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerificationView.swift; sourceTree = "<group>"; }; | ||
| 54 | + 5BDBB5A6BD07C19C7C41277E /* Pods-InterQR-Internship.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InterQR-Internship.release.xcconfig"; path = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship.release.xcconfig"; sourceTree = "<group>"; }; | ||
| 55 | + 5DBC5918C180544DDA6F77E2 /* Pods-InterQR-Internship.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InterQR-Internship.debug.xcconfig"; path = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship.debug.xcconfig"; sourceTree = "<group>"; }; | ||
| 56 | + C7C589B3DBEEEE67D9D0AD2A /* Pods_InterQR_Internship.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_InterQR_Internship.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 57 | +/* End PBXFileReference section */ | ||
| 58 | + | ||
| 59 | +/* Begin PBXFrameworksBuildPhase section */ | ||
| 60 | + 17CF9EDA2844ED8F000D8077 /* Frameworks */ = { | ||
| 61 | + isa = PBXFrameworksBuildPhase; | ||
| 62 | + buildActionMask = 2147483647; | ||
| 63 | + files = ( | ||
| 64 | + CADC9D02EAEA6638FF235EF7 /* Pods_InterQR_Internship.framework in Frameworks */, | ||
| 65 | + ); | ||
| 66 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 67 | + }; | ||
| 68 | +/* End PBXFrameworksBuildPhase section */ | ||
| 69 | + | ||
| 70 | +/* Begin PBXGroup section */ | ||
| 71 | + 17287C5E2848AC8800AA7113 /* Fonts + Extension */ = { | ||
| 72 | + isa = PBXGroup; | ||
| 73 | + children = ( | ||
| 74 | + 17287C5F2848AD8D00AA7113 /* Fonts + Extension.swift */, | ||
| 75 | + ); | ||
| 76 | + path = "Fonts + Extension"; | ||
| 77 | + sourceTree = "<group>"; | ||
| 78 | + }; | ||
| 79 | + 17CF9ED42844ED8F000D8077 = { | ||
| 80 | + isa = PBXGroup; | ||
| 81 | + children = ( | ||
| 82 | + 17CF9EDF2844ED8F000D8077 /* InterQR-Internship */, | ||
| 83 | + 17287C5E2848AC8800AA7113 /* Fonts + Extension */, | ||
| 84 | + 17FD60D82848A2CE00957A3A /* Resources */, | ||
| 85 | + 17CF9EDE2844ED8F000D8077 /* Products */, | ||
| 86 | + 86273571ED5441E00D80DE37 /* Pods */, | ||
| 87 | + 35BE87303DBEEF43C5C2D917 /* Frameworks */, | ||
| 88 | + ); | ||
| 89 | + sourceTree = "<group>"; | ||
| 90 | + }; | ||
| 91 | + 17CF9EDE2844ED8F000D8077 /* Products */ = { | ||
| 92 | + isa = PBXGroup; | ||
| 93 | + children = ( | ||
| 94 | + 17CF9EDD2844ED8F000D8077 /* InterQR-Internship.app */, | ||
| 95 | + ); | ||
| 96 | + name = Products; | ||
| 97 | + sourceTree = "<group>"; | ||
| 98 | + }; | ||
| 99 | + 17CF9EDF2844ED8F000D8077 /* InterQR-Internship */ = { | ||
| 100 | + isa = PBXGroup; | ||
| 101 | + children = ( | ||
| 102 | + 17CF9EF42844EF55000D8077 /* Views */, | ||
| 103 | + 17CF9EF52844EF66000D8077 /* Controllers */, | ||
| 104 | + 17CF9EE02844ED8F000D8077 /* AppDelegate.swift */, | ||
| 105 | + 17CF9EE22844ED8F000D8077 /* SceneDelegate.swift */, | ||
| 106 | + 17CF9EE92844ED90000D8077 /* Assets.xcassets */, | ||
| 107 | + 17CF9EEB2844ED90000D8077 /* LaunchScreen.storyboard */, | ||
| 108 | + 17CF9EEE2844ED90000D8077 /* Info.plist */, | ||
| 109 | + 1729E21C28465162006C7C29 /* PhoneService.swift */, | ||
| 110 | + 1729E22028465DA9006C7C29 /* PhonePickerModel.swift */, | ||
| 111 | + ); | ||
| 112 | + path = "InterQR-Internship"; | ||
| 113 | + sourceTree = "<group>"; | ||
| 114 | + }; | ||
| 115 | + 17CF9EF42844EF55000D8077 /* Views */ = { | ||
| 116 | + isa = PBXGroup; | ||
| 117 | + children = ( | ||
| 118 | + 17CF9EF62844EF8B000D8077 /* VerificationView.swift */, | ||
| 119 | + 17058D53284A4F670078DD82 /* CodeVerificationView.swift */, | ||
| 120 | + 1729E21E28465595006C7C29 /* PhoneNumberView.swift */, | ||
| 121 | + 1732AC7228477BB40042C9F7 /* PickerViewCell.swift */, | ||
| 122 | + 1732AC70284769B50042C9F7 /* TextFieldWithPadding.swift */, | ||
| 123 | + ); | ||
| 124 | + path = Views; | ||
| 125 | + sourceTree = "<group>"; | ||
| 126 | + }; | ||
| 127 | + 17CF9EF52844EF66000D8077 /* Controllers */ = { | ||
| 128 | + isa = PBXGroup; | ||
| 129 | + children = ( | ||
| 130 | + 17CF9EE42844ED8F000D8077 /* VerificationViewController.swift */, | ||
| 131 | + 17058D51284A4F150078DD82 /* CodeVerificationViewController.swift */, | ||
| 132 | + ); | ||
| 133 | + path = Controllers; | ||
| 134 | + sourceTree = "<group>"; | ||
| 135 | + }; | ||
| 136 | + 17FD60D82848A2CE00957A3A /* Resources */ = { | ||
| 137 | + isa = PBXGroup; | ||
| 138 | + children = ( | ||
| 139 | + 17FD60D92848A56900957A3A /* Fonts */, | ||
| 140 | + ); | ||
| 141 | + path = Resources; | ||
| 142 | + sourceTree = "<group>"; | ||
| 143 | + }; | ||
| 144 | + 17FD60D92848A56900957A3A /* Fonts */ = { | ||
| 145 | + isa = PBXGroup; | ||
| 146 | + children = ( | ||
| 147 | + 17287C672848C69600AA7113 /* fontsme.com.url */, | ||
| 148 | + 17287C662848C69600AA7113 /* license.txt */, | ||
| 149 | + 17287C642848C69600AA7113 /* Sk-Modernist-Bold.otf */, | ||
| 150 | + 17287C682848C69600AA7113 /* Sk-Modernist-Mono.otf */, | ||
| 151 | + 17287C652848C69600AA7113 /* Sk-Modernist-Regular.otf */, | ||
| 152 | + ); | ||
| 153 | + path = Fonts; | ||
| 154 | + sourceTree = "<group>"; | ||
| 155 | + }; | ||
| 156 | + 35BE87303DBEEF43C5C2D917 /* Frameworks */ = { | ||
| 157 | + isa = PBXGroup; | ||
| 158 | + children = ( | ||
| 159 | + C7C589B3DBEEEE67D9D0AD2A /* Pods_InterQR_Internship.framework */, | ||
| 160 | + ); | ||
| 161 | + name = Frameworks; | ||
| 162 | + sourceTree = "<group>"; | ||
| 163 | + }; | ||
| 164 | + 86273571ED5441E00D80DE37 /* Pods */ = { | ||
| 165 | + isa = PBXGroup; | ||
| 166 | + children = ( | ||
| 167 | + 5DBC5918C180544DDA6F77E2 /* Pods-InterQR-Internship.debug.xcconfig */, | ||
| 168 | + 5BDBB5A6BD07C19C7C41277E /* Pods-InterQR-Internship.release.xcconfig */, | ||
| 169 | + ); | ||
| 170 | + path = Pods; | ||
| 171 | + sourceTree = "<group>"; | ||
| 172 | + }; | ||
| 173 | +/* End PBXGroup section */ | ||
| 174 | + | ||
| 175 | +/* Begin PBXNativeTarget section */ | ||
| 176 | + 17CF9EDC2844ED8F000D8077 /* InterQR-Internship */ = { | ||
| 177 | + isa = PBXNativeTarget; | ||
| 178 | + buildConfigurationList = 17CF9EF12844ED90000D8077 /* Build configuration list for PBXNativeTarget "InterQR-Internship" */; | ||
| 179 | + buildPhases = ( | ||
| 180 | + 02D597CE20BC23D36D22D265 /* [CP] Check Pods Manifest.lock */, | ||
| 181 | + 17CF9ED92844ED8F000D8077 /* Sources */, | ||
| 182 | + 17CF9EDA2844ED8F000D8077 /* Frameworks */, | ||
| 183 | + 17CF9EDB2844ED8F000D8077 /* Resources */, | ||
| 184 | + 156CBF425600953154887DB7 /* [CP] Embed Pods Frameworks */, | ||
| 185 | + ); | ||
| 186 | + buildRules = ( | ||
| 187 | + ); | ||
| 188 | + dependencies = ( | ||
| 189 | + ); | ||
| 190 | + name = "InterQR-Internship"; | ||
| 191 | + productName = "InterQR-Internship"; | ||
| 192 | + productReference = 17CF9EDD2844ED8F000D8077 /* InterQR-Internship.app */; | ||
| 193 | + productType = "com.apple.product-type.application"; | ||
| 194 | + }; | ||
| 195 | +/* End PBXNativeTarget section */ | ||
| 196 | + | ||
| 197 | +/* Begin PBXProject section */ | ||
| 198 | + 17CF9ED52844ED8F000D8077 /* Project object */ = { | ||
| 199 | + isa = PBXProject; | ||
| 200 | + attributes = { | ||
| 201 | + BuildIndependentTargetsInParallel = 1; | ||
| 202 | + LastSwiftUpdateCheck = 1300; | ||
| 203 | + LastUpgradeCheck = 1300; | ||
| 204 | + TargetAttributes = { | ||
| 205 | + 17CF9EDC2844ED8F000D8077 = { | ||
| 206 | + CreatedOnToolsVersion = 13.0; | ||
| 207 | + }; | ||
| 208 | + }; | ||
| 209 | + }; | ||
| 210 | + buildConfigurationList = 17CF9ED82844ED8F000D8077 /* Build configuration list for PBXProject "InterQR-Internship" */; | ||
| 211 | + compatibilityVersion = "Xcode 13.0"; | ||
| 212 | + developmentRegion = en; | ||
| 213 | + hasScannedForEncodings = 0; | ||
| 214 | + knownRegions = ( | ||
| 215 | + en, | ||
| 216 | + Base, | ||
| 217 | + ); | ||
| 218 | + mainGroup = 17CF9ED42844ED8F000D8077; | ||
| 219 | + productRefGroup = 17CF9EDE2844ED8F000D8077 /* Products */; | ||
| 220 | + projectDirPath = ""; | ||
| 221 | + projectRoot = ""; | ||
| 222 | + targets = ( | ||
| 223 | + 17CF9EDC2844ED8F000D8077 /* InterQR-Internship */, | ||
| 224 | + ); | ||
| 225 | + }; | ||
| 226 | +/* End PBXProject section */ | ||
| 227 | + | ||
| 228 | +/* Begin PBXResourcesBuildPhase section */ | ||
| 229 | + 17CF9EDB2844ED8F000D8077 /* Resources */ = { | ||
| 230 | + isa = PBXResourcesBuildPhase; | ||
| 231 | + buildActionMask = 2147483647; | ||
| 232 | + files = ( | ||
| 233 | + 17CF9EED2844ED90000D8077 /* LaunchScreen.storyboard in Resources */, | ||
| 234 | + 17287C6D2848C69600AA7113 /* Sk-Modernist-Mono.otf in Resources */, | ||
| 235 | + 17287C6B2848C69600AA7113 /* license.txt in Resources */, | ||
| 236 | + 17287C692848C69600AA7113 /* Sk-Modernist-Bold.otf in Resources */, | ||
| 237 | + 17287C6A2848C69600AA7113 /* Sk-Modernist-Regular.otf in Resources */, | ||
| 238 | + 17CF9EEA2844ED90000D8077 /* Assets.xcassets in Resources */, | ||
| 239 | + 17287C6C2848C69600AA7113 /* fontsme.com.url in Resources */, | ||
| 240 | + ); | ||
| 241 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 242 | + }; | ||
| 243 | +/* End PBXResourcesBuildPhase section */ | ||
| 244 | + | ||
| 245 | +/* Begin PBXShellScriptBuildPhase section */ | ||
| 246 | + 02D597CE20BC23D36D22D265 /* [CP] Check Pods Manifest.lock */ = { | ||
| 247 | + isa = PBXShellScriptBuildPhase; | ||
| 248 | + buildActionMask = 2147483647; | ||
| 249 | + files = ( | ||
| 250 | + ); | ||
| 251 | + inputFileListPaths = ( | ||
| 252 | + ); | ||
| 253 | + inputPaths = ( | ||
| 254 | + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", | ||
| 255 | + "${PODS_ROOT}/Manifest.lock", | ||
| 256 | + ); | ||
| 257 | + name = "[CP] Check Pods Manifest.lock"; | ||
| 258 | + outputFileListPaths = ( | ||
| 259 | + ); | ||
| 260 | + outputPaths = ( | ||
| 261 | + "$(DERIVED_FILE_DIR)/Pods-InterQR-Internship-checkManifestLockResult.txt", | ||
| 262 | + ); | ||
| 263 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 264 | + shellPath = /bin/sh; | ||
| 265 | + 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"; | ||
| 266 | + showEnvVarsInLog = 0; | ||
| 267 | + }; | ||
| 268 | + 156CBF425600953154887DB7 /* [CP] Embed Pods Frameworks */ = { | ||
| 269 | + isa = PBXShellScriptBuildPhase; | ||
| 270 | + buildActionMask = 2147483647; | ||
| 271 | + files = ( | ||
| 272 | + ); | ||
| 273 | + inputFileListPaths = ( | ||
| 274 | + "${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks-${CONFIGURATION}-input-files.xcfilelist", | ||
| 275 | + ); | ||
| 276 | + name = "[CP] Embed Pods Frameworks"; | ||
| 277 | + outputFileListPaths = ( | ||
| 278 | + "${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks-${CONFIGURATION}-output-files.xcfilelist", | ||
| 279 | + ); | ||
| 280 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 281 | + shellPath = /bin/sh; | ||
| 282 | + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks.sh\"\n"; | ||
| 283 | + showEnvVarsInLog = 0; | ||
| 284 | + }; | ||
| 285 | +/* End PBXShellScriptBuildPhase section */ | ||
| 286 | + | ||
| 287 | +/* Begin PBXSourcesBuildPhase section */ | ||
| 288 | + 17CF9ED92844ED8F000D8077 /* Sources */ = { | ||
| 289 | + isa = PBXSourcesBuildPhase; | ||
| 290 | + buildActionMask = 2147483647; | ||
| 291 | + files = ( | ||
| 292 | + 1729E22128465DA9006C7C29 /* PhonePickerModel.swift in Sources */, | ||
| 293 | + 17058D52284A4F150078DD82 /* CodeVerificationViewController.swift in Sources */, | ||
| 294 | + 1732AC71284769B50042C9F7 /* TextFieldWithPadding.swift in Sources */, | ||
| 295 | + 1732AC7328477BB40042C9F7 /* PickerViewCell.swift in Sources */, | ||
| 296 | + 1729E21F28465595006C7C29 /* PhoneNumberView.swift in Sources */, | ||
| 297 | + 17CF9EE52844ED8F000D8077 /* VerificationViewController.swift in Sources */, | ||
| 298 | + 17058D54284A4F670078DD82 /* CodeVerificationView.swift in Sources */, | ||
| 299 | + 17CF9EE12844ED8F000D8077 /* AppDelegate.swift in Sources */, | ||
| 300 | + 1729E21D28465163006C7C29 /* PhoneService.swift in Sources */, | ||
| 301 | + 17CF9EE32844ED8F000D8077 /* SceneDelegate.swift in Sources */, | ||
| 302 | + 17287C602848AD8D00AA7113 /* Fonts + Extension.swift in Sources */, | ||
| 303 | + 17CF9EF72844EF8B000D8077 /* VerificationView.swift in Sources */, | ||
| 304 | + ); | ||
| 305 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 306 | + }; | ||
| 307 | +/* End PBXSourcesBuildPhase section */ | ||
| 308 | + | ||
| 309 | +/* Begin PBXVariantGroup section */ | ||
| 310 | + 17CF9EEB2844ED90000D8077 /* LaunchScreen.storyboard */ = { | ||
| 311 | + isa = PBXVariantGroup; | ||
| 312 | + children = ( | ||
| 313 | + 17CF9EEC2844ED90000D8077 /* Base */, | ||
| 314 | + ); | ||
| 315 | + name = LaunchScreen.storyboard; | ||
| 316 | + sourceTree = "<group>"; | ||
| 317 | + }; | ||
| 318 | +/* End PBXVariantGroup section */ | ||
| 319 | + | ||
| 320 | +/* Begin XCBuildConfiguration section */ | ||
| 321 | + 17CF9EEF2844ED90000D8077 /* Debug */ = { | ||
| 322 | + isa = XCBuildConfiguration; | ||
| 323 | + buildSettings = { | ||
| 324 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 325 | + CLANG_ANALYZER_NONNULL = YES; | ||
| 326 | + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||
| 327 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; | ||
| 328 | + CLANG_CXX_LIBRARY = "libc++"; | ||
| 329 | + CLANG_ENABLE_MODULES = YES; | ||
| 330 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
| 331 | + CLANG_ENABLE_OBJC_WEAK = YES; | ||
| 332 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 333 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 334 | + CLANG_WARN_COMMA = YES; | ||
| 335 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 336 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 337 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 338 | + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||
| 339 | + CLANG_WARN_EMPTY_BODY = YES; | ||
| 340 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 341 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 342 | + CLANG_WARN_INT_CONVERSION = YES; | ||
| 343 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 344 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 345 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 346 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 347 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 348 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
| 349 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
| 350 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
| 351 | + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||
| 352 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
| 353 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
| 354 | + COPY_PHASE_STRIP = NO; | ||
| 355 | + DEBUG_INFORMATION_FORMAT = dwarf; | ||
| 356 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 357 | + ENABLE_TESTABILITY = YES; | ||
| 358 | + GCC_C_LANGUAGE_STANDARD = gnu11; | ||
| 359 | + GCC_DYNAMIC_NO_PIC = NO; | ||
| 360 | + GCC_NO_COMMON_BLOCKS = YES; | ||
| 361 | + GCC_OPTIMIZATION_LEVEL = 0; | ||
| 362 | + GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 363 | + "DEBUG=1", | ||
| 364 | + "$(inherited)", | ||
| 365 | + ); | ||
| 366 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 367 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 368 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 369 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 370 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 371 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 372 | + IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||
| 373 | + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | ||
| 374 | + MTL_FAST_MATH = YES; | ||
| 375 | + ONLY_ACTIVE_ARCH = YES; | ||
| 376 | + SDKROOT = iphoneos; | ||
| 377 | + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | ||
| 378 | + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||
| 379 | + }; | ||
| 380 | + name = Debug; | ||
| 381 | + }; | ||
| 382 | + 17CF9EF02844ED90000D8077 /* Release */ = { | ||
| 383 | + isa = XCBuildConfiguration; | ||
| 384 | + buildSettings = { | ||
| 385 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 386 | + CLANG_ANALYZER_NONNULL = YES; | ||
| 387 | + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||
| 388 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; | ||
| 389 | + CLANG_CXX_LIBRARY = "libc++"; | ||
| 390 | + CLANG_ENABLE_MODULES = YES; | ||
| 391 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
| 392 | + CLANG_ENABLE_OBJC_WEAK = YES; | ||
| 393 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 394 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 395 | + CLANG_WARN_COMMA = YES; | ||
| 396 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 397 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 398 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 399 | + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||
| 400 | + CLANG_WARN_EMPTY_BODY = YES; | ||
| 401 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 402 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 403 | + CLANG_WARN_INT_CONVERSION = YES; | ||
| 404 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 405 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 406 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 407 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 408 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 409 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
| 410 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
| 411 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
| 412 | + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||
| 413 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
| 414 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
| 415 | + COPY_PHASE_STRIP = NO; | ||
| 416 | + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
| 417 | + ENABLE_NS_ASSERTIONS = NO; | ||
| 418 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 419 | + GCC_C_LANGUAGE_STANDARD = gnu11; | ||
| 420 | + GCC_NO_COMMON_BLOCKS = YES; | ||
| 421 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 422 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 423 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 424 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 425 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 426 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 427 | + IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||
| 428 | + MTL_ENABLE_DEBUG_INFO = NO; | ||
| 429 | + MTL_FAST_MATH = YES; | ||
| 430 | + SDKROOT = iphoneos; | ||
| 431 | + SWIFT_COMPILATION_MODE = wholemodule; | ||
| 432 | + SWIFT_OPTIMIZATION_LEVEL = "-O"; | ||
| 433 | + VALIDATE_PRODUCT = YES; | ||
| 434 | + }; | ||
| 435 | + name = Release; | ||
| 436 | + }; | ||
| 437 | + 17CF9EF22844ED90000D8077 /* Debug */ = { | ||
| 438 | + isa = XCBuildConfiguration; | ||
| 439 | + baseConfigurationReference = 5DBC5918C180544DDA6F77E2 /* Pods-InterQR-Internship.debug.xcconfig */; | ||
| 440 | + buildSettings = { | ||
| 441 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
| 442 | + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | ||
| 443 | + CODE_SIGN_STYLE = Automatic; | ||
| 444 | + CURRENT_PROJECT_VERSION = 1; | ||
| 445 | + GENERATE_INFOPLIST_FILE = YES; | ||
| 446 | + INFOPLIST_FILE = "InterQR-Internship/Info.plist"; | ||
| 447 | + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; | ||
| 448 | + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; | ||
| 449 | + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; | ||
| 450 | + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; | ||
| 451 | + LD_RUNPATH_SEARCH_PATHS = ( | ||
| 452 | + "$(inherited)", | ||
| 453 | + "@executable_path/Frameworks", | ||
| 454 | + ); | ||
| 455 | + MARKETING_VERSION = 1.0; | ||
| 456 | + PRODUCT_BUNDLE_IDENTIFIER = "com.TDY13.InterQR-Internship"; | ||
| 457 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 458 | + SWIFT_EMIT_LOC_STRINGS = YES; | ||
| 459 | + SWIFT_VERSION = 5.0; | ||
| 460 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 461 | + }; | ||
| 462 | + name = Debug; | ||
| 463 | + }; | ||
| 464 | + 17CF9EF32844ED90000D8077 /* Release */ = { | ||
| 465 | + isa = XCBuildConfiguration; | ||
| 466 | + baseConfigurationReference = 5BDBB5A6BD07C19C7C41277E /* Pods-InterQR-Internship.release.xcconfig */; | ||
| 467 | + buildSettings = { | ||
| 468 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
| 469 | + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | ||
| 470 | + CODE_SIGN_STYLE = Automatic; | ||
| 471 | + CURRENT_PROJECT_VERSION = 1; | ||
| 472 | + GENERATE_INFOPLIST_FILE = YES; | ||
| 473 | + INFOPLIST_FILE = "InterQR-Internship/Info.plist"; | ||
| 474 | + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; | ||
| 475 | + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; | ||
| 476 | + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; | ||
| 477 | + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; | ||
| 478 | + LD_RUNPATH_SEARCH_PATHS = ( | ||
| 479 | + "$(inherited)", | ||
| 480 | + "@executable_path/Frameworks", | ||
| 481 | + ); | ||
| 482 | + MARKETING_VERSION = 1.0; | ||
| 483 | + PRODUCT_BUNDLE_IDENTIFIER = "com.TDY13.InterQR-Internship"; | ||
| 484 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 485 | + SWIFT_EMIT_LOC_STRINGS = YES; | ||
| 486 | + SWIFT_VERSION = 5.0; | ||
| 487 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 488 | + }; | ||
| 489 | + name = Release; | ||
| 490 | + }; | ||
| 491 | +/* End XCBuildConfiguration section */ | ||
| 492 | + | ||
| 493 | +/* Begin XCConfigurationList section */ | ||
| 494 | + 17CF9ED82844ED8F000D8077 /* Build configuration list for PBXProject "InterQR-Internship" */ = { | ||
| 495 | + isa = XCConfigurationList; | ||
| 496 | + buildConfigurations = ( | ||
| 497 | + 17CF9EEF2844ED90000D8077 /* Debug */, | ||
| 498 | + 17CF9EF02844ED90000D8077 /* Release */, | ||
| 499 | + ); | ||
| 500 | + defaultConfigurationIsVisible = 0; | ||
| 501 | + defaultConfigurationName = Release; | ||
| 502 | + }; | ||
| 503 | + 17CF9EF12844ED90000D8077 /* Build configuration list for PBXNativeTarget "InterQR-Internship" */ = { | ||
| 504 | + isa = XCConfigurationList; | ||
| 505 | + buildConfigurations = ( | ||
| 506 | + 17CF9EF22844ED90000D8077 /* Debug */, | ||
| 507 | + 17CF9EF32844ED90000D8077 /* Release */, | ||
| 508 | + ); | ||
| 509 | + defaultConfigurationIsVisible = 0; | ||
| 510 | + defaultConfigurationName = Release; | ||
| 511 | + }; | ||
| 512 | +/* End XCConfigurationList section */ | ||
| 513 | + }; | ||
| 514 | + rootObject = 17CF9ED52844ED8F000D8077 /* Project object */; | ||
| 515 | +} |
InterQR-Internship.xcodeproj/xcuserdata/tdy_13.xcuserdatad/xcschemes/xcschememanagement.plist
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | +<plist version="1.0"> | ||
| 4 | +<dict> | ||
| 5 | + <key>SchemeUserState</key> | ||
| 6 | + <dict> | ||
| 7 | + <key>InterQR-Internship.xcscheme_^#shared#^_</key> | ||
| 8 | + <dict> | ||
| 9 | + <key>orderHint</key> | ||
| 10 | + <integer>2</integer> | ||
| 11 | + </dict> | ||
| 12 | + </dict> | ||
| 13 | +</dict> | ||
| 14 | +</plist> |
InterQR-Internship/AppDelegate.swift
0 → 100644
| 1 | +// | ||
| 2 | +// AppDelegate.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 30.05.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +@main | ||
| 11 | +class AppDelegate: UIResponder, UIApplicationDelegate { | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { | ||
| 16 | + // Override point for customization after application launch. | ||
| 17 | + return true | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + // MARK: UISceneSession Lifecycle | ||
| 21 | + | ||
| 22 | + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { | ||
| 23 | + // Called when a new scene session is being created. | ||
| 24 | + // Use this method to select a configuration to create the new scene with. | ||
| 25 | + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { | ||
| 29 | + // Called when the user discards a scene session. | ||
| 30 | + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. | ||
| 31 | + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + | ||
| 35 | +} | ||
| 36 | + |
14.9 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "AUS.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "author" : "xcode", | ||
| 19 | + "version" : 1 | ||
| 20 | + } | ||
| 21 | +} |
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "iphone", | ||
| 5 | + "scale" : "2x", | ||
| 6 | + "size" : "20x20" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "idiom" : "iphone", | ||
| 10 | + "scale" : "3x", | ||
| 11 | + "size" : "20x20" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "idiom" : "iphone", | ||
| 15 | + "scale" : "2x", | ||
| 16 | + "size" : "29x29" | ||
| 17 | + }, | ||
| 18 | + { | ||
| 19 | + "idiom" : "iphone", | ||
| 20 | + "scale" : "3x", | ||
| 21 | + "size" : "29x29" | ||
| 22 | + }, | ||
| 23 | + { | ||
| 24 | + "idiom" : "iphone", | ||
| 25 | + "scale" : "2x", | ||
| 26 | + "size" : "40x40" | ||
| 27 | + }, | ||
| 28 | + { | ||
| 29 | + "idiom" : "iphone", | ||
| 30 | + "scale" : "3x", | ||
| 31 | + "size" : "40x40" | ||
| 32 | + }, | ||
| 33 | + { | ||
| 34 | + "idiom" : "iphone", | ||
| 35 | + "scale" : "2x", | ||
| 36 | + "size" : "60x60" | ||
| 37 | + }, | ||
| 38 | + { | ||
| 39 | + "idiom" : "iphone", | ||
| 40 | + "scale" : "3x", | ||
| 41 | + "size" : "60x60" | ||
| 42 | + }, | ||
| 43 | + { | ||
| 44 | + "idiom" : "ipad", | ||
| 45 | + "scale" : "1x", | ||
| 46 | + "size" : "20x20" | ||
| 47 | + }, | ||
| 48 | + { | ||
| 49 | + "idiom" : "ipad", | ||
| 50 | + "scale" : "2x", | ||
| 51 | + "size" : "20x20" | ||
| 52 | + }, | ||
| 53 | + { | ||
| 54 | + "idiom" : "ipad", | ||
| 55 | + "scale" : "1x", | ||
| 56 | + "size" : "29x29" | ||
| 57 | + }, | ||
| 58 | + { | ||
| 59 | + "idiom" : "ipad", | ||
| 60 | + "scale" : "2x", | ||
| 61 | + "size" : "29x29" | ||
| 62 | + }, | ||
| 63 | + { | ||
| 64 | + "idiom" : "ipad", | ||
| 65 | + "scale" : "1x", | ||
| 66 | + "size" : "40x40" | ||
| 67 | + }, | ||
| 68 | + { | ||
| 69 | + "idiom" : "ipad", | ||
| 70 | + "scale" : "2x", | ||
| 71 | + "size" : "40x40" | ||
| 72 | + }, | ||
| 73 | + { | ||
| 74 | + "idiom" : "ipad", | ||
| 75 | + "scale" : "1x", | ||
| 76 | + "size" : "76x76" | ||
| 77 | + }, | ||
| 78 | + { | ||
| 79 | + "idiom" : "ipad", | ||
| 80 | + "scale" : "2x", | ||
| 81 | + "size" : "76x76" | ||
| 82 | + }, | ||
| 83 | + { | ||
| 84 | + "idiom" : "ipad", | ||
| 85 | + "scale" : "2x", | ||
| 86 | + "size" : "83.5x83.5" | ||
| 87 | + }, | ||
| 88 | + { | ||
| 89 | + "idiom" : "ios-marketing", | ||
| 90 | + "scale" : "1x", | ||
| 91 | + "size" : "1024x1024" | ||
| 92 | + } | ||
| 93 | + ], | ||
| 94 | + "info" : { | ||
| 95 | + "author" : "xcode", | ||
| 96 | + "version" : 1 | ||
| 97 | + } | ||
| 98 | +} |
414 Bytes
580 Bytes
239 Bytes
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "BackPointer.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Arrow - Left 2@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Arrow - Left 2@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "FlagPointer.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Stroke 1@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Stroke 1@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
251 Bytes
287 Bytes
343 Bytes
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "GB.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "icons8-великобритания-48.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "icons8-великобритания-96.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
871 Bytes
1.98 KB
4.07 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "InterQR.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Group 33497-2.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Group 33497-3.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
3.84 KB
6.25 KB
1.83 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "Lock.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Lock@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Lock@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
21.5 KB
71.8 KB
151 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "OffIndicator.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Ellipse 1@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Ellipse 1@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
1.23 KB
1.75 KB
602 Bytes
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "OnIndicator.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Group 1@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Group 1@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
1.01 KB
1.43 KB
567 Bytes
756 Bytes
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "Pointer.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Arrow - Right Circle@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Arrow - Right Circle@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
417 Bytes
2.97 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "8D57D412-3800-4D7C-922A-FF392EC0594E_4_5005_c.jpeg", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Rectangle@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Rectangle@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
82.5 KB
182 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "RectangleWithShadow.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Rectangle@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Rectangle@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
34.6 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "Shield.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Mask Group@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Mask Group@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
72.8 KB
150 KB
22.8 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "Tick.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Stroke 3@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Stroke 3@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
309 Bytes
404 Bytes
237 Bytes
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "USA.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "Icons@2x.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "Icons@3x.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
2.14 KB
3.18 KB
1.02 KB
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> | ||
| 3 | + <dependencies> | ||
| 4 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> | ||
| 5 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
| 6 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
| 7 | + </dependencies> | ||
| 8 | + <scenes> | ||
| 9 | + <!--View Controller--> | ||
| 10 | + <scene sceneID="EHf-IW-A2E"> | ||
| 11 | + <objects> | ||
| 12 | + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> | ||
| 13 | + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | ||
| 14 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | ||
| 15 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
| 16 | + <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> | ||
| 17 | + <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> | ||
| 18 | + </view> | ||
| 19 | + </viewController> | ||
| 20 | + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
| 21 | + </objects> | ||
| 22 | + <point key="canvasLocation" x="53" y="375"/> | ||
| 23 | + </scene> | ||
| 24 | + </scenes> | ||
| 25 | +</document> |
| 1 | +// | ||
| 2 | +// CodeVerificationViewController.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 03.06.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +class CodeVerificationViewController: UIViewController { | ||
| 11 | + | ||
| 12 | + private let codeView = CodeVerificationView() | ||
| 13 | + | ||
| 14 | + override func loadView() { | ||
| 15 | + view = codeView | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + override func viewDidLoad() { | ||
| 19 | + initViewController() | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + private func initViewController() { | ||
| 23 | + codeView.firstTextField.delegate = self | ||
| 24 | + codeView.backButton.addTarget(self, action: #selector(didDismissVC), for: .touchUpInside) | ||
| 25 | + codeView.verifyButton.addTarget(self, action: #selector(didVerifyCode), for: .touchUpInside) | ||
| 26 | + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) | ||
| 27 | + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | +// deinit { | ||
| 31 | +// NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil) | ||
| 32 | +// NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) | ||
| 33 | +// } | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +extension CodeVerificationViewController { | ||
| 37 | + | ||
| 38 | + @objc func didDismissVC() { | ||
| 39 | + dismiss(animated: true, completion: nil) | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @objc func didVerifyCode() { | ||
| 43 | + codeView.firstTextField.backgroundColor = UIColor(red: 255/255, green: 237/255, blue: 240/255, alpha: 1) | ||
| 44 | + codeView.secondTextField.backgroundColor = UIColor(red: 255/255, green: 237/255, blue: 240/255, alpha: 1) | ||
| 45 | + codeView.thirdTextField.backgroundColor = UIColor(red: 255/255, green: 237/255, blue: 240/255, alpha: 1) | ||
| 46 | + codeView.fourthTextField.backgroundColor = UIColor(red: 255/255, green: 237/255, blue: 240/255, alpha: 1) | ||
| 47 | + | ||
| 48 | + codeView.firstTextField.textColor = UIColor(red: 255/255, green: 0/255, blue: 46/255, alpha: 1) | ||
| 49 | + codeView.secondTextField.textColor = UIColor(red: 255/255, green: 0/255, blue: 46/255, alpha: 1) | ||
| 50 | + codeView.thirdTextField.textColor = UIColor(red: 255/255, green: 0/255, blue: 46/255, alpha: 1) | ||
| 51 | + codeView.fourthTextField.textColor = UIColor(red: 255/255, green: 0/255, blue: 46/255, alpha: 1) | ||
| 52 | + | ||
| 53 | + codeView.errorAlertLabel.isHidden = false | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @objc func keyboardWillShow(notification: NSNotification) { | ||
| 57 | +// if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { | ||
| 58 | +// let keyboardHeight = keyboardFrame.cgRectValue.height | ||
| 59 | +// // let bottomSpace = | ||
| 60 | +// if self.view.frame.origin.y == 0 { | ||
| 61 | +// self.view.frame.origin.y -= keyboardFrame.height | ||
| 62 | +// } | ||
| 63 | + if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { | ||
| 64 | + if self.view.frame.origin.y == 0 { | ||
| 65 | +// self.view.frame.origin.y -= keyboardSize.height - 150 | ||
| 66 | + codeView.containerView.frame.origin.y -= keyboardSize.height - 150 | ||
| 67 | + codeView.shieldImage.frame.origin.x += view.frame.origin.x + 100 | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + @objc func keyboardWillHide() { | ||
| 73 | + if self.view.frame.origin.y != 0 { | ||
| 74 | + self.view.frame.origin.y = 0 | ||
| 75 | + } | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | +} | ||
| 79 | + | ||
| 80 | +extension CodeVerificationViewController: UITextFieldDelegate { | ||
| 81 | + | ||
| 82 | + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { | ||
| 83 | + | ||
| 84 | + true | ||
| 85 | + } | ||
| 86 | +} |
| 1 | +// | ||
| 2 | +// ViewController.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 30.05.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +class VerificationViewController: UIViewController { | ||
| 11 | + | ||
| 12 | + var isKeyboardAppear = false | ||
| 13 | + private let mainView = VerificationView() | ||
| 14 | + | ||
| 15 | + lazy var phonePickerModels: [PhonePickerModel] = { | ||
| 16 | + var models: [PhonePickerModel] = [] | ||
| 17 | + | ||
| 18 | + for (code, value) in PhoneService.phones | ||
| 19 | + { | ||
| 20 | + models.append(.init(code: code, countryCode: value.1, title: value.0, icon: value.2)) | ||
| 21 | + } | ||
| 22 | + return models | ||
| 23 | + }() | ||
| 24 | + | ||
| 25 | + override func loadView() { | ||
| 26 | + view = mainView | ||
| 27 | + } | ||
| 28 | + override func viewDidLoad() { | ||
| 29 | + super.viewDidLoad() | ||
| 30 | + initViewController() | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + private func initViewController() { | ||
| 35 | + mainView.phonePickerView.phoneNumberPicker.delegate = self | ||
| 36 | + mainView.phonePickerView.phoneNumberPicker.dataSource = self | ||
| 37 | + mainView.showPickerButton.addTarget(self, action: #selector(didshowPickerButtonTapped(_:)), for: .touchUpInside) | ||
| 38 | + mainView.phonePickerView.selectButton.addTarget(self, action: #selector(didshowPickerButtonTapped(_:)), for: .touchUpInside) | ||
| 39 | + mainView.phonePickerView.titleButton.addTarget(self, action: #selector(didshowPickerButtonTapped(_:)), for: .touchDragInside) | ||
| 40 | + mainView.continueButton.addTarget(self, action: #selector(didShowCodeVerificationVC), for: .touchUpInside) | ||
| 41 | + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) | ||
| 42 | + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil) | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +//MARK: targets | ||
| 48 | +extension VerificationViewController { | ||
| 49 | + // @objc private func didRadioButtonTapped(_ sender: UIButton) { | ||
| 50 | + // switch sender { | ||
| 51 | + // case mainView.phoneNumberButton : | ||
| 52 | + // mainView.emailButton.isSelected = false | ||
| 53 | + // mainView.phoneNumberButton.isSelected = true | ||
| 54 | + //// mainView.phonymberTextField.isHidden = false | ||
| 55 | + //// mainView.emailTextField.isHidden = true | ||
| 56 | + // case mainView.emailButton: | ||
| 57 | + // mainView.emailButton.isSelected = true | ||
| 58 | + // mainView.phoneNumberButton.isSelected = false | ||
| 59 | + // default: | ||
| 60 | + // return | ||
| 61 | + // } | ||
| 62 | + // } | ||
| 63 | + | ||
| 64 | + @objc private func didshowPickerButtonTapped(_ sender: UIButton) { | ||
| 65 | + mainView.isShow ? mainView.showPickerView() : mainView.hidePicerView() | ||
| 66 | + mainView.isShow.toggle() | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @objc private func didShowCodeVerificationVC() { | ||
| 70 | + let vc = CodeVerificationViewController() | ||
| 71 | + vc.modalPresentationStyle = .fullScreen | ||
| 72 | + present(vc, animated: true) | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + @objc func keyboardWillShow(notification: NSNotification) { | ||
| 76 | + // if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { | ||
| 77 | + // let keyboardHeight = keyboardFrame.cgRectValue.height | ||
| 78 | + // // let bottomSpace = | ||
| 79 | + // if self.view.frame.origin.y == 0 { | ||
| 80 | + // self.view.frame.origin.y -= keyboardFrame.height | ||
| 81 | + // } | ||
| 82 | + // if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { | ||
| 83 | + // if self.view.frame.origin.y == 0 { | ||
| 84 | + // self.view.frame.origin.y -= keyboardSize.height - 150 | ||
| 85 | + // mainView.phoneTextField.frame.origin.y -= 60 | ||
| 86 | + // mainView.enterChosenAuthenticatorLabel.frame.origin.y -= 60 | ||
| 87 | + // codeView.shieldImage.frame.origin.x += view.frame.origin.x + 100 | ||
| 88 | + if !isKeyboardAppear { | ||
| 89 | + | ||
| 90 | + if mainView.phoneTextField.frame.origin.y == mainView.phoneTextField.frame.origin.y && mainView.enterChosenAuthenticatorLabel.frame.origin.y == mainView.enterChosenAuthenticatorLabel.frame.origin.y{ | ||
| 91 | + mainView.phoneTextField.frame.origin.y -= 100 | ||
| 92 | + mainView.emailTextField.frame.origin.y -= 100 | ||
| 93 | + mainView.enterChosenAuthenticatorLabel.frame.origin.y -= 100 | ||
| 94 | + mainView.chooseLabel.frame.origin.y -= 80 | ||
| 95 | + mainView.emailButton.frame.origin.y -= 80 | ||
| 96 | + mainView.phoneNumberButton.frame.origin.y -= 80 | ||
| 97 | + mainView.dividingLineView.frame.origin.y -= 80 | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + isKeyboardAppear = true | ||
| 101 | + } | ||
| 102 | + // } | ||
| 103 | + // } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @objc func keyboardWillHide(notification: NSNotification) { | ||
| 107 | + | ||
| 108 | + if isKeyboardAppear { | ||
| 109 | + | ||
| 110 | + if mainView.phoneTextField.frame.origin.y != 0 && mainView.enterChosenAuthenticatorLabel.frame.origin.y != 0{ | ||
| 111 | + mainView.phoneTextField.frame.origin.y += 100 | ||
| 112 | + mainView.emailTextField.frame.origin.y += 100 | ||
| 113 | + mainView.enterChosenAuthenticatorLabel.frame.origin.y += 100 | ||
| 114 | + mainView.chooseLabel.frame.origin.y += 80 | ||
| 115 | + mainView.emailButton.frame.origin.y += 80 | ||
| 116 | + mainView.phoneNumberButton.frame.origin.y += 80 | ||
| 117 | + mainView.dividingLineView.frame.origin.y += 80 | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + | ||
| 121 | + isKeyboardAppear = false | ||
| 122 | + } | ||
| 123 | + // mainView.phoneTextField.frame.origin.y += 60 | ||
| 124 | + // mainView.enterChosenAuthenticatorLabel.frame.origin.y += 60 | ||
| 125 | + | ||
| 126 | + } | ||
| 127 | +} | ||
| 128 | + | ||
| 129 | +//MARK: table view delegate and datasource | ||
| 130 | +extension VerificationViewController { | ||
| 131 | + | ||
| 132 | +} | ||
| 133 | + | ||
| 134 | +extension VerificationViewController: UIPickerViewDataSource, UIPickerViewDelegate { | ||
| 135 | + | ||
| 136 | + func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } | ||
| 137 | + | ||
| 138 | + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { | ||
| 139 | + return phonePickerModels.count | ||
| 140 | + | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat { | ||
| 144 | + 60 | ||
| 145 | + } | ||
| 146 | + | ||
| 147 | + // func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat { | ||
| 148 | + // return 130.0 | ||
| 149 | + // } | ||
| 150 | + | ||
| 151 | + func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { | ||
| 152 | + let model = phonePickerModels[row] | ||
| 153 | + return PickerView.create(icon: model.icon, title: model.title, code: model.countryCode) | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { | ||
| 157 | + pickerView.subviews[1].backgroundColor = .clear | ||
| 158 | + let model = phonePickerModels[row] | ||
| 159 | + mainView.phoneTextField.text = "\(model.countryCode)" | ||
| 160 | + mainView.flagPickerView.image = model.icon | ||
| 161 | + } | ||
| 162 | +} | ||
| 163 | + |
InterQR-Internship/Info.plist
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | +<plist version="1.0"> | ||
| 4 | +<dict> | ||
| 5 | + <key>UIAppFonts</key> | ||
| 6 | + <array> | ||
| 7 | + <string>Sk-Modernist-Bold.otf</string> | ||
| 8 | + <string>Sk-Modernist-Mono.otf</string> | ||
| 9 | + <string>Sk-Modernist-Regular.otf</string> | ||
| 10 | + </array> | ||
| 11 | + <key>UIApplicationSceneManifest</key> | ||
| 12 | + <dict> | ||
| 13 | + <key>UIApplicationSupportsMultipleScenes</key> | ||
| 14 | + <false/> | ||
| 15 | + <key>UISceneConfigurations</key> | ||
| 16 | + <dict> | ||
| 17 | + <key>UIWindowSceneSessionRoleApplication</key> | ||
| 18 | + <array> | ||
| 19 | + <dict> | ||
| 20 | + <key>UISceneConfigurationName</key> | ||
| 21 | + <string>Default Configuration</string> | ||
| 22 | + <key>UISceneDelegateClassName</key> | ||
| 23 | + <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string> | ||
| 24 | + </dict> | ||
| 25 | + </array> | ||
| 26 | + </dict> | ||
| 27 | + </dict> | ||
| 28 | +</dict> | ||
| 29 | +</plist> |
InterQR-Internship/PhonePickerModel.swift
0 → 100644
| 1 | +// | ||
| 2 | +// PhonePickerModel.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 31.05.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import Foundation | ||
| 9 | +import UIKit | ||
| 10 | + | ||
| 11 | +struct PhonePickerModel { | ||
| 12 | + | ||
| 13 | + let code: String | ||
| 14 | + let countryCode: String | ||
| 15 | + let title: String | ||
| 16 | + let icon: UIImage | ||
| 17 | +} |
InterQR-Internship/PhoneService.swift
0 → 100644
| 1 | +// | ||
| 2 | +// PhoneService.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 31.05.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import Foundation | ||
| 9 | +import UIKit | ||
| 10 | + | ||
| 11 | +class PhoneService { | ||
| 12 | + static var phones: [String: (String, String, UIImage)] = { | ||
| 13 | + var codes = [String: (String, String, UIImage)] () | ||
| 14 | + codes["USA"] = ("United States", "+1", UIImage(named: "USA") ?? UIImage()) | ||
| 15 | + codes["GB"] = ("Great Britain", "+123", UIImage(named: "GB") ?? UIImage()) | ||
| 16 | + codes["AUS"] = ("Australia", "+12", UIImage(named: "AUS") ?? UIImage()) | ||
| 17 | + return codes | ||
| 18 | + }() | ||
| 19 | +} |
InterQR-Internship/SceneDelegate.swift
0 → 100644
| 1 | +// | ||
| 2 | +// SceneDelegate.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 30.05.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | +import SnapKit | ||
| 10 | + | ||
| 11 | +class SceneDelegate: UIResponder, UIWindowSceneDelegate { | ||
| 12 | + | ||
| 13 | + var window: UIWindow? | ||
| 14 | + | ||
| 15 | + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { | ||
| 16 | + | ||
| 17 | + guard let windowScene = (scene as? UIWindowScene) else { return } | ||
| 18 | + window = UIWindow(windowScene: windowScene) | ||
| 19 | + let viewController = VerificationViewController() | ||
| 20 | + let navigation = UINavigationController(rootViewController: viewController) | ||
| 21 | + window?.rootViewController = navigation | ||
| 22 | + window?.makeKeyAndVisible() | ||
| 23 | + } | ||
| 24 | +} | ||
| 25 | + |
| 1 | +// | ||
| 2 | +// CodeVerificationView.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 03.06.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +class CodeVerificationView: UIView { | ||
| 11 | + | ||
| 12 | + var containerView: UIView = { | ||
| 13 | + var obj = UIView() | ||
| 14 | + return obj | ||
| 15 | + }() | ||
| 16 | + var backButton: UIButton = { | ||
| 17 | + var obj = UIButton() | ||
| 18 | + obj.setImage(UIImage(named: "BackPointer"), for: .normal) | ||
| 19 | + obj.backgroundColor = .white | ||
| 20 | + obj.layer.borderColor = UIColor(red: 224/255, green: 231/255, blue: 232/255, alpha: 1).cgColor | ||
| 21 | + obj.layer.cornerRadius = 13 | ||
| 22 | + obj.layer.borderWidth = 1 | ||
| 23 | + return obj | ||
| 24 | + }() | ||
| 25 | + var logoImage: UIImageView = { | ||
| 26 | + var obj = UIImageView() | ||
| 27 | + obj.image = UIImage(named: "InterQR") | ||
| 28 | + return obj | ||
| 29 | + }() | ||
| 30 | + var shieldImage: UIImageView = { | ||
| 31 | + var obj = UIImageView() | ||
| 32 | + obj.image = UIImage(named: "Lock") | ||
| 33 | + return obj | ||
| 34 | + }() | ||
| 35 | + var descriptionLabel: UILabel = { | ||
| 36 | + var obj = UILabel() | ||
| 37 | + obj.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 35) | ||
| 38 | + obj.text = "Enter your\nverification code" | ||
| 39 | + obj.numberOfLines = 2 | ||
| 40 | + return obj | ||
| 41 | + }() | ||
| 42 | + var firstTextField: UITextField = { | ||
| 43 | + var obj = UITextField() | ||
| 44 | + obj.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1) | ||
| 45 | + obj.layer.cornerRadius = 15 | ||
| 46 | + obj.keyboardType = .numberPad | ||
| 47 | + obj.textAlignment = .center | ||
| 48 | + obj.textContentType = .oneTimeCode | ||
| 49 | + obj.becomeFirstResponder() | ||
| 50 | + return obj | ||
| 51 | + }() | ||
| 52 | + var secondTextField: UITextField = { | ||
| 53 | + var obj = UITextField() | ||
| 54 | + obj.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1) | ||
| 55 | + obj.layer.cornerRadius = 15 | ||
| 56 | + obj.keyboardType = .numberPad | ||
| 57 | + obj.textAlignment = .center | ||
| 58 | + obj.textContentType = .oneTimeCode | ||
| 59 | + obj.isEnabled = false | ||
| 60 | + return obj | ||
| 61 | + }() | ||
| 62 | + var thirdTextField: UITextField = { | ||
| 63 | + var obj = UITextField() | ||
| 64 | + obj.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1) | ||
| 65 | + obj.layer.cornerRadius = 15 | ||
| 66 | + obj.keyboardType = .numberPad | ||
| 67 | + obj.textAlignment = .center | ||
| 68 | + obj.textContentType = .oneTimeCode | ||
| 69 | + obj.isEnabled = false | ||
| 70 | + return obj | ||
| 71 | + }() | ||
| 72 | + var fourthTextField: UITextField = { | ||
| 73 | + var obj = UITextField() | ||
| 74 | + obj.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1) | ||
| 75 | + obj.layer.cornerRadius = 15 | ||
| 76 | + obj.keyboardType = .numberPad | ||
| 77 | + obj.textAlignment = .center | ||
| 78 | + obj.textContentType = .oneTimeCode | ||
| 79 | + obj.isEnabled = false | ||
| 80 | + return obj | ||
| 81 | + }() | ||
| 82 | + var errorAlertLabel: UILabel = { | ||
| 83 | + var obj = UILabel() | ||
| 84 | + obj.text = "Please, enter valid verification code" | ||
| 85 | + obj.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 14) | ||
| 86 | + obj.textColor = UIColor(red: 255/255, green: 0/255, blue: 46/255, alpha: 1) | ||
| 87 | + obj.isHidden = true | ||
| 88 | + return obj | ||
| 89 | + }() | ||
| 90 | + var verifyButton: UIButton = { | ||
| 91 | + var obj = UIButton() | ||
| 92 | + obj.setImage(UIImage(named: "RectangleWithShadow"), for: .normal) | ||
| 93 | + return obj | ||
| 94 | + }() | ||
| 95 | + var verifyLabel: UILabel = { | ||
| 96 | + var obj = UILabel() | ||
| 97 | + obj.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16) | ||
| 98 | + obj.textColor = .white | ||
| 99 | + obj.text = "Verify" | ||
| 100 | + return obj | ||
| 101 | + }() | ||
| 102 | + var tickImage: UIImageView = { | ||
| 103 | + var obj = UIImageView() | ||
| 104 | + obj.image = UIImage(named: "Tick") | ||
| 105 | + return obj | ||
| 106 | + }() | ||
| 107 | + override init(frame: CGRect) { | ||
| 108 | + super.init(frame: frame) | ||
| 109 | + layout() | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + required init?(coder: NSCoder) { | ||
| 113 | + fatalError("init(coder:) has not been implemented") | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + func layout() { | ||
| 117 | + backgroundColor = .white | ||
| 118 | + addSubview(backButton) | ||
| 119 | + addSubview(logoImage) | ||
| 120 | + addSubview(shieldImage) | ||
| 121 | + addSubview(containerView) | ||
| 122 | + containerView.addSubview(descriptionLabel) | ||
| 123 | + containerView.addSubview(firstTextField) | ||
| 124 | + containerView.addSubview(secondTextField) | ||
| 125 | + containerView.addSubview(thirdTextField) | ||
| 126 | + containerView.addSubview(fourthTextField) | ||
| 127 | + containerView.addSubview(errorAlertLabel) | ||
| 128 | + containerView.addSubview(verifyButton) | ||
| 129 | + verifyButton.addSubview(verifyLabel) | ||
| 130 | + verifyButton.addSubview(tickImage) | ||
| 131 | + | ||
| 132 | + backButton.snp.makeConstraints { | ||
| 133 | + $0.top.equalTo(snp.top).offset(66) | ||
| 134 | + $0.leading.equalTo(snp.leading).offset(22) | ||
| 135 | + $0.height.width.equalTo(45) | ||
| 136 | + } | ||
| 137 | + logoImage.snp.makeConstraints { | ||
| 138 | + $0.leading.equalTo(backButton.snp.trailing).offset(20) | ||
| 139 | + $0.centerY.equalTo(backButton) | ||
| 140 | + } | ||
| 141 | + shieldImage.snp.makeConstraints { | ||
| 142 | + $0.top.equalTo(backButton.snp.bottom).offset(25) | ||
| 143 | + $0.centerX.equalTo(snp.centerX) | ||
| 144 | + } | ||
| 145 | + containerView.snp.makeConstraints { | ||
| 146 | + $0.top.equalTo(shieldImage.snp.bottom).offset(41) | ||
| 147 | + $0.leading.trailing.equalToSuperview() | ||
| 148 | + $0.height.equalTo(300) | ||
| 149 | + } | ||
| 150 | + descriptionLabel.snp.makeConstraints { | ||
| 151 | + $0.leading.equalTo(containerView.snp.leading).offset(20) | ||
| 152 | + $0.top.equalTo(containerView.snp.top) | ||
| 153 | + } | ||
| 154 | + firstTextField.snp.makeConstraints { | ||
| 155 | + $0.leading.equalTo(containerView.snp.leading).offset(25) | ||
| 156 | + $0.top.equalTo(descriptionLabel.snp.bottom).offset(28) | ||
| 157 | + $0.height.equalTo(55) | ||
| 158 | + } | ||
| 159 | + secondTextField.snp.makeConstraints { | ||
| 160 | + $0.leading.equalTo(firstTextField.snp.trailing).offset(12) | ||
| 161 | + $0.centerY.equalTo(firstTextField) | ||
| 162 | + $0.width.equalTo(firstTextField.snp.width) | ||
| 163 | + $0.height.equalTo(55) | ||
| 164 | + } | ||
| 165 | + thirdTextField.snp.makeConstraints { | ||
| 166 | + $0.leading.equalTo(secondTextField.snp.trailing).offset(12) | ||
| 167 | + $0.centerY.equalTo(firstTextField) | ||
| 168 | + $0.width.equalTo(firstTextField.snp.width) | ||
| 169 | + $0.height.equalTo(55) | ||
| 170 | + } | ||
| 171 | + fourthTextField.snp.makeConstraints { | ||
| 172 | + $0.leading.equalTo(thirdTextField.snp.trailing).offset(12) | ||
| 173 | + $0.centerY.equalTo(firstTextField) | ||
| 174 | + $0.trailing.equalTo(containerView.snp.trailing).offset(-25) | ||
| 175 | + $0.width.equalTo(firstTextField.snp.width) | ||
| 176 | + $0.height.equalTo(55) | ||
| 177 | + } | ||
| 178 | + errorAlertLabel.snp.makeConstraints { | ||
| 179 | + $0.top.equalTo(firstTextField.snp.bottom).offset(8) | ||
| 180 | + $0.leading.equalTo(firstTextField.snp.leading) | ||
| 181 | + } | ||
| 182 | + verifyButton.snp.makeConstraints { | ||
| 183 | + $0.top.equalTo(firstTextField.snp.bottom).offset(67) | ||
| 184 | + $0.left.right.equalToSuperview() | ||
| 185 | + } | ||
| 186 | + verifyLabel.snp.makeConstraints { | ||
| 187 | + $0.left.equalToSuperview().offset(49) | ||
| 188 | + $0.top.equalToSuperview().offset(22) | ||
| 189 | + } | ||
| 190 | + tickImage.snp.makeConstraints { | ||
| 191 | + $0.right.equalToSuperview().offset(-47) | ||
| 192 | + $0.centerY.equalTo(verifyLabel) | ||
| 193 | + } | ||
| 194 | + } | ||
| 195 | +} |
| 1 | +// | ||
| 2 | +// PhoneNumberView.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 31.05.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | +import CoreTelephony | ||
| 10 | + | ||
| 11 | +class PhoneNumberView: UIView { | ||
| 12 | + | ||
| 13 | + var containerPickerView: UIView = { | ||
| 14 | + var view = UIView() | ||
| 15 | + view.backgroundColor = .systemRed | ||
| 16 | + return view | ||
| 17 | + }() | ||
| 18 | + | ||
| 19 | + var titleButton: UIButton = { | ||
| 20 | + var obj = UIButton() | ||
| 21 | + obj.setTitle("Select your country", for: .normal) | ||
| 22 | + obj.setTitleColor(UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1), for: .normal) | ||
| 23 | + obj.titleLabel?.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 18) | ||
| 24 | + obj.titleLabel?.textAlignment = .center | ||
| 25 | + return obj | ||
| 26 | + }() | ||
| 27 | + | ||
| 28 | + var dividingLineView: UIView = { | ||
| 29 | + var view = UIView() | ||
| 30 | + view.backgroundColor = UIColor(red: 246/255, green: 246/255, blue: 246/255, alpha: 1) | ||
| 31 | + return view | ||
| 32 | + }() | ||
| 33 | + | ||
| 34 | + var phoneNumberPicker: UIPickerView = { | ||
| 35 | + var picker = UIPickerView() | ||
| 36 | + return picker | ||
| 37 | + }() | ||
| 38 | + | ||
| 39 | + var selectButton: UIButton = { | ||
| 40 | + var button = UIButton() | ||
| 41 | + | ||
| 42 | + button.backgroundColor = UIColor(red: 2/255, green: 115/255, blue: 185/255, alpha: 1) | ||
| 43 | + button.clipsToBounds = true | ||
| 44 | + | ||
| 45 | + return button | ||
| 46 | + }() | ||
| 47 | + | ||
| 48 | + var selectLabel: UILabel = { | ||
| 49 | + var label = UILabel() | ||
| 50 | + label.text = "Select" | ||
| 51 | + label.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16) | ||
| 52 | + label.textColor = .white | ||
| 53 | + return label | ||
| 54 | + }() | ||
| 55 | + | ||
| 56 | + override init(frame: CGRect) { | ||
| 57 | + super.init(frame: frame) | ||
| 58 | + layout() | ||
| 59 | + setup() | ||
| 60 | + backgroundColor = .white | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + required init?(coder: NSCoder) { | ||
| 64 | + fatalError("init(coder:) has not been implemented") | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + func layout() { | ||
| 68 | + self.backgroundColor = .white | ||
| 69 | + addSubview(titleButton) | ||
| 70 | + addSubview(dividingLineView) | ||
| 71 | + addSubview(phoneNumberPicker) | ||
| 72 | + addSubview(selectButton) | ||
| 73 | + | ||
| 74 | + selectButton.addSubview(selectLabel) | ||
| 75 | + | ||
| 76 | + titleButton.snp.makeConstraints { make in | ||
| 77 | + make.top.equalToSuperview().offset(20) | ||
| 78 | + make.leading.trailing.equalToSuperview() | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + dividingLineView.snp.makeConstraints { | ||
| 82 | + $0.left.right.equalToSuperview() | ||
| 83 | + $0.height.equalTo(1) | ||
| 84 | + $0.top.equalTo(titleButton.snp.bottom).offset(22) | ||
| 85 | + } | ||
| 86 | + phoneNumberPicker.snp.makeConstraints { | ||
| 87 | + $0.left.right.equalToSuperview().inset(5) | ||
| 88 | + $0.top.equalTo(dividingLineView.snp.bottom).offset(20) | ||
| 89 | + } | ||
| 90 | + selectButton.snp.makeConstraints { | ||
| 91 | + $0.right.equalToSuperview() | ||
| 92 | + $0.left.equalToSuperview() | ||
| 93 | + $0.bottom.equalToSuperview() | ||
| 94 | + $0.height.equalTo(70) | ||
| 95 | + $0.top.equalTo(phoneNumberPicker.snp.bottom).offset(20) | ||
| 96 | + } | ||
| 97 | + selectLabel.snp.makeConstraints { | ||
| 98 | + $0.centerX.equalTo(selectButton.snp.centerX) | ||
| 99 | + $0.top.equalTo(selectButton.snp.top).offset(20) | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | +} | ||
| 103 | + | ||
| 104 | +extension PhoneNumberView { | ||
| 105 | + | ||
| 106 | + func setup() { | ||
| 107 | + | ||
| 108 | + let countryCode: String | ||
| 109 | + if let carrier = CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?.first?.value, | ||
| 110 | + let code = carrier.isoCountryCode?.uppercased() { | ||
| 111 | + countryCode = code | ||
| 112 | + } else { | ||
| 113 | + countryCode = "USA" | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + phoneNumberPicker.selectRow(0, inComponent: 0, animated: true) | ||
| 117 | + | ||
| 118 | + phoneNumberPicker.subviews[1].backgroundColor = .clear | ||
| 119 | + | ||
| 120 | + } | ||
| 121 | +} | ||
| 122 | + |
| 1 | +// | ||
| 2 | +// PickerView.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 01.06.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +final class PickerView: UIView { | ||
| 11 | + | ||
| 12 | + private let iconView: UIImageView = { | ||
| 13 | + var obj = UIImageView() | ||
| 14 | + obj.contentMode = .scaleAspectFill | ||
| 15 | + obj.layer.cornerRadius = 10 | ||
| 16 | + return obj | ||
| 17 | + }() | ||
| 18 | + private let label: UILabel = { | ||
| 19 | + var obj = UILabel() | ||
| 20 | + obj.textColor = UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1) | ||
| 21 | + obj.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 15) | ||
| 22 | + return obj | ||
| 23 | + }() | ||
| 24 | + private let countryCode: UILabel = { | ||
| 25 | + var obj = UILabel() | ||
| 26 | + obj.textColor = UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1) | ||
| 27 | + obj.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 15) | ||
| 28 | + return obj | ||
| 29 | + }() | ||
| 30 | + override init(frame: CGRect) { | ||
| 31 | + super.init(frame: frame) | ||
| 32 | + layout() | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + required init?(coder: NSCoder) { | ||
| 36 | + super.init(coder: coder) | ||
| 37 | + layout() | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + private func layout() { | ||
| 41 | + addSubview(iconView) | ||
| 42 | + addSubview(label) | ||
| 43 | + addSubview(countryCode) | ||
| 44 | + | ||
| 45 | + iconView.snp.makeConstraints { make in | ||
| 46 | + make.leading.equalToSuperview().offset(25) | ||
| 47 | + make.centerY.equalTo(snp.centerY) | ||
| 48 | +// make.top.bottom.equalToSuperview() | ||
| 49 | + make.height.width.equalTo(20) | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + label.snp.makeConstraints { make in | ||
| 53 | + make.leading.equalTo(iconView.snp.trailing).offset(20) | ||
| 54 | + make.top.bottom.equalToSuperview() | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + countryCode.snp.makeConstraints { make in | ||
| 58 | + make.trailing.equalToSuperview().offset(-25) | ||
| 59 | + make.top.bottom.equalToSuperview() | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + static func create(icon: UIImage, title: String, code: String) -> PickerView { | ||
| 64 | + let numberView = PickerView() | ||
| 65 | + numberView.iconView.image = icon | ||
| 66 | + numberView.label.text = title | ||
| 67 | + numberView.countryCode.text = code | ||
| 68 | + return numberView | ||
| 69 | + } | ||
| 70 | +} |
| 1 | +// | ||
| 2 | +// TextFieldWithPadding.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 01.06.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +class TextFieldWithPadding: UITextField { | ||
| 11 | + | ||
| 12 | + var textPaddingForEmail = UIEdgeInsets( | ||
| 13 | + top: 0, | ||
| 14 | + left: 22, | ||
| 15 | + bottom: 0, | ||
| 16 | + right: 22 | ||
| 17 | + ) | ||
| 18 | + var textPaddingForPhone = UIEdgeInsets( | ||
| 19 | + top: 0, | ||
| 20 | + left: 78, | ||
| 21 | + bottom: 0, | ||
| 22 | + right: 22 | ||
| 23 | + ) | ||
| 24 | + | ||
| 25 | + override func textRect(forBounds bounds: CGRect) -> CGRect { | ||
| 26 | + let rect = super.textRect(forBounds: bounds) | ||
| 27 | + return rect.inset(by: textPaddingForPhone) | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + override func editingRect(forBounds bounds: CGRect) -> CGRect { | ||
| 31 | + let rect = super.editingRect(forBounds: bounds) | ||
| 32 | + return rect.inset(by: textPaddingForPhone) | ||
| 33 | + } | ||
| 34 | +} |
| 1 | +// | ||
| 2 | +// VerificationView.swift | ||
| 3 | +// InterQR-Internship | ||
| 4 | +// | ||
| 5 | +// Created by Дмитрий Тимофеев on 30.05.2022. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import Foundation | ||
| 9 | +import UIKit | ||
| 10 | + | ||
| 11 | +class VerificationView: UIView { | ||
| 12 | + | ||
| 13 | + var isShow: Bool = false | ||
| 14 | + | ||
| 15 | + var logoImage: UIImageView = { | ||
| 16 | + var view = UIImageView() | ||
| 17 | + view.image = UIImage(named: "InterQR") | ||
| 18 | + return view | ||
| 19 | + }() | ||
| 20 | + var greetingsLabel: UILabel = { | ||
| 21 | + var label = UILabel() | ||
| 22 | + label.text = "Hello" | ||
| 23 | + label.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 35) | ||
| 24 | + return label | ||
| 25 | + }() | ||
| 26 | + var verifyLabel: UILabel = { | ||
| 27 | + var label = UILabel() | ||
| 28 | + label.text = "Lets verify your \naccount" | ||
| 29 | + label.numberOfLines = 2 | ||
| 30 | + label.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 28) | ||
| 31 | + return label | ||
| 32 | + }() | ||
| 33 | + var shieldImage: UIImageView = { | ||
| 34 | + var view = UIImageView() | ||
| 35 | + view.image = UIImage(named: "Shield") | ||
| 36 | + return view | ||
| 37 | + }() | ||
| 38 | + var chooseLabel: UILabel = { | ||
| 39 | + var label = UILabel() | ||
| 40 | + label.text = "Choose what to start with" | ||
| 41 | + label.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16) | ||
| 42 | + label.font = .systemFont(ofSize: 16, weight: .bold) | ||
| 43 | + return label | ||
| 44 | + }() | ||
| 45 | + var emailButton: UIButton = { | ||
| 46 | + var button = UIButton() | ||
| 47 | + button.setTitle("Email", for: .normal) | ||
| 48 | + button.setTitleColor(UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1), for: .normal) | ||
| 49 | + button.setTitleColor(UIColor(red: 185/255, green: 185/255, blue: 185/255, alpha: 1), for: .disabled) | ||
| 50 | + button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 14) | ||
| 51 | + button.titleEdgeInsets = UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 0) | ||
| 52 | + button.setImage(UIImage(named: "OnIndicator"), for: .normal) | ||
| 53 | + button.setImage(UIImage(named: "OffIndicator"), for: .selected) | ||
| 54 | + button.contentMode = .left | ||
| 55 | + return button | ||
| 56 | + }() | ||
| 57 | +// var emailIndicatorImage: UIImageView = { | ||
| 58 | +// var image = UIImageView() | ||
| 59 | +// image.image = UIImage(named: "OnIndicator") | ||
| 60 | +// return image | ||
| 61 | +// }() | ||
| 62 | + var phoneNumberButton: UIButton = { | ||
| 63 | + var button = UIButton() | ||
| 64 | + button.setTitle("Phone Number", for: .normal) | ||
| 65 | + button.setTitleColor(UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1), for: .normal) | ||
| 66 | + button.setTitleColor(UIColor(red: 185/255, green: 185/255, blue: 185/255, alpha: 1), for: .disabled) | ||
| 67 | + button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 14) | ||
| 68 | + button.titleEdgeInsets = UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 10) | ||
| 69 | + button.setImage(UIImage(named: "OnIndicator"), for: .selected) | ||
| 70 | + button.setImage(UIImage(named: "OffIndicator"), for: .normal) | ||
| 71 | + return button | ||
| 72 | + }() | ||
| 73 | +// var phoneNumberIndicatorImage: UIImageView = { | ||
| 74 | +// var image = UIImageView() | ||
| 75 | +// image.image = UIImage(named: "OffIndicator") | ||
| 76 | +// return image | ||
| 77 | +// }() | ||
| 78 | +// var pickEmailLabel: UILabel = { | ||
| 79 | +// var label = UILabel() | ||
| 80 | +// label.text = "Email" | ||
| 81 | +// label.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 15) | ||
| 82 | +// return label | ||
| 83 | +// }() | ||
| 84 | +// var pickPhoneLabel: UILabel = { | ||
| 85 | +// var label = UILabel() | ||
| 86 | +// label.text = "Phone Number" | ||
| 87 | +// label.textColor = UIColor(red: 185/255, green: 185/255, blue: 185/255, alpha: 1) | ||
| 88 | +// label.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 15) | ||
| 89 | +// return label | ||
| 90 | +// }() | ||
| 91 | + var dividingLineView: UIView = { | ||
| 92 | + var view = UIView() | ||
| 93 | + view.backgroundColor = UIColor(red: 246/255, green: 246/255, blue: 246/255, alpha: 1) | ||
| 94 | + return view | ||
| 95 | + }() | ||
| 96 | + var enterChosenAuthenticatorLabel: UILabel = { | ||
| 97 | + var label = UILabel() | ||
| 98 | + label.text = "Enter your email address" | ||
| 99 | + label.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16) | ||
| 100 | + return label | ||
| 101 | + }() | ||
| 102 | + var emailTextField: UITextField = { | ||
| 103 | + var textField = UITextField() | ||
| 104 | + textField.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1) | ||
| 105 | + textField.textAlignment = .left | ||
| 106 | + textField.layer.cornerRadius = 15 | ||
| 107 | + textField.keyboardType = .emailAddress | ||
| 108 | + textField.placeholder = "Example: john.doe@gmail.com" | ||
| 109 | + textField.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 15) | ||
| 110 | + textField.layer.masksToBounds = true | ||
| 111 | + textField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 22, height: textField.frame.height)) | ||
| 112 | + textField.leftViewMode = .always | ||
| 113 | + return textField | ||
| 114 | + }() | ||
| 115 | + var phoneTextField: TextFieldWithPadding = { | ||
| 116 | + var textField = TextFieldWithPadding() | ||
| 117 | + textField.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1) | ||
| 118 | + textField.textAlignment = .left | ||
| 119 | + textField.layer.cornerRadius = 15 | ||
| 120 | + textField.keyboardType = .numberPad | ||
| 121 | + textField.text = "+1" | ||
| 122 | + textField.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 15) | ||
| 123 | + textField.layer.masksToBounds = true | ||
| 124 | + textField.isHidden = true | ||
| 125 | + return textField | ||
| 126 | + }() | ||
| 127 | + var verificationDescriptionLabel: UILabel = { | ||
| 128 | + var label = UILabel() | ||
| 129 | + label.numberOfLines = 0 | ||
| 130 | + label.text = "Verification code will be sent to your e-mail" | ||
| 131 | + label.font = UIFont(name: "Sk-Modernist", size: 14) | ||
| 132 | + label.font = .systemFont(ofSize: 14, weight: .regular) | ||
| 133 | + return label | ||
| 134 | + }() | ||
| 135 | + var continueButton: UIButton = { | ||
| 136 | + var button = UIButton() | ||
| 137 | + button.setImage(UIImage(named: "RectangleWithShadow"), for: .normal) | ||
| 138 | + button.clipsToBounds = true | ||
| 139 | + button.contentMode = .scaleAspectFit | ||
| 140 | + button.layer.cornerRadius = 15 | ||
| 141 | + return button | ||
| 142 | + }() | ||
| 143 | + var continueLabel: UILabel = { | ||
| 144 | + var label = UILabel() | ||
| 145 | + label.text = "Continue" | ||
| 146 | + label.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16) | ||
| 147 | + label.textColor = .white | ||
| 148 | + return label | ||
| 149 | + }() | ||
| 150 | + var pointerImage: UIImageView = { | ||
| 151 | + var image = UIImageView() | ||
| 152 | + image.image = UIImage(named: "Pointer") | ||
| 153 | + return image | ||
| 154 | + }() | ||
| 155 | + var phonePickerView: PhoneNumberView = { | ||
| 156 | + var view = PhoneNumberView() | ||
| 157 | + view.isUserInteractionEnabled = true | ||
| 158 | + return view | ||
| 159 | + }() | ||
| 160 | + var showPickerButton: UIButton = { | ||
| 161 | + var button = UIButton() | ||
| 162 | + button.isHidden = true | ||
| 163 | + return button | ||
| 164 | + }() | ||
| 165 | + var flagPickerView: UIImageView = { | ||
| 166 | + var image = UIImageView() | ||
| 167 | + image.image = UIImage(named: "USA") | ||
| 168 | + image.layer.cornerRadius = 11 | ||
| 169 | + image.contentMode = .scaleAspectFit | ||
| 170 | + return image | ||
| 171 | + }() | ||
| 172 | + var flagPointerView: UIImageView = { | ||
| 173 | + var image = UIImageView() | ||
| 174 | + image.image = UIImage(named: "FlagPointer") | ||
| 175 | + return image | ||
| 176 | + }() | ||
| 177 | + | ||
| 178 | + override init(frame: CGRect) { | ||
| 179 | + super.init(frame: frame) | ||
| 180 | + backgroundColor = .white | ||
| 181 | + layout() | ||
| 182 | + phoneNumberButton.addTarget(self, action: #selector(choosePhoneCode), for: .touchUpInside) | ||
| 183 | + emailButton.addTarget(self, action: #selector(chooseEmail), for: .touchUpInside) | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + required init?(coder: NSCoder) { | ||
| 187 | + fatalError("init(coder:) has not been implemented") | ||
| 188 | + } | ||
| 189 | + | ||
| 190 | + func layout() { | ||
| 191 | + | ||
| 192 | + addSubview(logoImage) | ||
| 193 | + addSubview(greetingsLabel) | ||
| 194 | + addSubview(verifyLabel) | ||
| 195 | + addSubview(shieldImage) | ||
| 196 | + | ||
| 197 | + addSubview(chooseLabel) | ||
| 198 | + addSubview(emailButton) | ||
| 199 | + addSubview(phoneNumberButton) | ||
| 200 | +// phoneNumberButton.addSubview(pickPhoneLabel) | ||
| 201 | +// phoneNumberButton.addSubview(phoneNumberIndicatorImage) | ||
| 202 | + addSubview(dividingLineView) | ||
| 203 | + | ||
| 204 | + addSubview(enterChosenAuthenticatorLabel) | ||
| 205 | + addSubview(emailTextField) | ||
| 206 | + addSubview(phoneTextField) | ||
| 207 | + addSubview(verificationDescriptionLabel) | ||
| 208 | + phoneTextField.addSubview(showPickerButton) | ||
| 209 | + | ||
| 210 | + showPickerButton.addSubview(flagPickerView) | ||
| 211 | + showPickerButton.addSubview(flagPointerView) | ||
| 212 | + | ||
| 213 | + addSubview(continueButton) | ||
| 214 | + continueButton.addSubview(continueLabel) | ||
| 215 | + continueButton.addSubview(pointerImage) | ||
| 216 | + | ||
| 217 | + addSubview(phonePickerView) | ||
| 218 | + | ||
| 219 | + logoImage.snp.makeConstraints { | ||
| 220 | + $0.top.equalTo(snp.top).offset(80) | ||
| 221 | + $0.left.equalTo(snp.left).offset(27) | ||
| 222 | + } | ||
| 223 | + greetingsLabel.snp.makeConstraints { | ||
| 224 | + $0.top.equalTo(logoImage.snp.bottom).offset(42) | ||
| 225 | + $0.left.equalTo(snp.left).offset(24) | ||
| 226 | + } | ||
| 227 | + shieldImage.snp.makeConstraints { | ||
| 228 | + $0.right.equalToSuperview() | ||
| 229 | + $0.top.equalTo(logoImage.snp.bottom).offset(27) | ||
| 230 | + } | ||
| 231 | + verifyLabel.snp.makeConstraints { | ||
| 232 | + $0.left.equalTo(27) | ||
| 233 | + $0.top.equalTo(greetingsLabel.snp.bottom).offset(10) | ||
| 234 | + } | ||
| 235 | + chooseLabel.snp.makeConstraints { | ||
| 236 | + $0.top.equalTo(shieldImage.snp.bottom).offset(52) | ||
| 237 | + $0.left.equalTo(snp.left).offset(27) | ||
| 238 | + } | ||
| 239 | + emailButton.snp.makeConstraints { | ||
| 240 | + $0.left.equalTo(snp.left).offset(27) | ||
| 241 | + $0.top.equalTo(chooseLabel.snp.bottom).offset(29) | ||
| 242 | + $0.height.equalTo(20) | ||
| 243 | + } | ||
| 244 | + phoneNumberButton.snp.makeConstraints { | ||
| 245 | + $0.top.equalTo(emailButton.snp.top) | ||
| 246 | + $0.height.equalTo(20) | ||
| 247 | + $0.left.equalTo(snp.left).offset(144) | ||
| 248 | + } | ||
| 249 | + dividingLineView.snp.makeConstraints { | ||
| 250 | + $0.left.right.equalToSuperview() | ||
| 251 | + $0.top.equalTo(emailButton.snp.bottom).offset(41) | ||
| 252 | + $0.height.equalTo(1) | ||
| 253 | + } | ||
| 254 | + enterChosenAuthenticatorLabel.snp.makeConstraints { | ||
| 255 | + $0.top.equalTo(dividingLineView.snp.bottom).offset(39) | ||
| 256 | + $0.left.equalTo(logoImage.snp.left) | ||
| 257 | + } | ||
| 258 | + emailTextField.snp.makeConstraints { | ||
| 259 | + $0.left.equalTo(logoImage.snp.left) | ||
| 260 | + $0.right.equalTo(snp.right).offset(-27) | ||
| 261 | + $0.top.equalTo(enterChosenAuthenticatorLabel.snp.bottom).offset(23) | ||
| 262 | + $0.height.equalTo(57) | ||
| 263 | + } | ||
| 264 | + phoneTextField.snp.makeConstraints { | ||
| 265 | + $0.left.equalTo(logoImage.snp.left) | ||
| 266 | + $0.right.equalTo(snp.right).offset(-27) | ||
| 267 | + $0.top.equalTo(enterChosenAuthenticatorLabel.snp.bottom).offset(23) | ||
| 268 | + $0.height.equalTo(57) | ||
| 269 | + } | ||
| 270 | + verificationDescriptionLabel.snp.makeConstraints { | ||
| 271 | + $0.top.equalTo(emailTextField.snp.bottom).offset(8) | ||
| 272 | + $0.left.equalTo(snp.left).offset(46) | ||
| 273 | + $0.right.equalTo(snp.right).offset(-22) | ||
| 274 | + } | ||
| 275 | + continueButton.snp.makeConstraints { | ||
| 276 | + $0.left.equalTo(snp.left) | ||
| 277 | + $0.right.equalTo(snp.right) | ||
| 278 | + $0.top.equalTo(emailTextField.snp.bottom).offset(90) | ||
| 279 | + $0.height.equalTo(125) | ||
| 280 | + } | ||
| 281 | + continueLabel.snp.makeConstraints { | ||
| 282 | + $0.left.equalTo(snp.left).offset(48) | ||
| 283 | + $0.top.equalTo(continueButton.snp.top).offset(33) | ||
| 284 | + } | ||
| 285 | + pointerImage.snp.makeConstraints { | ||
| 286 | + $0.top.equalTo(continueButton.snp.top).offset(31) | ||
| 287 | + $0.right.equalTo(snp.right).offset(-51.5) | ||
| 288 | + } | ||
| 289 | + phonePickerView.snp.makeConstraints { make in | ||
| 290 | + make.leading.trailing.equalToSuperview() | ||
| 291 | + make.height.equalTo(390) | ||
| 292 | + make.top.equalTo(self.snp.bottom) | ||
| 293 | + } | ||
| 294 | + showPickerButton.snp.makeConstraints { | ||
| 295 | + $0.height.equalTo(22) | ||
| 296 | + $0.width.equalTo(50) | ||
| 297 | + $0.left.equalTo(emailTextField.snp.left).offset(22) | ||
| 298 | + $0.top.equalTo(emailTextField.snp.top).offset(18) | ||
| 299 | + } | ||
| 300 | + flagPickerView.snp.makeConstraints { | ||
| 301 | + $0.left.equalToSuperview() | ||
| 302 | + $0.top.equalToSuperview() | ||
| 303 | + $0.height.width.equalTo(20) | ||
| 304 | + $0.centerY.equalTo(showPickerButton.snp.centerY) | ||
| 305 | + } | ||
| 306 | + flagPointerView.snp.makeConstraints { | ||
| 307 | + $0.left.equalTo(flagPickerView.snp.right).offset(10) | ||
| 308 | + $0.centerYWithinMargins.equalTo(flagPickerView.snp.centerYWithinMargins) | ||
| 309 | + } | ||
| 310 | + } | ||
| 311 | + | ||
| 312 | + @objc func choosePhoneCode() { | ||
| 313 | + emailTextField.isHidden = true | ||
| 314 | + phoneTextField.isHidden = false | ||
| 315 | + phoneNumberButton.isSelected = true | ||
| 316 | + emailButton.isSelected = true | ||
| 317 | +// phoneNumberButton.setImage(UIImage(named: "OnIndicator"), for: .normal) | ||
| 318 | +// emailButton.setImage(UIImage(named: "OffIndicator"), for: .normal) | ||
| 319 | + phoneNumberButton.image(for: .normal) | ||
| 320 | + verificationDescriptionLabel.text = "Verification code will be sent to\nyour phone number" | ||
| 321 | + enterChosenAuthenticatorLabel.text = "Enter your phone number" | ||
| 322 | + emailTextField.text = "+1" | ||
| 323 | + showPickerButton.isHidden = false | ||
| 324 | + emailTextField.keyboardType = .numberPad | ||
| 325 | + } | ||
| 326 | + | ||
| 327 | + @objc func chooseEmail() { | ||
| 328 | + emailTextField.isHidden = false | ||
| 329 | + phoneTextField.isHidden = true | ||
| 330 | + phoneNumberButton.isSelected = false | ||
| 331 | + emailButton.isSelected = false | ||
| 332 | + verificationDescriptionLabel.text = "Verification code will be sent to your e-mail" | ||
| 333 | + enterChosenAuthenticatorLabel.text = "Enter your email address" | ||
| 334 | + emailTextField.text = "" | ||
| 335 | + emailTextField.placeholder = "Example: john.doe@gmail.com" | ||
| 336 | + showPickerButton.isHidden = true | ||
| 337 | + } | ||
| 338 | + | ||
| 339 | + func showPickerView() { | ||
| 340 | + UIView.animate(withDuration: 0.3) { | ||
| 341 | + self.phonePickerView.snp.updateConstraints { make in | ||
| 342 | + make.top.equalTo(self.snp.bottom).offset(-390) | ||
| 343 | + | ||
| 344 | + } | ||
| 345 | + self.layoutIfNeeded() | ||
| 346 | + } | ||
| 347 | + | ||
| 348 | + } | ||
| 349 | + | ||
| 350 | + func hidePicerView() { | ||
| 351 | + UIView.animate(withDuration: 0.3) { | ||
| 352 | + self.phonePickerView.snp.updateConstraints { make in | ||
| 353 | + make.top.equalTo(self.snp.bottom).offset(0) | ||
| 354 | + } | ||
| 355 | + self.layoutIfNeeded() | ||
| 356 | + } | ||
| 357 | + } | ||
| 358 | +} |
Podfile
0 → 100644
Podfile.lock
0 → 100644
Pods/Manifest.lock
0 → 100644
Pods/Pods.xcodeproj/project.pbxproj
0 → 100644
| 1 | +// !$*UTF8*$! | ||
| 2 | +{ | ||
| 3 | + archiveVersion = 1; | ||
| 4 | + classes = { | ||
| 5 | + }; | ||
| 6 | + objectVersion = 55; | ||
| 7 | + objects = { | ||
| 8 | + | ||
| 9 | +/* Begin PBXBuildFile section */ | ||
| 10 | + 144DA93A55A598F5197F10C729FBDD69 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A9341666EAC154422A032092A7DC2D7 /* UILayoutSupport+Extensions.swift */; }; | ||
| 11 | + 17BE0F4E51B0FB968125F1A520607FD8 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AB9BB47A2175181386A432C07253AE /* ConstraintMultiplierTarget.swift */; }; | ||
| 12 | + 1E9EEA756F2774D73347F1660EEFE3E9 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE9055CEA7890517265589BD23D73A49 /* ConstraintView+Extensions.swift */; }; | ||
| 13 | + 274DF0E2BF04F6F4F9F1E70CF513A4F2 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A46A8054577838D49C60142EB88B13 /* ConstraintLayoutSupportDSL.swift */; }; | ||
| 14 | + 3B60C02F6E42FD06B128473E00A94224 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D705690D879064ED84970813189D8D4 /* ConstraintLayoutSupport.swift */; }; | ||
| 15 | + 3CD5FAFC746A76D73C3F501734199DFF /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E066869A95E00B949CBA4D2284C35F /* Typealiases.swift */; }; | ||
| 16 | + 3DEDFA52B3A196F6D3E1F0937617628A /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09BF299D2EEB87E7DD02630E87B96224 /* ConstraintLayoutGuide+Extensions.swift */; }; | ||
| 17 | + 43863B6D6A0E47B6648BB7B469736EDD /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = F44C5B72775F6AF0891BF331F32FE10D /* LayoutConstraint.swift */; }; | ||
| 18 | + 4CA13A0527BC57DE2C54A0F3B5ED8652 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 464C01543F3BCEDEE51ABAA696513D0B /* LayoutConstraintItem.swift */; }; | ||
| 19 | + 51A4A1046676D304410544EB56732A49 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50380F281EC3EE769C85035CCEA77226 /* Constraint.swift */; }; | ||
| 20 | + 5E8BA529DFB4529006967624044FEC1C /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56006AA49A060CA2830F32CD6F394823 /* ConstraintViewDSL.swift */; }; | ||
| 21 | + 62F299B4704A7C95FB5866C6CDE2E2FD /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B200BD964F52F6693D4168248B8645 /* ConstraintOffsetTarget.swift */; }; | ||
| 22 | + 7580FAAB1BDA52F5A969E5571D1A5973 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F460233F2A555D41511B6CCA66A124 /* ConstraintAttributes.swift */; }; | ||
| 23 | + 7764AA5F6BBFC6ECE43959923DD007D3 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7D358AA1606C7B2CDC8555485807E9E /* ConstraintDirectionalInsetTarget.swift */; }; | ||
| 24 | + 825062025906CE93C5D124E1FD9A811E /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43F10DE451FED17810D9B5C237324A5 /* ConstraintMakerExtendable.swift */; }; | ||
| 25 | + 8449EB1DFD43E222D687D5A8D2088D2D /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE0BE9F3D55FDB29EF516F6D6B1B6BCA /* ConstraintLayoutGuideDSL.swift */; }; | ||
| 26 | + 8C6546C1EF4F153DF3795CC6FE189E5B /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 549471CD1FE3A1E1865DD172864918D3 /* ConstraintInsets.swift */; }; | ||
| 27 | + 8FD9CD608C4EAAFDE6AC7B8B9EF0FF5E /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1D9F6F4E2364DFAF158E04AF5D5EAA /* ConstraintDescription.swift */; }; | ||
| 28 | + 90E5A3F8520D447ACD72A9F7C1DDAD47 /* Pods-InterQR-Internship-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E35E51BBC4431F93FF23D69BFEDAEB /* Pods-InterQR-Internship-dummy.m */; }; | ||
| 29 | + 90FD5AE525E138A473723FD79AF73273 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE00ECC24C5CC6DC938204FF42AD0E5 /* ConstraintDSL.swift */; }; | ||
| 30 | + 968B4874A9F12D67C8B901136C9C8157 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E13B89FFD81AACB7530769CA05EEA26B /* SnapKit-dummy.m */; }; | ||
| 31 | + A0F754C88A64972A40A9008B0AD52109 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91164BE769DA144776663FBF46785561 /* ConstraintDirectionalInsets.swift */; }; | ||
| 32 | + A4467357581E8345DD348683CC4111AF /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0116B84A6773B75FCBFCB479E740F0F3 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; | ||
| 33 | + A53D3AF15CE8D348306EF11619C5D166 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2C3B0B200350EAC8F42EF635FF31BD1 /* ConstraintMakerEditable.swift */; }; | ||
| 34 | + B23550BBD6A6025B9B319F5981F5ABF4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; | ||
| 35 | + B543FD108C1C6AF6129CB4991553218B /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 250E41DBB680A3A2ECDDD2210311B230 /* ConstraintConfig.swift */; }; | ||
| 36 | + BD333CDBCF5D2FD55920336FC271DF33 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474AFC560A8B414B467174737DBC891A /* ConstraintItem.swift */; }; | ||
| 37 | + BEBF920FEB959B46A76BAADF22E5CD15 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2EC377264B25FB0E67D150E37E87CD /* ConstraintInsetTarget.swift */; }; | ||
| 38 | + C61D3BC32A28A405C934C00039AD2583 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D990E0FED5B41C1F13AC6B08208A99B /* ConstraintConstantTarget.swift */; }; | ||
| 39 | + CB194156C900B767B0160AF72EDF354D /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141BC33167429B9926FB24A17F01568C /* ConstraintMaker.swift */; }; | ||
| 40 | + CB8E4BF0D710970BE2CB4C87ED1043E4 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 724FB64349F5678CE1709979CF0DD952 /* ConstraintMakerRelatable.swift */; }; | ||
| 41 | + CCA22C9F421C9E8C13009947816D8C82 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; | ||
| 42 | + D13D417B236E736EEAE7217B5CE3EC5C /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D02329E74D733C03BF6BAE1F564481 /* ConstraintMakerFinalizable.swift */; }; | ||
| 43 | + D59C2826AD288ECFF576B2AFA312716C /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25479F58B67AA43E092C7B156C1B5C1B /* ConstraintRelation.swift */; }; | ||
| 44 | + DABB59FFCCEFA43B2311DC3523722688 /* Pods-InterQR-Internship-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 21963A6A321FAB871AA9A109572D2FBC /* Pods-InterQR-Internship-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; | ||
| 45 | + E36244E8BF4AC941E82DAF16DDF4BBC2 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9716AD15FADF38A93170E034F2BCE457 /* ConstraintPriorityTarget.swift */; }; | ||
| 46 | + E8EAADACF3BAE33BDECBC7214EAE9CD2 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2975CA5A0D26BC84F3EE9912FEBDA795 /* ConstraintRelatableTarget.swift */; }; | ||
| 47 | + EE6C364198A763EBBF49237035D86439 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C5188AE61F0E667CD9E7ED28CDD61C /* ConstraintLayoutGuide.swift */; }; | ||
| 48 | + F10586462FB54CEA169A1A7A469A926D /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D038D2FAA2F6B073D1B64B8635F4E3E6 /* Debugging.swift */; }; | ||
| 49 | + F24D06C23DAB2F52A30C886A7A8177C7 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51E99894F75F00A281BE6A32FBDE495 /* ConstraintView.swift */; }; | ||
| 50 | + F2C817C166B2DE613222C41015A586C9 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91A53CAF547D71AEFABE49D91B4E6816 /* ConstraintMakerPriortizable.swift */; }; | ||
| 51 | + F343BA4E457FFDB0165492AECAEF0BCC /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0BD95F32F2E57D6B9100B77B93F013C /* ConstraintPriority.swift */; }; | ||
| 52 | +/* End PBXBuildFile section */ | ||
| 53 | + | ||
| 54 | +/* Begin PBXContainerItemProxy section */ | ||
| 55 | + 7168F679A13DA87B24C148E3B8BDBAC5 /* PBXContainerItemProxy */ = { | ||
| 56 | + isa = PBXContainerItemProxy; | ||
| 57 | + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; | ||
| 58 | + proxyType = 1; | ||
| 59 | + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; | ||
| 60 | + remoteInfo = SnapKit; | ||
| 61 | + }; | ||
| 62 | +/* End PBXContainerItemProxy section */ | ||
| 63 | + | ||
| 64 | +/* Begin PBXFileReference section */ | ||
| 65 | + 0116B84A6773B75FCBFCB479E740F0F3 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = "<group>"; }; | ||
| 66 | + 09BF299D2EEB87E7DD02630E87B96224 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = "<group>"; }; | ||
| 67 | + 11D02329E74D733C03BF6BAE1F564481 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = "<group>"; }; | ||
| 68 | + 13F460233F2A555D41511B6CCA66A124 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = "<group>"; }; | ||
| 69 | + 141BC33167429B9926FB24A17F01568C /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = "<group>"; }; | ||
| 70 | + 21963A6A321FAB871AA9A109572D2FBC /* Pods-InterQR-Internship-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-InterQR-Internship-umbrella.h"; sourceTree = "<group>"; }; | ||
| 71 | + 250E41DBB680A3A2ECDDD2210311B230 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = "<group>"; }; | ||
| 72 | + 25479F58B67AA43E092C7B156C1B5C1B /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = "<group>"; }; | ||
| 73 | + 2975CA5A0D26BC84F3EE9912FEBDA795 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = "<group>"; }; | ||
| 74 | + 391A6F8B42D2CD885F8F3C4CE6859439 /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = "<group>"; }; | ||
| 75 | + 3D705690D879064ED84970813189D8D4 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = "<group>"; }; | ||
| 76 | + 464C01543F3BCEDEE51ABAA696513D0B /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = "<group>"; }; | ||
| 77 | + 474AFC560A8B414B467174737DBC891A /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = "<group>"; }; | ||
| 78 | + 47B200BD964F52F6693D4168248B8645 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = "<group>"; }; | ||
| 79 | + 49312D807F40C233BB30CFEEB9EFC3C1 /* Pods-InterQR-Internship-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-InterQR-Internship-frameworks.sh"; sourceTree = "<group>"; }; | ||
| 80 | + 50380F281EC3EE769C85035CCEA77226 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = "<group>"; }; | ||
| 81 | + 549471CD1FE3A1E1865DD172864918D3 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = "<group>"; }; | ||
| 82 | + 56006AA49A060CA2830F32CD6F394823 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = "<group>"; }; | ||
| 83 | + 5EB91B045230D31E6646927758B02E79 /* Pods-InterQR-Internship-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-InterQR-Internship-acknowledgements.plist"; sourceTree = "<group>"; }; | ||
| 84 | + 66C5188AE61F0E667CD9E7ED28CDD61C /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = "<group>"; }; | ||
| 85 | + 6A9341666EAC154422A032092A7DC2D7 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = "<group>"; }; | ||
| 86 | + 6D990E0FED5B41C1F13AC6B08208A99B /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = "<group>"; }; | ||
| 87 | + 724FB64349F5678CE1709979CF0DD952 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = "<group>"; }; | ||
| 88 | + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; | ||
| 89 | + 7889131C1139F96BBDA94CEE2E694763 /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = "<group>"; }; | ||
| 90 | + 7AE00ECC24C5CC6DC938204FF42AD0E5 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = "<group>"; }; | ||
| 91 | + 7C21E0C93A1141A1E2EB51575500E27D /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = "<group>"; }; | ||
| 92 | + 7C2EC377264B25FB0E67D150E37E87CD /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = "<group>"; }; | ||
| 93 | + 80955AA4A40A9133A80DA09E1E44ACA3 /* Pods-InterQR-Internship-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-InterQR-Internship-acknowledgements.markdown"; sourceTree = "<group>"; }; | ||
| 94 | + 8AB15D54D42F3F112190CEB6EA262F77 /* Pods-InterQR-Internship-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-InterQR-Internship-Info.plist"; sourceTree = "<group>"; }; | ||
| 95 | + 91164BE769DA144776663FBF46785561 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Source/ConstraintDirectionalInsets.swift; sourceTree = "<group>"; }; | ||
| 96 | + 91A53CAF547D71AEFABE49D91B4E6816 /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = "<group>"; }; | ||
| 97 | + 9716AD15FADF38A93170E034F2BCE457 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = "<group>"; }; | ||
| 98 | + 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 99 | + 9AFE619CFFABED07F15D3C2B1C1B48F6 /* Pods-InterQR-Internship.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-InterQR-Internship.release.xcconfig"; sourceTree = "<group>"; }; | ||
| 100 | + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; | ||
| 101 | + A1CD432F32277BB93DEAADA626ECEC5B /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = "<group>"; }; | ||
| 102 | + A51E99894F75F00A281BE6A32FBDE495 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = "<group>"; }; | ||
| 103 | + A7D358AA1606C7B2CDC8555485807E9E /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Source/ConstraintDirectionalInsetTarget.swift; sourceTree = "<group>"; }; | ||
| 104 | + BC2FF22E595805C1E70DAF47C4A27774 /* Pods-InterQR-Internship */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-InterQR-Internship"; path = Pods_InterQR_Internship.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 105 | + BE0BE9F3D55FDB29EF516F6D6B1B6BCA /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = "<group>"; }; | ||
| 106 | + C4A46A8054577838D49C60142EB88B13 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = "<group>"; }; | ||
| 107 | + CB1D9F6F4E2364DFAF158E04AF5D5EAA /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = "<group>"; }; | ||
| 108 | + D038D2FAA2F6B073D1B64B8635F4E3E6 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = "<group>"; }; | ||
| 109 | + D0E35E51BBC4431F93FF23D69BFEDAEB /* Pods-InterQR-Internship-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-InterQR-Internship-dummy.m"; sourceTree = "<group>"; }; | ||
| 110 | + D4E066869A95E00B949CBA4D2284C35F /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = "<group>"; }; | ||
| 111 | + E13B89FFD81AACB7530769CA05EEA26B /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = "<group>"; }; | ||
| 112 | + E14A09DC3AD8CA84464FEC37F0FC99D1 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = "<group>"; }; | ||
| 113 | + E2C3B0B200350EAC8F42EF635FF31BD1 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = "<group>"; }; | ||
| 114 | + E43F10DE451FED17810D9B5C237324A5 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = "<group>"; }; | ||
| 115 | + EE9055CEA7890517265589BD23D73A49 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = "<group>"; }; | ||
| 116 | + EF88D6AF5E18A624B2BBDC50D49C7534 /* Pods-InterQR-Internship.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-InterQR-Internship.debug.xcconfig"; sourceTree = "<group>"; }; | ||
| 117 | + F0BD95F32F2E57D6B9100B77B93F013C /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = "<group>"; }; | ||
| 118 | + F44C5B72775F6AF0891BF331F32FE10D /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = "<group>"; }; | ||
| 119 | + F504EA106E2EAFCABF948E2429753957 /* Pods-InterQR-Internship.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-InterQR-Internship.modulemap"; sourceTree = "<group>"; }; | ||
| 120 | + F7AB9BB47A2175181386A432C07253AE /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = "<group>"; }; | ||
| 121 | +/* End PBXFileReference section */ | ||
| 122 | + | ||
| 123 | +/* Begin PBXFrameworksBuildPhase section */ | ||
| 124 | + 8903CC697923B02B1E7383E453A91481 /* Frameworks */ = { | ||
| 125 | + isa = PBXFrameworksBuildPhase; | ||
| 126 | + buildActionMask = 2147483647; | ||
| 127 | + files = ( | ||
| 128 | + B23550BBD6A6025B9B319F5981F5ABF4 /* Foundation.framework in Frameworks */, | ||
| 129 | + ); | ||
| 130 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 131 | + }; | ||
| 132 | + 9B30433E568C40FCE04D5188A9715448 /* Frameworks */ = { | ||
| 133 | + isa = PBXFrameworksBuildPhase; | ||
| 134 | + buildActionMask = 2147483647; | ||
| 135 | + files = ( | ||
| 136 | + CCA22C9F421C9E8C13009947816D8C82 /* Foundation.framework in Frameworks */, | ||
| 137 | + ); | ||
| 138 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 139 | + }; | ||
| 140 | +/* End PBXFrameworksBuildPhase section */ | ||
| 141 | + | ||
| 142 | +/* Begin PBXGroup section */ | ||
| 143 | + 578452D2E740E91742655AC8F1636D1F /* iOS */ = { | ||
| 144 | + isa = PBXGroup; | ||
| 145 | + children = ( | ||
| 146 | + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */, | ||
| 147 | + ); | ||
| 148 | + name = iOS; | ||
| 149 | + sourceTree = "<group>"; | ||
| 150 | + }; | ||
| 151 | + 6CD2077814608664B890545761124450 /* Targets Support Files */ = { | ||
| 152 | + isa = PBXGroup; | ||
| 153 | + children = ( | ||
| 154 | + AB6A1FAB8184004FBB23A49ECB702D8D /* Pods-InterQR-Internship */, | ||
| 155 | + ); | ||
| 156 | + name = "Targets Support Files"; | ||
| 157 | + sourceTree = "<group>"; | ||
| 158 | + }; | ||
| 159 | + 7F02E3862C6E84203E8324D9D0088797 /* SnapKit */ = { | ||
| 160 | + isa = PBXGroup; | ||
| 161 | + children = ( | ||
| 162 | + 50380F281EC3EE769C85035CCEA77226 /* Constraint.swift */, | ||
| 163 | + 13F460233F2A555D41511B6CCA66A124 /* ConstraintAttributes.swift */, | ||
| 164 | + 250E41DBB680A3A2ECDDD2210311B230 /* ConstraintConfig.swift */, | ||
| 165 | + 6D990E0FED5B41C1F13AC6B08208A99B /* ConstraintConstantTarget.swift */, | ||
| 166 | + CB1D9F6F4E2364DFAF158E04AF5D5EAA /* ConstraintDescription.swift */, | ||
| 167 | + 91164BE769DA144776663FBF46785561 /* ConstraintDirectionalInsets.swift */, | ||
| 168 | + A7D358AA1606C7B2CDC8555485807E9E /* ConstraintDirectionalInsetTarget.swift */, | ||
| 169 | + 7AE00ECC24C5CC6DC938204FF42AD0E5 /* ConstraintDSL.swift */, | ||
| 170 | + 549471CD1FE3A1E1865DD172864918D3 /* ConstraintInsets.swift */, | ||
| 171 | + 7C2EC377264B25FB0E67D150E37E87CD /* ConstraintInsetTarget.swift */, | ||
| 172 | + 474AFC560A8B414B467174737DBC891A /* ConstraintItem.swift */, | ||
| 173 | + 66C5188AE61F0E667CD9E7ED28CDD61C /* ConstraintLayoutGuide.swift */, | ||
| 174 | + 09BF299D2EEB87E7DD02630E87B96224 /* ConstraintLayoutGuide+Extensions.swift */, | ||
| 175 | + BE0BE9F3D55FDB29EF516F6D6B1B6BCA /* ConstraintLayoutGuideDSL.swift */, | ||
| 176 | + 3D705690D879064ED84970813189D8D4 /* ConstraintLayoutSupport.swift */, | ||
| 177 | + C4A46A8054577838D49C60142EB88B13 /* ConstraintLayoutSupportDSL.swift */, | ||
| 178 | + 141BC33167429B9926FB24A17F01568C /* ConstraintMaker.swift */, | ||
| 179 | + E2C3B0B200350EAC8F42EF635FF31BD1 /* ConstraintMakerEditable.swift */, | ||
| 180 | + E43F10DE451FED17810D9B5C237324A5 /* ConstraintMakerExtendable.swift */, | ||
| 181 | + 11D02329E74D733C03BF6BAE1F564481 /* ConstraintMakerFinalizable.swift */, | ||
| 182 | + 91A53CAF547D71AEFABE49D91B4E6816 /* ConstraintMakerPriortizable.swift */, | ||
| 183 | + 724FB64349F5678CE1709979CF0DD952 /* ConstraintMakerRelatable.swift */, | ||
| 184 | + F7AB9BB47A2175181386A432C07253AE /* ConstraintMultiplierTarget.swift */, | ||
| 185 | + 47B200BD964F52F6693D4168248B8645 /* ConstraintOffsetTarget.swift */, | ||
| 186 | + F0BD95F32F2E57D6B9100B77B93F013C /* ConstraintPriority.swift */, | ||
| 187 | + 9716AD15FADF38A93170E034F2BCE457 /* ConstraintPriorityTarget.swift */, | ||
| 188 | + 2975CA5A0D26BC84F3EE9912FEBDA795 /* ConstraintRelatableTarget.swift */, | ||
| 189 | + 25479F58B67AA43E092C7B156C1B5C1B /* ConstraintRelation.swift */, | ||
| 190 | + A51E99894F75F00A281BE6A32FBDE495 /* ConstraintView.swift */, | ||
| 191 | + EE9055CEA7890517265589BD23D73A49 /* ConstraintView+Extensions.swift */, | ||
| 192 | + 56006AA49A060CA2830F32CD6F394823 /* ConstraintViewDSL.swift */, | ||
| 193 | + D038D2FAA2F6B073D1B64B8635F4E3E6 /* Debugging.swift */, | ||
| 194 | + F44C5B72775F6AF0891BF331F32FE10D /* LayoutConstraint.swift */, | ||
| 195 | + 464C01543F3BCEDEE51ABAA696513D0B /* LayoutConstraintItem.swift */, | ||
| 196 | + D4E066869A95E00B949CBA4D2284C35F /* Typealiases.swift */, | ||
| 197 | + 6A9341666EAC154422A032092A7DC2D7 /* UILayoutSupport+Extensions.swift */, | ||
| 198 | + 843EFF0C650682C304D518A9092EE9FD /* Support Files */, | ||
| 199 | + ); | ||
| 200 | + name = SnapKit; | ||
| 201 | + path = SnapKit; | ||
| 202 | + sourceTree = "<group>"; | ||
| 203 | + }; | ||
| 204 | + 843EFF0C650682C304D518A9092EE9FD /* Support Files */ = { | ||
| 205 | + isa = PBXGroup; | ||
| 206 | + children = ( | ||
| 207 | + 7889131C1139F96BBDA94CEE2E694763 /* SnapKit.modulemap */, | ||
| 208 | + E13B89FFD81AACB7530769CA05EEA26B /* SnapKit-dummy.m */, | ||
| 209 | + 391A6F8B42D2CD885F8F3C4CE6859439 /* SnapKit-Info.plist */, | ||
| 210 | + E14A09DC3AD8CA84464FEC37F0FC99D1 /* SnapKit-prefix.pch */, | ||
| 211 | + 0116B84A6773B75FCBFCB479E740F0F3 /* SnapKit-umbrella.h */, | ||
| 212 | + 7C21E0C93A1141A1E2EB51575500E27D /* SnapKit.debug.xcconfig */, | ||
| 213 | + A1CD432F32277BB93DEAADA626ECEC5B /* SnapKit.release.xcconfig */, | ||
| 214 | + ); | ||
| 215 | + name = "Support Files"; | ||
| 216 | + path = "../Target Support Files/SnapKit"; | ||
| 217 | + sourceTree = "<group>"; | ||
| 218 | + }; | ||
| 219 | + A1321E8B354EADA9A5DA2454DCD9B0B5 /* Products */ = { | ||
| 220 | + isa = PBXGroup; | ||
| 221 | + children = ( | ||
| 222 | + BC2FF22E595805C1E70DAF47C4A27774 /* Pods-InterQR-Internship */, | ||
| 223 | + 979486118B3E90C08386079D57962701 /* SnapKit */, | ||
| 224 | + ); | ||
| 225 | + name = Products; | ||
| 226 | + sourceTree = "<group>"; | ||
| 227 | + }; | ||
| 228 | + AB6A1FAB8184004FBB23A49ECB702D8D /* Pods-InterQR-Internship */ = { | ||
| 229 | + isa = PBXGroup; | ||
| 230 | + children = ( | ||
| 231 | + F504EA106E2EAFCABF948E2429753957 /* Pods-InterQR-Internship.modulemap */, | ||
| 232 | + 80955AA4A40A9133A80DA09E1E44ACA3 /* Pods-InterQR-Internship-acknowledgements.markdown */, | ||
| 233 | + 5EB91B045230D31E6646927758B02E79 /* Pods-InterQR-Internship-acknowledgements.plist */, | ||
| 234 | + D0E35E51BBC4431F93FF23D69BFEDAEB /* Pods-InterQR-Internship-dummy.m */, | ||
| 235 | + 49312D807F40C233BB30CFEEB9EFC3C1 /* Pods-InterQR-Internship-frameworks.sh */, | ||
| 236 | + 8AB15D54D42F3F112190CEB6EA262F77 /* Pods-InterQR-Internship-Info.plist */, | ||
| 237 | + 21963A6A321FAB871AA9A109572D2FBC /* Pods-InterQR-Internship-umbrella.h */, | ||
| 238 | + EF88D6AF5E18A624B2BBDC50D49C7534 /* Pods-InterQR-Internship.debug.xcconfig */, | ||
| 239 | + 9AFE619CFFABED07F15D3C2B1C1B48F6 /* Pods-InterQR-Internship.release.xcconfig */, | ||
| 240 | + ); | ||
| 241 | + name = "Pods-InterQR-Internship"; | ||
| 242 | + path = "Target Support Files/Pods-InterQR-Internship"; | ||
| 243 | + sourceTree = "<group>"; | ||
| 244 | + }; | ||
| 245 | + BA22F08D059965C9A09F78196176CEDB /* Pods */ = { | ||
| 246 | + isa = PBXGroup; | ||
| 247 | + children = ( | ||
| 248 | + 7F02E3862C6E84203E8324D9D0088797 /* SnapKit */, | ||
| 249 | + ); | ||
| 250 | + name = Pods; | ||
| 251 | + sourceTree = "<group>"; | ||
| 252 | + }; | ||
| 253 | + CF1408CF629C7361332E53B88F7BD30C = { | ||
| 254 | + isa = PBXGroup; | ||
| 255 | + children = ( | ||
| 256 | + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, | ||
| 257 | + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, | ||
| 258 | + BA22F08D059965C9A09F78196176CEDB /* Pods */, | ||
| 259 | + A1321E8B354EADA9A5DA2454DCD9B0B5 /* Products */, | ||
| 260 | + 6CD2077814608664B890545761124450 /* Targets Support Files */, | ||
| 261 | + ); | ||
| 262 | + sourceTree = "<group>"; | ||
| 263 | + }; | ||
| 264 | + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { | ||
| 265 | + isa = PBXGroup; | ||
| 266 | + children = ( | ||
| 267 | + 578452D2E740E91742655AC8F1636D1F /* iOS */, | ||
| 268 | + ); | ||
| 269 | + name = Frameworks; | ||
| 270 | + sourceTree = "<group>"; | ||
| 271 | + }; | ||
| 272 | +/* End PBXGroup section */ | ||
| 273 | + | ||
| 274 | +/* Begin PBXHeadersBuildPhase section */ | ||
| 275 | + 3B921547E999920F44EBD58F955423CC /* Headers */ = { | ||
| 276 | + isa = PBXHeadersBuildPhase; | ||
| 277 | + buildActionMask = 2147483647; | ||
| 278 | + files = ( | ||
| 279 | + A4467357581E8345DD348683CC4111AF /* SnapKit-umbrella.h in Headers */, | ||
| 280 | + ); | ||
| 281 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 282 | + }; | ||
| 283 | + FF3F375D2A6C27224B693BE653D1BE1D /* Headers */ = { | ||
| 284 | + isa = PBXHeadersBuildPhase; | ||
| 285 | + buildActionMask = 2147483647; | ||
| 286 | + files = ( | ||
| 287 | + DABB59FFCCEFA43B2311DC3523722688 /* Pods-InterQR-Internship-umbrella.h in Headers */, | ||
| 288 | + ); | ||
| 289 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 290 | + }; | ||
| 291 | +/* End PBXHeadersBuildPhase section */ | ||
| 292 | + | ||
| 293 | +/* Begin PBXNativeTarget section */ | ||
| 294 | + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { | ||
| 295 | + isa = PBXNativeTarget; | ||
| 296 | + buildConfigurationList = 4949A940CD53B7E293859B71C91C88F3 /* Build configuration list for PBXNativeTarget "SnapKit" */; | ||
| 297 | + buildPhases = ( | ||
| 298 | + 3B921547E999920F44EBD58F955423CC /* Headers */, | ||
| 299 | + 06A02EF810C9B8F84BA558BBDB9E5D6E /* Sources */, | ||
| 300 | + 9B30433E568C40FCE04D5188A9715448 /* Frameworks */, | ||
| 301 | + DBFBC99C6F5D9B1D57CC9D1C6E9209EB /* Resources */, | ||
| 302 | + ); | ||
| 303 | + buildRules = ( | ||
| 304 | + ); | ||
| 305 | + dependencies = ( | ||
| 306 | + ); | ||
| 307 | + name = SnapKit; | ||
| 308 | + productName = SnapKit; | ||
| 309 | + productReference = 979486118B3E90C08386079D57962701 /* SnapKit */; | ||
| 310 | + productType = "com.apple.product-type.framework"; | ||
| 311 | + }; | ||
| 312 | + 9BAF824ED8B046DCC6AEAC3D645548EE /* Pods-InterQR-Internship */ = { | ||
| 313 | + isa = PBXNativeTarget; | ||
| 314 | + buildConfigurationList = D8D8A2B883726AC5D3A57DEBA6C81808 /* Build configuration list for PBXNativeTarget "Pods-InterQR-Internship" */; | ||
| 315 | + buildPhases = ( | ||
| 316 | + FF3F375D2A6C27224B693BE653D1BE1D /* Headers */, | ||
| 317 | + 6753A70EC97EA6377506948C78A9F4A2 /* Sources */, | ||
| 318 | + 8903CC697923B02B1E7383E453A91481 /* Frameworks */, | ||
| 319 | + C2EA05FC2666CA72F48FA357F269DD6B /* Resources */, | ||
| 320 | + ); | ||
| 321 | + buildRules = ( | ||
| 322 | + ); | ||
| 323 | + dependencies = ( | ||
| 324 | + F6A140FDF6958E137BBA33A7A61790C1 /* PBXTargetDependency */, | ||
| 325 | + ); | ||
| 326 | + name = "Pods-InterQR-Internship"; | ||
| 327 | + productName = Pods_InterQR_Internship; | ||
| 328 | + productReference = BC2FF22E595805C1E70DAF47C4A27774 /* Pods-InterQR-Internship */; | ||
| 329 | + productType = "com.apple.product-type.framework"; | ||
| 330 | + }; | ||
| 331 | +/* End PBXNativeTarget section */ | ||
| 332 | + | ||
| 333 | +/* Begin PBXProject section */ | ||
| 334 | + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { | ||
| 335 | + isa = PBXProject; | ||
| 336 | + attributes = { | ||
| 337 | + LastSwiftUpdateCheck = 1240; | ||
| 338 | + LastUpgradeCheck = 1240; | ||
| 339 | + }; | ||
| 340 | + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; | ||
| 341 | + compatibilityVersion = "Xcode 13.0"; | ||
| 342 | + developmentRegion = en; | ||
| 343 | + hasScannedForEncodings = 0; | ||
| 344 | + knownRegions = ( | ||
| 345 | + Base, | ||
| 346 | + en, | ||
| 347 | + ); | ||
| 348 | + mainGroup = CF1408CF629C7361332E53B88F7BD30C; | ||
| 349 | + productRefGroup = A1321E8B354EADA9A5DA2454DCD9B0B5 /* Products */; | ||
| 350 | + projectDirPath = ""; | ||
| 351 | + projectRoot = ""; | ||
| 352 | + targets = ( | ||
| 353 | + 9BAF824ED8B046DCC6AEAC3D645548EE /* Pods-InterQR-Internship */, | ||
| 354 | + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, | ||
| 355 | + ); | ||
| 356 | + }; | ||
| 357 | +/* End PBXProject section */ | ||
| 358 | + | ||
| 359 | +/* Begin PBXResourcesBuildPhase section */ | ||
| 360 | + C2EA05FC2666CA72F48FA357F269DD6B /* Resources */ = { | ||
| 361 | + isa = PBXResourcesBuildPhase; | ||
| 362 | + buildActionMask = 2147483647; | ||
| 363 | + files = ( | ||
| 364 | + ); | ||
| 365 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 366 | + }; | ||
| 367 | + DBFBC99C6F5D9B1D57CC9D1C6E9209EB /* Resources */ = { | ||
| 368 | + isa = PBXResourcesBuildPhase; | ||
| 369 | + buildActionMask = 2147483647; | ||
| 370 | + files = ( | ||
| 371 | + ); | ||
| 372 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 373 | + }; | ||
| 374 | +/* End PBXResourcesBuildPhase section */ | ||
| 375 | + | ||
| 376 | +/* Begin PBXSourcesBuildPhase section */ | ||
| 377 | + 06A02EF810C9B8F84BA558BBDB9E5D6E /* Sources */ = { | ||
| 378 | + isa = PBXSourcesBuildPhase; | ||
| 379 | + buildActionMask = 2147483647; | ||
| 380 | + files = ( | ||
| 381 | + 51A4A1046676D304410544EB56732A49 /* Constraint.swift in Sources */, | ||
| 382 | + 7580FAAB1BDA52F5A969E5571D1A5973 /* ConstraintAttributes.swift in Sources */, | ||
| 383 | + B543FD108C1C6AF6129CB4991553218B /* ConstraintConfig.swift in Sources */, | ||
| 384 | + C61D3BC32A28A405C934C00039AD2583 /* ConstraintConstantTarget.swift in Sources */, | ||
| 385 | + 8FD9CD608C4EAAFDE6AC7B8B9EF0FF5E /* ConstraintDescription.swift in Sources */, | ||
| 386 | + A0F754C88A64972A40A9008B0AD52109 /* ConstraintDirectionalInsets.swift in Sources */, | ||
| 387 | + 7764AA5F6BBFC6ECE43959923DD007D3 /* ConstraintDirectionalInsetTarget.swift in Sources */, | ||
| 388 | + 90FD5AE525E138A473723FD79AF73273 /* ConstraintDSL.swift in Sources */, | ||
| 389 | + 8C6546C1EF4F153DF3795CC6FE189E5B /* ConstraintInsets.swift in Sources */, | ||
| 390 | + BEBF920FEB959B46A76BAADF22E5CD15 /* ConstraintInsetTarget.swift in Sources */, | ||
| 391 | + BD333CDBCF5D2FD55920336FC271DF33 /* ConstraintItem.swift in Sources */, | ||
| 392 | + EE6C364198A763EBBF49237035D86439 /* ConstraintLayoutGuide.swift in Sources */, | ||
| 393 | + 3DEDFA52B3A196F6D3E1F0937617628A /* ConstraintLayoutGuide+Extensions.swift in Sources */, | ||
| 394 | + 8449EB1DFD43E222D687D5A8D2088D2D /* ConstraintLayoutGuideDSL.swift in Sources */, | ||
| 395 | + 3B60C02F6E42FD06B128473E00A94224 /* ConstraintLayoutSupport.swift in Sources */, | ||
| 396 | + 274DF0E2BF04F6F4F9F1E70CF513A4F2 /* ConstraintLayoutSupportDSL.swift in Sources */, | ||
| 397 | + CB194156C900B767B0160AF72EDF354D /* ConstraintMaker.swift in Sources */, | ||
| 398 | + A53D3AF15CE8D348306EF11619C5D166 /* ConstraintMakerEditable.swift in Sources */, | ||
| 399 | + 825062025906CE93C5D124E1FD9A811E /* ConstraintMakerExtendable.swift in Sources */, | ||
| 400 | + D13D417B236E736EEAE7217B5CE3EC5C /* ConstraintMakerFinalizable.swift in Sources */, | ||
| 401 | + F2C817C166B2DE613222C41015A586C9 /* ConstraintMakerPriortizable.swift in Sources */, | ||
| 402 | + CB8E4BF0D710970BE2CB4C87ED1043E4 /* ConstraintMakerRelatable.swift in Sources */, | ||
| 403 | + 17BE0F4E51B0FB968125F1A520607FD8 /* ConstraintMultiplierTarget.swift in Sources */, | ||
| 404 | + 62F299B4704A7C95FB5866C6CDE2E2FD /* ConstraintOffsetTarget.swift in Sources */, | ||
| 405 | + F343BA4E457FFDB0165492AECAEF0BCC /* ConstraintPriority.swift in Sources */, | ||
| 406 | + E36244E8BF4AC941E82DAF16DDF4BBC2 /* ConstraintPriorityTarget.swift in Sources */, | ||
| 407 | + E8EAADACF3BAE33BDECBC7214EAE9CD2 /* ConstraintRelatableTarget.swift in Sources */, | ||
| 408 | + D59C2826AD288ECFF576B2AFA312716C /* ConstraintRelation.swift in Sources */, | ||
| 409 | + F24D06C23DAB2F52A30C886A7A8177C7 /* ConstraintView.swift in Sources */, | ||
| 410 | + 1E9EEA756F2774D73347F1660EEFE3E9 /* ConstraintView+Extensions.swift in Sources */, | ||
| 411 | + 5E8BA529DFB4529006967624044FEC1C /* ConstraintViewDSL.swift in Sources */, | ||
| 412 | + F10586462FB54CEA169A1A7A469A926D /* Debugging.swift in Sources */, | ||
| 413 | + 43863B6D6A0E47B6648BB7B469736EDD /* LayoutConstraint.swift in Sources */, | ||
| 414 | + 4CA13A0527BC57DE2C54A0F3B5ED8652 /* LayoutConstraintItem.swift in Sources */, | ||
| 415 | + 968B4874A9F12D67C8B901136C9C8157 /* SnapKit-dummy.m in Sources */, | ||
| 416 | + 3CD5FAFC746A76D73C3F501734199DFF /* Typealiases.swift in Sources */, | ||
| 417 | + 144DA93A55A598F5197F10C729FBDD69 /* UILayoutSupport+Extensions.swift in Sources */, | ||
| 418 | + ); | ||
| 419 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 420 | + }; | ||
| 421 | + 6753A70EC97EA6377506948C78A9F4A2 /* Sources */ = { | ||
| 422 | + isa = PBXSourcesBuildPhase; | ||
| 423 | + buildActionMask = 2147483647; | ||
| 424 | + files = ( | ||
| 425 | + 90E5A3F8520D447ACD72A9F7C1DDAD47 /* Pods-InterQR-Internship-dummy.m in Sources */, | ||
| 426 | + ); | ||
| 427 | + runOnlyForDeploymentPostprocessing = 0; | ||
| 428 | + }; | ||
| 429 | +/* End PBXSourcesBuildPhase section */ | ||
| 430 | + | ||
| 431 | +/* Begin PBXTargetDependency section */ | ||
| 432 | + F6A140FDF6958E137BBA33A7A61790C1 /* PBXTargetDependency */ = { | ||
| 433 | + isa = PBXTargetDependency; | ||
| 434 | + name = SnapKit; | ||
| 435 | + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; | ||
| 436 | + targetProxy = 7168F679A13DA87B24C148E3B8BDBAC5 /* PBXContainerItemProxy */; | ||
| 437 | + }; | ||
| 438 | +/* End PBXTargetDependency section */ | ||
| 439 | + | ||
| 440 | +/* Begin XCBuildConfiguration section */ | ||
| 441 | + 10EA70BAF8B7F98899DF1BDB60F485E7 /* Release */ = { | ||
| 442 | + isa = XCBuildConfiguration; | ||
| 443 | + baseConfigurationReference = 9AFE619CFFABED07F15D3C2B1C1B48F6 /* Pods-InterQR-Internship.release.xcconfig */; | ||
| 444 | + buildSettings = { | ||
| 445 | + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; | ||
| 446 | + CLANG_ENABLE_OBJC_WEAK = NO; | ||
| 447 | + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; | ||
| 448 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; | ||
| 449 | + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; | ||
| 450 | + CURRENT_PROJECT_VERSION = 1; | ||
| 451 | + DEFINES_MODULE = YES; | ||
| 452 | + DYLIB_COMPATIBILITY_VERSION = 1; | ||
| 453 | + DYLIB_CURRENT_VERSION = 1; | ||
| 454 | + DYLIB_INSTALL_NAME_BASE = "@rpath"; | ||
| 455 | + INFOPLIST_FILE = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-Info.plist"; | ||
| 456 | + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; | ||
| 457 | + IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||
| 458 | + LD_RUNPATH_SEARCH_PATHS = ( | ||
| 459 | + "$(inherited)", | ||
| 460 | + "@executable_path/Frameworks", | ||
| 461 | + "@loader_path/Frameworks", | ||
| 462 | + ); | ||
| 463 | + MACH_O_TYPE = staticlib; | ||
| 464 | + MODULEMAP_FILE = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship.modulemap"; | ||
| 465 | + OTHER_LDFLAGS = ""; | ||
| 466 | + OTHER_LIBTOOLFLAGS = ""; | ||
| 467 | + PODS_ROOT = "$(SRCROOT)"; | ||
| 468 | + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; | ||
| 469 | + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; | ||
| 470 | + SDKROOT = iphoneos; | ||
| 471 | + SKIP_INSTALL = YES; | ||
| 472 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 473 | + VALIDATE_PRODUCT = YES; | ||
| 474 | + VERSIONING_SYSTEM = "apple-generic"; | ||
| 475 | + VERSION_INFO_PREFIX = ""; | ||
| 476 | + }; | ||
| 477 | + name = Release; | ||
| 478 | + }; | ||
| 479 | + 90D4D09BCB6A4660E43ACBE9ECB6FE9A /* Debug */ = { | ||
| 480 | + isa = XCBuildConfiguration; | ||
| 481 | + buildSettings = { | ||
| 482 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 483 | + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; | ||
| 484 | + CLANG_ANALYZER_NONNULL = YES; | ||
| 485 | + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||
| 486 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | ||
| 487 | + CLANG_CXX_LIBRARY = "libc++"; | ||
| 488 | + CLANG_ENABLE_MODULES = YES; | ||
| 489 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
| 490 | + CLANG_ENABLE_OBJC_WEAK = YES; | ||
| 491 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 492 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 493 | + CLANG_WARN_COMMA = YES; | ||
| 494 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 495 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 496 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 497 | + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||
| 498 | + CLANG_WARN_EMPTY_BODY = YES; | ||
| 499 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 500 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 501 | + CLANG_WARN_INT_CONVERSION = YES; | ||
| 502 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 503 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 504 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 505 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 506 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 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 | + COPY_PHASE_STRIP = NO; | ||
| 514 | + DEBUG_INFORMATION_FORMAT = dwarf; | ||
| 515 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 516 | + ENABLE_TESTABILITY = YES; | ||
| 517 | + GCC_C_LANGUAGE_STANDARD = gnu11; | ||
| 518 | + GCC_DYNAMIC_NO_PIC = NO; | ||
| 519 | + GCC_NO_COMMON_BLOCKS = YES; | ||
| 520 | + GCC_OPTIMIZATION_LEVEL = 0; | ||
| 521 | + GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 522 | + "POD_CONFIGURATION_DEBUG=1", | ||
| 523 | + "DEBUG=1", | ||
| 524 | + "$(inherited)", | ||
| 525 | + ); | ||
| 526 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 527 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 528 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 529 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 530 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 531 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 532 | + IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||
| 533 | + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | ||
| 534 | + MTL_FAST_MATH = YES; | ||
| 535 | + ONLY_ACTIVE_ARCH = YES; | ||
| 536 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 537 | + STRIP_INSTALLED_PRODUCT = NO; | ||
| 538 | + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | ||
| 539 | + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||
| 540 | + SWIFT_VERSION = 5.0; | ||
| 541 | + SYMROOT = "${SRCROOT}/../build"; | ||
| 542 | + }; | ||
| 543 | + name = Debug; | ||
| 544 | + }; | ||
| 545 | + 9553C89E183877A5CB2F3C6801BEC129 /* Release */ = { | ||
| 546 | + isa = XCBuildConfiguration; | ||
| 547 | + buildSettings = { | ||
| 548 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 549 | + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; | ||
| 550 | + CLANG_ANALYZER_NONNULL = YES; | ||
| 551 | + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||
| 552 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | ||
| 553 | + CLANG_CXX_LIBRARY = "libc++"; | ||
| 554 | + CLANG_ENABLE_MODULES = YES; | ||
| 555 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
| 556 | + CLANG_ENABLE_OBJC_WEAK = YES; | ||
| 557 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 558 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 559 | + CLANG_WARN_COMMA = YES; | ||
| 560 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 561 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 562 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 563 | + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||
| 564 | + CLANG_WARN_EMPTY_BODY = YES; | ||
| 565 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 566 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 567 | + CLANG_WARN_INT_CONVERSION = YES; | ||
| 568 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 569 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 570 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 571 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 572 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 573 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
| 574 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
| 575 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
| 576 | + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||
| 577 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
| 578 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
| 579 | + COPY_PHASE_STRIP = NO; | ||
| 580 | + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
| 581 | + ENABLE_NS_ASSERTIONS = NO; | ||
| 582 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 583 | + GCC_C_LANGUAGE_STANDARD = gnu11; | ||
| 584 | + GCC_NO_COMMON_BLOCKS = YES; | ||
| 585 | + GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 586 | + "POD_CONFIGURATION_RELEASE=1", | ||
| 587 | + "$(inherited)", | ||
| 588 | + ); | ||
| 589 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 590 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 591 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 592 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 593 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 594 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 595 | + IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||
| 596 | + MTL_ENABLE_DEBUG_INFO = NO; | ||
| 597 | + MTL_FAST_MATH = YES; | ||
| 598 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 599 | + STRIP_INSTALLED_PRODUCT = NO; | ||
| 600 | + SWIFT_COMPILATION_MODE = wholemodule; | ||
| 601 | + SWIFT_OPTIMIZATION_LEVEL = "-O"; | ||
| 602 | + SWIFT_VERSION = 5.0; | ||
| 603 | + SYMROOT = "${SRCROOT}/../build"; | ||
| 604 | + }; | ||
| 605 | + name = Release; | ||
| 606 | + }; | ||
| 607 | + CB8A79F7382B0A1227C38D59E7968EEA /* Debug */ = { | ||
| 608 | + isa = XCBuildConfiguration; | ||
| 609 | + baseConfigurationReference = 7C21E0C93A1141A1E2EB51575500E27D /* SnapKit.debug.xcconfig */; | ||
| 610 | + buildSettings = { | ||
| 611 | + CLANG_ENABLE_OBJC_WEAK = NO; | ||
| 612 | + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; | ||
| 613 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; | ||
| 614 | + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; | ||
| 615 | + CURRENT_PROJECT_VERSION = 1; | ||
| 616 | + DEFINES_MODULE = YES; | ||
| 617 | + DYLIB_COMPATIBILITY_VERSION = 1; | ||
| 618 | + DYLIB_CURRENT_VERSION = 1; | ||
| 619 | + DYLIB_INSTALL_NAME_BASE = "@rpath"; | ||
| 620 | + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; | ||
| 621 | + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; | ||
| 622 | + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; | ||
| 623 | + IPHONEOS_DEPLOYMENT_TARGET = 10.0; | ||
| 624 | + LD_RUNPATH_SEARCH_PATHS = ( | ||
| 625 | + "$(inherited)", | ||
| 626 | + "@executable_path/Frameworks", | ||
| 627 | + "@loader_path/Frameworks", | ||
| 628 | + ); | ||
| 629 | + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; | ||
| 630 | + PRODUCT_MODULE_NAME = SnapKit; | ||
| 631 | + PRODUCT_NAME = SnapKit; | ||
| 632 | + SDKROOT = iphoneos; | ||
| 633 | + SKIP_INSTALL = YES; | ||
| 634 | + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; | ||
| 635 | + SWIFT_VERSION = 5.0; | ||
| 636 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 637 | + VERSIONING_SYSTEM = "apple-generic"; | ||
| 638 | + VERSION_INFO_PREFIX = ""; | ||
| 639 | + }; | ||
| 640 | + name = Debug; | ||
| 641 | + }; | ||
| 642 | + DFFD31690F9CC8449FD1F803388E1D46 /* Release */ = { | ||
| 643 | + isa = XCBuildConfiguration; | ||
| 644 | + baseConfigurationReference = A1CD432F32277BB93DEAADA626ECEC5B /* SnapKit.release.xcconfig */; | ||
| 645 | + buildSettings = { | ||
| 646 | + CLANG_ENABLE_OBJC_WEAK = NO; | ||
| 647 | + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; | ||
| 648 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; | ||
| 649 | + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; | ||
| 650 | + CURRENT_PROJECT_VERSION = 1; | ||
| 651 | + DEFINES_MODULE = YES; | ||
| 652 | + DYLIB_COMPATIBILITY_VERSION = 1; | ||
| 653 | + DYLIB_CURRENT_VERSION = 1; | ||
| 654 | + DYLIB_INSTALL_NAME_BASE = "@rpath"; | ||
| 655 | + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; | ||
| 656 | + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; | ||
| 657 | + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; | ||
| 658 | + IPHONEOS_DEPLOYMENT_TARGET = 10.0; | ||
| 659 | + LD_RUNPATH_SEARCH_PATHS = ( | ||
| 660 | + "$(inherited)", | ||
| 661 | + "@executable_path/Frameworks", | ||
| 662 | + "@loader_path/Frameworks", | ||
| 663 | + ); | ||
| 664 | + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; | ||
| 665 | + PRODUCT_MODULE_NAME = SnapKit; | ||
| 666 | + PRODUCT_NAME = SnapKit; | ||
| 667 | + SDKROOT = iphoneos; | ||
| 668 | + SKIP_INSTALL = YES; | ||
| 669 | + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; | ||
| 670 | + SWIFT_VERSION = 5.0; | ||
| 671 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 672 | + VALIDATE_PRODUCT = YES; | ||
| 673 | + VERSIONING_SYSTEM = "apple-generic"; | ||
| 674 | + VERSION_INFO_PREFIX = ""; | ||
| 675 | + }; | ||
| 676 | + name = Release; | ||
| 677 | + }; | ||
| 678 | + F95437D0138618F8A31BD365CCDF23F7 /* Debug */ = { | ||
| 679 | + isa = XCBuildConfiguration; | ||
| 680 | + baseConfigurationReference = EF88D6AF5E18A624B2BBDC50D49C7534 /* Pods-InterQR-Internship.debug.xcconfig */; | ||
| 681 | + buildSettings = { | ||
| 682 | + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; | ||
| 683 | + CLANG_ENABLE_OBJC_WEAK = NO; | ||
| 684 | + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; | ||
| 685 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; | ||
| 686 | + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; | ||
| 687 | + CURRENT_PROJECT_VERSION = 1; | ||
| 688 | + DEFINES_MODULE = YES; | ||
| 689 | + DYLIB_COMPATIBILITY_VERSION = 1; | ||
| 690 | + DYLIB_CURRENT_VERSION = 1; | ||
| 691 | + DYLIB_INSTALL_NAME_BASE = "@rpath"; | ||
| 692 | + INFOPLIST_FILE = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-Info.plist"; | ||
| 693 | + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; | ||
| 694 | + IPHONEOS_DEPLOYMENT_TARGET = 15.0; | ||
| 695 | + LD_RUNPATH_SEARCH_PATHS = ( | ||
| 696 | + "$(inherited)", | ||
| 697 | + "@executable_path/Frameworks", | ||
| 698 | + "@loader_path/Frameworks", | ||
| 699 | + ); | ||
| 700 | + MACH_O_TYPE = staticlib; | ||
| 701 | + MODULEMAP_FILE = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship.modulemap"; | ||
| 702 | + OTHER_LDFLAGS = ""; | ||
| 703 | + OTHER_LIBTOOLFLAGS = ""; | ||
| 704 | + PODS_ROOT = "$(SRCROOT)"; | ||
| 705 | + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; | ||
| 706 | + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; | ||
| 707 | + SDKROOT = iphoneos; | ||
| 708 | + SKIP_INSTALL = YES; | ||
| 709 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 710 | + VERSIONING_SYSTEM = "apple-generic"; | ||
| 711 | + VERSION_INFO_PREFIX = ""; | ||
| 712 | + }; | ||
| 713 | + name = Debug; | ||
| 714 | + }; | ||
| 715 | +/* End XCBuildConfiguration section */ | ||
| 716 | + | ||
| 717 | +/* Begin XCConfigurationList section */ | ||
| 718 | + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { | ||
| 719 | + isa = XCConfigurationList; | ||
| 720 | + buildConfigurations = ( | ||
| 721 | + 90D4D09BCB6A4660E43ACBE9ECB6FE9A /* Debug */, | ||
| 722 | + 9553C89E183877A5CB2F3C6801BEC129 /* Release */, | ||
| 723 | + ); | ||
| 724 | + defaultConfigurationIsVisible = 0; | ||
| 725 | + defaultConfigurationName = Release; | ||
| 726 | + }; | ||
| 727 | + 4949A940CD53B7E293859B71C91C88F3 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { | ||
| 728 | + isa = XCConfigurationList; | ||
| 729 | + buildConfigurations = ( | ||
| 730 | + CB8A79F7382B0A1227C38D59E7968EEA /* Debug */, | ||
| 731 | + DFFD31690F9CC8449FD1F803388E1D46 /* Release */, | ||
| 732 | + ); | ||
| 733 | + defaultConfigurationIsVisible = 0; | ||
| 734 | + defaultConfigurationName = Release; | ||
| 735 | + }; | ||
| 736 | + D8D8A2B883726AC5D3A57DEBA6C81808 /* Build configuration list for PBXNativeTarget "Pods-InterQR-Internship" */ = { | ||
| 737 | + isa = XCConfigurationList; | ||
| 738 | + buildConfigurations = ( | ||
| 739 | + F95437D0138618F8A31BD365CCDF23F7 /* Debug */, | ||
| 740 | + 10EA70BAF8B7F98899DF1BDB60F485E7 /* Release */, | ||
| 741 | + ); | ||
| 742 | + defaultConfigurationIsVisible = 0; | ||
| 743 | + defaultConfigurationName = Release; | ||
| 744 | + }; | ||
| 745 | +/* End XCConfigurationList section */ | ||
| 746 | + }; | ||
| 747 | + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; | ||
| 748 | +} |
Pods/Pods.xcodeproj/xcuserdata/tdy_13.xcuserdatad/xcschemes/Pods-InterQR-Internship.xcscheme
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<Scheme | ||
| 3 | + LastUpgradeVersion = "1240" | ||
| 4 | + version = "1.3"> | ||
| 5 | + <BuildAction | ||
| 6 | + parallelizeBuildables = "YES" | ||
| 7 | + buildImplicitDependencies = "YES"> | ||
| 8 | + <BuildActionEntries> | ||
| 9 | + <BuildActionEntry | ||
| 10 | + buildForTesting = "YES" | ||
| 11 | + buildForRunning = "YES" | ||
| 12 | + buildForProfiling = "YES" | ||
| 13 | + buildForArchiving = "YES" | ||
| 14 | + buildForAnalyzing = "YES"> | ||
| 15 | + <BuildableReference | ||
| 16 | + BuildableIdentifier = "primary" | ||
| 17 | + BlueprintIdentifier = "9BAF824ED8B046DCC6AEAC3D645548EE" | ||
| 18 | + BuildableName = "Pods_InterQR_Internship.framework" | ||
| 19 | + BlueprintName = "Pods-InterQR-Internship" | ||
| 20 | + ReferencedContainer = "container:Pods.xcodeproj"> | ||
| 21 | + </BuildableReference> | ||
| 22 | + </BuildActionEntry> | ||
| 23 | + </BuildActionEntries> | ||
| 24 | + </BuildAction> | ||
| 25 | + <TestAction | ||
| 26 | + buildConfiguration = "Debug" | ||
| 27 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
| 28 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
| 29 | + shouldUseLaunchSchemeArgsEnv = "YES"> | ||
| 30 | + <Testables> | ||
| 31 | + </Testables> | ||
| 32 | + </TestAction> | ||
| 33 | + <LaunchAction | ||
| 34 | + buildConfiguration = "Debug" | ||
| 35 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
| 36 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
| 37 | + launchStyle = "0" | ||
| 38 | + useCustomWorkingDirectory = "NO" | ||
| 39 | + ignoresPersistentStateOnLaunch = "NO" | ||
| 40 | + debugDocumentVersioning = "YES" | ||
| 41 | + debugServiceExtension = "internal" | ||
| 42 | + allowLocationSimulation = "YES"> | ||
| 43 | + </LaunchAction> | ||
| 44 | + <ProfileAction | ||
| 45 | + buildConfiguration = "Release" | ||
| 46 | + shouldUseLaunchSchemeArgsEnv = "YES" | ||
| 47 | + savedToolIdentifier = "" | ||
| 48 | + useCustomWorkingDirectory = "NO" | ||
| 49 | + debugDocumentVersioning = "YES"> | ||
| 50 | + </ProfileAction> | ||
| 51 | + <AnalyzeAction | ||
| 52 | + buildConfiguration = "Debug"> | ||
| 53 | + </AnalyzeAction> | ||
| 54 | + <ArchiveAction | ||
| 55 | + buildConfiguration = "Release" | ||
| 56 | + revealArchiveInOrganizer = "YES"> | ||
| 57 | + </ArchiveAction> | ||
| 58 | +</Scheme> |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<Scheme | ||
| 3 | + LastUpgradeVersion = "1240" | ||
| 4 | + version = "1.3"> | ||
| 5 | + <BuildAction | ||
| 6 | + parallelizeBuildables = "YES" | ||
| 7 | + buildImplicitDependencies = "YES"> | ||
| 8 | + <BuildActionEntries> | ||
| 9 | + <BuildActionEntry | ||
| 10 | + buildForTesting = "YES" | ||
| 11 | + buildForRunning = "YES" | ||
| 12 | + buildForProfiling = "YES" | ||
| 13 | + buildForArchiving = "YES" | ||
| 14 | + buildForAnalyzing = "YES"> | ||
| 15 | + <BuildableReference | ||
| 16 | + BuildableIdentifier = "primary" | ||
| 17 | + BlueprintIdentifier = "19622742EBA51E823D6DAE3F8CDBFAD4" | ||
| 18 | + BuildableName = "SnapKit.framework" | ||
| 19 | + BlueprintName = "SnapKit" | ||
| 20 | + ReferencedContainer = "container:Pods.xcodeproj"> | ||
| 21 | + </BuildableReference> | ||
| 22 | + </BuildActionEntry> | ||
| 23 | + </BuildActionEntries> | ||
| 24 | + </BuildAction> | ||
| 25 | + <TestAction | ||
| 26 | + buildConfiguration = "Debug" | ||
| 27 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
| 28 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
| 29 | + shouldUseLaunchSchemeArgsEnv = "YES"> | ||
| 30 | + <Testables> | ||
| 31 | + </Testables> | ||
| 32 | + </TestAction> | ||
| 33 | + <LaunchAction | ||
| 34 | + buildConfiguration = "Debug" | ||
| 35 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
| 36 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
| 37 | + launchStyle = "0" | ||
| 38 | + useCustomWorkingDirectory = "NO" | ||
| 39 | + ignoresPersistentStateOnLaunch = "NO" | ||
| 40 | + debugDocumentVersioning = "YES" | ||
| 41 | + debugServiceExtension = "internal" | ||
| 42 | + allowLocationSimulation = "YES"> | ||
| 43 | + </LaunchAction> | ||
| 44 | + <ProfileAction | ||
| 45 | + buildConfiguration = "Release" | ||
| 46 | + shouldUseLaunchSchemeArgsEnv = "YES" | ||
| 47 | + savedToolIdentifier = "" | ||
| 48 | + useCustomWorkingDirectory = "NO" | ||
| 49 | + debugDocumentVersioning = "YES"> | ||
| 50 | + </ProfileAction> | ||
| 51 | + <AnalyzeAction | ||
| 52 | + buildConfiguration = "Debug"> | ||
| 53 | + </AnalyzeAction> | ||
| 54 | + <ArchiveAction | ||
| 55 | + buildConfiguration = "Release" | ||
| 56 | + revealArchiveInOrganizer = "YES"> | ||
| 57 | + </ArchiveAction> | ||
| 58 | +</Scheme> |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | +<plist version="1.0"> | ||
| 4 | +<dict> | ||
| 5 | + <key>SchemeUserState</key> | ||
| 6 | + <dict> | ||
| 7 | + <key>Pods-InterQR-Internship.xcscheme</key> | ||
| 8 | + <dict> | ||
| 9 | + <key>isShown</key> | ||
| 10 | + <false/> | ||
| 11 | + <key>orderHint</key> | ||
| 12 | + <integer>0</integer> | ||
| 13 | + </dict> | ||
| 14 | + <key>SnapKit.xcscheme</key> | ||
| 15 | + <dict> | ||
| 16 | + <key>isShown</key> | ||
| 17 | + <false/> | ||
| 18 | + <key>orderHint</key> | ||
| 19 | + <integer>1</integer> | ||
| 20 | + </dict> | ||
| 21 | + </dict> | ||
| 22 | + <key>SuppressBuildableAutocreation</key> | ||
| 23 | + <dict/> | ||
| 24 | +</dict> | ||
| 25 | +</plist> |
Pods/SnapKit/LICENSE
0 → 100644
| 1 | +Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 2 | + | ||
| 3 | +Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 4 | +of this software and associated documentation files (the "Software"), to deal | ||
| 5 | +in the Software without restriction, including without limitation the rights | ||
| 6 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 7 | +copies of the Software, and to permit persons to whom the Software is | ||
| 8 | +furnished to do so, subject to the following conditions: | ||
| 9 | + | ||
| 10 | +The above copyright notice and this permission notice shall be included in | ||
| 11 | +all copies or substantial portions of the Software. | ||
| 12 | + | ||
| 13 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 14 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 15 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 16 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 17 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 18 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 19 | +THE SOFTWARE. |
Pods/SnapKit/README.md
0 → 100644
| 1 | +<img src="http://snapkit.io/images/banner.jpg" alt="" /> | ||
| 2 | + | ||
| 3 | +SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. | ||
| 4 | + | ||
| 5 | +[](https://travis-ci.org/SnapKit/SnapKit) | ||
| 6 | +[](https://github.com/SnapKit/SnapKit) | ||
| 7 | +[](https://cocoapods.org/pods/SnapKit) | ||
| 8 | +[](https://github.com/Carthage/Carthage) | ||
| 9 | + | ||
| 10 | +#### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️ | ||
| 11 | +#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️ | ||
| 12 | + | ||
| 13 | +## Contents | ||
| 14 | + | ||
| 15 | +- [Requirements](#requirements) | ||
| 16 | +- [Migration Guides](#migration-guides) | ||
| 17 | +- [Communication](#communication) | ||
| 18 | +- [Installation](#installation) | ||
| 19 | +- [Usage](#usage) | ||
| 20 | +- [Credits](#credits) | ||
| 21 | +- [License](#license) | ||
| 22 | + | ||
| 23 | +## Requirements | ||
| 24 | + | ||
| 25 | +- iOS 10.0+ / Mac OS X 10.12+ / tvOS 10.0+ | ||
| 26 | +- Xcode 10.0+ | ||
| 27 | +- Swift 4.0+ | ||
| 28 | + | ||
| 29 | +## Communication | ||
| 30 | + | ||
| 31 | +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit') | ||
| 32 | +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). | ||
| 33 | +- If you **found a bug**, open an issue. | ||
| 34 | +- If you **have a feature request**, open an issue. | ||
| 35 | +- If you **want to contribute**, submit a pull request. | ||
| 36 | + | ||
| 37 | + | ||
| 38 | +## Installation | ||
| 39 | + | ||
| 40 | +### CocoaPods | ||
| 41 | + | ||
| 42 | +[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: | ||
| 43 | + | ||
| 44 | +```bash | ||
| 45 | +$ gem install cocoapods | ||
| 46 | +``` | ||
| 47 | + | ||
| 48 | +> CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+. | ||
| 49 | + | ||
| 50 | +To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`: | ||
| 51 | + | ||
| 52 | +```ruby | ||
| 53 | +source 'https://github.com/CocoaPods/Specs.git' | ||
| 54 | +platform :ios, '10.0' | ||
| 55 | +use_frameworks! | ||
| 56 | + | ||
| 57 | +target '<Your Target Name>' do | ||
| 58 | + pod 'SnapKit', '~> 5.0.0' | ||
| 59 | +end | ||
| 60 | +``` | ||
| 61 | + | ||
| 62 | +Then, run the following command: | ||
| 63 | + | ||
| 64 | +```bash | ||
| 65 | +$ pod install | ||
| 66 | +``` | ||
| 67 | + | ||
| 68 | +### Carthage | ||
| 69 | + | ||
| 70 | +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. | ||
| 71 | + | ||
| 72 | +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: | ||
| 73 | + | ||
| 74 | +```bash | ||
| 75 | +$ brew update | ||
| 76 | +$ brew install carthage | ||
| 77 | +``` | ||
| 78 | + | ||
| 79 | +To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`: | ||
| 80 | + | ||
| 81 | +```ogdl | ||
| 82 | +github "SnapKit/SnapKit" ~> 5.0.0 | ||
| 83 | +``` | ||
| 84 | + | ||
| 85 | +Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project. | ||
| 86 | + | ||
| 87 | +### Manually | ||
| 88 | + | ||
| 89 | +If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually. | ||
| 90 | + | ||
| 91 | +--- | ||
| 92 | + | ||
| 93 | +## Usage | ||
| 94 | + | ||
| 95 | +### Quick Start | ||
| 96 | + | ||
| 97 | +```swift | ||
| 98 | +import SnapKit | ||
| 99 | + | ||
| 100 | +class MyViewController: UIViewController { | ||
| 101 | + | ||
| 102 | + lazy var box = UIView() | ||
| 103 | + | ||
| 104 | + override func viewDidLoad() { | ||
| 105 | + super.viewDidLoad() | ||
| 106 | + | ||
| 107 | + self.view.addSubview(box) | ||
| 108 | + box.snp.makeConstraints { (make) -> Void in | ||
| 109 | + make.width.height.equalTo(50) | ||
| 110 | + make.center.equalTo(self.view) | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | +} | ||
| 115 | +``` | ||
| 116 | + | ||
| 117 | +### Playground | ||
| 118 | +You can try SnapKit in Playground. | ||
| 119 | + | ||
| 120 | +**Note:** | ||
| 121 | + | ||
| 122 | +> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first. | ||
| 123 | + | ||
| 124 | +### Resources | ||
| 125 | + | ||
| 126 | +- [Documentation](http://snapkit.io/docs/) | ||
| 127 | +- [F.A.Q.](http://snapkit.io/faq/) | ||
| 128 | + | ||
| 129 | +## Credits | ||
| 130 | + | ||
| 131 | +- Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne)) | ||
| 132 | +- Many other contributors | ||
| 133 | + | ||
| 134 | +## License | ||
| 135 | + | ||
| 136 | +SnapKit is released under the MIT license. See LICENSE for details. |
Pods/SnapKit/Source/Constraint.swift
0 → 100644
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | +public final class Constraint { | ||
| 31 | + | ||
| 32 | + internal let sourceLocation: (String, UInt) | ||
| 33 | + internal let label: String? | ||
| 34 | + | ||
| 35 | + private let from: ConstraintItem | ||
| 36 | + private let to: ConstraintItem | ||
| 37 | + private let relation: ConstraintRelation | ||
| 38 | + private let multiplier: ConstraintMultiplierTarget | ||
| 39 | + private var constant: ConstraintConstantTarget { | ||
| 40 | + didSet { | ||
| 41 | + self.updateConstantAndPriorityIfNeeded() | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | + private var priority: ConstraintPriorityTarget { | ||
| 45 | + didSet { | ||
| 46 | + self.updateConstantAndPriorityIfNeeded() | ||
| 47 | + } | ||
| 48 | + } | ||
| 49 | + public var layoutConstraints: [LayoutConstraint] | ||
| 50 | + | ||
| 51 | + public var isActive: Bool { | ||
| 52 | + set { | ||
| 53 | + if newValue { | ||
| 54 | + activate() | ||
| 55 | + } | ||
| 56 | + else { | ||
| 57 | + deactivate() | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + get { | ||
| 62 | + for layoutConstraint in self.layoutConstraints { | ||
| 63 | + if layoutConstraint.isActive { | ||
| 64 | + return true | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + return false | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + // MARK: Initialization | ||
| 72 | + | ||
| 73 | + internal init(from: ConstraintItem, | ||
| 74 | + to: ConstraintItem, | ||
| 75 | + relation: ConstraintRelation, | ||
| 76 | + sourceLocation: (String, UInt), | ||
| 77 | + label: String?, | ||
| 78 | + multiplier: ConstraintMultiplierTarget, | ||
| 79 | + constant: ConstraintConstantTarget, | ||
| 80 | + priority: ConstraintPriorityTarget) { | ||
| 81 | + self.from = from | ||
| 82 | + self.to = to | ||
| 83 | + self.relation = relation | ||
| 84 | + self.sourceLocation = sourceLocation | ||
| 85 | + self.label = label | ||
| 86 | + self.multiplier = multiplier | ||
| 87 | + self.constant = constant | ||
| 88 | + self.priority = priority | ||
| 89 | + self.layoutConstraints = [] | ||
| 90 | + | ||
| 91 | + // get attributes | ||
| 92 | + let layoutFromAttributes = self.from.attributes.layoutAttributes | ||
| 93 | + let layoutToAttributes = self.to.attributes.layoutAttributes | ||
| 94 | + | ||
| 95 | + // get layout from | ||
| 96 | + let layoutFrom = self.from.layoutConstraintItem! | ||
| 97 | + | ||
| 98 | + // get relation | ||
| 99 | + let layoutRelation = self.relation.layoutRelation | ||
| 100 | + | ||
| 101 | + for layoutFromAttribute in layoutFromAttributes { | ||
| 102 | + // get layout to attribute | ||
| 103 | + let layoutToAttribute: LayoutAttribute | ||
| 104 | + #if os(iOS) || os(tvOS) | ||
| 105 | + if layoutToAttributes.count > 0 { | ||
| 106 | + if self.from.attributes == .edges && self.to.attributes == .margins { | ||
| 107 | + switch layoutFromAttribute { | ||
| 108 | + case .left: | ||
| 109 | + layoutToAttribute = .leftMargin | ||
| 110 | + case .right: | ||
| 111 | + layoutToAttribute = .rightMargin | ||
| 112 | + case .top: | ||
| 113 | + layoutToAttribute = .topMargin | ||
| 114 | + case .bottom: | ||
| 115 | + layoutToAttribute = .bottomMargin | ||
| 116 | + default: | ||
| 117 | + fatalError() | ||
| 118 | + } | ||
| 119 | + } else if self.from.attributes == .margins && self.to.attributes == .edges { | ||
| 120 | + switch layoutFromAttribute { | ||
| 121 | + case .leftMargin: | ||
| 122 | + layoutToAttribute = .left | ||
| 123 | + case .rightMargin: | ||
| 124 | + layoutToAttribute = .right | ||
| 125 | + case .topMargin: | ||
| 126 | + layoutToAttribute = .top | ||
| 127 | + case .bottomMargin: | ||
| 128 | + layoutToAttribute = .bottom | ||
| 129 | + default: | ||
| 130 | + fatalError() | ||
| 131 | + } | ||
| 132 | + } else if self.from.attributes == .directionalEdges && self.to.attributes == .directionalMargins { | ||
| 133 | + switch layoutFromAttribute { | ||
| 134 | + case .leading: | ||
| 135 | + layoutToAttribute = .leadingMargin | ||
| 136 | + case .trailing: | ||
| 137 | + layoutToAttribute = .trailingMargin | ||
| 138 | + case .top: | ||
| 139 | + layoutToAttribute = .topMargin | ||
| 140 | + case .bottom: | ||
| 141 | + layoutToAttribute = .bottomMargin | ||
| 142 | + default: | ||
| 143 | + fatalError() | ||
| 144 | + } | ||
| 145 | + } else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges { | ||
| 146 | + switch layoutFromAttribute { | ||
| 147 | + case .leadingMargin: | ||
| 148 | + layoutToAttribute = .leading | ||
| 149 | + case .trailingMargin: | ||
| 150 | + layoutToAttribute = .trailing | ||
| 151 | + case .topMargin: | ||
| 152 | + layoutToAttribute = .top | ||
| 153 | + case .bottomMargin: | ||
| 154 | + layoutToAttribute = .bottom | ||
| 155 | + default: | ||
| 156 | + fatalError() | ||
| 157 | + } | ||
| 158 | + } else if self.from.attributes == self.to.attributes { | ||
| 159 | + layoutToAttribute = layoutFromAttribute | ||
| 160 | + } else { | ||
| 161 | + layoutToAttribute = layoutToAttributes[0] | ||
| 162 | + } | ||
| 163 | + } else { | ||
| 164 | + if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) { | ||
| 165 | + layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top | ||
| 166 | + } else { | ||
| 167 | + layoutToAttribute = layoutFromAttribute | ||
| 168 | + } | ||
| 169 | + } | ||
| 170 | + #else | ||
| 171 | + if self.from.attributes == self.to.attributes { | ||
| 172 | + layoutToAttribute = layoutFromAttribute | ||
| 173 | + } else if layoutToAttributes.count > 0 { | ||
| 174 | + layoutToAttribute = layoutToAttributes[0] | ||
| 175 | + } else { | ||
| 176 | + layoutToAttribute = layoutFromAttribute | ||
| 177 | + } | ||
| 178 | + #endif | ||
| 179 | + | ||
| 180 | + // get layout constant | ||
| 181 | + let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute) | ||
| 182 | + | ||
| 183 | + // get layout to | ||
| 184 | + var layoutTo: AnyObject? = self.to.target | ||
| 185 | + | ||
| 186 | + // use superview if possible | ||
| 187 | + if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height { | ||
| 188 | + layoutTo = layoutFrom.superview | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + // create layout constraint | ||
| 192 | + let layoutConstraint = LayoutConstraint( | ||
| 193 | + item: layoutFrom, | ||
| 194 | + attribute: layoutFromAttribute, | ||
| 195 | + relatedBy: layoutRelation, | ||
| 196 | + toItem: layoutTo, | ||
| 197 | + attribute: layoutToAttribute, | ||
| 198 | + multiplier: self.multiplier.constraintMultiplierTargetValue, | ||
| 199 | + constant: layoutConstant | ||
| 200 | + ) | ||
| 201 | + | ||
| 202 | + // set label | ||
| 203 | + layoutConstraint.label = self.label | ||
| 204 | + | ||
| 205 | + // set priority | ||
| 206 | + layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) | ||
| 207 | + | ||
| 208 | + // set constraint | ||
| 209 | + layoutConstraint.constraint = self | ||
| 210 | + | ||
| 211 | + // append | ||
| 212 | + self.layoutConstraints.append(layoutConstraint) | ||
| 213 | + } | ||
| 214 | + } | ||
| 215 | + | ||
| 216 | + // MARK: Public | ||
| 217 | + | ||
| 218 | + @available(*, deprecated, message:"Use activate().") | ||
| 219 | + public func install() { | ||
| 220 | + self.activate() | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + @available(*, deprecated, message:"Use deactivate().") | ||
| 224 | + public func uninstall() { | ||
| 225 | + self.deactivate() | ||
| 226 | + } | ||
| 227 | + | ||
| 228 | + public func activate() { | ||
| 229 | + self.activateIfNeeded() | ||
| 230 | + } | ||
| 231 | + | ||
| 232 | + public func deactivate() { | ||
| 233 | + self.deactivateIfNeeded() | ||
| 234 | + } | ||
| 235 | + | ||
| 236 | + @discardableResult | ||
| 237 | + public func update(offset: ConstraintOffsetTarget) -> Constraint { | ||
| 238 | + self.constant = offset.constraintOffsetTargetValue | ||
| 239 | + return self | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + @discardableResult | ||
| 243 | + public func update(inset: ConstraintInsetTarget) -> Constraint { | ||
| 244 | + self.constant = inset.constraintInsetTargetValue | ||
| 245 | + return self | ||
| 246 | + } | ||
| 247 | + | ||
| 248 | + #if os(iOS) || os(tvOS) | ||
| 249 | + @discardableResult | ||
| 250 | + @available(iOS 11.0, tvOS 11.0, *) | ||
| 251 | + public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint { | ||
| 252 | + self.constant = inset.constraintDirectionalInsetTargetValue | ||
| 253 | + return self | ||
| 254 | + } | ||
| 255 | + #endif | ||
| 256 | + | ||
| 257 | + @discardableResult | ||
| 258 | + public func update(priority: ConstraintPriorityTarget) -> Constraint { | ||
| 259 | + self.priority = priority.constraintPriorityTargetValue | ||
| 260 | + return self | ||
| 261 | + } | ||
| 262 | + | ||
| 263 | + @discardableResult | ||
| 264 | + public func update(priority: ConstraintPriority) -> Constraint { | ||
| 265 | + self.priority = priority.value | ||
| 266 | + return self | ||
| 267 | + } | ||
| 268 | + | ||
| 269 | + @available(*, deprecated, message:"Use update(offset: ConstraintOffsetTarget) instead.") | ||
| 270 | + public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } | ||
| 271 | + | ||
| 272 | + @available(*, deprecated, message:"Use update(inset: ConstraintInsetTarget) instead.") | ||
| 273 | + public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } | ||
| 274 | + | ||
| 275 | + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | ||
| 276 | + public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } | ||
| 277 | + | ||
| 278 | + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | ||
| 279 | + public func updatePriorityRequired() -> Void {} | ||
| 280 | + | ||
| 281 | + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | ||
| 282 | + public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } | ||
| 283 | + | ||
| 284 | + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | ||
| 285 | + public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } | ||
| 286 | + | ||
| 287 | + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | ||
| 288 | + public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } | ||
| 289 | + | ||
| 290 | + // MARK: Internal | ||
| 291 | + | ||
| 292 | + internal func updateConstantAndPriorityIfNeeded() { | ||
| 293 | + for layoutConstraint in self.layoutConstraints { | ||
| 294 | + let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute | ||
| 295 | + layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute) | ||
| 296 | + | ||
| 297 | + let requiredPriority = ConstraintPriority.required.value | ||
| 298 | + if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) { | ||
| 299 | + layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) | ||
| 300 | + } | ||
| 301 | + } | ||
| 302 | + } | ||
| 303 | + | ||
| 304 | + internal func activateIfNeeded(updatingExisting: Bool = false) { | ||
| 305 | + guard let item = self.from.layoutConstraintItem else { | ||
| 306 | + print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.") | ||
| 307 | + return | ||
| 308 | + } | ||
| 309 | + let layoutConstraints = self.layoutConstraints | ||
| 310 | + | ||
| 311 | + if updatingExisting { | ||
| 312 | + var existingLayoutConstraints: [LayoutConstraint] = [] | ||
| 313 | + for constraint in item.constraints { | ||
| 314 | + existingLayoutConstraints += constraint.layoutConstraints | ||
| 315 | + } | ||
| 316 | + | ||
| 317 | + for layoutConstraint in layoutConstraints { | ||
| 318 | + let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint } | ||
| 319 | + guard let updateLayoutConstraint = existingLayoutConstraint else { | ||
| 320 | + fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)") | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute | ||
| 324 | + updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute) | ||
| 325 | + } | ||
| 326 | + } else { | ||
| 327 | + NSLayoutConstraint.activate(layoutConstraints) | ||
| 328 | + item.add(constraints: [self]) | ||
| 329 | + } | ||
| 330 | + } | ||
| 331 | + | ||
| 332 | + internal func deactivateIfNeeded() { | ||
| 333 | + guard let item = self.from.layoutConstraintItem else { | ||
| 334 | + print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.") | ||
| 335 | + return | ||
| 336 | + } | ||
| 337 | + let layoutConstraints = self.layoutConstraints | ||
| 338 | + NSLayoutConstraint.deactivate(layoutConstraints) | ||
| 339 | + item.remove(constraints: [self]) | ||
| 340 | + } | ||
| 341 | +} |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral { | ||
| 32 | + | ||
| 33 | + typealias IntegerLiteralType = UInt | ||
| 34 | + | ||
| 35 | + internal init(rawValue: UInt) { | ||
| 36 | + self.rawValue = rawValue | ||
| 37 | + } | ||
| 38 | + internal init(_ rawValue: UInt) { | ||
| 39 | + self.init(rawValue: rawValue) | ||
| 40 | + } | ||
| 41 | + internal init(nilLiteral: ()) { | ||
| 42 | + self.rawValue = 0 | ||
| 43 | + } | ||
| 44 | + internal init(integerLiteral rawValue: IntegerLiteralType) { | ||
| 45 | + self.init(rawValue: rawValue) | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + internal private(set) var rawValue: UInt | ||
| 49 | + internal static var allZeros: ConstraintAttributes { return 0 } | ||
| 50 | + internal static func convertFromNilLiteral() -> ConstraintAttributes { return 0 } | ||
| 51 | + internal var boolValue: Bool { return self.rawValue != 0 } | ||
| 52 | + | ||
| 53 | + internal func toRaw() -> UInt { return self.rawValue } | ||
| 54 | + internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) } | ||
| 55 | + internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) } | ||
| 56 | + | ||
| 57 | + // normal | ||
| 58 | + | ||
| 59 | + internal static var none: ConstraintAttributes { return 0 } | ||
| 60 | + internal static var left: ConstraintAttributes { return 1 } | ||
| 61 | + internal static var top: ConstraintAttributes { return 2 } | ||
| 62 | + internal static var right: ConstraintAttributes { return 4 } | ||
| 63 | + internal static var bottom: ConstraintAttributes { return 8 } | ||
| 64 | + internal static var leading: ConstraintAttributes { return 16 } | ||
| 65 | + internal static var trailing: ConstraintAttributes { return 32 } | ||
| 66 | + internal static var width: ConstraintAttributes { return 64 } | ||
| 67 | + internal static var height: ConstraintAttributes { return 128 } | ||
| 68 | + internal static var centerX: ConstraintAttributes { return 256 } | ||
| 69 | + internal static var centerY: ConstraintAttributes { return 512 } | ||
| 70 | + internal static var lastBaseline: ConstraintAttributes { return 1024 } | ||
| 71 | + | ||
| 72 | + @available(iOS 8.0, OSX 10.11, *) | ||
| 73 | + internal static var firstBaseline: ConstraintAttributes { return 2048 } | ||
| 74 | + | ||
| 75 | + @available(iOS 8.0, *) | ||
| 76 | + internal static var leftMargin: ConstraintAttributes { return 4096 } | ||
| 77 | + | ||
| 78 | + @available(iOS 8.0, *) | ||
| 79 | + internal static var rightMargin: ConstraintAttributes { return 8192 } | ||
| 80 | + | ||
| 81 | + @available(iOS 8.0, *) | ||
| 82 | + internal static var topMargin: ConstraintAttributes { return 16384 } | ||
| 83 | + | ||
| 84 | + @available(iOS 8.0, *) | ||
| 85 | + internal static var bottomMargin: ConstraintAttributes { return 32768 } | ||
| 86 | + | ||
| 87 | + @available(iOS 8.0, *) | ||
| 88 | + internal static var leadingMargin: ConstraintAttributes { return 65536 } | ||
| 89 | + | ||
| 90 | + @available(iOS 8.0, *) | ||
| 91 | + internal static var trailingMargin: ConstraintAttributes { return 131072 } | ||
| 92 | + | ||
| 93 | + @available(iOS 8.0, *) | ||
| 94 | + internal static var centerXWithinMargins: ConstraintAttributes { return 262144 } | ||
| 95 | + | ||
| 96 | + @available(iOS 8.0, *) | ||
| 97 | + internal static var centerYWithinMargins: ConstraintAttributes { return 524288 } | ||
| 98 | + | ||
| 99 | + // aggregates | ||
| 100 | + | ||
| 101 | + internal static var edges: ConstraintAttributes { return 15 } | ||
| 102 | + internal static var directionalEdges: ConstraintAttributes { return 58 } | ||
| 103 | + internal static var size: ConstraintAttributes { return 192 } | ||
| 104 | + internal static var center: ConstraintAttributes { return 768 } | ||
| 105 | + | ||
| 106 | + @available(iOS 8.0, *) | ||
| 107 | + internal static var margins: ConstraintAttributes { return 61440 } | ||
| 108 | + | ||
| 109 | + @available(iOS 8.0, *) | ||
| 110 | + internal static var directionalMargins: ConstraintAttributes { return 245760 } | ||
| 111 | + | ||
| 112 | + @available(iOS 8.0, *) | ||
| 113 | + internal static var centerWithinMargins: ConstraintAttributes { return 786432 } | ||
| 114 | + | ||
| 115 | + internal var layoutAttributes:[LayoutAttribute] { | ||
| 116 | + var attrs = [LayoutAttribute]() | ||
| 117 | + if (self.contains(ConstraintAttributes.left)) { | ||
| 118 | + attrs.append(.left) | ||
| 119 | + } | ||
| 120 | + if (self.contains(ConstraintAttributes.top)) { | ||
| 121 | + attrs.append(.top) | ||
| 122 | + } | ||
| 123 | + if (self.contains(ConstraintAttributes.right)) { | ||
| 124 | + attrs.append(.right) | ||
| 125 | + } | ||
| 126 | + if (self.contains(ConstraintAttributes.bottom)) { | ||
| 127 | + attrs.append(.bottom) | ||
| 128 | + } | ||
| 129 | + if (self.contains(ConstraintAttributes.leading)) { | ||
| 130 | + attrs.append(.leading) | ||
| 131 | + } | ||
| 132 | + if (self.contains(ConstraintAttributes.trailing)) { | ||
| 133 | + attrs.append(.trailing) | ||
| 134 | + } | ||
| 135 | + if (self.contains(ConstraintAttributes.width)) { | ||
| 136 | + attrs.append(.width) | ||
| 137 | + } | ||
| 138 | + if (self.contains(ConstraintAttributes.height)) { | ||
| 139 | + attrs.append(.height) | ||
| 140 | + } | ||
| 141 | + if (self.contains(ConstraintAttributes.centerX)) { | ||
| 142 | + attrs.append(.centerX) | ||
| 143 | + } | ||
| 144 | + if (self.contains(ConstraintAttributes.centerY)) { | ||
| 145 | + attrs.append(.centerY) | ||
| 146 | + } | ||
| 147 | + if (self.contains(ConstraintAttributes.lastBaseline)) { | ||
| 148 | + attrs.append(.lastBaseline) | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + #if os(iOS) || os(tvOS) | ||
| 152 | + if (self.contains(ConstraintAttributes.firstBaseline)) { | ||
| 153 | + attrs.append(.firstBaseline) | ||
| 154 | + } | ||
| 155 | + if (self.contains(ConstraintAttributes.leftMargin)) { | ||
| 156 | + attrs.append(.leftMargin) | ||
| 157 | + } | ||
| 158 | + if (self.contains(ConstraintAttributes.rightMargin)) { | ||
| 159 | + attrs.append(.rightMargin) | ||
| 160 | + } | ||
| 161 | + if (self.contains(ConstraintAttributes.topMargin)) { | ||
| 162 | + attrs.append(.topMargin) | ||
| 163 | + } | ||
| 164 | + if (self.contains(ConstraintAttributes.bottomMargin)) { | ||
| 165 | + attrs.append(.bottomMargin) | ||
| 166 | + } | ||
| 167 | + if (self.contains(ConstraintAttributes.leadingMargin)) { | ||
| 168 | + attrs.append(.leadingMargin) | ||
| 169 | + } | ||
| 170 | + if (self.contains(ConstraintAttributes.trailingMargin)) { | ||
| 171 | + attrs.append(.trailingMargin) | ||
| 172 | + } | ||
| 173 | + if (self.contains(ConstraintAttributes.centerXWithinMargins)) { | ||
| 174 | + attrs.append(.centerXWithinMargins) | ||
| 175 | + } | ||
| 176 | + if (self.contains(ConstraintAttributes.centerYWithinMargins)) { | ||
| 177 | + attrs.append(.centerYWithinMargins) | ||
| 178 | + } | ||
| 179 | + #endif | ||
| 180 | + | ||
| 181 | + return attrs | ||
| 182 | + } | ||
| 183 | +} | ||
| 184 | + | ||
| 185 | +internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes { | ||
| 186 | + return left.union(right) | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) { | ||
| 190 | + left.formUnion(right) | ||
| 191 | +} | ||
| 192 | + | ||
| 193 | +internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) { | ||
| 194 | + left.subtract(right) | ||
| 195 | +} | ||
| 196 | + | ||
| 197 | +internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool { | ||
| 198 | + return left.rawValue == right.rawValue | ||
| 199 | +} |
Pods/SnapKit/Source/ConstraintConfig.swift
0 → 100644
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | + public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection | ||
| 27 | +#else | ||
| 28 | + import AppKit | ||
| 29 | + public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection | ||
| 30 | +#endif | ||
| 31 | + | ||
| 32 | + | ||
| 33 | +public struct ConstraintConfig { | ||
| 34 | + | ||
| 35 | + public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight | ||
| 36 | + | ||
| 37 | +} |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +public protocol ConstraintConstantTarget { | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +extension CGPoint: ConstraintConstantTarget { | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +extension CGSize: ConstraintConstantTarget { | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +extension ConstraintInsets: ConstraintConstantTarget { | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +#if os(iOS) || os(tvOS) | ||
| 44 | +@available(iOS 11.0, tvOS 11.0, *) | ||
| 45 | +extension ConstraintDirectionalInsets: ConstraintConstantTarget { | ||
| 46 | +} | ||
| 47 | +#endif | ||
| 48 | + | ||
| 49 | +extension ConstraintConstantTarget { | ||
| 50 | + | ||
| 51 | + internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat { | ||
| 52 | + if let value = self as? CGFloat { | ||
| 53 | + return value | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + if let value = self as? Float { | ||
| 57 | + return CGFloat(value) | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + if let value = self as? Double { | ||
| 61 | + return CGFloat(value) | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + if let value = self as? Int { | ||
| 65 | + return CGFloat(value) | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + if let value = self as? UInt { | ||
| 69 | + return CGFloat(value) | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + if let value = self as? CGSize { | ||
| 73 | + if layoutAttribute == .width { | ||
| 74 | + return value.width | ||
| 75 | + } else if layoutAttribute == .height { | ||
| 76 | + return value.height | ||
| 77 | + } else { | ||
| 78 | + return 0.0 | ||
| 79 | + } | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + if let value = self as? CGPoint { | ||
| 83 | + #if os(iOS) || os(tvOS) | ||
| 84 | + switch layoutAttribute { | ||
| 85 | + case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins: | ||
| 86 | + return value.x | ||
| 87 | + case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline: | ||
| 88 | + return value.y | ||
| 89 | + case .width, .height, .notAnAttribute: | ||
| 90 | + return 0.0 | ||
| 91 | + #if swift(>=5.0) | ||
| 92 | + @unknown default: | ||
| 93 | + return 0.0 | ||
| 94 | + #endif | ||
| 95 | + } | ||
| 96 | + #else | ||
| 97 | + switch layoutAttribute { | ||
| 98 | + case .left, .right, .leading, .trailing, .centerX: | ||
| 99 | + return value.x | ||
| 100 | + case .top, .bottom, .centerY, .lastBaseline, .firstBaseline: | ||
| 101 | + return value.y | ||
| 102 | + case .width, .height, .notAnAttribute: | ||
| 103 | + return 0.0 | ||
| 104 | + #if swift(>=5.0) | ||
| 105 | + @unknown default: | ||
| 106 | + return 0.0 | ||
| 107 | + #endif | ||
| 108 | + } | ||
| 109 | + #endif | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + if let value = self as? ConstraintInsets { | ||
| 113 | + #if os(iOS) || os(tvOS) | ||
| 114 | + switch layoutAttribute { | ||
| 115 | + case .left, .leftMargin: | ||
| 116 | + return value.left | ||
| 117 | + case .top, .topMargin, .firstBaseline: | ||
| 118 | + return value.top | ||
| 119 | + case .right, .rightMargin: | ||
| 120 | + return -value.right | ||
| 121 | + case .bottom, .bottomMargin, .lastBaseline: | ||
| 122 | + return -value.bottom | ||
| 123 | + case .leading, .leadingMargin: | ||
| 124 | + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right | ||
| 125 | + case .trailing, .trailingMargin: | ||
| 126 | + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left | ||
| 127 | + case .centerX, .centerXWithinMargins: | ||
| 128 | + return (value.left - value.right) / 2 | ||
| 129 | + case .centerY, .centerYWithinMargins: | ||
| 130 | + return (value.top - value.bottom) / 2 | ||
| 131 | + case .width: | ||
| 132 | + return -(value.left + value.right) | ||
| 133 | + case .height: | ||
| 134 | + return -(value.top + value.bottom) | ||
| 135 | + case .notAnAttribute: | ||
| 136 | + return 0.0 | ||
| 137 | + #if swift(>=5.0) | ||
| 138 | + @unknown default: | ||
| 139 | + return 0.0 | ||
| 140 | + #endif | ||
| 141 | + } | ||
| 142 | + #else | ||
| 143 | + switch layoutAttribute { | ||
| 144 | + case .left: | ||
| 145 | + return value.left | ||
| 146 | + case .top, .firstBaseline: | ||
| 147 | + return value.top | ||
| 148 | + case .right: | ||
| 149 | + return -value.right | ||
| 150 | + case .bottom, .lastBaseline: | ||
| 151 | + return -value.bottom | ||
| 152 | + case .leading: | ||
| 153 | + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right | ||
| 154 | + case .trailing: | ||
| 155 | + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left | ||
| 156 | + case .centerX: | ||
| 157 | + return (value.left - value.right) / 2 | ||
| 158 | + case .centerY: | ||
| 159 | + return (value.top - value.bottom) / 2 | ||
| 160 | + case .width: | ||
| 161 | + return -(value.left + value.right) | ||
| 162 | + case .height: | ||
| 163 | + return -(value.top + value.bottom) | ||
| 164 | + case .notAnAttribute: | ||
| 165 | + return 0.0 | ||
| 166 | + #if swift(>=5.0) | ||
| 167 | + @unknown default: | ||
| 168 | + return 0.0 | ||
| 169 | + #endif | ||
| 170 | + } | ||
| 171 | + #endif | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + #if os(iOS) || os(tvOS) | ||
| 175 | + if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets { | ||
| 176 | + switch layoutAttribute { | ||
| 177 | + case .left, .leftMargin: | ||
| 178 | + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing | ||
| 179 | + case .top, .topMargin, .firstBaseline: | ||
| 180 | + return value.top | ||
| 181 | + case .right, .rightMargin: | ||
| 182 | + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading | ||
| 183 | + case .bottom, .bottomMargin, .lastBaseline: | ||
| 184 | + return -value.bottom | ||
| 185 | + case .leading, .leadingMargin: | ||
| 186 | + return value.leading | ||
| 187 | + case .trailing, .trailingMargin: | ||
| 188 | + return -value.trailing | ||
| 189 | + case .centerX, .centerXWithinMargins: | ||
| 190 | + return (value.leading - value.trailing) / 2 | ||
| 191 | + case .centerY, .centerYWithinMargins: | ||
| 192 | + return (value.top - value.bottom) / 2 | ||
| 193 | + case .width: | ||
| 194 | + return -(value.leading + value.trailing) | ||
| 195 | + case .height: | ||
| 196 | + return -(value.top + value.bottom) | ||
| 197 | + case .notAnAttribute: | ||
| 198 | + return 0.0 | ||
| 199 | + #if swift(>=5.0) | ||
| 200 | + @unknown default: | ||
| 201 | + return 0.0 | ||
| 202 | + #else | ||
| 203 | + default: | ||
| 204 | + return 0.0 | ||
| 205 | + #endif | ||
| 206 | + } | ||
| 207 | + } | ||
| 208 | + #endif | ||
| 209 | + | ||
| 210 | + return 0.0 | ||
| 211 | + } | ||
| 212 | + | ||
| 213 | +} |
Pods/SnapKit/Source/ConstraintDSL.swift
0 → 100644
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +public protocol ConstraintDSL { | ||
| 32 | + | ||
| 33 | + var target: AnyObject? { get } | ||
| 34 | + | ||
| 35 | + func setLabel(_ value: String?) | ||
| 36 | + func label() -> String? | ||
| 37 | + | ||
| 38 | +} | ||
| 39 | +extension ConstraintDSL { | ||
| 40 | + | ||
| 41 | + public func setLabel(_ value: String?) { | ||
| 42 | + objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC) | ||
| 43 | + } | ||
| 44 | + public func label() -> String? { | ||
| 45 | + return objc_getAssociatedObject(self.target as Any, &labelKey) as? String | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | +} | ||
| 49 | +private var labelKey: UInt8 = 0 | ||
| 50 | + | ||
| 51 | + | ||
| 52 | +public protocol ConstraintBasicAttributesDSL : ConstraintDSL { | ||
| 53 | +} | ||
| 54 | +extension ConstraintBasicAttributesDSL { | ||
| 55 | + | ||
| 56 | + // MARK: Basics | ||
| 57 | + | ||
| 58 | + public var left: ConstraintItem { | ||
| 59 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left) | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + public var top: ConstraintItem { | ||
| 63 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + public var right: ConstraintItem { | ||
| 67 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right) | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + public var bottom: ConstraintItem { | ||
| 71 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + public var leading: ConstraintItem { | ||
| 75 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading) | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + public var trailing: ConstraintItem { | ||
| 79 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing) | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + public var width: ConstraintItem { | ||
| 83 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width) | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + public var height: ConstraintItem { | ||
| 87 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + public var centerX: ConstraintItem { | ||
| 91 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX) | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + public var centerY: ConstraintItem { | ||
| 95 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY) | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + public var edges: ConstraintItem { | ||
| 99 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges) | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + public var directionalEdges: ConstraintItem { | ||
| 103 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges) | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + public var size: ConstraintItem { | ||
| 107 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size) | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + public var center: ConstraintItem { | ||
| 111 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center) | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | +} | ||
| 115 | + | ||
| 116 | +public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL { | ||
| 117 | +} | ||
| 118 | +extension ConstraintAttributesDSL { | ||
| 119 | + | ||
| 120 | + // MARK: Baselines | ||
| 121 | + | ||
| 122 | + @available(*, deprecated, message:"Use .lastBaseline instead") | ||
| 123 | + public var baseline: ConstraintItem { | ||
| 124 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + @available(iOS 8.0, OSX 10.11, *) | ||
| 128 | + public var lastBaseline: ConstraintItem { | ||
| 129 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + @available(iOS 8.0, OSX 10.11, *) | ||
| 133 | + public var firstBaseline: ConstraintItem { | ||
| 134 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline) | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + // MARK: Margins | ||
| 138 | + | ||
| 139 | + @available(iOS 8.0, *) | ||
| 140 | + public var leftMargin: ConstraintItem { | ||
| 141 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin) | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + @available(iOS 8.0, *) | ||
| 145 | + public var topMargin: ConstraintItem { | ||
| 146 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin) | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + @available(iOS 8.0, *) | ||
| 150 | + public var rightMargin: ConstraintItem { | ||
| 151 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin) | ||
| 152 | + } | ||
| 153 | + | ||
| 154 | + @available(iOS 8.0, *) | ||
| 155 | + public var bottomMargin: ConstraintItem { | ||
| 156 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin) | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + @available(iOS 8.0, *) | ||
| 160 | + public var leadingMargin: ConstraintItem { | ||
| 161 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin) | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + @available(iOS 8.0, *) | ||
| 165 | + public var trailingMargin: ConstraintItem { | ||
| 166 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin) | ||
| 167 | + } | ||
| 168 | + | ||
| 169 | + @available(iOS 8.0, *) | ||
| 170 | + public var centerXWithinMargins: ConstraintItem { | ||
| 171 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins) | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + @available(iOS 8.0, *) | ||
| 175 | + public var centerYWithinMargins: ConstraintItem { | ||
| 176 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins) | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + @available(iOS 8.0, *) | ||
| 180 | + public var margins: ConstraintItem { | ||
| 181 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins) | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + @available(iOS 8.0, *) | ||
| 185 | + public var directionalMargins: ConstraintItem { | ||
| 186 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins) | ||
| 187 | + } | ||
| 188 | + | ||
| 189 | + @available(iOS 8.0, *) | ||
| 190 | + public var centerWithinMargins: ConstraintItem { | ||
| 191 | + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | +} |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +public class ConstraintDescription { | ||
| 32 | + | ||
| 33 | + internal let item: LayoutConstraintItem | ||
| 34 | + internal var attributes: ConstraintAttributes | ||
| 35 | + internal var relation: ConstraintRelation? = nil | ||
| 36 | + internal var sourceLocation: (String, UInt)? = nil | ||
| 37 | + internal var label: String? = nil | ||
| 38 | + internal var related: ConstraintItem? = nil | ||
| 39 | + internal var multiplier: ConstraintMultiplierTarget = 1.0 | ||
| 40 | + internal var constant: ConstraintConstantTarget = 0.0 | ||
| 41 | + internal var priority: ConstraintPriorityTarget = 1000.0 | ||
| 42 | + internal lazy var constraint: Constraint? = { | ||
| 43 | + guard let relation = self.relation, | ||
| 44 | + let related = self.related, | ||
| 45 | + let sourceLocation = self.sourceLocation else { | ||
| 46 | + return nil | ||
| 47 | + } | ||
| 48 | + let from = ConstraintItem(target: self.item, attributes: self.attributes) | ||
| 49 | + | ||
| 50 | + return Constraint( | ||
| 51 | + from: from, | ||
| 52 | + to: related, | ||
| 53 | + relation: relation, | ||
| 54 | + sourceLocation: sourceLocation, | ||
| 55 | + label: self.label, | ||
| 56 | + multiplier: self.multiplier, | ||
| 57 | + constant: self.constant, | ||
| 58 | + priority: self.priority | ||
| 59 | + ) | ||
| 60 | + }() | ||
| 61 | + | ||
| 62 | + // MARK: Initialization | ||
| 63 | + | ||
| 64 | + internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) { | ||
| 65 | + self.item = item | ||
| 66 | + self.attributes = attributes | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | +} |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | +import UIKit | ||
| 26 | +#else | ||
| 27 | +import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | +#if os(iOS) || os(tvOS) | ||
| 31 | +public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +@available(iOS 11.0, tvOS 11.0, *) | ||
| 35 | +extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +extension ConstraintDirectionalInsetTarget { | ||
| 39 | + | ||
| 40 | + @available(iOS 11.0, tvOS 11.0, *) | ||
| 41 | + internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { | ||
| 42 | + if let amount = self as? ConstraintDirectionalInsets { | ||
| 43 | + return amount | ||
| 44 | + } else { | ||
| 45 | + return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) | ||
| 46 | + } | ||
| 47 | + } | ||
| 48 | +} | ||
| 49 | +#endif |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +#if os(iOS) || os(tvOS) | ||
| 32 | + @available(iOS 11.0, tvOS 11.0, *) | ||
| 33 | + public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets | ||
| 34 | +#endif |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +public protocol ConstraintInsetTarget: ConstraintConstantTarget { | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +extension Int: ConstraintInsetTarget { | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +extension UInt: ConstraintInsetTarget { | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +extension Float: ConstraintInsetTarget { | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +extension Double: ConstraintInsetTarget { | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +extension CGFloat: ConstraintInsetTarget { | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +extension ConstraintInsets: ConstraintInsetTarget { | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +extension ConstraintInsetTarget { | ||
| 53 | + | ||
| 54 | + internal var constraintInsetTargetValue: ConstraintInsets { | ||
| 55 | + if let amount = self as? ConstraintInsets { | ||
| 56 | + return amount | ||
| 57 | + } else if let amount = self as? Float { | ||
| 58 | + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) | ||
| 59 | + } else if let amount = self as? Double { | ||
| 60 | + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) | ||
| 61 | + } else if let amount = self as? CGFloat { | ||
| 62 | + return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount) | ||
| 63 | + } else if let amount = self as? Int { | ||
| 64 | + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) | ||
| 65 | + } else if let amount = self as? UInt { | ||
| 66 | + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) | ||
| 67 | + } else { | ||
| 68 | + return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0) | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | +} |
Pods/SnapKit/Source/ConstraintInsets.swift
0 → 100644
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +#if os(iOS) || os(tvOS) | ||
| 32 | + public typealias ConstraintInsets = UIEdgeInsets | ||
| 33 | +#else | ||
| 34 | + public typealias ConstraintInsets = NSEdgeInsets | ||
| 35 | +#endif |
Pods/SnapKit/Source/ConstraintItem.swift
0 → 100644
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +public final class ConstraintItem { | ||
| 32 | + | ||
| 33 | + internal weak var target: AnyObject? | ||
| 34 | + internal let attributes: ConstraintAttributes | ||
| 35 | + | ||
| 36 | + internal init(target: AnyObject?, attributes: ConstraintAttributes) { | ||
| 37 | + self.target = target | ||
| 38 | + self.attributes = attributes | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + internal var layoutConstraintItem: LayoutConstraintItem? { | ||
| 42 | + return self.target as? LayoutConstraintItem | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { | ||
| 48 | + // pointer equality | ||
| 49 | + guard lhs !== rhs else { | ||
| 50 | + return true | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + // must both have valid targets and identical attributes | ||
| 54 | + guard let target1 = lhs.target, | ||
| 55 | + let target2 = rhs.target, | ||
| 56 | + target1 === target2 && lhs.attributes == rhs.attributes else { | ||
| 57 | + return false | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + return true | ||
| 61 | +} |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#endif | ||
| 27 | + | ||
| 28 | + | ||
| 29 | +@available(iOS 9.0, OSX 10.11, *) | ||
| 30 | +public extension ConstraintLayoutGuide { | ||
| 31 | + | ||
| 32 | + var snp: ConstraintLayoutGuideDSL { | ||
| 33 | + return ConstraintLayoutGuideDSL(guide: self) | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | +} |
| 1 | +// | ||
| 2 | +// SnapKit | ||
| 3 | +// | ||
| 4 | +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit | ||
| 5 | +// | ||
| 6 | +// Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 7 | +// of this software and associated documentation files (the "Software"), to deal | ||
| 8 | +// in the Software without restriction, including without limitation the rights | ||
| 9 | +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 10 | +// copies of the Software, and to permit persons to whom the Software is | ||
| 11 | +// furnished to do so, subject to the following conditions: | ||
| 12 | +// | ||
| 13 | +// The above copyright notice and this permission notice shall be included in | ||
| 14 | +// all copies or substantial portions of the Software. | ||
| 15 | +// | ||
| 16 | +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 17 | +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 18 | +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 19 | +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 21 | +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 22 | +// THE SOFTWARE. | ||
| 23 | + | ||
| 24 | +#if os(iOS) || os(tvOS) | ||
| 25 | + import UIKit | ||
| 26 | +#else | ||
| 27 | + import AppKit | ||
| 28 | +#endif | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +#if os(iOS) || os(tvOS) | ||
| 32 | + @available(iOS 9.0, *) | ||
| 33 | + public typealias ConstraintLayoutGuide = UILayoutGuide | ||
| 34 | +#else | ||
| 35 | + @available(OSX 10.11, *) | ||
| 36 | + public typealias ConstraintLayoutGuide = NSLayoutGuide | ||
| 37 | +#endif |
Please
register
or
login
to post a comment