Commit ccbed3ee0180e886ae2bafb38fe0f3a36bb53b3f

Authored by Dmitriy Tymofyeyev
1 parent 7aa7cc6a

init

Showing 216 changed files with 8575 additions and 0 deletions
  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 skModernist(type: SkModernistFontType, ofSize: CGFloat) -> UIFont {
  18 + if let font = UIFont(name: type.rawValue, size: ofSize) {
  19 + return font
  20 + } else {
  21 + return .systemFont(ofSize: ofSize)
  22 + }
  23 + }
  24 +}
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 55;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 00E581BB284F71CD00E779FB /* Checkbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E581BA284F71CD00E779FB /* Checkbox.swift */; };
  11 + 17058D52284A4F150078DD82 /* CodeVerificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17058D51284A4F150078DD82 /* CodeVerificationViewController.swift */; };
  12 + 17058D54284A4F670078DD82 /* CodeVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17058D53284A4F670078DD82 /* CodeVerificationView.swift */; };
  13 + 17287C602848AD8D00AA7113 /* Fonts + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17287C5F2848AD8D00AA7113 /* Fonts + Extension.swift */; };
  14 + 17287C692848C69600AA7113 /* Sk-Modernist-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 17287C642848C69600AA7113 /* Sk-Modernist-Bold.otf */; };
  15 + 17287C6A2848C69600AA7113 /* Sk-Modernist-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 17287C652848C69600AA7113 /* Sk-Modernist-Regular.otf */; };
  16 + 17287C6D2848C69600AA7113 /* Sk-Modernist-Mono.otf in Resources */ = {isa = PBXBuildFile; fileRef = 17287C682848C69600AA7113 /* Sk-Modernist-Mono.otf */; };
  17 + 1729E21D28465163006C7C29 /* PhoneService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729E21C28465162006C7C29 /* PhoneService.swift */; };
  18 + 1729E21F28465595006C7C29 /* PhoneNumberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729E21E28465595006C7C29 /* PhoneNumberView.swift */; };
  19 + 1729E22128465DA9006C7C29 /* PhonePickerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729E22028465DA9006C7C29 /* PhonePickerModel.swift */; };
  20 + 1732AC71284769B50042C9F7 /* TextFieldWithPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1732AC70284769B50042C9F7 /* TextFieldWithPadding.swift */; };
  21 + 1732AC7328477BB40042C9F7 /* PickerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1732AC7228477BB40042C9F7 /* PickerViewCell.swift */; };
  22 + 1738F7D82850F5D5003F1806 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1738F7D72850F5D5003F1806 /* SettingsViewController.swift */; };
  23 + 1738F7DA2850F5F1003F1806 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1738F7D92850F5F1003F1806 /* SettingsView.swift */; };
  24 + 1738F7DC2850F980003F1806 /* ProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1738F7DB2850F980003F1806 /* ProfileView.swift */; };
  25 + 1778DA3E2850FF89006619C4 /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1778DA3D2850FF89006619C4 /* NotificationsView.swift */; };
  26 + 1778DA402851042F006619C4 /* EditInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1778DA3F2851042F006619C4 /* EditInfoView.swift */; };
  27 + 178A61D12850DDAA001509A4 /* HomeTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178A61D02850DDAA001509A4 /* HomeTableViewCell.swift */; };
  28 + 17ABFE58284FD20C003B6959 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17ABFE57284FD20C003B6959 /* HomeViewController.swift */; };
  29 + 17ABFE5A284FD293003B6959 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17ABFE59284FD293003B6959 /* HomeView.swift */; };
  30 + 17CF9EE12844ED8F000D8077 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EE02844ED8F000D8077 /* AppDelegate.swift */; };
  31 + 17CF9EE32844ED8F000D8077 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EE22844ED8F000D8077 /* SceneDelegate.swift */; };
  32 + 17CF9EE52844ED8F000D8077 /* VerificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EE42844ED8F000D8077 /* VerificationViewController.swift */; };
  33 + 17CF9EEA2844ED90000D8077 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 17CF9EE92844ED90000D8077 /* Assets.xcassets */; };
  34 + 17CF9EED2844ED90000D8077 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 17CF9EEB2844ED90000D8077 /* LaunchScreen.storyboard */; };
  35 + 17CF9EF72844EF8B000D8077 /* VerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9EF62844EF8B000D8077 /* VerificationView.swift */; };
  36 + CADC9D02EAEA6638FF235EF7 /* Pods_InterQR_Internship.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C589B3DBEEEE67D9D0AD2A /* Pods_InterQR_Internship.framework */; };
  37 +/* End PBXBuildFile section */
  38 +
  39 +/* Begin PBXFileReference section */
  40 + 00E581BA284F71CD00E779FB /* Checkbox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Checkbox.swift; sourceTree = "<group>"; };
  41 + 17058D51284A4F150078DD82 /* CodeVerificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeVerificationViewController.swift; sourceTree = "<group>"; };
  42 + 17058D53284A4F670078DD82 /* CodeVerificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeVerificationView.swift; sourceTree = "<group>"; };
  43 + 17287C5F2848AD8D00AA7113 /* Fonts + Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Fonts + Extension.swift"; sourceTree = "<group>"; };
  44 + 17287C642848C69600AA7113 /* Sk-Modernist-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Sk-Modernist-Bold.otf"; sourceTree = "<group>"; };
  45 + 17287C652848C69600AA7113 /* Sk-Modernist-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Sk-Modernist-Regular.otf"; sourceTree = "<group>"; };
  46 + 17287C682848C69600AA7113 /* Sk-Modernist-Mono.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Sk-Modernist-Mono.otf"; sourceTree = "<group>"; };
  47 + 1729E21C28465162006C7C29 /* PhoneService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneService.swift; sourceTree = "<group>"; };
  48 + 1729E21E28465595006C7C29 /* PhoneNumberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneNumberView.swift; sourceTree = "<group>"; };
  49 + 1729E22028465DA9006C7C29 /* PhonePickerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhonePickerModel.swift; sourceTree = "<group>"; };
  50 + 1732AC70284769B50042C9F7 /* TextFieldWithPadding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldWithPadding.swift; sourceTree = "<group>"; };
  51 + 1732AC7228477BB40042C9F7 /* PickerViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickerViewCell.swift; sourceTree = "<group>"; };
  52 + 1738F7D72850F5D5003F1806 /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
  53 + 1738F7D92850F5F1003F1806 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
  54 + 1738F7DB2850F980003F1806 /* ProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileView.swift; sourceTree = "<group>"; };
  55 + 1778DA3D2850FF89006619C4 /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = "<group>"; };
  56 + 1778DA3F2851042F006619C4 /* EditInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditInfoView.swift; sourceTree = "<group>"; };
  57 + 178A61D02850DDAA001509A4 /* HomeTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTableViewCell.swift; sourceTree = "<group>"; };
  58 + 17ABFE57284FD20C003B6959 /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = "<group>"; };
  59 + 17ABFE59284FD293003B6959 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = "<group>"; };
  60 + 17CF9EDD2844ED8F000D8077 /* InterQR-Internship.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "InterQR-Internship.app"; sourceTree = BUILT_PRODUCTS_DIR; };
  61 + 17CF9EE02844ED8F000D8077 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  62 + 17CF9EE22844ED8F000D8077 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
  63 + 17CF9EE42844ED8F000D8077 /* VerificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerificationViewController.swift; sourceTree = "<group>"; };
  64 + 17CF9EE92844ED90000D8077 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  65 + 17CF9EEC2844ED90000D8077 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  66 + 17CF9EEE2844ED90000D8077 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  67 + 17CF9EF62844EF8B000D8077 /* VerificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerificationView.swift; sourceTree = "<group>"; };
  68 + 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>"; };
  69 + 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>"; };
  70 + C7C589B3DBEEEE67D9D0AD2A /* Pods_InterQR_Internship.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_InterQR_Internship.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  71 +/* End PBXFileReference section */
  72 +
  73 +/* Begin PBXFrameworksBuildPhase section */
  74 + 17CF9EDA2844ED8F000D8077 /* Frameworks */ = {
  75 + isa = PBXFrameworksBuildPhase;
  76 + buildActionMask = 2147483647;
  77 + files = (
  78 + CADC9D02EAEA6638FF235EF7 /* Pods_InterQR_Internship.framework in Frameworks */,
  79 + );
  80 + runOnlyForDeploymentPostprocessing = 0;
  81 + };
  82 +/* End PBXFrameworksBuildPhase section */
  83 +
  84 +/* Begin PBXGroup section */
  85 + 00E581B0284F666000E779FB /* Modules */ = {
  86 + isa = PBXGroup;
  87 + children = (
  88 + 1738F7D42850F5A1003F1806 /* SettingsScreen */,
  89 + 17ABFE54284FD1C8003B6959 /* HomeScreen */,
  90 + 00E581B1284F666600E779FB /* VerificationSceen */,
  91 + 00E581B4284F669600E779FB /* OTPScreen */,
  92 + );
  93 + path = Modules;
  94 + sourceTree = "<group>";
  95 + };
  96 + 00E581B1284F666600E779FB /* VerificationSceen */ = {
  97 + isa = PBXGroup;
  98 + children = (
  99 + 00E581B3284F667C00E779FB /* ViewController */,
  100 + 00E581B2284F667600E779FB /* View */,
  101 + );
  102 + path = VerificationSceen;
  103 + sourceTree = "<group>";
  104 + };
  105 + 00E581B2284F667600E779FB /* View */ = {
  106 + isa = PBXGroup;
  107 + children = (
  108 + 1729E21E28465595006C7C29 /* PhoneNumberView.swift */,
  109 + 1732AC7228477BB40042C9F7 /* PickerViewCell.swift */,
  110 + 1732AC70284769B50042C9F7 /* TextFieldWithPadding.swift */,
  111 + 17CF9EF62844EF8B000D8077 /* VerificationView.swift */,
  112 + );
  113 + path = View;
  114 + sourceTree = "<group>";
  115 + };
  116 + 00E581B3284F667C00E779FB /* ViewController */ = {
  117 + isa = PBXGroup;
  118 + children = (
  119 + 17CF9EE42844ED8F000D8077 /* VerificationViewController.swift */,
  120 + );
  121 + path = ViewController;
  122 + sourceTree = "<group>";
  123 + };
  124 + 00E581B4284F669600E779FB /* OTPScreen */ = {
  125 + isa = PBXGroup;
  126 + children = (
  127 + 00E581B6284F66B400E779FB /* ViewController */,
  128 + 00E581B5284F66AB00E779FB /* View */,
  129 + );
  130 + path = OTPScreen;
  131 + sourceTree = "<group>";
  132 + };
  133 + 00E581B5284F66AB00E779FB /* View */ = {
  134 + isa = PBXGroup;
  135 + children = (
  136 + 17058D53284A4F670078DD82 /* CodeVerificationView.swift */,
  137 + );
  138 + path = View;
  139 + sourceTree = "<group>";
  140 + };
  141 + 00E581B6284F66B400E779FB /* ViewController */ = {
  142 + isa = PBXGroup;
  143 + children = (
  144 + 17058D51284A4F150078DD82 /* CodeVerificationViewController.swift */,
  145 + );
  146 + path = ViewController;
  147 + sourceTree = "<group>";
  148 + };
  149 + 00E581B7284F71A700E779FB /* Common */ = {
  150 + isa = PBXGroup;
  151 + children = (
  152 + 00E581B8284F71AE00E779FB /* CustomUI */,
  153 + );
  154 + path = Common;
  155 + sourceTree = "<group>";
  156 + };
  157 + 00E581B8284F71AE00E779FB /* CustomUI */ = {
  158 + isa = PBXGroup;
  159 + children = (
  160 + 00E581B9284F71B700E779FB /* Checkbox */,
  161 + );
  162 + path = CustomUI;
  163 + sourceTree = "<group>";
  164 + };
  165 + 00E581B9284F71B700E779FB /* Checkbox */ = {
  166 + isa = PBXGroup;
  167 + children = (
  168 + 00E581BA284F71CD00E779FB /* Checkbox.swift */,
  169 + );
  170 + path = Checkbox;
  171 + sourceTree = "<group>";
  172 + };
  173 + 17287C5E2848AC8800AA7113 /* Fonts + Extension */ = {
  174 + isa = PBXGroup;
  175 + children = (
  176 + 17287C5F2848AD8D00AA7113 /* Fonts + Extension.swift */,
  177 + );
  178 + path = "Fonts + Extension";
  179 + sourceTree = "<group>";
  180 + };
  181 + 1738F7D42850F5A1003F1806 /* SettingsScreen */ = {
  182 + isa = PBXGroup;
  183 + children = (
  184 + 1738F7D62850F5C3003F1806 /* ViewController */,
  185 + 1738F7D52850F5B5003F1806 /* View */,
  186 + );
  187 + path = SettingsScreen;
  188 + sourceTree = "<group>";
  189 + };
  190 + 1738F7D52850F5B5003F1806 /* View */ = {
  191 + isa = PBXGroup;
  192 + children = (
  193 + 1738F7D92850F5F1003F1806 /* SettingsView.swift */,
  194 + 1738F7DB2850F980003F1806 /* ProfileView.swift */,
  195 + 1778DA3D2850FF89006619C4 /* NotificationsView.swift */,
  196 + 1778DA3F2851042F006619C4 /* EditInfoView.swift */,
  197 + );
  198 + path = View;
  199 + sourceTree = "<group>";
  200 + };
  201 + 1738F7D62850F5C3003F1806 /* ViewController */ = {
  202 + isa = PBXGroup;
  203 + children = (
  204 + 1738F7D72850F5D5003F1806 /* SettingsViewController.swift */,
  205 + );
  206 + path = ViewController;
  207 + sourceTree = "<group>";
  208 + };
  209 + 17ABFE54284FD1C8003B6959 /* HomeScreen */ = {
  210 + isa = PBXGroup;
  211 + children = (
  212 + 17ABFE55284FD1ED003B6959 /* ViewController */,
  213 + 17ABFE56284FD1F5003B6959 /* VIew */,
  214 + );
  215 + path = HomeScreen;
  216 + sourceTree = "<group>";
  217 + };
  218 + 17ABFE55284FD1ED003B6959 /* ViewController */ = {
  219 + isa = PBXGroup;
  220 + children = (
  221 + 17ABFE57284FD20C003B6959 /* HomeViewController.swift */,
  222 + );
  223 + path = ViewController;
  224 + sourceTree = "<group>";
  225 + };
  226 + 17ABFE56284FD1F5003B6959 /* VIew */ = {
  227 + isa = PBXGroup;
  228 + children = (
  229 + 17ABFE59284FD293003B6959 /* HomeView.swift */,
  230 + 178A61D02850DDAA001509A4 /* HomeTableViewCell.swift */,
  231 + );
  232 + path = VIew;
  233 + sourceTree = "<group>";
  234 + };
  235 + 17CF9ED42844ED8F000D8077 = {
  236 + isa = PBXGroup;
  237 + children = (
  238 + 17CF9EDF2844ED8F000D8077 /* InterQR-Internship */,
  239 + 17287C5E2848AC8800AA7113 /* Fonts + Extension */,
  240 + 17FD60D82848A2CE00957A3A /* Resources */,
  241 + 17CF9EDE2844ED8F000D8077 /* Products */,
  242 + 86273571ED5441E00D80DE37 /* Pods */,
  243 + 35BE87303DBEEF43C5C2D917 /* Frameworks */,
  244 + );
  245 + sourceTree = "<group>";
  246 + };
  247 + 17CF9EDE2844ED8F000D8077 /* Products */ = {
  248 + isa = PBXGroup;
  249 + children = (
  250 + 17CF9EDD2844ED8F000D8077 /* InterQR-Internship.app */,
  251 + );
  252 + name = Products;
  253 + sourceTree = "<group>";
  254 + };
  255 + 17CF9EDF2844ED8F000D8077 /* InterQR-Internship */ = {
  256 + isa = PBXGroup;
  257 + children = (
  258 + 00E581B7284F71A700E779FB /* Common */,
  259 + 00E581B0284F666000E779FB /* Modules */,
  260 + 17CF9EE02844ED8F000D8077 /* AppDelegate.swift */,
  261 + 17CF9EE22844ED8F000D8077 /* SceneDelegate.swift */,
  262 + 17CF9EE92844ED90000D8077 /* Assets.xcassets */,
  263 + 17CF9EEB2844ED90000D8077 /* LaunchScreen.storyboard */,
  264 + 17CF9EEE2844ED90000D8077 /* Info.plist */,
  265 + 1729E21C28465162006C7C29 /* PhoneService.swift */,
  266 + 1729E22028465DA9006C7C29 /* PhonePickerModel.swift */,
  267 + );
  268 + path = "InterQR-Internship";
  269 + sourceTree = "<group>";
  270 + };
  271 + 17FD60D82848A2CE00957A3A /* Resources */ = {
  272 + isa = PBXGroup;
  273 + children = (
  274 + 17FD60D92848A56900957A3A /* Fonts */,
  275 + );
  276 + path = Resources;
  277 + sourceTree = "<group>";
  278 + };
  279 + 17FD60D92848A56900957A3A /* Fonts */ = {
  280 + isa = PBXGroup;
  281 + children = (
  282 + 17287C642848C69600AA7113 /* Sk-Modernist-Bold.otf */,
  283 + 17287C682848C69600AA7113 /* Sk-Modernist-Mono.otf */,
  284 + 17287C652848C69600AA7113 /* Sk-Modernist-Regular.otf */,
  285 + );
  286 + path = Fonts;
  287 + sourceTree = "<group>";
  288 + };
  289 + 35BE87303DBEEF43C5C2D917 /* Frameworks */ = {
  290 + isa = PBXGroup;
  291 + children = (
  292 + C7C589B3DBEEEE67D9D0AD2A /* Pods_InterQR_Internship.framework */,
  293 + );
  294 + name = Frameworks;
  295 + sourceTree = "<group>";
  296 + };
  297 + 86273571ED5441E00D80DE37 /* Pods */ = {
  298 + isa = PBXGroup;
  299 + children = (
  300 + 5DBC5918C180544DDA6F77E2 /* Pods-InterQR-Internship.debug.xcconfig */,
  301 + 5BDBB5A6BD07C19C7C41277E /* Pods-InterQR-Internship.release.xcconfig */,
  302 + );
  303 + path = Pods;
  304 + sourceTree = "<group>";
  305 + };
  306 +/* End PBXGroup section */
  307 +
  308 +/* Begin PBXNativeTarget section */
  309 + 17CF9EDC2844ED8F000D8077 /* InterQR-Internship */ = {
  310 + isa = PBXNativeTarget;
  311 + buildConfigurationList = 17CF9EF12844ED90000D8077 /* Build configuration list for PBXNativeTarget "InterQR-Internship" */;
  312 + buildPhases = (
  313 + 02D597CE20BC23D36D22D265 /* [CP] Check Pods Manifest.lock */,
  314 + 17CF9ED92844ED8F000D8077 /* Sources */,
  315 + 17CF9EDA2844ED8F000D8077 /* Frameworks */,
  316 + 17CF9EDB2844ED8F000D8077 /* Resources */,
  317 + 156CBF425600953154887DB7 /* [CP] Embed Pods Frameworks */,
  318 + );
  319 + buildRules = (
  320 + );
  321 + dependencies = (
  322 + );
  323 + name = "InterQR-Internship";
  324 + productName = "InterQR-Internship";
  325 + productReference = 17CF9EDD2844ED8F000D8077 /* InterQR-Internship.app */;
  326 + productType = "com.apple.product-type.application";
  327 + };
  328 +/* End PBXNativeTarget section */
  329 +
  330 +/* Begin PBXProject section */
  331 + 17CF9ED52844ED8F000D8077 /* Project object */ = {
  332 + isa = PBXProject;
  333 + attributes = {
  334 + BuildIndependentTargetsInParallel = 1;
  335 + LastSwiftUpdateCheck = 1300;
  336 + LastUpgradeCheck = 1300;
  337 + TargetAttributes = {
  338 + 17CF9EDC2844ED8F000D8077 = {
  339 + CreatedOnToolsVersion = 13.0;
  340 + };
  341 + };
  342 + };
  343 + buildConfigurationList = 17CF9ED82844ED8F000D8077 /* Build configuration list for PBXProject "InterQR-Internship" */;
  344 + compatibilityVersion = "Xcode 13.0";
  345 + developmentRegion = en;
  346 + hasScannedForEncodings = 0;
  347 + knownRegions = (
  348 + en,
  349 + Base,
  350 + );
  351 + mainGroup = 17CF9ED42844ED8F000D8077;
  352 + productRefGroup = 17CF9EDE2844ED8F000D8077 /* Products */;
  353 + projectDirPath = "";
  354 + projectRoot = "";
  355 + targets = (
  356 + 17CF9EDC2844ED8F000D8077 /* InterQR-Internship */,
  357 + );
  358 + };
  359 +/* End PBXProject section */
  360 +
  361 +/* Begin PBXResourcesBuildPhase section */
  362 + 17CF9EDB2844ED8F000D8077 /* Resources */ = {
  363 + isa = PBXResourcesBuildPhase;
  364 + buildActionMask = 2147483647;
  365 + files = (
  366 + 17CF9EED2844ED90000D8077 /* LaunchScreen.storyboard in Resources */,
  367 + 17287C6D2848C69600AA7113 /* Sk-Modernist-Mono.otf in Resources */,
  368 + 17287C692848C69600AA7113 /* Sk-Modernist-Bold.otf in Resources */,
  369 + 17287C6A2848C69600AA7113 /* Sk-Modernist-Regular.otf in Resources */,
  370 + 17CF9EEA2844ED90000D8077 /* Assets.xcassets in Resources */,
  371 + );
  372 + runOnlyForDeploymentPostprocessing = 0;
  373 + };
  374 +/* End PBXResourcesBuildPhase section */
  375 +
  376 +/* Begin PBXShellScriptBuildPhase section */
  377 + 02D597CE20BC23D36D22D265 /* [CP] Check Pods Manifest.lock */ = {
  378 + isa = PBXShellScriptBuildPhase;
  379 + buildActionMask = 2147483647;
  380 + files = (
  381 + );
  382 + inputFileListPaths = (
  383 + );
  384 + inputPaths = (
  385 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  386 + "${PODS_ROOT}/Manifest.lock",
  387 + );
  388 + name = "[CP] Check Pods Manifest.lock";
  389 + outputFileListPaths = (
  390 + );
  391 + outputPaths = (
  392 + "$(DERIVED_FILE_DIR)/Pods-InterQR-Internship-checkManifestLockResult.txt",
  393 + );
  394 + runOnlyForDeploymentPostprocessing = 0;
  395 + shellPath = /bin/sh;
  396 + 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";
  397 + showEnvVarsInLog = 0;
  398 + };
  399 + 156CBF425600953154887DB7 /* [CP] Embed Pods Frameworks */ = {
  400 + isa = PBXShellScriptBuildPhase;
  401 + buildActionMask = 2147483647;
  402 + files = (
  403 + );
  404 + inputFileListPaths = (
  405 + "${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks-${CONFIGURATION}-input-files.xcfilelist",
  406 + );
  407 + name = "[CP] Embed Pods Frameworks";
  408 + outputFileListPaths = (
  409 + "${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks-${CONFIGURATION}-output-files.xcfilelist",
  410 + );
  411 + runOnlyForDeploymentPostprocessing = 0;
  412 + shellPath = /bin/sh;
  413 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks.sh\"\n";
  414 + showEnvVarsInLog = 0;
  415 + };
  416 +/* End PBXShellScriptBuildPhase section */
  417 +
  418 +/* Begin PBXSourcesBuildPhase section */
  419 + 17CF9ED92844ED8F000D8077 /* Sources */ = {
  420 + isa = PBXSourcesBuildPhase;
  421 + buildActionMask = 2147483647;
  422 + files = (
  423 + 1729E22128465DA9006C7C29 /* PhonePickerModel.swift in Sources */,
  424 + 17058D52284A4F150078DD82 /* CodeVerificationViewController.swift in Sources */,
  425 + 1778DA402851042F006619C4 /* EditInfoView.swift in Sources */,
  426 + 1732AC71284769B50042C9F7 /* TextFieldWithPadding.swift in Sources */,
  427 + 17ABFE5A284FD293003B6959 /* HomeView.swift in Sources */,
  428 + 1732AC7328477BB40042C9F7 /* PickerViewCell.swift in Sources */,
  429 + 1729E21F28465595006C7C29 /* PhoneNumberView.swift in Sources */,
  430 + 17ABFE58284FD20C003B6959 /* HomeViewController.swift in Sources */,
  431 + 17CF9EE52844ED8F000D8077 /* VerificationViewController.swift in Sources */,
  432 + 17058D54284A4F670078DD82 /* CodeVerificationView.swift in Sources */,
  433 + 17CF9EE12844ED8F000D8077 /* AppDelegate.swift in Sources */,
  434 + 1729E21D28465163006C7C29 /* PhoneService.swift in Sources */,
  435 + 1778DA3E2850FF89006619C4 /* NotificationsView.swift in Sources */,
  436 + 17CF9EE32844ED8F000D8077 /* SceneDelegate.swift in Sources */,
  437 + 1738F7D82850F5D5003F1806 /* SettingsViewController.swift in Sources */,
  438 + 1738F7DA2850F5F1003F1806 /* SettingsView.swift in Sources */,
  439 + 00E581BB284F71CD00E779FB /* Checkbox.swift in Sources */,
  440 + 17287C602848AD8D00AA7113 /* Fonts + Extension.swift in Sources */,
  441 + 1738F7DC2850F980003F1806 /* ProfileView.swift in Sources */,
  442 + 178A61D12850DDAA001509A4 /* HomeTableViewCell.swift in Sources */,
  443 + 17CF9EF72844EF8B000D8077 /* VerificationView.swift in Sources */,
  444 + );
  445 + runOnlyForDeploymentPostprocessing = 0;
  446 + };
  447 +/* End PBXSourcesBuildPhase section */
  448 +
  449 +/* Begin PBXVariantGroup section */
  450 + 17CF9EEB2844ED90000D8077 /* LaunchScreen.storyboard */ = {
  451 + isa = PBXVariantGroup;
  452 + children = (
  453 + 17CF9EEC2844ED90000D8077 /* Base */,
  454 + );
  455 + name = LaunchScreen.storyboard;
  456 + sourceTree = "<group>";
  457 + };
  458 +/* End PBXVariantGroup section */
  459 +
  460 +/* Begin XCBuildConfiguration section */
  461 + 17CF9EEF2844ED90000D8077 /* Debug */ = {
  462 + isa = XCBuildConfiguration;
  463 + buildSettings = {
  464 + ALWAYS_SEARCH_USER_PATHS = NO;
  465 + CLANG_ANALYZER_NONNULL = YES;
  466 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  467 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
  468 + CLANG_CXX_LIBRARY = "libc++";
  469 + CLANG_ENABLE_MODULES = YES;
  470 + CLANG_ENABLE_OBJC_ARC = YES;
  471 + CLANG_ENABLE_OBJC_WEAK = YES;
  472 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  473 + CLANG_WARN_BOOL_CONVERSION = YES;
  474 + CLANG_WARN_COMMA = YES;
  475 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  476 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  477 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  478 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  479 + CLANG_WARN_EMPTY_BODY = YES;
  480 + CLANG_WARN_ENUM_CONVERSION = YES;
  481 + CLANG_WARN_INFINITE_RECURSION = YES;
  482 + CLANG_WARN_INT_CONVERSION = YES;
  483 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  484 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  485 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  486 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  487 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
  488 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  489 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  490 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  491 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
  492 + CLANG_WARN_UNREACHABLE_CODE = YES;
  493 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  494 + COPY_PHASE_STRIP = NO;
  495 + DEBUG_INFORMATION_FORMAT = dwarf;
  496 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  497 + ENABLE_TESTABILITY = YES;
  498 + GCC_C_LANGUAGE_STANDARD = gnu11;
  499 + GCC_DYNAMIC_NO_PIC = NO;
  500 + GCC_NO_COMMON_BLOCKS = YES;
  501 + GCC_OPTIMIZATION_LEVEL = 0;
  502 + GCC_PREPROCESSOR_DEFINITIONS = (
  503 + "DEBUG=1",
  504 + "$(inherited)",
  505 + );
  506 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  507 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  508 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  509 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  510 + GCC_WARN_UNUSED_FUNCTION = YES;
  511 + GCC_WARN_UNUSED_VARIABLE = YES;
  512 + IPHONEOS_DEPLOYMENT_TARGET = 13.0;
  513 + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
  514 + MTL_FAST_MATH = YES;
  515 + ONLY_ACTIVE_ARCH = YES;
  516 + SDKROOT = iphoneos;
  517 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
  518 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  519 + };
  520 + name = Debug;
  521 + };
  522 + 17CF9EF02844ED90000D8077 /* Release */ = {
  523 + isa = XCBuildConfiguration;
  524 + buildSettings = {
  525 + ALWAYS_SEARCH_USER_PATHS = NO;
  526 + CLANG_ANALYZER_NONNULL = YES;
  527 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  528 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
  529 + CLANG_CXX_LIBRARY = "libc++";
  530 + CLANG_ENABLE_MODULES = YES;
  531 + CLANG_ENABLE_OBJC_ARC = YES;
  532 + CLANG_ENABLE_OBJC_WEAK = YES;
  533 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  534 + CLANG_WARN_BOOL_CONVERSION = YES;
  535 + CLANG_WARN_COMMA = YES;
  536 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  537 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  538 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  539 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  540 + CLANG_WARN_EMPTY_BODY = YES;
  541 + CLANG_WARN_ENUM_CONVERSION = YES;
  542 + CLANG_WARN_INFINITE_RECURSION = YES;
  543 + CLANG_WARN_INT_CONVERSION = YES;
  544 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  545 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  546 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  547 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  548 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
  549 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  550 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  551 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  552 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
  553 + CLANG_WARN_UNREACHABLE_CODE = YES;
  554 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  555 + COPY_PHASE_STRIP = NO;
  556 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  557 + ENABLE_NS_ASSERTIONS = NO;
  558 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  559 + GCC_C_LANGUAGE_STANDARD = gnu11;
  560 + GCC_NO_COMMON_BLOCKS = YES;
  561 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  562 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  563 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  564 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  565 + GCC_WARN_UNUSED_FUNCTION = YES;
  566 + GCC_WARN_UNUSED_VARIABLE = YES;
  567 + IPHONEOS_DEPLOYMENT_TARGET = 13.0;
  568 + MTL_ENABLE_DEBUG_INFO = NO;
  569 + MTL_FAST_MATH = YES;
  570 + SDKROOT = iphoneos;
  571 + SWIFT_COMPILATION_MODE = wholemodule;
  572 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  573 + VALIDATE_PRODUCT = YES;
  574 + };
  575 + name = Release;
  576 + };
  577 + 17CF9EF22844ED90000D8077 /* Debug */ = {
  578 + isa = XCBuildConfiguration;
  579 + baseConfigurationReference = 5DBC5918C180544DDA6F77E2 /* Pods-InterQR-Internship.debug.xcconfig */;
  580 + buildSettings = {
  581 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  582 + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
  583 + CODE_SIGN_IDENTITY = "Apple Development";
  584 + CODE_SIGN_STYLE = Automatic;
  585 + CURRENT_PROJECT_VERSION = 1;
  586 + DEVELOPMENT_TEAM = 4X46JG9W6V;
  587 + GENERATE_INFOPLIST_FILE = YES;
  588 + INFOPLIST_FILE = "InterQR-Internship/Info.plist";
  589 + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
  590 + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
  591 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
  592 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
  593 + LD_RUNPATH_SEARCH_PATHS = (
  594 + "$(inherited)",
  595 + "@executable_path/Frameworks",
  596 + );
  597 + MARKETING_VERSION = 1.0;
  598 + PRODUCT_BUNDLE_IDENTIFIER = "com.TDY13.InterQR-Internship";
  599 + PRODUCT_NAME = "$(TARGET_NAME)";
  600 + PROVISIONING_PROFILE_SPECIFIER = "";
  601 + SWIFT_EMIT_LOC_STRINGS = YES;
  602 + SWIFT_VERSION = 5.0;
  603 + TARGETED_DEVICE_FAMILY = 1;
  604 + };
  605 + name = Debug;
  606 + };
  607 + 17CF9EF32844ED90000D8077 /* Release */ = {
  608 + isa = XCBuildConfiguration;
  609 + baseConfigurationReference = 5BDBB5A6BD07C19C7C41277E /* Pods-InterQR-Internship.release.xcconfig */;
  610 + buildSettings = {
  611 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  612 + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
  613 + CODE_SIGN_STYLE = Automatic;
  614 + CURRENT_PROJECT_VERSION = 1;
  615 + DEVELOPMENT_TEAM = 4X46JG9W6V;
  616 + GENERATE_INFOPLIST_FILE = YES;
  617 + INFOPLIST_FILE = "InterQR-Internship/Info.plist";
  618 + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
  619 + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
  620 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
  621 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
  622 + LD_RUNPATH_SEARCH_PATHS = (
  623 + "$(inherited)",
  624 + "@executable_path/Frameworks",
  625 + );
  626 + MARKETING_VERSION = 1.0;
  627 + PRODUCT_BUNDLE_IDENTIFIER = "com.TDY13.InterQR-Internship";
  628 + PRODUCT_NAME = "$(TARGET_NAME)";
  629 + SWIFT_EMIT_LOC_STRINGS = YES;
  630 + SWIFT_VERSION = 5.0;
  631 + TARGETED_DEVICE_FAMILY = 1;
  632 + };
  633 + name = Release;
  634 + };
  635 +/* End XCBuildConfiguration section */
  636 +
  637 +/* Begin XCConfigurationList section */
  638 + 17CF9ED82844ED8F000D8077 /* Build configuration list for PBXProject "InterQR-Internship" */ = {
  639 + isa = XCConfigurationList;
  640 + buildConfigurations = (
  641 + 17CF9EEF2844ED90000D8077 /* Debug */,
  642 + 17CF9EF02844ED90000D8077 /* Release */,
  643 + );
  644 + defaultConfigurationIsVisible = 0;
  645 + defaultConfigurationName = Release;
  646 + };
  647 + 17CF9EF12844ED90000D8077 /* Build configuration list for PBXNativeTarget "InterQR-Internship" */ = {
  648 + isa = XCConfigurationList;
  649 + buildConfigurations = (
  650 + 17CF9EF22844ED90000D8077 /* Debug */,
  651 + 17CF9EF32844ED90000D8077 /* Release */,
  652 + );
  653 + defaultConfigurationIsVisible = 0;
  654 + defaultConfigurationName = Release;
  655 + };
  656 +/* End XCConfigurationList section */
  657 + };
  658 + rootObject = 17CF9ED52844ED8F000D8077 /* Project object */;
  659 +}
  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 +<!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 = "369C53C4-55C8-4418-98C6-B9B8FCA67812"
  4 + type = "0"
  5 + version = "2.0">
  6 + <Breakpoints>
  7 + <BreakpointProxy
  8 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  9 + <BreakpointContent
  10 + uuid = "24C8FE5B-99CC-430C-9B8A-90948FD44A96"
  11 + shouldBeEnabled = "No"
  12 + ignoreCount = "0"
  13 + continueAfterRunningActions = "No"
  14 + filePath = "InterQR-Internship/Modules/VerificationSceen/ViewController/VerificationViewController.swift"
  15 + startingColumnNumber = "9223372036854775807"
  16 + endingColumnNumber = "9223372036854775807"
  17 + startingLineNumber = "117"
  18 + endingLineNumber = "117"
  19 + landmarkName = "keyboardWillHide(notification:)"
  20 + landmarkType = "7">
  21 + </BreakpointContent>
  22 + </BreakpointProxy>
  23 + </Breakpoints>
  24 +</Bucket>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Bucket
  3 + uuid = "CB908779-2558-4E0D-A4CA-2068778D434A"
  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 + "color" : {
  5 + "color-space" : "srgb",
  6 + "components" : {
  7 + "alpha" : "1.000",
  8 + "blue" : "1.000",
  9 + "green" : "1.000",
  10 + "red" : "1.000"
  11 + }
  12 + },
  13 + "idiom" : "universal"
  14 + },
  15 + {
  16 + "appearances" : [
  17 + {
  18 + "appearance" : "luminosity",
  19 + "value" : "dark"
  20 + }
  21 + ],
  22 + "color" : {
  23 + "color-space" : "srgb",
  24 + "components" : {
  25 + "alpha" : "1.000",
  26 + "blue" : "1.000",
  27 + "green" : "1.000",
  28 + "red" : "1.000"
  29 + }
  30 + },
  31 + "idiom" : "universal"
  32 + }
  33 + ],
  34 + "info" : {
  35 + "author" : "xcode",
  36 + "version" : 1
  37 + }
  38 +}
  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" : "Edit.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Edit@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Edit@3x.png",
  15 + "idiom" : "universal",
  16 + "scale" : "3x"
  17 + }
  18 + ],
  19 + "info" : {
  20 + "author" : "xcode",
  21 + "version" : 1
  22 + }
  23 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "filename" : "FlagPointer.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Stroke 1@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Stroke 1@3x.png",
  15 + "idiom" : "universal",
  16 + "scale" : "3x"
  17 + }
  18 + ],
  19 + "info" : {
  20 + "author" : "xcode",
  21 + "version" : 1
  22 + }
  23 +}
  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" : "Gear.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Setting@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Setting@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" : "Gradient.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Rectangle 6@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Rectangle 6@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" : "Home.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Home@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Home@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" : "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" : "LeftBlue.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Group 33668@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Group 33668@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" : "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 + "info" : {
  3 + "author" : "xcode",
  4 + "version" : 1
  5 + }
  6 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "filename" : "NextPointer.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" : "Notification.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Notification@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Notification@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" : "Password.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Password@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Password@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" : "Profile.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Profile@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Profile@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" : "RightBlue.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Group 33606@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Group 33606@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" : "RightYellow.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Group 33607@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Group 33607@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" : "Setting.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Setting@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Setting@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 +{
  2 + "images" : [
  3 + {
  4 + "filename" : "Volume.png",
  5 + "idiom" : "universal",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "filename" : "Volume Up@2x.png",
  10 + "idiom" : "universal",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "filename" : "Volume Up@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 +// Checkbox.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 07.06.2022.
  6 +//
  7 +
  8 +import Foundation
  9 +import UIKit
  10 +class Checkbox: UIButton {
  11 +
  12 + private let checkboxImageView: UIImageView = {
  13 + let obj = UIImageView()
  14 + return obj
  15 + }()
  16 +
  17 + private let checkBoxLabel: UILabel = {
  18 + let obj = UILabel()
  19 + obj.font = .skModernist(type: .regular, ofSize: 15)
  20 + return obj
  21 + }()
  22 +
  23 + override var isSelected: Bool {
  24 + didSet {
  25 + checkBoxLabel.textColor = isSelected ?
  26 + UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1) :
  27 + UIColor(red: 185/255, green: 185/255, blue: 185/255, alpha: 1)
  28 + checkboxImageView.image = isSelected ?
  29 + UIImage(named: "OnIndicator") :
  30 + UIImage(named: "OffIndicator")
  31 + }
  32 + }
  33 +
  34 + var checkboxTitle: String = "" {
  35 + didSet {
  36 + checkBoxLabel.text = checkboxTitle
  37 + }
  38 + }
  39 +
  40 + override init(frame: CGRect) {
  41 + super.init(frame: frame)
  42 + setup()
  43 + }
  44 +
  45 + required init?(coder: NSCoder) {
  46 + super.init(coder: coder)
  47 + setup()
  48 + }
  49 +
  50 + private func setup() {
  51 + isSelected = false
  52 +
  53 + addSubview(checkboxImageView)
  54 + addSubview(checkBoxLabel)
  55 +
  56 + checkboxImageView.snp.makeConstraints { make in
  57 + make.leading.equalToSuperview()
  58 + make.top.bottom.equalToSuperview()
  59 + }
  60 +
  61 + checkBoxLabel.snp.makeConstraints { make in
  62 + make.top.bottom.equalToSuperview()
  63 + make.trailing.equalToSuperview()
  64 + make.leading.equalTo(checkboxImageView.snp.trailing).offset(5)
  65 + }
  66 + }
  67 +}
  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 +// HomeTableViewCell.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 08.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +
  10 +class HomeTableViewCell: UITableViewCell {
  11 +
  12 + static let id = "HomeTableViewCell-ID"
  13 +
  14 + var containerView: UIView = {
  15 + var obj = UIView()
  16 + obj.layer.cornerRadius = 15
  17 + obj.layer.borderWidth = 1
  18 + obj.layer.borderColor = UIColor(red: 0.89, green: 0.918, blue: 0.918, alpha: 1).cgColor
  19 + return obj
  20 + }()
  21 + var leftStatusImage: UIImageView = {
  22 + var obj = UIImageView()
  23 + obj.image = UIImage(named: "LeftBlue")
  24 + obj.contentMode = .scaleAspectFill
  25 + return obj
  26 + }()
  27 + var doorNameLabel: UILabel = {
  28 + var obj = UILabel()
  29 + obj.font = .skModernist(type: .bold, ofSize: 16)
  30 + obj.textColor = UIColor(red: 0.196, green: 0.216, blue: 0.333, alpha: 1)
  31 + obj.text = "Front Door"
  32 + return obj
  33 + }()
  34 + var doorLocationLabel: UILabel = {
  35 + var obj = UILabel()
  36 + obj.textColor = UIColor(red: 0.725, green: 0.725, blue: 0.725, alpha: 1)
  37 + obj.font = .skModernist(type: .regular, ofSize: 14)
  38 + obj.text = "Home"
  39 + return obj
  40 + }()
  41 + var lockStatusLabel: UILabel = {
  42 + var obj = UILabel()
  43 + obj.textColor = UIColor(red: 0, green: 0.267, blue: 0.545, alpha: 1)
  44 + obj.font = .skModernist(type: .bold, ofSize: 15)
  45 + obj.text = "Locked"
  46 + return obj
  47 + }()
  48 + var rightStatusImage: UIImageView = {
  49 + var obj = UIImageView()
  50 + obj.image = UIImage(named: "RightBlue")
  51 + return obj
  52 + }()
  53 + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  54 + super.init(style: style, reuseIdentifier: reuseIdentifier)
  55 + layout()
  56 + }
  57 +
  58 + required init?(coder: NSCoder) {
  59 + fatalError("init(coder:) has not been implemented")
  60 + }
  61 +
  62 + func layout() {
  63 + addSubview(containerView)
  64 + containerView.addSubview(leftStatusImage)
  65 + containerView.addSubview(doorNameLabel)
  66 + containerView.addSubview(doorLocationLabel)
  67 + containerView.addSubview(lockStatusLabel)
  68 + containerView.addSubview(rightStatusImage)
  69 +
  70 + containerView.snp.makeConstraints {
  71 + $0.leading.trailing.equalToSuperview()
  72 + $0.bottom.equalToSuperview().offset(-8)
  73 + $0.top.equalToSuperview().offset(8)
  74 + }
  75 + leftStatusImage.snp.makeConstraints {
  76 + $0.top.equalTo(containerView.snp.top).offset(19)
  77 + $0.leading.equalTo(containerView.snp.leading).offset(23)
  78 + $0.height.width.equalTo(41)
  79 + }
  80 + doorNameLabel.snp.makeConstraints {
  81 + $0.top.equalTo(snp.top).offset(22)
  82 + $0.leading.equalTo(leftStatusImage.snp.trailing).offset(14)
  83 + }
  84 + doorLocationLabel.snp.makeConstraints {
  85 + $0.top.equalTo(doorNameLabel.snp.bottom)
  86 + $0.leading.equalTo(doorNameLabel.snp.leading)
  87 + }
  88 + lockStatusLabel.snp.makeConstraints {
  89 + $0.bottom.equalTo(snp.bottom).offset(-15)
  90 + $0.centerX.equalTo(snp.centerX)
  91 + }
  92 + rightStatusImage.snp.makeConstraints {
  93 + $0.trailing.equalTo(snp.trailing).offset(-16)
  94 + $0.top.equalTo(snp.top).offset(19)
  95 + }
  96 + }
  97 +// func configureWithItem(_ item: DoorsModel) {
  98 +
  99 +// doorTypeLabel.text = item.purpose
  100 +// doorLocationLabel.text = item.type
  101 +// configureStatus(status: item.lockStatus)
  102 +// rightStatusImageView.isHidden = false
  103 +// }
  104 +}
  105 +
  1 +//
  2 +// HomeView.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 07.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +
  10 +class HomeView: UIView {
  11 +
  12 + var logoView: UIImageView = {
  13 + var obj = UIImageView()
  14 + obj.image = UIImage(named: "InterQR")
  15 + return obj
  16 + }()
  17 + var settingsButton: UIButton = {
  18 + var obj = UIButton()
  19 + obj.setImage(UIImage(named: "Setting"), for: .normal)
  20 + obj.layer.borderWidth = 1
  21 + obj.layer.borderColor = UIColor(red: 0.882, green: 0.91, blue: 0.91, alpha: 1).cgColor
  22 + obj.layer.cornerRadius = 13
  23 + return obj
  24 + }()
  25 + var homeImage: UIImageView = {
  26 + var obj = UIImageView()
  27 + obj.image = UIImage(named: "Home")
  28 + return obj
  29 + }()
  30 + var welcomeLabel: UILabel = {
  31 + var obj = UILabel()
  32 + obj.font = .skModernist(type: .bold, ofSize: 35)
  33 + obj.text = "Welcome"
  34 + return obj
  35 + }()
  36 + var doorsLabel: UILabel = {
  37 + var obj = UILabel()
  38 + obj.font = .skModernist(type: .bold, ofSize: 20)
  39 + obj.text = "My doors"
  40 + return obj
  41 + }()
  42 + var tableView: UITableView = {
  43 + var obj = UITableView()
  44 + obj.separatorStyle = .none
  45 + obj.allowsSelection = false
  46 + obj.showsVerticalScrollIndicator = false
  47 + return obj
  48 + }()
  49 + var gradientView: UIImageView = {
  50 + var obj = UIImageView()
  51 + obj.image = UIImage(named: "Gradient")
  52 + return obj
  53 + }()
  54 + var passwordButton: UIButton = {
  55 + var obj = UIButton()
  56 + obj.setImage(UIImage(named: "Password"), for: .normal)
  57 + return obj
  58 + }()
  59 +
  60 + override init(frame: CGRect) {
  61 + super.init(frame: frame)
  62 + backgroundColor = .white
  63 + layout()
  64 + }
  65 +
  66 + required init?(coder: NSCoder) {
  67 + fatalError("init(coder:) has not been implemented")
  68 + }
  69 +
  70 + func layout() {
  71 + addSubview(logoView)
  72 + addSubview(settingsButton)
  73 + addSubview(welcomeLabel)
  74 + addSubview(homeImage)
  75 + addSubview(doorsLabel)
  76 + addSubview(tableView)
  77 + addSubview(gradientView)
  78 + gradientView.addSubview(passwordButton)
  79 +
  80 + logoView.snp.makeConstraints {
  81 + $0.top.equalTo(77)
  82 + $0.leading.equalTo(24)
  83 + }
  84 + settingsButton.snp.makeConstraints {
  85 + $0.top.equalTo(snp.top).offset(63)
  86 + $0.trailing.equalTo(snp.trailing).offset(-27)
  87 + $0.height.width.equalTo(45)
  88 + }
  89 + welcomeLabel.snp.makeConstraints {
  90 + $0.top.equalTo(logoView.snp.bottom).offset(63)
  91 + $0.leading.equalTo(logoView.snp.leading)
  92 + }
  93 + homeImage.snp.makeConstraints {
  94 + $0.top.equalTo(settingsButton.snp.bottom)
  95 + $0.trailing.equalTo(snp.trailing).offset(5)
  96 + }
  97 + doorsLabel.snp.makeConstraints {
  98 + $0.top.equalTo(homeImage.snp.bottom).offset(31)
  99 + $0.leading.equalTo(logoView.snp.leading)
  100 + }
  101 + tableView.snp.makeConstraints {
  102 + $0.top.equalTo(doorsLabel.snp.bottom).offset(28)
  103 + $0.leading.equalTo(snp.leading).offset(20)
  104 + $0.trailing.equalTo(snp.trailing).offset(-27)
  105 + $0.bottom.equalToSuperview()
  106 + }
  107 + gradientView.snp.makeConstraints {
  108 + $0.leading.trailing.bottom.equalToSuperview()
  109 + $0.height.equalTo(75)
  110 + }
  111 + passwordButton.snp.makeConstraints {
  112 + $0.trailing.equalTo(gradientView.snp.trailing).offset(-48)
  113 + $0.bottom.equalTo(gradientView.snp.bottom).offset(-18)
  114 + $0.height.width.equalTo(18.5)
  115 + }
  116 + }
  117 +}
  1 +//
  2 +// HomeViewController.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 07.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +
  10 +class HomeViewController: UIViewController {
  11 +
  12 + var mainView = HomeView()
  13 +
  14 + override func loadView() {
  15 + view = mainView
  16 + }
  17 +
  18 + override func viewDidLoad() {
  19 + initViewController()
  20 + }
  21 +
  22 + private func initViewController() {
  23 + mainView.settingsButton.addTarget(self, action: #selector(didShowSettingsVC), for: .touchUpInside)
  24 + mainView.tableView.delegate = self
  25 + mainView.tableView.dataSource = self
  26 + mainView.tableView.register(HomeTableViewCell.self, forCellReuseIdentifier: HomeTableViewCell.id)
  27 + }
  28 +}
  29 +
  30 +extension HomeViewController {
  31 +
  32 + @objc func didShowSettingsVC() {
  33 + print("❌")
  34 + let vc = SettingsViewController()
  35 + navigationController?.pushViewController(vc, animated: true)
  36 + }
  37 +}
  38 +
  39 +extension HomeViewController: UITableViewDelegate, UITableViewDataSource {
  40 +
  41 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  42 + 5
  43 + }
  44 +
  45 + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  46 + guard let cell = tableView.dequeueReusableCell(withIdentifier: HomeTableViewCell.id, for: indexPath) as? HomeTableViewCell else { return UITableViewCell() }
  47 +// cell.configureWithItem(doors[indexPath.row])
  48 + return cell
  49 + }
  50 +
  51 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  52 + 120
  53 + }
  54 +
  55 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  56 +
  57 + }
  58 +
  59 +
  60 +}
  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 +
  43 + var textField: UITextField = {
  44 + let obj = UITextField()
  45 + obj.returnKeyType = .done
  46 + obj.keyboardType = .numberPad
  47 + obj.becomeFirstResponder()
  48 + obj.isHidden = true
  49 + return obj
  50 + }()
  51 +
  52 + var firstDigitLabel: UILabel = {
  53 + let obj = UILabel()
  54 + obj.font = .skModernist(type: .bold, ofSize: 16)
  55 + obj.textColor = .black
  56 + obj.textAlignment = .center
  57 + obj.backgroundColor = UIColor(red: 0.954, green: 0.954, blue: 0.954, alpha: 1)
  58 + obj.layer.cornerRadius = 15
  59 + obj.clipsToBounds = true
  60 + return obj
  61 + }()
  62 +
  63 + var secondDigitLabel: UILabel = {
  64 + let obj = UILabel()
  65 + obj.font = .skModernist(type: .bold, ofSize: 16)
  66 + obj.textColor = .black
  67 + obj.textAlignment = .center
  68 + obj.backgroundColor = UIColor(red: 0.954, green: 0.954, blue: 0.954, alpha: 1)
  69 + obj.layer.cornerRadius = 15
  70 + obj.clipsToBounds = true
  71 + return obj
  72 + }()
  73 +
  74 + var thirdDigitLabel: UILabel = {
  75 + let obj = UILabel()
  76 + obj.font = .skModernist(type: .bold, ofSize: 16)
  77 + obj.textColor = .black
  78 + obj.textAlignment = .center
  79 + obj.backgroundColor = UIColor(red: 0.954, green: 0.954, blue: 0.954, alpha: 1)
  80 + obj.layer.cornerRadius = 15
  81 + obj.clipsToBounds = true
  82 + return obj
  83 + }()
  84 +
  85 + var fourthDigitLabel: UILabel = {
  86 + let obj = UILabel()
  87 + obj.font = .skModernist(type: .bold, ofSize: 16)
  88 + obj.textColor = .black
  89 + obj.textAlignment = .center
  90 + obj.backgroundColor = UIColor(red: 0.954, green: 0.954, blue: 0.954, alpha: 1)
  91 + obj.layer.cornerRadius = 15
  92 + obj.clipsToBounds = true
  93 + return obj
  94 + }()
  95 +
  96 + var errorAlertLabel: UILabel = {
  97 + var obj = UILabel()
  98 + obj.text = "Please, enter valid verification code"
  99 + obj.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 14)
  100 + obj.textColor = UIColor(red: 255/255, green: 0/255, blue: 46/255, alpha: 1)
  101 + obj.isHidden = true
  102 + return obj
  103 + }()
  104 + var verifyButton: UIButton = {
  105 + var obj = UIButton()
  106 + obj.setImage(UIImage(named: "RectangleWithShadow"), for: .normal)
  107 + return obj
  108 + }()
  109 + var verifyLabel: UILabel = {
  110 + var obj = UILabel()
  111 + obj.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16)
  112 + obj.textColor = .white
  113 + obj.text = "Verify"
  114 + return obj
  115 + }()
  116 + var tickImage: UIImageView = {
  117 + var obj = UIImageView()
  118 + obj.image = UIImage(named: "Tick")
  119 + return obj
  120 + }()
  121 + override init(frame: CGRect) {
  122 + super.init(frame: frame)
  123 + layout()
  124 + }
  125 +
  126 + required init?(coder: NSCoder) {
  127 + fatalError("init(coder:) has not been implemented")
  128 + }
  129 +
  130 + func layout() {
  131 + addSubview(textField)
  132 +
  133 + backgroundColor = .white
  134 + addSubview(backButton)
  135 + addSubview(logoImage)
  136 + addSubview(shieldImage)
  137 + addSubview(containerView)
  138 + containerView.addSubview(descriptionLabel)
  139 + containerView.addSubview(firstDigitLabel)
  140 + containerView.addSubview(secondDigitLabel)
  141 + containerView.addSubview(thirdDigitLabel)
  142 + containerView.addSubview(fourthDigitLabel)
  143 + containerView.addSubview(errorAlertLabel)
  144 + containerView.addSubview(verifyButton)
  145 + verifyButton.addSubview(verifyLabel)
  146 + verifyButton.addSubview(tickImage)
  147 +
  148 + backButton.snp.makeConstraints {
  149 + $0.top.equalTo(snp.top).offset(66)
  150 + $0.leading.equalTo(snp.leading).offset(22)
  151 + $0.height.width.equalTo(45)
  152 + }
  153 + logoImage.snp.makeConstraints {
  154 + $0.leading.equalTo(backButton.snp.trailing).offset(20)
  155 + $0.centerY.equalTo(backButton)
  156 + }
  157 + shieldImage.snp.makeConstraints {
  158 + $0.top.equalTo(backButton.snp.bottom).offset(25)
  159 + $0.right.equalTo(snp.right).offset(-101)
  160 + }
  161 + containerView.snp.makeConstraints {
  162 + $0.top.equalTo(backButton.snp.bottom).offset(227)
  163 + $0.leading.trailing.equalToSuperview()
  164 + $0.height.equalTo(300)
  165 + }
  166 + descriptionLabel.snp.makeConstraints {
  167 + $0.leading.equalTo(containerView.snp.leading).offset(20)
  168 + $0.top.equalTo(containerView.snp.top)
  169 + }
  170 + firstDigitLabel.snp.makeConstraints {
  171 + $0.leading.equalTo(containerView.snp.leading).offset(25)
  172 + $0.top.equalTo(descriptionLabel.snp.bottom).offset(28)
  173 + $0.height.equalTo(55)
  174 + }
  175 + secondDigitLabel.snp.makeConstraints {
  176 + $0.leading.equalTo(firstDigitLabel.snp.trailing).offset(12)
  177 + $0.centerY.equalTo(firstDigitLabel)
  178 + $0.width.equalTo(firstDigitLabel.snp.width)
  179 + $0.height.equalTo(55)
  180 + }
  181 + thirdDigitLabel.snp.makeConstraints {
  182 + $0.leading.equalTo(secondDigitLabel.snp.trailing).offset(12)
  183 + $0.centerY.equalTo(firstDigitLabel)
  184 + $0.width.equalTo(firstDigitLabel.snp.width)
  185 + $0.height.equalTo(55)
  186 + }
  187 + fourthDigitLabel.snp.makeConstraints {
  188 + $0.leading.equalTo(thirdDigitLabel.snp.trailing).offset(12)
  189 + $0.centerY.equalTo(firstDigitLabel)
  190 + $0.trailing.equalTo(containerView.snp.trailing).offset(-25)
  191 + $0.width.equalTo(firstDigitLabel.snp.width)
  192 + $0.height.equalTo(55)
  193 + }
  194 + errorAlertLabel.snp.makeConstraints {
  195 + $0.top.equalTo(firstDigitLabel.snp.bottom).offset(8)
  196 + $0.leading.equalTo(firstDigitLabel.snp.leading)
  197 + }
  198 + verifyButton.snp.makeConstraints {
  199 + $0.top.equalTo(firstDigitLabel.snp.bottom).offset(67)
  200 + $0.left.right.equalToSuperview()
  201 + }
  202 + verifyLabel.snp.makeConstraints {
  203 + $0.left.equalToSuperview().offset(49)
  204 + $0.top.equalToSuperview().offset(22)
  205 + }
  206 + tickImage.snp.makeConstraints {
  207 + $0.right.equalToSuperview().offset(-47)
  208 + $0.centerY.equalTo(verifyLabel)
  209 + }
  210 + }
  211 +}
  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 + var otp: String = ""
  13 + var isKeyboardAppear = false
  14 + private let mainView = CodeVerificationView()
  15 +
  16 + override func loadView() {
  17 + view = mainView
  18 + }
  19 +
  20 + override func viewDidLoad() {
  21 + initViewController()
  22 + }
  23 +
  24 + private func initViewController() {
  25 + mainView.textField.delegate = self
  26 + mainView.backButton.addTarget(self, action: #selector(didDismissVC), for: .touchUpInside)
  27 + mainView.verifyButton.addTarget(self, action: #selector(didVerifyCode), for: .touchUpInside)
  28 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
  29 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
  30 + }
  31 +
  32 + deinit {
  33 + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
  34 + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
  35 + }
  36 +}
  37 +
  38 +extension CodeVerificationViewController {
  39 +
  40 + @objc func didDismissVC() {
  41 + navigationController?.popViewController(animated: true)
  42 + }
  43 +
  44 + @objc func didVerifyCode() {
  45 + if mainView.fourthDigitLabel.text == nil {
  46 + let alert = UIAlertController(title: "❌❌❌", message: "Some fields are empty, please fill in all", preferredStyle: .alert)
  47 + let _: Void = alert.addAction(UIAlertAction(title: "Close", style: .cancel, handler: nil))
  48 + present(alert, animated: true, completion: nil)
  49 +
  50 + } else {
  51 + mainView.firstDigitLabel.backgroundColor = UIColor(red: 1, green: 0.929, blue: 0.941, alpha: 1)
  52 + mainView.firstDigitLabel.textColor = UIColor(red: 1, green: 0, blue: 0.18, alpha: 1)
  53 +
  54 + mainView.secondDigitLabel.backgroundColor = UIColor(red: 1, green: 0.929, blue: 0.941, alpha: 1)
  55 + mainView.secondDigitLabel.textColor = UIColor(red: 1, green: 0, blue: 0.18, alpha: 1)
  56 +
  57 + mainView.thirdDigitLabel.backgroundColor = UIColor(red: 1, green: 0.929, blue: 0.941, alpha: 1)
  58 + mainView.thirdDigitLabel.textColor = UIColor(red: 1, green: 0, blue: 0.18, alpha: 1)
  59 +
  60 + mainView.fourthDigitLabel.backgroundColor = UIColor(red: 1, green: 0.929, blue: 0.941, alpha: 1)
  61 + mainView.fourthDigitLabel.textColor = UIColor(red: 1, green: 0, blue: 0.18, alpha: 1)
  62 + mainView.errorAlertLabel.isHidden = false
  63 +
  64 + DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
  65 + let vc = HomeViewController()
  66 + vc.navigationItem.hidesBackButton = true
  67 + self.navigationController?.pushViewController(vc, animated: true)
  68 + }
  69 + }
  70 + }
  71 +
  72 +
  73 + @objc func keyboardWillShow(notification: NSNotification) {
  74 + let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double
  75 +
  76 + if !isKeyboardAppear {
  77 +
  78 + UIView.animate(withDuration: duration ?? 0) {
  79 + self.mainView.containerView.snp.updateConstraints { make in
  80 + make.top.equalTo(self.mainView.backButton.snp.bottom).offset(97)
  81 + }
  82 + self.mainView.shieldImage.snp.updateConstraints {
  83 + $0.right.equalTo(self.mainView.snp.right).offset(-6)
  84 + }
  85 + self.mainView.layoutIfNeeded()
  86 + }
  87 +
  88 + isKeyboardAppear = true
  89 + }
  90 + }
  91 +
  92 + @objc func keyboardWillHide(notification: NSNotification) {
  93 + let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double
  94 +
  95 + if isKeyboardAppear {
  96 +
  97 + UIView.animate(withDuration: duration ?? 0) {
  98 + self.mainView.containerView.snp.updateConstraints { make in
  99 + make.top.equalTo(self.mainView.backButton.snp.bottom).offset(227)
  100 + }
  101 + self.mainView.shieldImage.snp.updateConstraints {
  102 + $0.right.equalTo(self.mainView.snp.right).offset(-101)
  103 + }
  104 + self.mainView.layoutIfNeeded()
  105 + }
  106 +
  107 + isKeyboardAppear = false
  108 + }
  109 + }
  110 +
  111 +}
  112 +
  113 +extension CodeVerificationViewController: UITextFieldDelegate {
  114 +
  115 + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  116 + otp += string
  117 +
  118 + otp.enumerated().forEach { index,item in
  119 + switch index {
  120 + case 0:
  121 + mainView.firstDigitLabel.text = String(item)
  122 + case 1:
  123 + mainView.secondDigitLabel.text = String(item)
  124 + case 2:
  125 + mainView.thirdDigitLabel.text = String(item)
  126 + case 3:
  127 + mainView.fourthDigitLabel.text = String(item)
  128 + mainView.textField.endEditing(true)
  129 + default:
  130 + mainView.textField.endEditing(true)
  131 + }
  132 + }
  133 +
  134 + return true
  135 + }
  136 +
  137 +}
  1 +//
  2 +// EditInfoView.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 08.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +
  10 +class EditInfoView: UIView {
  11 +
  12 + var editImage: UIImageView = {
  13 + var obj = UIImageView()
  14 + obj.image = UIImage(named: "Edit")
  15 + obj.contentMode = .scaleAspectFill
  16 + return obj
  17 + }()
  18 + var titleLabel: UILabel = {
  19 + var obj = UILabel()
  20 + obj.text = "Edit residents"
  21 + obj.textColor = UIColor(red: 0.196, green: 0.216, blue: 0.333, alpha: 1)
  22 + obj.font = .skModernist(type: .bold, ofSize: 16)
  23 + return obj
  24 + }()
  25 + var descriptionLabel: UILabel = {
  26 + var obj = UILabel()
  27 + obj.text = "Edit the residents and their information"
  28 + obj.textColor = UIColor(red: 0.725, green: 0.725, blue: 0.725, alpha: 1)
  29 + obj.font = .skModernist(type: .regular, ofSize: 14)
  30 + return obj
  31 + }()
  32 + var editButton: UIButton = {
  33 + var obj = UIButton()
  34 + obj.setImage(UIImage(named: "NextPointer"), for: .normal)
  35 + return obj
  36 + }()
  37 + var dividingLineView: UIView = {
  38 + var view = UIView()
  39 + view.backgroundColor = UIColor(red: 246/255, green: 246/255, blue: 246/255, alpha: 1)
  40 + return view
  41 + }()
  42 +
  43 + override init(frame: CGRect) {
  44 + super.init(frame: frame)
  45 + layout()
  46 + }
  47 +
  48 + required init?(coder: NSCoder) {
  49 + fatalError("init(coder:) has not been implemented")
  50 + }
  51 +
  52 + func layout() {
  53 + addSubview(editImage)
  54 + addSubview(titleLabel)
  55 + addSubview(descriptionLabel)
  56 + addSubview(editButton)
  57 + addSubview(dividingLineView)
  58 +
  59 + editImage.snp.makeConstraints {
  60 + $0.top.equalTo(snp.top).offset(26)
  61 + $0.leading.equalTo(snp.leading).offset(32)
  62 + $0.height.width.equalTo(18)
  63 + }
  64 + titleLabel.snp.makeConstraints {
  65 + $0.top.equalTo(snp.top).offset(26)
  66 + $0.leading.equalTo(editImage.snp.trailing).offset(15)
  67 + }
  68 + descriptionLabel.snp.makeConstraints {
  69 + $0.top.equalTo(titleLabel.snp.bottom).offset(5)
  70 + $0.leading.equalTo(titleLabel.snp.leading)
  71 + }
  72 + editButton.snp.makeConstraints {
  73 + $0.top.equalTo(snp.top).offset(38)
  74 + $0.trailing.equalTo(snp.trailing).offset(-28)
  75 + }
  76 + dividingLineView.snp.makeConstraints {
  77 + $0.height.equalTo(1)
  78 + $0.top.equalTo(descriptionLabel.snp.bottom).offset(22)
  79 + $0.trailing.leading.equalToSuperview().inset(32)
  80 + }
  81 + }
  82 +}
  1 +//
  2 +// NotificationsView.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 08.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +
  10 +class NotificationsView: UIView {
  11 +
  12 + var notificationImage: UIImageView = {
  13 + var obj = UIImageView()
  14 + obj.image = UIImage(named: "Notification")
  15 + return obj
  16 + }()
  17 + var titleLabel: UILabel = {
  18 + var obj = UILabel()
  19 + obj.text = "Do not disturb"
  20 + obj.textColor = UIColor(red: 0.196, green: 0.216, blue: 0.333, alpha: 1)
  21 + obj.font = .skModernist(type: .bold, ofSize: 16)
  22 + return obj
  23 + }()
  24 + var descriptionLabel: UILabel = {
  25 + var obj = UILabel()
  26 + obj.text = "You will not be notified of any\ncalls for one day. Auto reset at\nmidnight"
  27 + obj.textColor = UIColor(red: 0.725, green: 0.725, blue: 0.725, alpha: 1)
  28 + obj.font = .skModernist(type: .regular, ofSize: 14)
  29 + obj.numberOfLines = 3
  30 + return obj
  31 + }()
  32 + var notificationSwitch: UISwitch = {
  33 + var obj = UISwitch()
  34 + obj.isOn = true
  35 + obj.clipsToBounds = true
  36 + return obj
  37 + }()
  38 + var volumeImage: UIImageView = {
  39 + var obj = UIImageView()
  40 + obj.image = UIImage(named: "Volume")
  41 + return obj
  42 + }()
  43 + var dividingLineView: UIView = {
  44 + var view = UIView()
  45 + view.backgroundColor = UIColor(red: 246/255, green: 246/255, blue: 246/255, alpha: 1)
  46 + return view
  47 + }()
  48 +
  49 + override init(frame: CGRect) {
  50 + super.init(frame: frame)
  51 + layout()
  52 + }
  53 +
  54 + required init?(coder: NSCoder) {
  55 + fatalError("init(coder:) has not been implemented")
  56 + }
  57 +
  58 + func layout() {
  59 + addSubview(notificationImage)
  60 + addSubview(titleLabel)
  61 + addSubview(descriptionLabel)
  62 + addSubview(notificationSwitch)
  63 + addSubview(volumeImage)
  64 + addSubview(dividingLineView)
  65 +
  66 + notificationImage.snp.makeConstraints {
  67 + $0.leading.equalTo(snp.leading).offset(31)
  68 + $0.top.equalTo(snp.top).offset(38)
  69 + }
  70 + titleLabel.snp.makeConstraints {
  71 + $0.leading.equalTo(notificationImage.snp.trailing).offset(17.5)
  72 + $0.top.equalTo(snp.top).offset(38)
  73 + }
  74 + descriptionLabel.snp.makeConstraints {
  75 + $0.top.equalTo(titleLabel.snp.bottom).offset(5)
  76 + $0.leading.equalTo(titleLabel.snp.leading)
  77 + }
  78 + notificationSwitch.snp.makeConstraints {
  79 + $0.top.equalTo(snp.top).offset(36)
  80 + $0.trailing.equalTo(snp.trailing).offset(-28)
  81 + }
  82 + volumeImage.snp.makeConstraints {
  83 + $0.leading.equalTo(snp.leading).offset(29.5)
  84 + $0.top.equalTo(titleLabel.snp.bottom).offset(53)
  85 + }
  86 + dividingLineView.snp.makeConstraints {
  87 + $0.height.equalTo(1)
  88 + $0.top.equalTo(volumeImage.snp.bottom).offset(17)
  89 + $0.leading.equalTo(snp.leading).offset(32)
  90 + $0.trailing.equalTo(snp.trailing).offset(-32)
  91 + }
  92 + }
  93 +}
  1 +//
  2 +// ProfileView.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 08.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +import SnapKit
  10 +
  11 +class ProfileView: UIView {
  12 +
  13 + var profileImage: UIImageView = {
  14 + var obj = UIImageView()
  15 + obj.image = UIImage(named: "Profile")
  16 + return obj
  17 + }()
  18 + var titleLabel: UILabel = {
  19 + var obj = UILabel()
  20 + obj.text = "Your display name"
  21 + obj.font = .skModernist(type: .bold, ofSize: 16)
  22 + obj.textColor = UIColor(red: 0.196, green: 0.216, blue: 0.333, alpha: 1)
  23 + return obj
  24 + }()
  25 + var descriptionLabel: UILabel = {
  26 + var obj = UILabel()
  27 + obj.text = "This name will be displayed everywhere"
  28 + obj.font = .skModernist(type: .regular, ofSize: 14)
  29 + obj.textColor = UIColor(red: 0.725, green: 0.725, blue: 0.725, alpha: 1)
  30 + return obj
  31 + }()
  32 + var displayNameLabel: UILabel = {
  33 + var obj = UILabel()
  34 + obj.text = "John Doe"
  35 + obj.backgroundColor = UIColor(red: 0.971, green: 0.967, blue: 0.967, alpha: 1)
  36 + obj.clipsToBounds = true
  37 + obj.layer.cornerRadius = 15
  38 + return obj
  39 + }()
  40 + var dividingLineView: UIView = {
  41 + var view = UIView()
  42 + view.backgroundColor = UIColor(red: 246/255, green: 246/255, blue: 246/255, alpha: 1)
  43 + return view
  44 + }()
  45 +
  46 + override init(frame: CGRect) {
  47 + super.init(frame: frame)
  48 + layout()
  49 + }
  50 +
  51 + required init?(coder: NSCoder) {
  52 + fatalError("init(coder:) has not been implemented")
  53 + }
  54 +
  55 + func layout() {
  56 + addSubview(profileImage)
  57 + addSubview(titleLabel)
  58 + addSubview(descriptionLabel)
  59 + addSubview(displayNameLabel)
  60 + addSubview(dividingLineView)
  61 +
  62 + profileImage.snp.makeConstraints {
  63 + $0.top.equalTo(snp.top)
  64 + $0.leading.equalTo(snp.leading).offset(32)
  65 + }
  66 + titleLabel.snp.makeConstraints {
  67 + $0.top.equalTo(profileImage.snp.top)
  68 + $0.leading.equalTo(profileImage.snp.trailing).offset(18)
  69 + }
  70 + descriptionLabel.snp.makeConstraints {
  71 + $0.top.equalTo(titleLabel.snp.bottom).offset(5)
  72 + $0.leading.equalTo(titleLabel.snp.leading)
  73 + }
  74 + displayNameLabel.snp.makeConstraints {
  75 + $0.top.equalTo(descriptionLabel.snp.bottom).offset(20)
  76 + $0.leading.equalTo(snp.leading).offset(66)
  77 + $0.trailing.equalTo(snp.trailing).offset(-28)
  78 + $0.height.equalTo(47)
  79 + }
  80 + dividingLineView.snp.makeConstraints {
  81 + $0.leading.trailing.equalToSuperview()
  82 + $0.height.equalTo(1)
  83 + $0.top.equalTo(displayNameLabel.snp.bottom).offset(30)
  84 + }
  85 + }
  86 +}
  1 +//
  2 +// SettingsView.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 08.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +
  10 +class SettingsView: UIView {
  11 + var backButton: UIButton = {
  12 + var obj = UIButton()
  13 + obj.setImage(UIImage(named: "BackPointer"), for: .normal)
  14 + obj.backgroundColor = .white
  15 + obj.layer.borderColor = UIColor(red: 224/255, green: 231/255, blue: 232/255, alpha: 1).cgColor
  16 + obj.layer.cornerRadius = 13
  17 + obj.layer.borderWidth = 1
  18 + return obj
  19 + }()
  20 +
  21 + var logoImage: UIImageView = {
  22 + var obj = UIImageView()
  23 + obj.image = UIImage(named: "InterQR")
  24 + return obj
  25 + }()
  26 +
  27 + var gearImage: UIImageView = {
  28 + var obj = UIImageView()
  29 + obj.image = UIImage(named: "Gear")
  30 + return obj
  31 + }()
  32 +
  33 + var settingsLabel: UILabel = {
  34 + var obj = UILabel()
  35 + obj.font = .skModernist(type: .bold, ofSize: 35)
  36 + obj.text = "Settings"
  37 + return obj
  38 + }()
  39 + var profileView: ProfileView = {
  40 + var obj = ProfileView()
  41 + return obj
  42 + }()
  43 + var notificationsView: NotificationsView = {
  44 + var obj = NotificationsView()
  45 + return obj
  46 + }()
  47 + var editInfo: EditInfoView = {
  48 + var obj = EditInfoView()
  49 + return obj
  50 + }()
  51 + var logoutButton: UIButton = {
  52 + var obj = UIButton()
  53 + obj.backgroundColor = UIColor(red: 1, green: 0, blue: 0.18, alpha: 0.07)
  54 + obj.setTitle("Logout", for: .normal)
  55 + obj.setTitleColor(UIColor(red: 1, green: 0, blue: 0.18, alpha: 0.98), for: .normal)
  56 + obj.layer.cornerRadius = 15
  57 + return obj
  58 + }()
  59 +
  60 + override init(frame: CGRect) {
  61 + super.init(frame: frame)
  62 + backgroundColor = .white
  63 + layout()
  64 + }
  65 +
  66 + required init?(coder: NSCoder) {
  67 + fatalError("init(coder:) has not been implemented")
  68 + }
  69 +
  70 + func layout() {
  71 + addSubview(backButton)
  72 + addSubview(logoImage)
  73 + addSubview(gearImage)
  74 + addSubview(settingsLabel)
  75 + addSubview(profileView)
  76 + addSubview(notificationsView)
  77 + addSubview(editInfo)
  78 + addSubview(logoutButton)
  79 +
  80 + backButton.snp.makeConstraints {
  81 + $0.top.equalTo(snp.top).offset(66)
  82 + $0.leading.equalTo(snp.leading).offset(25)
  83 + $0.height.width.equalTo(45)
  84 + }
  85 + logoImage.snp.makeConstraints {
  86 + $0.leading.equalTo(backButton.snp.trailing).offset(20)
  87 + $0.top.equalTo(snp.top).offset(79)
  88 + }
  89 + gearImage.snp.makeConstraints {
  90 + $0.trailing.equalTo(snp.trailing)
  91 + $0.top.equalTo(snp.top).offset(106)
  92 + }
  93 + settingsLabel.snp.makeConstraints {
  94 + $0.leading.equalTo(backButton.snp.leading)
  95 + $0.top.equalTo(backButton.snp.bottom).offset(46)
  96 + }
  97 + profileView.snp.makeConstraints {
  98 + $0.top.equalTo(settingsLabel.snp.bottom).offset(85)
  99 + $0.leading.equalTo(snp.leading)
  100 + $0.trailing.equalTo(snp.trailing)
  101 + $0.height.equalTo(140)
  102 + }
  103 + notificationsView.snp.makeConstraints {
  104 + $0.top.equalTo(profileView.snp.bottom)
  105 + $0.leading.trailing.equalToSuperview()
  106 + $0.height.equalTo(140)
  107 + }
  108 + editInfo.snp.makeConstraints {
  109 + $0.top.equalTo(notificationsView.snp.bottom)
  110 + $0.leading.trailing.equalToSuperview()
  111 + $0.height.equalTo(102)
  112 + }
  113 + logoutButton.snp.makeConstraints {
  114 + $0.top.equalTo(editInfo.snp.bottom).offset(42)
  115 + $0.leading.equalTo(snp.leading).offset(25)
  116 + $0.trailing.equalTo(snp.trailing).offset(-26)
  117 + $0.height.equalTo(56)
  118 + }
  119 + }
  120 +}
  1 +//
  2 +// SettingsViewController.swift
  3 +// InterQR-Internship
  4 +//
  5 +// Created by Дмитрий Тимофеев on 08.06.2022.
  6 +//
  7 +
  8 +import UIKit
  9 +
  10 +class SettingsViewController: UIViewController {
  11 +
  12 + var mainView = SettingsView()
  13 +
  14 + override func loadView() {
  15 + view = mainView
  16 + }
  17 + override func viewDidLoad() {
  18 + mainView.backButton.addTarget(self, action: #selector(didShowHomeVC), for: .touchUpInside)
  19 + mainView.logoutButton.addTarget(self, action: #selector(didLogoutAndShowVerificationVC), for: .touchUpInside)
  20 + }
  21 +}
  22 +
  23 +extension SettingsViewController {
  24 +
  25 + @objc func didShowHomeVC() {
  26 + navigationController?.popViewController(animated: true)
  27 + }
  28 +
  29 + @objc func didLogoutAndShowVerificationVC() {
  30 + let vc = VerificationViewController()
  31 + navigationController?.pushViewController(vc, animated: true)
  32 + }
  33 +}
  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: Checkbox = {
  46 + var button = Checkbox()
  47 + button.checkboxTitle = "Email"
  48 + button.isSelected = true
  49 +// button.setTitle("Email", for: .normal)
  50 +// button.setTitleColor(UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1), for: .normal)
  51 +// button.setTitleColor(UIColor(red: 185/255, green: 185/255, blue: 185/255, alpha: 1), for: .disabled)
  52 +// button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 5)
  53 +// button.setImage(UIImage(named: "OnIndicator"), for: .normal)
  54 +// button.setImage(UIImage(named: "OffIndicator"), for: .selected)
  55 +// button.contentMode = .left
  56 + return button
  57 + }()
  58 +
  59 + var phoneNumberButton: Checkbox = {
  60 + var button = Checkbox()
  61 + button.checkboxTitle = "Phone Number"
  62 +// button.setTitle("Phone Number", for: .normal)
  63 +// button.setTitleColor(UIColor(red: 50/255, green: 55/255, blue: 85/255, alpha: 1), for: .normal)
  64 +// button.setTitleColor(UIColor(red: 185/255, green: 185/255, blue: 185/255, alpha: 1), for: .disabled)
  65 +// button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 5)
  66 +// button.setImage(UIImage(named: "OnIndicator"), for: .selected)
  67 +// button.setImage(UIImage(named: "OffIndicator"), for: .normal)
  68 + return button
  69 + }()
  70 +
  71 + var dividingLineView: UIView = {
  72 + var view = UIView()
  73 + view.backgroundColor = UIColor(red: 246/255, green: 246/255, blue: 246/255, alpha: 1)
  74 + return view
  75 + }()
  76 + var enterChosenAuthenticatorLabel: UILabel = {
  77 + var label = UILabel()
  78 + label.text = "Enter your email address"
  79 + label.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16)
  80 + return label
  81 + }()
  82 + var emailTextField: UITextField = {
  83 + var textField = UITextField()
  84 + textField.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1)
  85 + textField.textAlignment = .left
  86 + textField.layer.cornerRadius = 15
  87 + textField.keyboardType = .emailAddress
  88 + textField.placeholder = "Example: john.doe@gmail.com"
  89 + textField.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 15)
  90 + textField.layer.masksToBounds = true
  91 + textField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 22, height: textField.frame.height))
  92 + textField.leftViewMode = .always
  93 + textField.returnKeyType = .done
  94 + return textField
  95 + }()
  96 + var phoneTextField: TextFieldWithPadding = {
  97 + var textField = TextFieldWithPadding()
  98 + textField.backgroundColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1)
  99 + textField.textAlignment = .left
  100 + textField.layer.cornerRadius = 15
  101 + textField.keyboardType = .numberPad
  102 + textField.text = "+1"
  103 + textField.font = UIFont(name: SkModernistFontType.regular.rawValue, size: 15)
  104 + textField.layer.masksToBounds = true
  105 + textField.isHidden = true
  106 + return textField
  107 + }()
  108 + var verificationDescriptionLabel: UILabel = {
  109 + var label = UILabel()
  110 + label.numberOfLines = 0
  111 + label.text = "Verification code will be sent to your e-mail"
  112 + label.font = UIFont(name: "Sk-Modernist", size: 14)
  113 + label.font = .systemFont(ofSize: 14, weight: .regular)
  114 + return label
  115 + }()
  116 + var continueButton: UIButton = {
  117 + var button = UIButton()
  118 + button.setImage(UIImage(named: "RectangleWithShadow"), for: .normal)
  119 + button.clipsToBounds = true
  120 + button.contentMode = .scaleAspectFit
  121 + button.layer.cornerRadius = 15
  122 + return button
  123 + }()
  124 + var continueLabel: UILabel = {
  125 + var label = UILabel()
  126 + label.text = "Continue"
  127 + label.font = UIFont(name: SkModernistFontType.bold.rawValue, size: 16)
  128 + label.textColor = .white
  129 + return label
  130 + }()
  131 + var pointerImage: UIImageView = {
  132 + var image = UIImageView()
  133 + image.image = UIImage(named: "Pointer")
  134 + return image
  135 + }()
  136 + var phonePickerView: PhoneNumberView = {
  137 + var view = PhoneNumberView()
  138 + view.isUserInteractionEnabled = true
  139 + return view
  140 + }()
  141 + var showPickerButton: UIButton = {
  142 + var button = UIButton()
  143 + button.isHidden = true
  144 + return button
  145 + }()
  146 + var flagPickerView: UIImageView = {
  147 + var image = UIImageView()
  148 + image.image = UIImage(named: "USA")
  149 + image.layer.cornerRadius = 11
  150 + image.contentMode = .scaleAspectFit
  151 + return image
  152 + }()
  153 + var flagPointerView: UIImageView = {
  154 + var image = UIImageView()
  155 + image.image = UIImage(named: "FlagPointer")
  156 + return image
  157 + }()
  158 +
  159 + override init(frame: CGRect) {
  160 + super.init(frame: frame)
  161 + backgroundColor = .white
  162 + layout()
  163 + }
  164 +
  165 + required init?(coder: NSCoder) {
  166 + fatalError("init(coder:) has not been implemented")
  167 + }
  168 +
  169 + func layout() {
  170 +
  171 + addSubview(logoImage)
  172 + addSubview(greetingsLabel)
  173 + addSubview(verifyLabel)
  174 + addSubview(shieldImage)
  175 +
  176 + addSubview(chooseLabel)
  177 + addSubview(emailButton)
  178 + addSubview(phoneNumberButton)
  179 + addSubview(dividingLineView)
  180 +
  181 + addSubview(enterChosenAuthenticatorLabel)
  182 + addSubview(emailTextField)
  183 + addSubview(phoneTextField)
  184 + addSubview(verificationDescriptionLabel)
  185 + phoneTextField.addSubview(showPickerButton)
  186 +
  187 + showPickerButton.addSubview(flagPickerView)
  188 + showPickerButton.addSubview(flagPointerView)
  189 +
  190 + addSubview(continueButton)
  191 + continueButton.addSubview(continueLabel)
  192 + continueButton.addSubview(pointerImage)
  193 +
  194 + addSubview(phonePickerView)
  195 +
  196 + logoImage.snp.makeConstraints {
  197 + $0.top.equalTo(snp.top).offset(80)
  198 + $0.left.equalTo(snp.left).offset(27)
  199 + }
  200 + greetingsLabel.snp.makeConstraints {
  201 + $0.top.equalTo(logoImage.snp.bottom).offset(42)
  202 + $0.left.equalTo(snp.left).offset(24)
  203 + }
  204 + shieldImage.snp.makeConstraints {
  205 + $0.right.equalToSuperview()
  206 + $0.top.equalTo(logoImage.snp.bottom).offset(27)
  207 + }
  208 + verifyLabel.snp.makeConstraints {
  209 + $0.left.equalTo(27)
  210 + $0.top.equalTo(greetingsLabel.snp.bottom).offset(10)
  211 + }
  212 + chooseLabel.snp.makeConstraints {
  213 + $0.top.equalTo(shieldImage.snp.bottom).offset(52)
  214 + $0.left.equalTo(snp.left).offset(27)
  215 + }
  216 + emailButton.snp.makeConstraints {
  217 + $0.left.equalTo(snp.left).offset(27)
  218 + $0.top.equalTo(chooseLabel.snp.bottom).offset(29)
  219 + $0.height.equalTo(20)
  220 + }
  221 + phoneNumberButton.snp.makeConstraints {
  222 + $0.top.equalTo(emailButton.snp.top)
  223 + $0.height.equalTo(20)
  224 + $0.left.equalTo(emailButton.snp.right).offset(44)
  225 + }
  226 + dividingLineView.snp.makeConstraints {
  227 + $0.left.right.equalToSuperview()
  228 + $0.top.equalTo(emailButton.snp.bottom).offset(41)
  229 + $0.height.equalTo(1)
  230 + }
  231 + enterChosenAuthenticatorLabel.snp.makeConstraints {
  232 + $0.top.equalTo(dividingLineView.snp.bottom).offset(39)
  233 + $0.left.equalTo(logoImage.snp.left)
  234 + }
  235 + emailTextField.snp.makeConstraints {
  236 + $0.left.equalTo(logoImage.snp.left)
  237 + $0.right.equalTo(snp.right).offset(-27)
  238 + $0.top.equalTo(enterChosenAuthenticatorLabel.snp.bottom).offset(23)
  239 + $0.height.equalTo(57)
  240 + }
  241 + phoneTextField.snp.makeConstraints {
  242 + $0.left.equalTo(logoImage.snp.left)
  243 + $0.right.equalTo(snp.right).offset(-27)
  244 + $0.top.equalTo(enterChosenAuthenticatorLabel.snp.bottom).offset(23)
  245 + $0.height.equalTo(57)
  246 + }
  247 + verificationDescriptionLabel.snp.makeConstraints {
  248 + $0.top.equalTo(emailTextField.snp.bottom).offset(8)
  249 + $0.left.equalTo(snp.left).offset(46)
  250 + $0.right.equalTo(snp.right).offset(-22)
  251 + }
  252 + continueButton.snp.makeConstraints {
  253 + $0.left.equalTo(snp.left)
  254 + $0.right.equalTo(snp.right)
  255 + $0.top.equalTo(emailTextField.snp.bottom).offset(90)
  256 + $0.height.equalTo(125)
  257 + }
  258 + continueLabel.snp.makeConstraints {
  259 + $0.left.equalTo(snp.left).offset(48)
  260 + $0.top.equalTo(continueButton.snp.top).offset(33)
  261 + }
  262 + pointerImage.snp.makeConstraints {
  263 + $0.top.equalTo(continueButton.snp.top).offset(31)
  264 + $0.right.equalTo(snp.right).offset(-51.5)
  265 + }
  266 + phonePickerView.snp.makeConstraints { make in
  267 + make.leading.trailing.equalToSuperview()
  268 + make.height.equalTo(390)
  269 + make.top.equalTo(self.snp.bottom)
  270 + }
  271 + showPickerButton.snp.makeConstraints {
  272 + $0.height.equalTo(22)
  273 + $0.width.equalTo(50)
  274 + $0.left.equalTo(emailTextField.snp.left).offset(22)
  275 + $0.top.equalTo(emailTextField.snp.top).offset(18)
  276 + }
  277 + flagPickerView.snp.makeConstraints {
  278 + $0.left.equalToSuperview()
  279 +// $0.top.equalToSuperview()
  280 + $0.size.equalTo(20)
  281 + $0.centerY.equalTo(showPickerButton.snp.centerY)
  282 + }
  283 + flagPointerView.snp.makeConstraints {
  284 + $0.left.equalTo(flagPickerView.snp.right).offset(10)
  285 + $0.centerYWithinMargins.equalTo(flagPickerView.snp.centerYWithinMargins)
  286 + }
  287 + }
  288 +
  289 +// @objc func choosePhoneCode() {
  290 +// emailTextField.isHidden = true
  291 +// phoneTextField.isHidden = false
  292 +// phoneNumberButton.isSelected = true
  293 +// emailButton.isSelected = true
  294 +// phoneNumberButton.image(for: .normal)
  295 +// verificationDescriptionLabel.text = "Verification code will be sent to\nyour phone number"
  296 +// enterChosenAuthenticatorLabel.text = "Enter your phone number"
  297 +// emailTextField.text = "+1"
  298 +// showPickerButton.isHidden = false
  299 +// }
  300 +//
  301 +// @objc func chooseEmail() {
  302 +// emailTextField.isHidden = false
  303 +// phoneTextField.isHidden = true
  304 +// phoneNumberButton.isSelected = false
  305 +// emailButton.isSelected = false
  306 +// verificationDescriptionLabel.text = "Verification code will be sent to your e-mail"
  307 +// enterChosenAuthenticatorLabel.text = "Enter your email address"
  308 +// emailTextField.text = ""
  309 +// emailTextField.placeholder = "Example: john.doe@gmail.com"
  310 +// showPickerButton.isHidden = true
  311 +// }
  312 +
  313 + func showPickerView() {
  314 + UIView.animate(withDuration: 0.3) {
  315 + self.phonePickerView.snp.updateConstraints { make in
  316 + make.top.equalTo(self.snp.bottom).offset(-390)
  317 + }
  318 + self.layoutIfNeeded()
  319 + }
  320 + }
  321 +
  322 + func hidePickerView() {
  323 + UIView.animate(withDuration: 0.3) {
  324 + self.phonePickerView.snp.updateConstraints { make in
  325 + make.top.equalTo(self.snp.bottom).offset(0)
  326 + }
  327 + self.layoutIfNeeded()
  328 + }
  329 + }
  330 +}
  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 + deinit {
  26 + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
  27 + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
  28 + }
  29 +
  30 + override func loadView() {
  31 + view = mainView
  32 + }
  33 + override func viewDidLoad() {
  34 + super.viewDidLoad()
  35 + initViewController()
  36 + }
  37 +
  38 +
  39 + private func initViewController() {
  40 + mainView.phonePickerView.phoneNumberPicker.delegate = self
  41 + mainView.phonePickerView.phoneNumberPicker.dataSource = self
  42 + mainView.phoneNumberButton.addTarget(self, action: #selector(didCheckboxTapped(_:)), for: .touchUpInside)
  43 + mainView.emailButton.addTarget(self, action: #selector(didCheckboxTapped(_:)), for: .touchUpInside)
  44 + mainView.showPickerButton.addTarget(self, action: #selector(didshowPickerButtonTapped(_:)), for: .touchUpInside)
  45 + mainView.phonePickerView.selectButton.addTarget(self, action: #selector(didshowPickerButtonTapped(_:)), for: .touchUpInside)
  46 + mainView.phonePickerView.titleButton.addTarget(self, action: #selector(didshowPickerButtonTapped(_:)), for: .touchDragInside)
  47 + mainView.continueButton.addTarget(self, action: #selector(didShowCodeVerificationVC), for: .touchUpInside)
  48 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
  49 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
  50 + }
  51 +
  52 +}
  53 +
  54 +//MARK: helpers and handlers
  55 +extension VerificationViewController {
  56 +
  57 +}
  58 +
  59 +//MARK: targets
  60 +extension VerificationViewController {
  61 +
  62 + @objc private func didCheckboxTapped(_ sender: Checkbox) {
  63 + switch sender {
  64 + case mainView.emailButton :
  65 + mainView.emailTextField.isHidden = false
  66 + mainView.phoneTextField.isHidden = true
  67 + mainView.phoneNumberButton.isSelected = false
  68 + mainView.emailButton.isSelected = true
  69 + mainView.verificationDescriptionLabel.text = "Verification code will be sent to your e-mail"
  70 + mainView.enterChosenAuthenticatorLabel.text = "Enter your email address"
  71 + mainView.emailTextField.text = ""
  72 + mainView.emailTextField.placeholder = "Example: john.doe@gmail.com"
  73 + mainView.showPickerButton.isHidden = true
  74 + case mainView.phoneNumberButton:
  75 + mainView.emailTextField.isHidden = true
  76 + mainView.phoneTextField.isHidden = false
  77 + mainView.phoneNumberButton.isSelected = true
  78 + mainView.emailButton.isSelected = false
  79 + mainView.phoneNumberButton.image(for: .normal)
  80 + mainView.verificationDescriptionLabel.text = "Verification code will be sent to\nyour phone number"
  81 + mainView.enterChosenAuthenticatorLabel.text = "Enter your phone number"
  82 + mainView.emailTextField.text = "+1"
  83 + mainView.showPickerButton.isHidden = false
  84 + default :
  85 + return
  86 + }
  87 + }
  88 +
  89 + @objc private func didshowPickerButtonTapped(_ sender: UIButton) {
  90 + mainView.isShow ? mainView.showPickerView() : mainView.hidePickerView()
  91 + mainView.isShow.toggle()
  92 + }
  93 +
  94 + @objc private func didShowCodeVerificationVC() {
  95 + let vc = CodeVerificationViewController()
  96 + vc.navigationItem.hidesBackButton = true
  97 + navigationController?.pushViewController(vc, animated: true)
  98 + }
  99 +
  100 + @objc func keyboardWillShow(notification: NSNotification) {
  101 + let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double
  102 + if !isKeyboardAppear {
  103 + UIView.animate(withDuration: duration ?? 0) {
  104 + self.mainView.chooseLabel.snp.updateConstraints { make in
  105 + make.top.equalTo(self.mainView.shieldImage.snp.bottom).offset(0)
  106 + }
  107 + self.mainView.dividingLineView.snp.updateConstraints {
  108 + $0.top.equalTo(self.mainView.emailButton.snp.bottom).offset(10)
  109 + }
  110 + self.mainView.enterChosenAuthenticatorLabel.snp.updateConstraints {
  111 + $0.top.equalTo(self.mainView.dividingLineView.snp.bottom).offset(5)
  112 + }
  113 + self.mainView.layoutIfNeeded()
  114 + }
  115 + isKeyboardAppear = true
  116 + }
  117 + }
  118 +
  119 + @objc func keyboardWillHide(notification: NSNotification) {
  120 + let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double
  121 +
  122 + if isKeyboardAppear {
  123 +
  124 + UIView.animate(withDuration: duration ?? 0) {
  125 + self.mainView.chooseLabel.snp.updateConstraints { make in
  126 + make.top.equalTo(self.mainView.shieldImage.snp.bottom).offset(52)
  127 + }
  128 + self.mainView.dividingLineView.snp.updateConstraints {
  129 + $0.top.equalTo(self.mainView.emailButton.snp.bottom).offset(41)
  130 + }
  131 + self.mainView.enterChosenAuthenticatorLabel.snp.updateConstraints {
  132 + $0.top.equalTo(self.mainView.dividingLineView.snp.bottom).offset(39)
  133 + }
  134 + self.mainView.layoutIfNeeded()
  135 + }
  136 + isKeyboardAppear = false
  137 + }
  138 + }
  139 +}
  140 +
  141 +extension VerificationViewController: UIPickerViewDataSource, UIPickerViewDelegate {
  142 +
  143 + func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 }
  144 +
  145 + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
  146 + return phonePickerModels.count
  147 +
  148 + }
  149 +
  150 + func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
  151 + 60
  152 + }
  153 +
  154 + func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
  155 + let model = phonePickerModels[row]
  156 + return PickerView.create(icon: model.icon, title: model.title, code: model.countryCode)
  157 + }
  158 +
  159 + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
  160 + pickerView.subviews[1].backgroundColor = .clear
  161 + let model = phonePickerModels[row]
  162 + mainView.phoneTextField.text = "\(model.countryCode)"
  163 + mainView.flagPickerView.image = model.icon
  164 + }
  165 +}
  166 +
  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 homeVC = HomeViewController()
  21 + let navigation = UINavigationController(rootViewController: homeVC)
  22 + navigation.isNavigationBarHidden = true
  23 + window?.rootViewController = navigation
  24 + window?.makeKeyAndVisible()
  25 + }
  26 +}
  27 +
  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 + 0F9522C29D6C28CA5AC2E35825B46E18 /* Debug */ = {
  442 + isa = XCBuildConfiguration;
  443 + baseConfigurationReference = EF88D6AF5E18A624B2BBDC50D49C7534 /* Pods-InterQR-Internship.debug.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 = 13.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 + VERSIONING_SYSTEM = "apple-generic";
  474 + VERSION_INFO_PREFIX = "";
  475 + };
  476 + name = Debug;
  477 + };
  478 + 34910699A154CFAFDE9D8D1B44641C55 /* Release */ = {
  479 + isa = XCBuildConfiguration;
  480 + baseConfigurationReference = 9AFE619CFFABED07F15D3C2B1C1B48F6 /* Pods-InterQR-Internship.release.xcconfig */;
  481 + buildSettings = {
  482 + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
  483 + CLANG_ENABLE_OBJC_WEAK = NO;
  484 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  485 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  486 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  487 + CURRENT_PROJECT_VERSION = 1;
  488 + DEFINES_MODULE = YES;
  489 + DYLIB_COMPATIBILITY_VERSION = 1;
  490 + DYLIB_CURRENT_VERSION = 1;
  491 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  492 + INFOPLIST_FILE = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-Info.plist";
  493 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  494 + IPHONEOS_DEPLOYMENT_TARGET = 13.0;
  495 + LD_RUNPATH_SEARCH_PATHS = (
  496 + "$(inherited)",
  497 + "@executable_path/Frameworks",
  498 + "@loader_path/Frameworks",
  499 + );
  500 + MACH_O_TYPE = staticlib;
  501 + MODULEMAP_FILE = "Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship.modulemap";
  502 + OTHER_LDFLAGS = "";
  503 + OTHER_LIBTOOLFLAGS = "";
  504 + PODS_ROOT = "$(SRCROOT)";
  505 + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
  506 + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
  507 + SDKROOT = iphoneos;
  508 + SKIP_INSTALL = YES;
  509 + TARGETED_DEVICE_FAMILY = "1,2";
  510 + VALIDATE_PRODUCT = YES;
  511 + VERSIONING_SYSTEM = "apple-generic";
  512 + VERSION_INFO_PREFIX = "";
  513 + };
  514 + name = Release;
  515 + };
  516 + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = {
  517 + isa = XCBuildConfiguration;
  518 + buildSettings = {
  519 + ALWAYS_SEARCH_USER_PATHS = NO;
  520 + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
  521 + CLANG_ANALYZER_NONNULL = YES;
  522 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  523 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  524 + CLANG_CXX_LIBRARY = "libc++";
  525 + CLANG_ENABLE_MODULES = YES;
  526 + CLANG_ENABLE_OBJC_ARC = YES;
  527 + CLANG_ENABLE_OBJC_WEAK = YES;
  528 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  529 + CLANG_WARN_BOOL_CONVERSION = YES;
  530 + CLANG_WARN_COMMA = YES;
  531 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  532 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  533 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  534 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  535 + CLANG_WARN_EMPTY_BODY = YES;
  536 + CLANG_WARN_ENUM_CONVERSION = YES;
  537 + CLANG_WARN_INFINITE_RECURSION = YES;
  538 + CLANG_WARN_INT_CONVERSION = YES;
  539 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  540 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  541 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  542 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  543 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
  544 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  545 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  546 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  547 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
  548 + CLANG_WARN_UNREACHABLE_CODE = YES;
  549 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  550 + COPY_PHASE_STRIP = NO;
  551 + DEBUG_INFORMATION_FORMAT = dwarf;
  552 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  553 + ENABLE_TESTABILITY = YES;
  554 + GCC_C_LANGUAGE_STANDARD = gnu11;
  555 + GCC_DYNAMIC_NO_PIC = NO;
  556 + GCC_NO_COMMON_BLOCKS = YES;
  557 + GCC_OPTIMIZATION_LEVEL = 0;
  558 + GCC_PREPROCESSOR_DEFINITIONS = (
  559 + "POD_CONFIGURATION_DEBUG=1",
  560 + "DEBUG=1",
  561 + "$(inherited)",
  562 + );
  563 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  564 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  565 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  566 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  567 + GCC_WARN_UNUSED_FUNCTION = YES;
  568 + GCC_WARN_UNUSED_VARIABLE = YES;
  569 + IPHONEOS_DEPLOYMENT_TARGET = 13.0;
  570 + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
  571 + MTL_FAST_MATH = YES;
  572 + ONLY_ACTIVE_ARCH = YES;
  573 + PRODUCT_NAME = "$(TARGET_NAME)";
  574 + STRIP_INSTALLED_PRODUCT = NO;
  575 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
  576 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  577 + SWIFT_VERSION = 5.0;
  578 + SYMROOT = "${SRCROOT}/../build";
  579 + };
  580 + name = Debug;
  581 + };
  582 + 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = {
  583 + isa = XCBuildConfiguration;
  584 + buildSettings = {
  585 + ALWAYS_SEARCH_USER_PATHS = NO;
  586 + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
  587 + CLANG_ANALYZER_NONNULL = YES;
  588 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  589 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  590 + CLANG_CXX_LIBRARY = "libc++";
  591 + CLANG_ENABLE_MODULES = YES;
  592 + CLANG_ENABLE_OBJC_ARC = YES;
  593 + CLANG_ENABLE_OBJC_WEAK = YES;
  594 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  595 + CLANG_WARN_BOOL_CONVERSION = YES;
  596 + CLANG_WARN_COMMA = YES;
  597 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  598 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  599 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  600 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  601 + CLANG_WARN_EMPTY_BODY = YES;
  602 + CLANG_WARN_ENUM_CONVERSION = YES;
  603 + CLANG_WARN_INFINITE_RECURSION = YES;
  604 + CLANG_WARN_INT_CONVERSION = YES;
  605 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  606 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  607 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  608 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  609 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
  610 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  611 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  612 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  613 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
  614 + CLANG_WARN_UNREACHABLE_CODE = YES;
  615 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  616 + COPY_PHASE_STRIP = NO;
  617 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  618 + ENABLE_NS_ASSERTIONS = NO;
  619 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  620 + GCC_C_LANGUAGE_STANDARD = gnu11;
  621 + GCC_NO_COMMON_BLOCKS = YES;
  622 + GCC_PREPROCESSOR_DEFINITIONS = (
  623 + "POD_CONFIGURATION_RELEASE=1",
  624 + "$(inherited)",
  625 + );
  626 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  627 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  628 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  629 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  630 + GCC_WARN_UNUSED_FUNCTION = YES;
  631 + GCC_WARN_UNUSED_VARIABLE = YES;
  632 + IPHONEOS_DEPLOYMENT_TARGET = 13.0;
  633 + MTL_ENABLE_DEBUG_INFO = NO;
  634 + MTL_FAST_MATH = YES;
  635 + PRODUCT_NAME = "$(TARGET_NAME)";
  636 + STRIP_INSTALLED_PRODUCT = NO;
  637 + SWIFT_COMPILATION_MODE = wholemodule;
  638 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  639 + SWIFT_VERSION = 5.0;
  640 + SYMROOT = "${SRCROOT}/../build";
  641 + };
  642 + name = Release;
  643 + };
  644 + CB8A79F7382B0A1227C38D59E7968EEA /* Debug */ = {
  645 + isa = XCBuildConfiguration;
  646 + baseConfigurationReference = 7C21E0C93A1141A1E2EB51575500E27D /* SnapKit.debug.xcconfig */;
  647 + buildSettings = {
  648 + CLANG_ENABLE_OBJC_WEAK = NO;
  649 + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
  650 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
  651 + "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
  652 + CURRENT_PROJECT_VERSION = 1;
  653 + DEFINES_MODULE = YES;
  654 + DYLIB_COMPATIBILITY_VERSION = 1;
  655 + DYLIB_CURRENT_VERSION = 1;
  656 + DYLIB_INSTALL_NAME_BASE = "@rpath";
  657 + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch";
  658 + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist";
  659 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  660 + IPHONEOS_DEPLOYMENT_TARGET = 10.0;
  661 + LD_RUNPATH_SEARCH_PATHS = (
  662 + "$(inherited)",
  663 + "@executable_path/Frameworks",
  664 + "@loader_path/Frameworks",
  665 + );
  666 + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap";
  667 + PRODUCT_MODULE_NAME = SnapKit;
  668 + PRODUCT_NAME = SnapKit;
  669 + SDKROOT = iphoneos;
  670 + SKIP_INSTALL = YES;
  671 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
  672 + SWIFT_VERSION = 5.0;
  673 + TARGETED_DEVICE_FAMILY = "1,2";
  674 + VERSIONING_SYSTEM = "apple-generic";
  675 + VERSION_INFO_PREFIX = "";
  676 + };
  677 + name = Debug;
  678 + };
  679 + DFFD31690F9CC8449FD1F803388E1D46 /* Release */ = {
  680 + isa = XCBuildConfiguration;
  681 + baseConfigurationReference = A1CD432F32277BB93DEAADA626ECEC5B /* SnapKit.release.xcconfig */;
  682 + buildSettings = {
  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 + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch";
  693 + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist";
  694 + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
  695 + IPHONEOS_DEPLOYMENT_TARGET = 10.0;
  696 + LD_RUNPATH_SEARCH_PATHS = (
  697 + "$(inherited)",
  698 + "@executable_path/Frameworks",
  699 + "@loader_path/Frameworks",
  700 + );
  701 + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap";
  702 + PRODUCT_MODULE_NAME = SnapKit;
  703 + PRODUCT_NAME = SnapKit;
  704 + SDKROOT = iphoneos;
  705 + SKIP_INSTALL = YES;
  706 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
  707 + SWIFT_VERSION = 5.0;
  708 + TARGETED_DEVICE_FAMILY = "1,2";
  709 + VALIDATE_PRODUCT = YES;
  710 + VERSIONING_SYSTEM = "apple-generic";
  711 + VERSION_INFO_PREFIX = "";
  712 + };
  713 + name = Release;
  714 + };
  715 +/* End XCBuildConfiguration section */
  716 +
  717 +/* Begin XCConfigurationList section */
  718 + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
  719 + isa = XCConfigurationList;
  720 + buildConfigurations = (
  721 + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */,
  722 + 9E406C6AAF85E580207CD97B0044DEAB /* 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 + 0F9522C29D6C28CA5AC2E35825B46E18 /* Debug */,
  740 + 34910699A154CFAFDE9D8D1B44641C55 /* 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 +<?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
  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 +@available(iOS 9.0, OSX 10.11, *)
  32 +public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL {
  33 +
  34 + @discardableResult
  35 + public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
  36 + return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure)
  37 + }
  38 +
  39 + public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  40 + ConstraintMaker.makeConstraints(item: self.guide, closure: closure)
  41 + }
  42 +
  43 + public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  44 + ConstraintMaker.remakeConstraints(item: self.guide, closure: closure)
  45 + }
  46 +
  47 + public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  48 + ConstraintMaker.updateConstraints(item: self.guide, closure: closure)
  49 + }
  50 +
  51 + public func removeConstraints() {
  52 + ConstraintMaker.removeConstraints(item: self.guide)
  53 + }
  54 +
  55 + public var target: AnyObject? {
  56 + return self.guide
  57 + }
  58 +
  59 + internal let guide: ConstraintLayoutGuide
  60 +
  61 + internal init(guide: ConstraintLayoutGuide) {
  62 + self.guide = guide
  63 +
  64 + }
  65 +
  66 +}
  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 8.0, *)
  33 + public typealias ConstraintLayoutSupport = UILayoutSupport
  34 +#else
  35 + public class ConstraintLayoutSupport {}
  36 +#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 +@available(iOS 8.0, *)
  32 +public struct ConstraintLayoutSupportDSL: ConstraintDSL {
  33 +
  34 + public var target: AnyObject? {
  35 + return self.support
  36 + }
  37 +
  38 + internal let support: ConstraintLayoutSupport
  39 +
  40 + internal init(support: ConstraintLayoutSupport) {
  41 + self.support = support
  42 +
  43 + }
  44 +
  45 + public var top: ConstraintItem {
  46 + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top)
  47 + }
  48 +
  49 + public var bottom: ConstraintItem {
  50 + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom)
  51 + }
  52 +
  53 + public var height: ConstraintItem {
  54 + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height)
  55 + }
  56 +}
  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 class ConstraintMaker {
  31 +
  32 + public var left: ConstraintMakerExtendable {
  33 + return self.makeExtendableWithAttributes(.left)
  34 + }
  35 +
  36 + public var top: ConstraintMakerExtendable {
  37 + return self.makeExtendableWithAttributes(.top)
  38 + }
  39 +
  40 + public var bottom: ConstraintMakerExtendable {
  41 + return self.makeExtendableWithAttributes(.bottom)
  42 + }
  43 +
  44 + public var right: ConstraintMakerExtendable {
  45 + return self.makeExtendableWithAttributes(.right)
  46 + }
  47 +
  48 + public var leading: ConstraintMakerExtendable {
  49 + return self.makeExtendableWithAttributes(.leading)
  50 + }
  51 +
  52 + public var trailing: ConstraintMakerExtendable {
  53 + return self.makeExtendableWithAttributes(.trailing)
  54 + }
  55 +
  56 + public var width: ConstraintMakerExtendable {
  57 + return self.makeExtendableWithAttributes(.width)
  58 + }
  59 +
  60 + public var height: ConstraintMakerExtendable {
  61 + return self.makeExtendableWithAttributes(.height)
  62 + }
  63 +
  64 + public var centerX: ConstraintMakerExtendable {
  65 + return self.makeExtendableWithAttributes(.centerX)
  66 + }
  67 +
  68 + public var centerY: ConstraintMakerExtendable {
  69 + return self.makeExtendableWithAttributes(.centerY)
  70 + }
  71 +
  72 + @available(*, deprecated, message:"Use lastBaseline instead")
  73 + public var baseline: ConstraintMakerExtendable {
  74 + return self.makeExtendableWithAttributes(.lastBaseline)
  75 + }
  76 +
  77 + public var lastBaseline: ConstraintMakerExtendable {
  78 + return self.makeExtendableWithAttributes(.lastBaseline)
  79 + }
  80 +
  81 + @available(iOS 8.0, OSX 10.11, *)
  82 + public var firstBaseline: ConstraintMakerExtendable {
  83 + return self.makeExtendableWithAttributes(.firstBaseline)
  84 + }
  85 +
  86 + @available(iOS 8.0, *)
  87 + public var leftMargin: ConstraintMakerExtendable {
  88 + return self.makeExtendableWithAttributes(.leftMargin)
  89 + }
  90 +
  91 + @available(iOS 8.0, *)
  92 + public var rightMargin: ConstraintMakerExtendable {
  93 + return self.makeExtendableWithAttributes(.rightMargin)
  94 + }
  95 +
  96 + @available(iOS 8.0, *)
  97 + public var topMargin: ConstraintMakerExtendable {
  98 + return self.makeExtendableWithAttributes(.topMargin)
  99 + }
  100 +
  101 + @available(iOS 8.0, *)
  102 + public var bottomMargin: ConstraintMakerExtendable {
  103 + return self.makeExtendableWithAttributes(.bottomMargin)
  104 + }
  105 +
  106 + @available(iOS 8.0, *)
  107 + public var leadingMargin: ConstraintMakerExtendable {
  108 + return self.makeExtendableWithAttributes(.leadingMargin)
  109 + }
  110 +
  111 + @available(iOS 8.0, *)
  112 + public var trailingMargin: ConstraintMakerExtendable {
  113 + return self.makeExtendableWithAttributes(.trailingMargin)
  114 + }
  115 +
  116 + @available(iOS 8.0, *)
  117 + public var centerXWithinMargins: ConstraintMakerExtendable {
  118 + return self.makeExtendableWithAttributes(.centerXWithinMargins)
  119 + }
  120 +
  121 + @available(iOS 8.0, *)
  122 + public var centerYWithinMargins: ConstraintMakerExtendable {
  123 + return self.makeExtendableWithAttributes(.centerYWithinMargins)
  124 + }
  125 +
  126 + public var edges: ConstraintMakerExtendable {
  127 + return self.makeExtendableWithAttributes(.edges)
  128 + }
  129 + public var directionalEdges: ConstraintMakerExtendable {
  130 + return self.makeExtendableWithAttributes(.directionalEdges)
  131 + }
  132 + public var size: ConstraintMakerExtendable {
  133 + return self.makeExtendableWithAttributes(.size)
  134 + }
  135 + public var center: ConstraintMakerExtendable {
  136 + return self.makeExtendableWithAttributes(.center)
  137 + }
  138 +
  139 + @available(iOS 8.0, *)
  140 + public var margins: ConstraintMakerExtendable {
  141 + return self.makeExtendableWithAttributes(.margins)
  142 + }
  143 +
  144 + @available(iOS 8.0, *)
  145 + public var directionalMargins: ConstraintMakerExtendable {
  146 + return self.makeExtendableWithAttributes(.directionalMargins)
  147 + }
  148 +
  149 + @available(iOS 8.0, *)
  150 + public var centerWithinMargins: ConstraintMakerExtendable {
  151 + return self.makeExtendableWithAttributes(.centerWithinMargins)
  152 + }
  153 +
  154 + private let item: LayoutConstraintItem
  155 + private var descriptions = [ConstraintDescription]()
  156 +
  157 + internal init(item: LayoutConstraintItem) {
  158 + self.item = item
  159 + self.item.prepare()
  160 + }
  161 +
  162 + internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable {
  163 + let description = ConstraintDescription(item: self.item, attributes: attributes)
  164 + self.descriptions.append(description)
  165 + return ConstraintMakerExtendable(description)
  166 + }
  167 +
  168 + internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
  169 + let maker = ConstraintMaker(item: item)
  170 + closure(maker)
  171 + var constraints: [Constraint] = []
  172 + for description in maker.descriptions {
  173 + guard let constraint = description.constraint else {
  174 + continue
  175 + }
  176 + constraints.append(constraint)
  177 + }
  178 + return constraints
  179 + }
  180 +
  181 + internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
  182 + let constraints = prepareConstraints(item: item, closure: closure)
  183 + for constraint in constraints {
  184 + constraint.activateIfNeeded(updatingExisting: false)
  185 + }
  186 + }
  187 +
  188 + internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
  189 + self.removeConstraints(item: item)
  190 + self.makeConstraints(item: item, closure: closure)
  191 + }
  192 +
  193 + internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
  194 + guard item.constraints.count > 0 else {
  195 + self.makeConstraints(item: item, closure: closure)
  196 + return
  197 + }
  198 +
  199 + let constraints = prepareConstraints(item: item, closure: closure)
  200 + for constraint in constraints {
  201 + constraint.activateIfNeeded(updatingExisting: true)
  202 + }
  203 + }
  204 +
  205 + internal static func removeConstraints(item: LayoutConstraintItem) {
  206 + let constraints = item.constraints
  207 + for constraint in constraints {
  208 + constraint.deactivateIfNeeded()
  209 + }
  210 + }
  211 +
  212 +}
  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 ConstraintMakerEditable: ConstraintMakerPriortizable {
  32 +
  33 + @discardableResult
  34 + public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable {
  35 + self.description.multiplier = amount
  36 + return self
  37 + }
  38 +
  39 + @discardableResult
  40 + public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable {
  41 + return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue)
  42 + }
  43 +
  44 + @discardableResult
  45 + public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable {
  46 + self.description.constant = amount.constraintOffsetTargetValue
  47 + return self
  48 + }
  49 +
  50 + @discardableResult
  51 + public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable {
  52 + self.description.constant = amount.constraintInsetTargetValue
  53 + return self
  54 + }
  55 +
  56 + #if os(iOS) || os(tvOS)
  57 + @discardableResult
  58 + @available(iOS 11.0, tvOS 11.0, *)
  59 + public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable {
  60 + self.description.constant = amount.constraintDirectionalInsetTargetValue
  61 + return self
  62 + }
  63 + #endif
  64 +}
  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 ConstraintMakerExtendable: ConstraintMakerRelatable {
  32 +
  33 + public var left: ConstraintMakerExtendable {
  34 + self.description.attributes += .left
  35 + return self
  36 + }
  37 +
  38 + public var top: ConstraintMakerExtendable {
  39 + self.description.attributes += .top
  40 + return self
  41 + }
  42 +
  43 + public var bottom: ConstraintMakerExtendable {
  44 + self.description.attributes += .bottom
  45 + return self
  46 + }
  47 +
  48 + public var right: ConstraintMakerExtendable {
  49 + self.description.attributes += .right
  50 + return self
  51 + }
  52 +
  53 + public var leading: ConstraintMakerExtendable {
  54 + self.description.attributes += .leading
  55 + return self
  56 + }
  57 +
  58 + public var trailing: ConstraintMakerExtendable {
  59 + self.description.attributes += .trailing
  60 + return self
  61 + }
  62 +
  63 + public var width: ConstraintMakerExtendable {
  64 + self.description.attributes += .width
  65 + return self
  66 + }
  67 +
  68 + public var height: ConstraintMakerExtendable {
  69 + self.description.attributes += .height
  70 + return self
  71 + }
  72 +
  73 + public var centerX: ConstraintMakerExtendable {
  74 + self.description.attributes += .centerX
  75 + return self
  76 + }
  77 +
  78 + public var centerY: ConstraintMakerExtendable {
  79 + self.description.attributes += .centerY
  80 + return self
  81 + }
  82 +
  83 + @available(*, deprecated, message:"Use lastBaseline instead")
  84 + public var baseline: ConstraintMakerExtendable {
  85 + self.description.attributes += .lastBaseline
  86 + return self
  87 + }
  88 +
  89 + public var lastBaseline: ConstraintMakerExtendable {
  90 + self.description.attributes += .lastBaseline
  91 + return self
  92 + }
  93 +
  94 + @available(iOS 8.0, OSX 10.11, *)
  95 + public var firstBaseline: ConstraintMakerExtendable {
  96 + self.description.attributes += .firstBaseline
  97 + return self
  98 + }
  99 +
  100 + @available(iOS 8.0, *)
  101 + public var leftMargin: ConstraintMakerExtendable {
  102 + self.description.attributes += .leftMargin
  103 + return self
  104 + }
  105 +
  106 + @available(iOS 8.0, *)
  107 + public var rightMargin: ConstraintMakerExtendable {
  108 + self.description.attributes += .rightMargin
  109 + return self
  110 + }
  111 +
  112 + @available(iOS 8.0, *)
  113 + public var topMargin: ConstraintMakerExtendable {
  114 + self.description.attributes += .topMargin
  115 + return self
  116 + }
  117 +
  118 + @available(iOS 8.0, *)
  119 + public var bottomMargin: ConstraintMakerExtendable {
  120 + self.description.attributes += .bottomMargin
  121 + return self
  122 + }
  123 +
  124 + @available(iOS 8.0, *)
  125 + public var leadingMargin: ConstraintMakerExtendable {
  126 + self.description.attributes += .leadingMargin
  127 + return self
  128 + }
  129 +
  130 + @available(iOS 8.0, *)
  131 + public var trailingMargin: ConstraintMakerExtendable {
  132 + self.description.attributes += .trailingMargin
  133 + return self
  134 + }
  135 +
  136 + @available(iOS 8.0, *)
  137 + public var centerXWithinMargins: ConstraintMakerExtendable {
  138 + self.description.attributes += .centerXWithinMargins
  139 + return self
  140 + }
  141 +
  142 + @available(iOS 8.0, *)
  143 + public var centerYWithinMargins: ConstraintMakerExtendable {
  144 + self.description.attributes += .centerYWithinMargins
  145 + return self
  146 + }
  147 +
  148 + public var edges: ConstraintMakerExtendable {
  149 + self.description.attributes += .edges
  150 + return self
  151 + }
  152 + public var directionalEdges: ConstraintMakerExtendable {
  153 + self.description.attributes += .directionalEdges
  154 + return self
  155 + }
  156 + public var size: ConstraintMakerExtendable {
  157 + self.description.attributes += .size
  158 + return self
  159 + }
  160 +
  161 + @available(iOS 8.0, *)
  162 + public var margins: ConstraintMakerExtendable {
  163 + self.description.attributes += .margins
  164 + return self
  165 + }
  166 +
  167 + @available(iOS 8.0, *)
  168 + public var directionalMargins: ConstraintMakerExtendable {
  169 + self.description.attributes += .directionalMargins
  170 + return self
  171 + }
  172 +
  173 + @available(iOS 8.0, *)
  174 + public var centerWithinMargins: ConstraintMakerExtendable {
  175 + self.description.attributes += .centerWithinMargins
  176 + return self
  177 + }
  178 +
  179 +}
  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 ConstraintMakerFinalizable {
  32 +
  33 + internal let description: ConstraintDescription
  34 +
  35 + internal init(_ description: ConstraintDescription) {
  36 + self.description = description
  37 + }
  38 +
  39 + @discardableResult
  40 + public func labeled(_ label: String) -> ConstraintMakerFinalizable {
  41 + self.description.label = label
  42 + return self
  43 + }
  44 +
  45 + public var constraint: Constraint {
  46 + return self.description.constraint!
  47 + }
  48 +
  49 +}
  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 ConstraintMakerPriortizable: ConstraintMakerFinalizable {
  32 +
  33 + @discardableResult
  34 + public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable {
  35 + self.description.priority = amount.value
  36 + return self
  37 + }
  38 +
  39 + @discardableResult
  40 + public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable {
  41 + self.description.priority = amount
  42 + return self
  43 + }
  44 +
  45 + @available(*, deprecated, message:"Use priority(.required) instead.")
  46 + @discardableResult
  47 + public func priorityRequired() -> ConstraintMakerFinalizable {
  48 + return self.priority(.required)
  49 + }
  50 +
  51 + @available(*, deprecated, message:"Use priority(.high) instead.")
  52 + @discardableResult
  53 + public func priorityHigh() -> ConstraintMakerFinalizable {
  54 + return self.priority(.high)
  55 + }
  56 +
  57 + @available(*, deprecated, message:"Use priority(.medium) instead.")
  58 + @discardableResult
  59 + public func priorityMedium() -> ConstraintMakerFinalizable {
  60 + return self.priority(.medium)
  61 + }
  62 +
  63 + @available(*, deprecated, message:"Use priority(.low) instead.")
  64 + @discardableResult
  65 + public func priorityLow() -> ConstraintMakerFinalizable {
  66 + return self.priority(.low)
  67 + }
  68 +}
  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 ConstraintMakerRelatable {
  32 +
  33 + internal let description: ConstraintDescription
  34 +
  35 + internal init(_ description: ConstraintDescription) {
  36 + self.description = description
  37 + }
  38 +
  39 + internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable {
  40 + let related: ConstraintItem
  41 + let constant: ConstraintConstantTarget
  42 +
  43 + if let other = other as? ConstraintItem {
  44 + guard other.attributes == ConstraintAttributes.none ||
  45 + other.attributes.layoutAttributes.count <= 1 ||
  46 + other.attributes.layoutAttributes == self.description.attributes.layoutAttributes ||
  47 + other.attributes == .edges && self.description.attributes == .margins ||
  48 + other.attributes == .margins && self.description.attributes == .edges ||
  49 + other.attributes == .directionalEdges && self.description.attributes == .directionalMargins ||
  50 + other.attributes == .directionalMargins && self.description.attributes == .directionalEdges else {
  51 + fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))");
  52 + }
  53 +
  54 + related = other
  55 + constant = 0.0
  56 + } else if let other = other as? ConstraintView {
  57 + related = ConstraintItem(target: other, attributes: ConstraintAttributes.none)
  58 + constant = 0.0
  59 + } else if let other = other as? ConstraintConstantTarget {
  60 + related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none)
  61 + constant = other
  62 + } else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide {
  63 + related = ConstraintItem(target: other, attributes: ConstraintAttributes.none)
  64 + constant = 0.0
  65 + } else {
  66 + fatalError("Invalid constraint. (\(file), \(line))")
  67 + }
  68 +
  69 + let editable = ConstraintMakerEditable(self.description)
  70 + editable.description.sourceLocation = (file, line)
  71 + editable.description.relation = relation
  72 + editable.description.related = related
  73 + editable.description.constant = constant
  74 + return editable
  75 + }
  76 +
  77 + @discardableResult
  78 + public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
  79 + return self.relatedTo(other, relation: .equal, file: file, line: line)
  80 + }
  81 +
  82 + @discardableResult
  83 + public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
  84 + guard let other = self.description.item.superview else {
  85 + fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.")
  86 + }
  87 + return self.relatedTo(other, relation: .equal, file: file, line: line)
  88 + }
  89 +
  90 + @discardableResult
  91 + public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
  92 + return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line)
  93 + }
  94 +
  95 + @discardableResult
  96 + public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
  97 + guard let other = self.description.item.superview else {
  98 + fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.")
  99 + }
  100 + return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line)
  101 + }
  102 +
  103 + @discardableResult
  104 + public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
  105 + return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line)
  106 + }
  107 +
  108 + @discardableResult
  109 + public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
  110 + guard let other = self.description.item.superview else {
  111 + fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.")
  112 + }
  113 + return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line)
  114 + }
  115 +}
  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 ConstraintMultiplierTarget {
  32 +
  33 + var constraintMultiplierTargetValue: CGFloat { get }
  34 +
  35 +}
  36 +
  37 +extension Int: ConstraintMultiplierTarget {
  38 +
  39 + public var constraintMultiplierTargetValue: CGFloat {
  40 + return CGFloat(self)
  41 + }
  42 +
  43 +}
  44 +
  45 +extension UInt: ConstraintMultiplierTarget {
  46 +
  47 + public var constraintMultiplierTargetValue: CGFloat {
  48 + return CGFloat(self)
  49 + }
  50 +
  51 +}
  52 +
  53 +extension Float: ConstraintMultiplierTarget {
  54 +
  55 + public var constraintMultiplierTargetValue: CGFloat {
  56 + return CGFloat(self)
  57 + }
  58 +
  59 +}
  60 +
  61 +extension Double: ConstraintMultiplierTarget {
  62 +
  63 + public var constraintMultiplierTargetValue: CGFloat {
  64 + return CGFloat(self)
  65 + }
  66 +
  67 +}
  68 +
  69 +extension CGFloat: ConstraintMultiplierTarget {
  70 +
  71 + public var constraintMultiplierTargetValue: CGFloat {
  72 + return self
  73 + }
  74 +
  75 +}
  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 ConstraintOffsetTarget: ConstraintConstantTarget {
  32 +}
  33 +
  34 +extension Int: ConstraintOffsetTarget {
  35 +}
  36 +
  37 +extension UInt: ConstraintOffsetTarget {
  38 +}
  39 +
  40 +extension Float: ConstraintOffsetTarget {
  41 +}
  42 +
  43 +extension Double: ConstraintOffsetTarget {
  44 +}
  45 +
  46 +extension CGFloat: ConstraintOffsetTarget {
  47 +}
  48 +
  49 +extension ConstraintOffsetTarget {
  50 +
  51 + internal var constraintOffsetTargetValue: CGFloat {
  52 + let offset: CGFloat
  53 + if let amount = self as? Float {
  54 + offset = CGFloat(amount)
  55 + } else if let amount = self as? Double {
  56 + offset = CGFloat(amount)
  57 + } else if let amount = self as? CGFloat {
  58 + offset = CGFloat(amount)
  59 + } else if let amount = self as? Int {
  60 + offset = CGFloat(amount)
  61 + } else if let amount = self as? UInt {
  62 + offset = CGFloat(amount)
  63 + } else {
  64 + offset = 0.0
  65 + }
  66 + return offset
  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 +public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable {
  31 + public typealias FloatLiteralType = Float
  32 +
  33 + public let value: Float
  34 +
  35 + public init(floatLiteral value: Float) {
  36 + self.value = value
  37 + }
  38 +
  39 + public init(_ value: Float) {
  40 + self.value = value
  41 + }
  42 +
  43 + public static var required: ConstraintPriority {
  44 + return 1000.0
  45 + }
  46 +
  47 + public static var high: ConstraintPriority {
  48 + return 750.0
  49 + }
  50 +
  51 + public static var medium: ConstraintPriority {
  52 + #if os(OSX)
  53 + return 501.0
  54 + #else
  55 + return 500.0
  56 + #endif
  57 +
  58 + }
  59 +
  60 + public static var low: ConstraintPriority {
  61 + return 250.0
  62 + }
  63 +
  64 + public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool {
  65 + return lhs.value == rhs.value
  66 + }
  67 +
  68 + // MARK: Strideable
  69 +
  70 + public func advanced(by n: FloatLiteralType) -> ConstraintPriority {
  71 + return ConstraintPriority(floatLiteral: value + n)
  72 + }
  73 +
  74 + public func distance(to other: ConstraintPriority) -> FloatLiteralType {
  75 + return other.value - value
  76 + }
  77 +}
  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 ConstraintPriorityTarget {
  32 +
  33 + var constraintPriorityTargetValue: Float { get }
  34 +
  35 +}
  36 +
  37 +extension Int: ConstraintPriorityTarget {
  38 +
  39 + public var constraintPriorityTargetValue: Float {
  40 + return Float(self)
  41 + }
  42 +
  43 +}
  44 +
  45 +extension UInt: ConstraintPriorityTarget {
  46 +
  47 + public var constraintPriorityTargetValue: Float {
  48 + return Float(self)
  49 + }
  50 +
  51 +}
  52 +
  53 +extension Float: ConstraintPriorityTarget {
  54 +
  55 + public var constraintPriorityTargetValue: Float {
  56 + return self
  57 + }
  58 +
  59 +}
  60 +
  61 +extension Double: ConstraintPriorityTarget {
  62 +
  63 + public var constraintPriorityTargetValue: Float {
  64 + return Float(self)
  65 + }
  66 +
  67 +}
  68 +
  69 +extension CGFloat: ConstraintPriorityTarget {
  70 +
  71 + public var constraintPriorityTargetValue: Float {
  72 + return Float(self)
  73 + }
  74 +
  75 +}
  76 +
  77 +#if os(iOS) || os(tvOS)
  78 +extension UILayoutPriority: ConstraintPriorityTarget {
  79 +
  80 + public var constraintPriorityTargetValue: Float {
  81 + return self.rawValue
  82 + }
  83 +
  84 +}
  85 +#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 ConstraintRelatableTarget {
  32 +}
  33 +
  34 +extension Int: ConstraintRelatableTarget {
  35 +}
  36 +
  37 +extension UInt: ConstraintRelatableTarget {
  38 +}
  39 +
  40 +extension Float: ConstraintRelatableTarget {
  41 +}
  42 +
  43 +extension Double: ConstraintRelatableTarget {
  44 +}
  45 +
  46 +extension CGFloat: ConstraintRelatableTarget {
  47 +}
  48 +
  49 +extension CGSize: ConstraintRelatableTarget {
  50 +}
  51 +
  52 +extension CGPoint: ConstraintRelatableTarget {
  53 +}
  54 +
  55 +extension ConstraintInsets: ConstraintRelatableTarget {
  56 +}
  57 +
  58 +#if os(iOS) || os(tvOS)
  59 +@available(iOS 11.0, tvOS 11.0, *)
  60 +extension ConstraintDirectionalInsets: ConstraintRelatableTarget {
  61 +}
  62 +#endif
  63 +
  64 +extension ConstraintItem: ConstraintRelatableTarget {
  65 +}
  66 +
  67 +extension ConstraintView: ConstraintRelatableTarget {
  68 +}
  69 +
  70 +@available(iOS 9.0, OSX 10.11, *)
  71 +extension ConstraintLayoutGuide: ConstraintRelatableTarget {
  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 +internal enum ConstraintRelation : Int {
  32 + case equal = 1
  33 + case lessThanOrEqual
  34 + case greaterThanOrEqual
  35 +
  36 + internal var layoutRelation: LayoutRelation {
  37 + get {
  38 + switch(self) {
  39 + case .equal:
  40 + return .equal
  41 + case .lessThanOrEqual:
  42 + return .lessThanOrEqual
  43 + case .greaterThanOrEqual:
  44 + return .greaterThanOrEqual
  45 + }
  46 + }
  47 + }
  48 +}
  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 extension ConstraintView {
  32 +
  33 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  34 + var snp_left: ConstraintItem { return self.snp.left }
  35 +
  36 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  37 + var snp_top: ConstraintItem { return self.snp.top }
  38 +
  39 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  40 + var snp_right: ConstraintItem { return self.snp.right }
  41 +
  42 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  43 + var snp_bottom: ConstraintItem { return self.snp.bottom }
  44 +
  45 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  46 + var snp_leading: ConstraintItem { return self.snp.leading }
  47 +
  48 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  49 + var snp_trailing: ConstraintItem { return self.snp.trailing }
  50 +
  51 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  52 + var snp_width: ConstraintItem { return self.snp.width }
  53 +
  54 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  55 + var snp_height: ConstraintItem { return self.snp.height }
  56 +
  57 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  58 + var snp_centerX: ConstraintItem { return self.snp.centerX }
  59 +
  60 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  61 + var snp_centerY: ConstraintItem { return self.snp.centerY }
  62 +
  63 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  64 + var snp_baseline: ConstraintItem { return self.snp.baseline }
  65 +
  66 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  67 + @available(iOS 8.0, OSX 10.11, *)
  68 + var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline }
  69 +
  70 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  71 + @available(iOS 8.0, OSX 10.11, *)
  72 + var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline }
  73 +
  74 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  75 + @available(iOS 8.0, *)
  76 + var snp_leftMargin: ConstraintItem { return self.snp.leftMargin }
  77 +
  78 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  79 + @available(iOS 8.0, *)
  80 + var snp_topMargin: ConstraintItem { return self.snp.topMargin }
  81 +
  82 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  83 + @available(iOS 8.0, *)
  84 + var snp_rightMargin: ConstraintItem { return self.snp.rightMargin }
  85 +
  86 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  87 + @available(iOS 8.0, *)
  88 + var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin }
  89 +
  90 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  91 + @available(iOS 8.0, *)
  92 + var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin }
  93 +
  94 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  95 + @available(iOS 8.0, *)
  96 + var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin }
  97 +
  98 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  99 + @available(iOS 8.0, *)
  100 + var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins }
  101 +
  102 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  103 + @available(iOS 8.0, *)
  104 + var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins }
  105 +
  106 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  107 + var snp_edges: ConstraintItem { return self.snp.edges }
  108 +
  109 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  110 + var snp_size: ConstraintItem { return self.snp.size }
  111 +
  112 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  113 + var snp_center: ConstraintItem { return self.snp.center }
  114 +
  115 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  116 + @available(iOS 8.0, *)
  117 + var snp_margins: ConstraintItem { return self.snp.margins }
  118 +
  119 + @available(iOS, deprecated, message:"Use newer snp.* syntax.")
  120 + @available(iOS 8.0, *)
  121 + var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins }
  122 +
  123 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  124 + func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
  125 + return self.snp.prepareConstraints(closure)
  126 + }
  127 +
  128 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  129 + func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  130 + self.snp.makeConstraints(closure)
  131 + }
  132 +
  133 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  134 + func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  135 + self.snp.remakeConstraints(closure)
  136 + }
  137 +
  138 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  139 + func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  140 + self.snp.updateConstraints(closure)
  141 + }
  142 +
  143 + @available(*, deprecated, message:"Use newer snp.* syntax.")
  144 + func snp_removeConstraints() {
  145 + self.snp.removeConstraints()
  146 + }
  147 +
  148 + var snp: ConstraintViewDSL {
  149 + return ConstraintViewDSL(view: self)
  150 + }
  151 +
  152 +}
  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 ConstraintView = UIView
  33 +#else
  34 + public typealias ConstraintView = NSView
  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 struct ConstraintViewDSL: ConstraintAttributesDSL {
  32 +
  33 + @discardableResult
  34 + public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
  35 + return ConstraintMaker.prepareConstraints(item: self.view, closure: closure)
  36 + }
  37 +
  38 + public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  39 + ConstraintMaker.makeConstraints(item: self.view, closure: closure)
  40 + }
  41 +
  42 + public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  43 + ConstraintMaker.remakeConstraints(item: self.view, closure: closure)
  44 + }
  45 +
  46 + public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
  47 + ConstraintMaker.updateConstraints(item: self.view, closure: closure)
  48 + }
  49 +
  50 + public func removeConstraints() {
  51 + ConstraintMaker.removeConstraints(item: self.view)
  52 + }
  53 +
  54 + public var contentHuggingHorizontalPriority: Float {
  55 + get {
  56 + return self.view.contentHuggingPriority(for: .horizontal).rawValue
  57 + }
  58 + nonmutating set {
  59 + self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal)
  60 + }
  61 + }
  62 +
  63 + public var contentHuggingVerticalPriority: Float {
  64 + get {
  65 + return self.view.contentHuggingPriority(for: .vertical).rawValue
  66 + }
  67 + nonmutating set {
  68 + self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical)
  69 + }
  70 + }
  71 +
  72 + public var contentCompressionResistanceHorizontalPriority: Float {
  73 + get {
  74 + return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue
  75 + }
  76 + nonmutating set {
  77 + self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal)
  78 + }
  79 + }
  80 +
  81 + public var contentCompressionResistanceVerticalPriority: Float {
  82 + get {
  83 + return self.view.contentCompressionResistancePriority(for: .vertical).rawValue
  84 + }
  85 + nonmutating set {
  86 + self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical)
  87 + }
  88 + }
  89 +
  90 + public var target: AnyObject? {
  91 + return self.view
  92 + }
  93 +
  94 + internal let view: ConstraintView
  95 +
  96 + internal init(view: ConstraintView) {
  97 + self.view = view
  98 +
  99 + }
  100 +
  101 +}
  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 extension LayoutConstraint {
  31 +
  32 + override var description: String {
  33 + var description = "<"
  34 +
  35 + description += descriptionForObject(self)
  36 +
  37 + if let firstItem = conditionalOptional(from: self.firstItem) {
  38 + description += " \(descriptionForObject(firstItem))"
  39 + }
  40 +
  41 + if self.firstAttribute != .notAnAttribute {
  42 + description += ".\(descriptionForAttribute(self.firstAttribute))"
  43 + }
  44 +
  45 + description += " \(descriptionForRelation(self.relation))"
  46 +
  47 + if let secondItem = self.secondItem {
  48 + description += " \(descriptionForObject(secondItem))"
  49 + }
  50 +
  51 + if self.secondAttribute != .notAnAttribute {
  52 + description += ".\(descriptionForAttribute(self.secondAttribute))"
  53 + }
  54 +
  55 + if self.multiplier != 1.0 {
  56 + description += " * \(self.multiplier)"
  57 + }
  58 +
  59 + if self.secondAttribute == .notAnAttribute {
  60 + description += " \(self.constant)"
  61 + } else {
  62 + if self.constant > 0.0 {
  63 + description += " + \(self.constant)"
  64 + } else if self.constant < 0.0 {
  65 + description += " - \(abs(self.constant))"
  66 + }
  67 + }
  68 +
  69 + if self.priority.rawValue != 1000.0 {
  70 + description += " ^\(self.priority)"
  71 + }
  72 +
  73 + description += ">"
  74 +
  75 + return description
  76 + }
  77 +
  78 +}
  79 +
  80 +private func descriptionForRelation(_ relation: LayoutRelation) -> String {
  81 + switch relation {
  82 + case .equal: return "=="
  83 + case .greaterThanOrEqual: return ">="
  84 + case .lessThanOrEqual: return "<="
  85 + #if swift(>=5.0)
  86 + @unknown default: return "unknown"
  87 + #endif
  88 + }
  89 +}
  90 +
  91 +private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String {
  92 + #if os(iOS) || os(tvOS)
  93 + switch attribute {
  94 + case .notAnAttribute: return "notAnAttribute"
  95 + case .top: return "top"
  96 + case .left: return "left"
  97 + case .bottom: return "bottom"
  98 + case .right: return "right"
  99 + case .leading: return "leading"
  100 + case .trailing: return "trailing"
  101 + case .width: return "width"
  102 + case .height: return "height"
  103 + case .centerX: return "centerX"
  104 + case .centerY: return "centerY"
  105 + case .lastBaseline: return "lastBaseline"
  106 + case .firstBaseline: return "firstBaseline"
  107 + case .topMargin: return "topMargin"
  108 + case .leftMargin: return "leftMargin"
  109 + case .bottomMargin: return "bottomMargin"
  110 + case .rightMargin: return "rightMargin"
  111 + case .leadingMargin: return "leadingMargin"
  112 + case .trailingMargin: return "trailingMargin"
  113 + case .centerXWithinMargins: return "centerXWithinMargins"
  114 + case .centerYWithinMargins: return "centerYWithinMargins"
  115 + #if swift(>=5.0)
  116 + @unknown default: return "unknown"
  117 + #endif
  118 + }
  119 + #else
  120 + switch attribute {
  121 + case .notAnAttribute: return "notAnAttribute"
  122 + case .top: return "top"
  123 + case .left: return "left"
  124 + case .bottom: return "bottom"
  125 + case .right: return "right"
  126 + case .leading: return "leading"
  127 + case .trailing: return "trailing"
  128 + case .width: return "width"
  129 + case .height: return "height"
  130 + case .centerX: return "centerX"
  131 + case .centerY: return "centerY"
  132 + case .lastBaseline: return "lastBaseline"
  133 + case .firstBaseline: return "firstBaseline"
  134 + #if swift(>=5.0)
  135 + @unknown default: return "unknown"
  136 + #endif
  137 + }
  138 + #endif
  139 +}
  140 +
  141 +private func conditionalOptional<T>(from object: Optional<T>) -> Optional<T> {
  142 + return object
  143 +}
  144 +
  145 +private func conditionalOptional<T>(from object: T) -> Optional<T> {
  146 + return Optional.some(object)
  147 +}
  148 +
  149 +private func descriptionForObject(_ object: AnyObject) -> String {
  150 + let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object)))
  151 + var desc = ""
  152 +
  153 + desc += type(of: object).description()
  154 +
  155 + if let object = object as? ConstraintView {
  156 + desc += ":\(object.snp.label() ?? pointerDescription)"
  157 + } else if let object = object as? LayoutConstraint {
  158 + desc += ":\(object.label ?? pointerDescription)"
  159 + } else {
  160 + desc += ":\(pointerDescription)"
  161 + }
  162 +
  163 + if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 {
  164 + desc += "@\((file as NSString).lastPathComponent)#\(line)"
  165 + }
  166 +
  167 + desc += ""
  168 + return desc
  169 +}
  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 LayoutConstraint : NSLayoutConstraint {
  32 +
  33 + public var label: String? {
  34 + get {
  35 + return self.identifier
  36 + }
  37 + set {
  38 + self.identifier = newValue
  39 + }
  40 + }
  41 +
  42 + internal weak var constraint: Constraint? = nil
  43 +
  44 +}
  45 +
  46 +internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool {
  47 + // If firstItem or secondItem on either constraint has a dangling pointer
  48 + // this comparison can cause a crash. The solution for this is to ensure
  49 + // your layout code hold strong references to things like Views, LayoutGuides
  50 + // and LayoutAnchors as SnapKit will not keep strong references to any of these.
  51 + guard lhs.firstAttribute == rhs.firstAttribute &&
  52 + lhs.secondAttribute == rhs.secondAttribute &&
  53 + lhs.relation == rhs.relation &&
  54 + lhs.priority == rhs.priority &&
  55 + lhs.multiplier == rhs.multiplier &&
  56 + lhs.secondItem === rhs.secondItem &&
  57 + lhs.firstItem === rhs.firstItem else {
  58 + return false
  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 +#else
  27 + import AppKit
  28 +#endif
  29 +
  30 +
  31 +public protocol LayoutConstraintItem: class {
  32 +}
  33 +
  34 +@available(iOS 9.0, OSX 10.11, *)
  35 +extension ConstraintLayoutGuide : LayoutConstraintItem {
  36 +}
  37 +
  38 +extension ConstraintView : LayoutConstraintItem {
  39 +}
  40 +
  41 +
  42 +extension LayoutConstraintItem {
  43 +
  44 + internal func prepare() {
  45 + if let view = self as? ConstraintView {
  46 + view.translatesAutoresizingMaskIntoConstraints = false
  47 + }
  48 + }
  49 +
  50 + internal var superview: ConstraintView? {
  51 + if let view = self as? ConstraintView {
  52 + return view.superview
  53 + }
  54 +
  55 + if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide {
  56 + return guide.owningView
  57 + }
  58 +
  59 + return nil
  60 + }
  61 + internal var constraints: [Constraint] {
  62 + return self.constraintsSet.allObjects as! [Constraint]
  63 + }
  64 +
  65 + internal func add(constraints: [Constraint]) {
  66 + let constraintsSet = self.constraintsSet
  67 + for constraint in constraints {
  68 + constraintsSet.add(constraint)
  69 + }
  70 + }
  71 +
  72 + internal func remove(constraints: [Constraint]) {
  73 + let constraintsSet = self.constraintsSet
  74 + for constraint in constraints {
  75 + constraintsSet.remove(constraint)
  76 + }
  77 + }
  78 +
  79 + private var constraintsSet: NSMutableSet {
  80 + let constraintsSet: NSMutableSet
  81 +
  82 + if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet {
  83 + constraintsSet = existing
  84 + } else {
  85 + constraintsSet = NSMutableSet()
  86 + objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  87 + }
  88 + return constraintsSet
  89 +
  90 + }
  91 +
  92 +}
  93 +private var constraintsKey: UInt8 = 0
  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 +import Foundation
  25 +
  26 +#if os(iOS) || os(tvOS)
  27 + import UIKit
  28 +#if swift(>=4.2)
  29 + typealias LayoutRelation = NSLayoutConstraint.Relation
  30 + typealias LayoutAttribute = NSLayoutConstraint.Attribute
  31 +#else
  32 + typealias LayoutRelation = NSLayoutRelation
  33 + typealias LayoutAttribute = NSLayoutAttribute
  34 +#endif
  35 + typealias LayoutPriority = UILayoutPriority
  36 +#else
  37 + import AppKit
  38 + typealias LayoutRelation = NSLayoutConstraint.Relation
  39 + typealias LayoutAttribute = NSLayoutConstraint.Attribute
  40 + typealias LayoutPriority = NSLayoutConstraint.Priority
  41 +#endif
  42 +
  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 8.0, *)
  30 +public extension ConstraintLayoutSupport {
  31 +
  32 + var snp: ConstraintLayoutSupportDSL {
  33 + return ConstraintLayoutSupportDSL(support: self)
  34 + }
  35 +
  36 +}
  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>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>${EXECUTABLE_NAME}</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>${PRODUCT_NAME}</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>${CURRENT_PROJECT_VERSION}</string>
  23 + <key>NSPrincipalClass</key>
  24 + <string></string>
  25 +</dict>
  26 +</plist>
  1 +# Acknowledgements
  2 +This application makes use of the following third party libraries:
  3 +
  4 +## SnapKit
  5 +
  6 +Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
  7 +
  8 +Permission is hereby granted, free of charge, to any person obtaining a copy
  9 +of this software and associated documentation files (the "Software"), to deal
  10 +in the Software without restriction, including without limitation the rights
  11 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12 +copies of the Software, and to permit persons to whom the Software is
  13 +furnished to do so, subject to the following conditions:
  14 +
  15 +The above copyright notice and this permission notice shall be included in
  16 +all copies or substantial portions of the Software.
  17 +
  18 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  23 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  24 +THE SOFTWARE.
  25 +
  26 +Generated by CocoaPods - https://cocoapods.org
  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>PreferenceSpecifiers</key>
  6 + <array>
  7 + <dict>
  8 + <key>FooterText</key>
  9 + <string>This application makes use of the following third party libraries:</string>
  10 + <key>Title</key>
  11 + <string>Acknowledgements</string>
  12 + <key>Type</key>
  13 + <string>PSGroupSpecifier</string>
  14 + </dict>
  15 + <dict>
  16 + <key>FooterText</key>
  17 + <string>Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
  18 +
  19 +Permission is hereby granted, free of charge, to any person obtaining a copy
  20 +of this software and associated documentation files (the "Software"), to deal
  21 +in the Software without restriction, including without limitation the rights
  22 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  23 +copies of the Software, and to permit persons to whom the Software is
  24 +furnished to do so, subject to the following conditions:
  25 +
  26 +The above copyright notice and this permission notice shall be included in
  27 +all copies or substantial portions of the Software.
  28 +
  29 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  30 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  32 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  33 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  34 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35 +THE SOFTWARE.
  36 +</string>
  37 + <key>License</key>
  38 + <string>MIT</string>
  39 + <key>Title</key>
  40 + <string>SnapKit</string>
  41 + <key>Type</key>
  42 + <string>PSGroupSpecifier</string>
  43 + </dict>
  44 + <dict>
  45 + <key>FooterText</key>
  46 + <string>Generated by CocoaPods - https://cocoapods.org</string>
  47 + <key>Title</key>
  48 + <string></string>
  49 + <key>Type</key>
  50 + <string>PSGroupSpecifier</string>
  51 + </dict>
  52 + </array>
  53 + <key>StringsTable</key>
  54 + <string>Acknowledgements</string>
  55 + <key>Title</key>
  56 + <string>Acknowledgements</string>
  57 +</dict>
  58 +</plist>
  1 +#import <Foundation/Foundation.h>
  2 +@interface PodsDummy_Pods_InterQR_Internship : NSObject
  3 +@end
  4 +@implementation PodsDummy_Pods_InterQR_Internship
  5 +@end
  1 +${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks.sh
  2 +${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
  1 +${PODS_ROOT}/Target Support Files/Pods-InterQR-Internship/Pods-InterQR-Internship-frameworks.sh
  2 +${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
  1 +#!/bin/sh
  2 +set -e
  3 +set -u
  4 +set -o pipefail
  5 +
  6 +function on_error {
  7 + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
  8 +}
  9 +trap 'on_error $LINENO' ERR
  10 +
  11 +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
  12 + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
  13 + # frameworks to, so exit 0 (signalling the script phase was successful).
  14 + exit 0
  15 +fi
  16 +
  17 +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
  18 +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
  19 +
  20 +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
  21 +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
  22 +BCSYMBOLMAP_DIR="BCSymbolMaps"
  23 +
  24 +
  25 +# This protects against multiple targets copying the same framework dependency at the same time. The solution
  26 +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
  27 +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
  28 +
  29 +# Copies and strips a vendored framework
  30 +install_framework()
  31 +{
  32 + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
  33 + local source="${BUILT_PRODUCTS_DIR}/$1"
  34 + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
  35 + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
  36 + elif [ -r "$1" ]; then
  37 + local source="$1"
  38 + fi
  39 +
  40 + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
  41 +
  42 + if [ -L "${source}" ]; then
  43 + echo "Symlinked..."
  44 + source="$(readlink "${source}")"
  45 + fi
  46 +
  47 + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
  48 + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied
  49 + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do
  50 + echo "Installing $f"
  51 + install_bcsymbolmap "$f" "$destination"
  52 + rm "$f"
  53 + done
  54 + rmdir "${source}/${BCSYMBOLMAP_DIR}"
  55 + fi
  56 +
  57 + # Use filter instead of exclude so missing patterns don't throw errors.
  58 + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
  59 + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
  60 +
  61 + local basename
  62 + basename="$(basename -s .framework "$1")"
  63 + binary="${destination}/${basename}.framework/${basename}"
  64 +
  65 + if ! [ -r "$binary" ]; then
  66 + binary="${destination}/${basename}"
  67 + elif [ -L "${binary}" ]; then
  68 + echo "Destination binary is symlinked..."
  69 + dirname="$(dirname "${binary}")"
  70 + binary="${dirname}/$(readlink "${binary}")"
  71 + fi
  72 +
  73 + # Strip invalid architectures so "fat" simulator / device frameworks work on device
  74 + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
  75 + strip_invalid_archs "$binary"
  76 + fi
  77 +
  78 + # Resign the code if required by the build settings to avoid unstable apps
  79 + code_sign_if_enabled "${destination}/$(basename "$1")"
  80 +
  81 + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
  82 + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
  83 + local swift_runtime_libs
  84 + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u)
  85 + for lib in $swift_runtime_libs; do
  86 + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  87 + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  88 + code_sign_if_enabled "${destination}/${lib}"
  89 + done
  90 + fi
  91 +}
  92 +# Copies and strips a vendored dSYM
  93 +install_dsym() {
  94 + local source="$1"
  95 + warn_missing_arch=${2:-true}
  96 + if [ -r "$source" ]; then
  97 + # Copy the dSYM into the targets temp dir.
  98 + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
  99 + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
  100 +
  101 + local basename
  102 + basename="$(basename -s .dSYM "$source")"
  103 + binary_name="$(ls "$source/Contents/Resources/DWARF")"
  104 + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
  105 +
  106 + # Strip invalid architectures from the dSYM.
  107 + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
  108 + strip_invalid_archs "$binary" "$warn_missing_arch"
  109 + fi
  110 + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then
  111 + # Move the stripped file into its final destination.
  112 + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
  113 + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
  114 + else
  115 + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
  116 + mkdir -p "${DWARF_DSYM_FOLDER_PATH}"
  117 + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
  118 + fi
  119 + fi
  120 +}
  121 +
  122 +# Used as a return value for each invocation of `strip_invalid_archs` function.
  123 +STRIP_BINARY_RETVAL=0
  124 +
  125 +# Strip invalid architectures
  126 +strip_invalid_archs() {
  127 + binary="$1"
  128 + warn_missing_arch=${2:-true}
  129 + # Get architectures for current target binary
  130 + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
  131 + # Intersect them with the architectures we are building for
  132 + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
  133 + # If there are no archs supported by this binary then warn the user
  134 + if [[ -z "$intersected_archs" ]]; then
  135 + if [[ "$warn_missing_arch" == "true" ]]; then
  136 + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
  137 + fi
  138 + STRIP_BINARY_RETVAL=1
  139 + return
  140 + fi
  141 + stripped=""
  142 + for arch in $binary_archs; do
  143 + if ! [[ "${ARCHS}" == *"$arch"* ]]; then
  144 + # Strip non-valid architectures in-place
  145 + lipo -remove "$arch" -output "$binary" "$binary"
  146 + stripped="$stripped $arch"
  147 + fi
  148 + done
  149 + if [[ "$stripped" ]]; then
  150 + echo "Stripped $binary of architectures:$stripped"
  151 + fi
  152 + STRIP_BINARY_RETVAL=0
  153 +}
  154 +
  155 +# Copies the bcsymbolmap files of a vendored framework
  156 +install_bcsymbolmap() {
  157 + local bcsymbolmap_path="$1"
  158 + local destination="${BUILT_PRODUCTS_DIR}"
  159 + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}""
  160 + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
  161 +}
  162 +
  163 +# Signs a framework with the provided identity
  164 +code_sign_if_enabled() {
  165 + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
  166 + # Use the current code_sign_identity
  167 + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
  168 + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
  169 +
  170 + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
  171 + code_sign_cmd="$code_sign_cmd &"
  172 + fi
  173 + echo "$code_sign_cmd"
  174 + eval "$code_sign_cmd"
  175 + fi
  176 +}
  177 +
  178 +if [[ "$CONFIGURATION" == "Debug" ]]; then
  179 + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
  180 +fi
  181 +if [[ "$CONFIGURATION" == "Release" ]]; then
  182 + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
  183 +fi
  184 +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
  185 + wait
  186 +fi
  1 +#ifdef __OBJC__
  2 +#import <UIKit/UIKit.h>
  3 +#else
  4 +#ifndef FOUNDATION_EXPORT
  5 +#if defined(__cplusplus)
  6 +#define FOUNDATION_EXPORT extern "C"
  7 +#else
  8 +#define FOUNDATION_EXPORT extern
  9 +#endif
  10 +#endif
  11 +#endif
  12 +
  13 +
  14 +FOUNDATION_EXPORT double Pods_InterQR_InternshipVersionNumber;
  15 +FOUNDATION_EXPORT const unsigned char Pods_InterQR_InternshipVersionString[];
  16 +
  1 +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
  2 +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
  3 +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit"
  4 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
  5 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers"
  6 +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
  7 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
  8 +OTHER_LDFLAGS = $(inherited) -framework "SnapKit"
  9 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
  10 +PODS_BUILD_DIR = ${BUILD_DIR}
  11 +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
  12 +PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
  13 +PODS_ROOT = ${SRCROOT}/Pods
  14 +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
  15 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
  1 +framework module Pods_InterQR_Internship {
  2 + umbrella header "Pods-InterQR-Internship-umbrella.h"
  3 +
  4 + export *
  5 + module * { export * }
  6 +}
  1 +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
  2 +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
  3 +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit"
  4 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
  5 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers"
  6 +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
  7 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
  8 +OTHER_LDFLAGS = $(inherited) -framework "SnapKit"
  9 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
  10 +PODS_BUILD_DIR = ${BUILD_DIR}
  11 +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
  12 +PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
  13 +PODS_ROOT = ${SRCROOT}/Pods
  14 +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
  15 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
  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>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>${EXECUTABLE_NAME}</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>${PRODUCT_NAME}</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>5.0.1</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>${CURRENT_PROJECT_VERSION}</string>
  23 + <key>NSPrincipalClass</key>
  24 + <string></string>
  25 +</dict>
  26 +</plist>
  1 +#import <Foundation/Foundation.h>
  2 +@interface PodsDummy_SnapKit : NSObject
  3 +@end
  4 +@implementation PodsDummy_SnapKit
  5 +@end
  1 +#ifdef __OBJC__
  2 +#import <UIKit/UIKit.h>
  3 +#else
  4 +#ifndef FOUNDATION_EXPORT
  5 +#if defined(__cplusplus)
  6 +#define FOUNDATION_EXPORT extern "C"
  7 +#else
  8 +#define FOUNDATION_EXPORT extern
  9 +#endif
  10 +#endif
  11 +#endif
  12 +
  1 +#ifdef __OBJC__
  2 +#import <UIKit/UIKit.h>
  3 +#else
  4 +#ifndef FOUNDATION_EXPORT
  5 +#if defined(__cplusplus)
  6 +#define FOUNDATION_EXPORT extern "C"
  7 +#else
  8 +#define FOUNDATION_EXPORT extern
  9 +#endif
  10 +#endif
  11 +#endif
  12 +
  13 +
  14 +FOUNDATION_EXPORT double SnapKitVersionNumber;
  15 +FOUNDATION_EXPORT const unsigned char SnapKitVersionString[];
  16 +
  1 +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
  2 +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
  3 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
  4 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
  5 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
  6 +PODS_BUILD_DIR = ${BUILD_DIR}
  7 +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
  8 +PODS_ROOT = ${SRCROOT}
  9 +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
  10 +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
  11 +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
  12 +SKIP_INSTALL = YES
  13 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
  1 +framework module SnapKit {
  2 + umbrella header "SnapKit-umbrella.h"
  3 +
  4 + export *
  5 + module * { export * }
  6 +}
  1 +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
  2 +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
  3 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
  4 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
  5 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
  6 +PODS_BUILD_DIR = ${BUILD_DIR}
  7 +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
  8 +PODS_ROOT = ${SRCROOT}
  9 +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
  10 +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
  11 +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
  12 +SKIP_INSTALL = YES
  13 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
No preview for this file type
No preview for this file type
No preview for this file type
  1 +[InternetShortcut]
  2 +URL=https://fontsme.com/sk-modernist.font
  1 +Sk-Modernist
  2 +
  3 +seankanedesign.com
  4 +
  5 +LICENSING AGREEMENT
  6 +
  7 +YOU MAY:
  8 +
  9 +1) USE THIS FONT IN COMMERCIAL DESIGN
  10 +
  11 +2) USE THIS FONT IN PERSONAL DESIGN
  12 +
  13 +YOU MAY NOT:
  14 +
  15 +1) RE-DISTRIBUTE THIS FONT BY ANY MEANS, FOR FREE, OR FOR A FEE.
  16 +
  17 +2) ALTER THIS FONT FOR RE-DISTRIBUTION
  18 +
  19 +FOR ALL OTHER MATTERS, EMAIL US AT:
  20 +
  21 +mail@seankanedesign.com
Please register or login to post a comment