Commit d5f0118d0dd6378673e9a874025d7711050a6e71

Authored by tdy_13
0 parents

init

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.

  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 +}
... ...
  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 +}
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:">
  6 + </FileRef>
  7 +</Workspace>
... ...
  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>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
... ...
  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>
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:InterQR-Internship.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
... ...
  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>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Bucket
  3 + uuid = "A8BBD599-A0D6-48C1-A109-6E95E235F42B"
  4 + type = "0"
  5 + version = "2.0">
  6 +</Bucket>
... ...
  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 +
... ...
  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 + "colors" : [
  3 + {
  4 + "idiom" : "universal"
  5 + }
  6 + ],
  7 + "info" : {
  8 + "author" : "xcode",
  9 + "version" : 1
  10 + }
  11 +}
... ...
  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 +}
... ...
  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 + "info" : {
  3 + "author" : "xcode",
  4 + "version" : 1
  5 + }
  6 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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 +{
  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 +{
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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 +
... ...
  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>
... ...
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  1 +# Uncomment the next line to define a global platform for your project
  2 +# platform :ios, '9.0'
  3 +
  4 +target 'InterQR-Internship' do
  5 + # Comment the next line if you don't want to use dynamic frameworks
  6 + use_frameworks!
  7 +
  8 + # Pods for InterQR-Internship
  9 +pod 'SnapKit'
  10 +end
... ...
  1 +PODS:
  2 + - SnapKit (5.0.1)
  3 +
  4 +DEPENDENCIES:
  5 + - SnapKit
  6 +
  7 +SPEC REPOS:
  8 + trunk:
  9 + - SnapKit
  10 +
  11 +SPEC CHECKSUMS:
  12 + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb
  13 +
  14 +PODFILE CHECKSUM: 643937202fe849949514cc29f57e4f525190f02e
  15 +
  16 +COCOAPODS: 1.11.2
... ...
  1 +PODS:
  2 + - SnapKit (5.0.1)
  3 +
  4 +DEPENDENCIES:
  5 + - SnapKit
  6 +
  7 +SPEC REPOS:
  8 + trunk:
  9 + - SnapKit
  10 +
  11 +SPEC CHECKSUMS:
  12 + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb
  13 +
  14 +PODFILE CHECKSUM: 643937202fe849949514cc29f57e4f525190f02e
  15 +
  16 +COCOAPODS: 1.11.2
... ...
  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 +}
... ...
  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>
... ...
  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.
... ...
  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 +[![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit)
  6 +[![Platform](https://img.shields.io/cocoapods/p/SnapKit.svg?style=flat)](https://github.com/SnapKit/SnapKit)
  7 +[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://cocoapods.org/pods/SnapKit)
  8 +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](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.
... ...
  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 +}
... ...
  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 +}
... ...
  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 +}
... ...
  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
... ...
  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