├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── Example ├── JHTAlertController.framework.zip ├── JHTAlertController.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── JHTAlertController-Example.xcscheme │ │ └── JHTAlertController.xcscheme ├── JHTAlertController.xcworkspace │ └── contents.xcworkspacedata ├── JHTAlertController │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Turtle.imageset │ │ │ ├── Contents.json │ │ │ └── Turtle.png │ │ └── TurtleDark.imageset │ │ │ ├── Contents.json │ │ │ └── Turtle.png │ ├── Info.plist │ ├── JHTAlertController.h │ ├── Turtle.png │ └── ViewController.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── JHTAlertController.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── JHTAlertController │ │ ├── Info.plist │ │ ├── JHTAlertController-dummy.m │ │ ├── JHTAlertController-prefix.pch │ │ ├── JHTAlertController-umbrella.h │ │ ├── JHTAlertController.modulemap │ │ └── JHTAlertController.xcconfig │ │ ├── Pods-JHTAlertController_Example │ │ ├── Info.plist │ │ ├── Pods-JHTAlertController_Example-acknowledgements.markdown │ │ ├── Pods-JHTAlertController_Example-acknowledgements.plist │ │ ├── Pods-JHTAlertController_Example-dummy.m │ │ ├── Pods-JHTAlertController_Example-frameworks.sh │ │ ├── Pods-JHTAlertController_Example-resources.sh │ │ ├── Pods-JHTAlertController_Example-umbrella.h │ │ ├── Pods-JHTAlertController_Example.debug.xcconfig │ │ ├── Pods-JHTAlertController_Example.modulemap │ │ └── Pods-JHTAlertController_Example.release.xcconfig │ │ └── Pods-JHTAlertController_Tests │ │ ├── Info.plist │ │ ├── Pods-JHTAlertController_Tests-acknowledgements.markdown │ │ ├── Pods-JHTAlertController_Tests-acknowledgements.plist │ │ ├── Pods-JHTAlertController_Tests-dummy.m │ │ ├── Pods-JHTAlertController_Tests-frameworks.sh │ │ ├── Pods-JHTAlertController_Tests-resources.sh │ │ ├── Pods-JHTAlertController_Tests-umbrella.h │ │ ├── Pods-JHTAlertController_Tests.debug.xcconfig │ │ ├── Pods-JHTAlertController_Tests.modulemap │ │ └── Pods-JHTAlertController_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── JHTAlertController.framework.zip ├── JHTAlertController.podspec ├── LICENSE ├── Package.swift ├── README.md ├── Source ├── .gitkeep ├── JHTAlertAction.swift ├── JHTAlertAnimation.swift ├── JHTAlertController.swift ├── JHTTextField.swift └── UIColor+Extension.swift ├── _Pods.xcodeproj └── img ├── dark.PNG ├── icon.PNG └── light.PNG /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | # Pods/ 34 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -workspace Example/JHTAlertController.xcworkspace -scheme JHTAlertController-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to this project will be documented in this file. 3 | 4 | #### 0.x Releases 5 | - `0.2.4` Changed number of lines to 0 for title label. Changed height constraint for title view based on this. Also added new property restrictTitleViewHeight for those wanting logos to be restrained by the height. 6 | - `0.2.2` Fixed an issue where the icon image bacground was not displaying. 7 | - `0.2.1` Updated the way the handler dismisses the alert. 8 | - `0.2.0` Added support for text fields. 9 | - `0.1.5` Added Carthage support. 10 | - `0.1.4` Updated documentation and added unit tests. 11 | - `0.1.1` Updated the shape layer behind the icon image to be dynamic. 12 | - `0.1.0` Initial Release. 13 | -------------------------------------------------------------------------------- /Example/JHTAlertController.framework.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/Example/JHTAlertController.framework.zip -------------------------------------------------------------------------------- /Example/JHTAlertController.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 11 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 12 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 13 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 14 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 15 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 16 | A92E1DBF6044A9F807157BED /* Pods_JHTAlertController_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F4136F1BB2AFE689ED638AA /* Pods_JHTAlertController_Example.framework */; }; 17 | D544109D512C938CC625DAEC /* Pods_JHTAlertController_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0519F8363D61174D9E33F4E2 /* Pods_JHTAlertController_Tests.framework */; }; 18 | DA3A542B1DE3A309000F068A /* JHTAlertController.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3A54291DE3A309000F068A /* JHTAlertController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | DA3A54331DE3A315000F068A /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3A542F1DE3A315000F068A /* UIColor+Extension.swift */; }; 20 | DA3A54341DE3A315000F068A /* JHTAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3A54301DE3A315000F068A /* JHTAlertAction.swift */; }; 21 | DA3A54351DE3A315000F068A /* JHTAlertAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3A54311DE3A315000F068A /* JHTAlertAnimation.swift */; }; 22 | DA3A54361DE3A315000F068A /* JHTAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3A54321DE3A315000F068A /* JHTAlertController.swift */; }; 23 | DAABD5201DE6258D00548B1B /* JHTTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAABD51F1DE6258D00548B1B /* JHTTextField.swift */; }; 24 | DAEC83A41DDF4CD40069D09A /* Turtle.png in Resources */ = {isa = PBXBuildFile; fileRef = DAEC83A31DDF4CD40069D09A /* Turtle.png */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXContainerItemProxy section */ 28 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 29 | isa = PBXContainerItemProxy; 30 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 31 | proxyType = 1; 32 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 33 | remoteInfo = JHTAlertController; 34 | }; 35 | /* End PBXContainerItemProxy section */ 36 | 37 | /* Begin PBXCopyFilesBuildPhase section */ 38 | DA3A53EC1DE39D2F000F068A /* Embed Frameworks */ = { 39 | isa = PBXCopyFilesBuildPhase; 40 | buildActionMask = 2147483647; 41 | dstPath = ""; 42 | dstSubfolderSpec = 10; 43 | files = ( 44 | ); 45 | name = "Embed Frameworks"; 46 | runOnlyForDeploymentPostprocessing = 0; 47 | }; 48 | /* End PBXCopyFilesBuildPhase section */ 49 | 50 | /* Begin PBXFileReference section */ 51 | 0369519AEAAC259C76E1D074 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 52 | 0519F8363D61174D9E33F4E2 /* Pods_JHTAlertController_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JHTAlertController_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 0F4136F1BB2AFE689ED638AA /* Pods_JHTAlertController_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JHTAlertController_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | 4F9D33B7D7DD32A19B0697D0 /* JHTAlertController.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = JHTAlertController.podspec; path = ../JHTAlertController.podspec; sourceTree = ""; }; 55 | 607FACD01AFB9204008FA782 /* JHTAlertController_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JHTAlertController_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 57 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 58 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 59 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 60 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 61 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 62 | 607FACE51AFB9204008FA782 /* JHTAlertController_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JHTAlertController_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 64 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 65 | 67BC7CA07F69E43996AF5DA8 /* Pods-JHTAlertController_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JHTAlertController_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example.release.xcconfig"; sourceTree = ""; }; 66 | 91CB6AC1A0E54F70B5D27B54 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 67 | B0F3121F6C7917FE3C77C7C2 /* Pods-JHTAlertController_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JHTAlertController_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example.debug.xcconfig"; sourceTree = ""; }; 68 | C593C442AD38B1650D34BC32 /* Pods-JHTAlertController_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JHTAlertController_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests.release.xcconfig"; sourceTree = ""; }; 69 | DA3A53DF1DE39D2F000F068A /* JHTAlertController_CarthageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JHTAlertController_CarthageTests.swift; sourceTree = ""; }; 70 | DA3A53E11DE39D2F000F068A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 71 | DA3A54271DE3A309000F068A /* JHTAlertController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JHTAlertController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 72 | DA3A54291DE3A309000F068A /* JHTAlertController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JHTAlertController.h; sourceTree = ""; }; 73 | DA3A542A1DE3A309000F068A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 74 | DA3A542F1DE3A315000F068A /* UIColor+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIColor+Extension.swift"; path = "../../Source/UIColor+Extension.swift"; sourceTree = ""; }; 75 | DA3A54301DE3A315000F068A /* JHTAlertAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JHTAlertAction.swift; path = ../../Source/JHTAlertAction.swift; sourceTree = ""; }; 76 | DA3A54311DE3A315000F068A /* JHTAlertAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JHTAlertAnimation.swift; path = ../../Source/JHTAlertAnimation.swift; sourceTree = ""; }; 77 | DA3A54321DE3A315000F068A /* JHTAlertController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JHTAlertController.swift; path = ../../Source/JHTAlertController.swift; sourceTree = ""; }; 78 | DAABD51F1DE6258D00548B1B /* JHTTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JHTTextField.swift; path = ../../Source/JHTTextField.swift; sourceTree = ""; }; 79 | DAEC83A31DDF4CD40069D09A /* Turtle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Turtle.png; sourceTree = ""; }; 80 | F706E5E0F596B327966E0AE6 /* Pods-JHTAlertController_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JHTAlertController_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests.debug.xcconfig"; sourceTree = ""; }; 81 | /* End PBXFileReference section */ 82 | 83 | /* Begin PBXFrameworksBuildPhase section */ 84 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | A92E1DBF6044A9F807157BED /* Pods_JHTAlertController_Example.framework in Frameworks */, 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 93 | isa = PBXFrameworksBuildPhase; 94 | buildActionMask = 2147483647; 95 | files = ( 96 | D544109D512C938CC625DAEC /* Pods_JHTAlertController_Tests.framework in Frameworks */, 97 | ); 98 | runOnlyForDeploymentPostprocessing = 0; 99 | }; 100 | DA3A54231DE3A309000F068A /* Frameworks */ = { 101 | isa = PBXFrameworksBuildPhase; 102 | buildActionMask = 2147483647; 103 | files = ( 104 | ); 105 | runOnlyForDeploymentPostprocessing = 0; 106 | }; 107 | /* End PBXFrameworksBuildPhase section */ 108 | 109 | /* Begin PBXGroup section */ 110 | 607FACC71AFB9204008FA782 = { 111 | isa = PBXGroup; 112 | children = ( 113 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 114 | 607FACD21AFB9204008FA782 /* Example for JHTAlertController */, 115 | 607FACE81AFB9204008FA782 /* Tests */, 116 | DA3A53DE1DE39D2F000F068A /* JHTAlertController_CarthageTests */, 117 | DA3A54281DE3A309000F068A /* JHTAlertController */, 118 | 607FACD11AFB9204008FA782 /* Products */, 119 | E68CF9621C53475453438B5E /* Pods */, 120 | 95210C0013AFC2AA902F3212 /* Frameworks */, 121 | ); 122 | sourceTree = ""; 123 | }; 124 | 607FACD11AFB9204008FA782 /* Products */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 607FACD01AFB9204008FA782 /* JHTAlertController_Example.app */, 128 | 607FACE51AFB9204008FA782 /* JHTAlertController_Tests.xctest */, 129 | DA3A54271DE3A309000F068A /* JHTAlertController.framework */, 130 | ); 131 | name = Products; 132 | sourceTree = ""; 133 | }; 134 | 607FACD21AFB9204008FA782 /* Example for JHTAlertController */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 138 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 139 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 140 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 141 | DAEC83A31DDF4CD40069D09A /* Turtle.png */, 142 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 143 | 607FACD31AFB9204008FA782 /* Supporting Files */, 144 | ); 145 | name = "Example for JHTAlertController"; 146 | path = JHTAlertController; 147 | sourceTree = ""; 148 | }; 149 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | 607FACD41AFB9204008FA782 /* Info.plist */, 153 | ); 154 | name = "Supporting Files"; 155 | sourceTree = ""; 156 | }; 157 | 607FACE81AFB9204008FA782 /* Tests */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 161 | 607FACE91AFB9204008FA782 /* Supporting Files */, 162 | ); 163 | path = Tests; 164 | sourceTree = ""; 165 | }; 166 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 607FACEA1AFB9204008FA782 /* Info.plist */, 170 | ); 171 | name = "Supporting Files"; 172 | sourceTree = ""; 173 | }; 174 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 175 | isa = PBXGroup; 176 | children = ( 177 | 4F9D33B7D7DD32A19B0697D0 /* JHTAlertController.podspec */, 178 | 0369519AEAAC259C76E1D074 /* README.md */, 179 | 91CB6AC1A0E54F70B5D27B54 /* LICENSE */, 180 | ); 181 | name = "Podspec Metadata"; 182 | sourceTree = ""; 183 | }; 184 | 95210C0013AFC2AA902F3212 /* Frameworks */ = { 185 | isa = PBXGroup; 186 | children = ( 187 | 0F4136F1BB2AFE689ED638AA /* Pods_JHTAlertController_Example.framework */, 188 | 0519F8363D61174D9E33F4E2 /* Pods_JHTAlertController_Tests.framework */, 189 | ); 190 | name = Frameworks; 191 | sourceTree = ""; 192 | }; 193 | DA3A53DE1DE39D2F000F068A /* JHTAlertController_CarthageTests */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | DA3A53DF1DE39D2F000F068A /* JHTAlertController_CarthageTests.swift */, 197 | DA3A53E11DE39D2F000F068A /* Info.plist */, 198 | ); 199 | path = JHTAlertController_CarthageTests; 200 | sourceTree = ""; 201 | }; 202 | DA3A54281DE3A309000F068A /* JHTAlertController */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | DA3A542F1DE3A315000F068A /* UIColor+Extension.swift */, 206 | DA3A54301DE3A315000F068A /* JHTAlertAction.swift */, 207 | DA3A54311DE3A315000F068A /* JHTAlertAnimation.swift */, 208 | DA3A54321DE3A315000F068A /* JHTAlertController.swift */, 209 | DA3A54291DE3A309000F068A /* JHTAlertController.h */, 210 | DAABD51F1DE6258D00548B1B /* JHTTextField.swift */, 211 | DA3A542A1DE3A309000F068A /* Info.plist */, 212 | ); 213 | path = JHTAlertController; 214 | sourceTree = ""; 215 | }; 216 | E68CF9621C53475453438B5E /* Pods */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | B0F3121F6C7917FE3C77C7C2 /* Pods-JHTAlertController_Example.debug.xcconfig */, 220 | 67BC7CA07F69E43996AF5DA8 /* Pods-JHTAlertController_Example.release.xcconfig */, 221 | F706E5E0F596B327966E0AE6 /* Pods-JHTAlertController_Tests.debug.xcconfig */, 222 | C593C442AD38B1650D34BC32 /* Pods-JHTAlertController_Tests.release.xcconfig */, 223 | ); 224 | name = Pods; 225 | sourceTree = ""; 226 | }; 227 | /* End PBXGroup section */ 228 | 229 | /* Begin PBXHeadersBuildPhase section */ 230 | DA3A54241DE3A309000F068A /* Headers */ = { 231 | isa = PBXHeadersBuildPhase; 232 | buildActionMask = 2147483647; 233 | files = ( 234 | DA3A542B1DE3A309000F068A /* JHTAlertController.h in Headers */, 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | }; 238 | /* End PBXHeadersBuildPhase section */ 239 | 240 | /* Begin PBXNativeTarget section */ 241 | 607FACCF1AFB9204008FA782 /* JHTAlertController_Example */ = { 242 | isa = PBXNativeTarget; 243 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "JHTAlertController_Example" */; 244 | buildPhases = ( 245 | 981424ACC99AAEEE201A7530 /* [CP] Check Pods Manifest.lock */, 246 | 607FACCC1AFB9204008FA782 /* Sources */, 247 | 607FACCD1AFB9204008FA782 /* Frameworks */, 248 | 607FACCE1AFB9204008FA782 /* Resources */, 249 | A8F63B23C0C1C48F2E467D41 /* [CP] Embed Pods Frameworks */, 250 | 83F9DA1A24174BD9B1109458 /* [CP] Copy Pods Resources */, 251 | DA3A53EC1DE39D2F000F068A /* Embed Frameworks */, 252 | ); 253 | buildRules = ( 254 | ); 255 | dependencies = ( 256 | ); 257 | name = JHTAlertController_Example; 258 | productName = JHTAlertController; 259 | productReference = 607FACD01AFB9204008FA782 /* JHTAlertController_Example.app */; 260 | productType = "com.apple.product-type.application"; 261 | }; 262 | 607FACE41AFB9204008FA782 /* JHTAlertController_Tests */ = { 263 | isa = PBXNativeTarget; 264 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "JHTAlertController_Tests" */; 265 | buildPhases = ( 266 | 044ACA725B105936C49EDFF6 /* [CP] Check Pods Manifest.lock */, 267 | 607FACE11AFB9204008FA782 /* Sources */, 268 | 607FACE21AFB9204008FA782 /* Frameworks */, 269 | 607FACE31AFB9204008FA782 /* Resources */, 270 | 12C224CD103163E5691446E4 /* [CP] Embed Pods Frameworks */, 271 | 5874E22B9CFFD8FF6710B47C /* [CP] Copy Pods Resources */, 272 | ); 273 | buildRules = ( 274 | ); 275 | dependencies = ( 276 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 277 | ); 278 | name = JHTAlertController_Tests; 279 | productName = Tests; 280 | productReference = 607FACE51AFB9204008FA782 /* JHTAlertController_Tests.xctest */; 281 | productType = "com.apple.product-type.bundle.unit-test"; 282 | }; 283 | DA3A54261DE3A309000F068A /* JHTAlertController */ = { 284 | isa = PBXNativeTarget; 285 | buildConfigurationList = DA3A542C1DE3A309000F068A /* Build configuration list for PBXNativeTarget "JHTAlertController" */; 286 | buildPhases = ( 287 | DA3A54221DE3A309000F068A /* Sources */, 288 | DA3A54231DE3A309000F068A /* Frameworks */, 289 | DA3A54241DE3A309000F068A /* Headers */, 290 | DA3A54251DE3A309000F068A /* Resources */, 291 | ); 292 | buildRules = ( 293 | ); 294 | dependencies = ( 295 | ); 296 | name = JHTAlertController; 297 | productName = JHTAlertController; 298 | productReference = DA3A54271DE3A309000F068A /* JHTAlertController.framework */; 299 | productType = "com.apple.product-type.framework"; 300 | }; 301 | /* End PBXNativeTarget section */ 302 | 303 | /* Begin PBXProject section */ 304 | 607FACC81AFB9204008FA782 /* Project object */ = { 305 | isa = PBXProject; 306 | attributes = { 307 | LastSwiftUpdateCheck = 0810; 308 | LastUpgradeCheck = 0820; 309 | ORGANIZATIONNAME = CocoaPods; 310 | TargetAttributes = { 311 | 607FACCF1AFB9204008FA782 = { 312 | CreatedOnToolsVersion = 6.3.1; 313 | DevelopmentTeam = 8TXUP5R8B7; 314 | LastSwiftMigration = 0810; 315 | }; 316 | 607FACE41AFB9204008FA782 = { 317 | CreatedOnToolsVersion = 6.3.1; 318 | LastSwiftMigration = 0810; 319 | TestTargetID = 607FACCF1AFB9204008FA782; 320 | }; 321 | DA3A54261DE3A309000F068A = { 322 | CreatedOnToolsVersion = 8.1; 323 | DevelopmentTeam = 8TXUP5R8B7; 324 | ProvisioningStyle = Automatic; 325 | }; 326 | }; 327 | }; 328 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "JHTAlertController" */; 329 | compatibilityVersion = "Xcode 3.2"; 330 | developmentRegion = English; 331 | hasScannedForEncodings = 0; 332 | knownRegions = ( 333 | en, 334 | Base, 335 | ); 336 | mainGroup = 607FACC71AFB9204008FA782; 337 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 338 | projectDirPath = ""; 339 | projectRoot = ""; 340 | targets = ( 341 | 607FACCF1AFB9204008FA782 /* JHTAlertController_Example */, 342 | 607FACE41AFB9204008FA782 /* JHTAlertController_Tests */, 343 | DA3A54261DE3A309000F068A /* JHTAlertController */, 344 | ); 345 | }; 346 | /* End PBXProject section */ 347 | 348 | /* Begin PBXResourcesBuildPhase section */ 349 | 607FACCE1AFB9204008FA782 /* Resources */ = { 350 | isa = PBXResourcesBuildPhase; 351 | buildActionMask = 2147483647; 352 | files = ( 353 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 354 | DAEC83A41DDF4CD40069D09A /* Turtle.png in Resources */, 355 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 356 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 357 | ); 358 | runOnlyForDeploymentPostprocessing = 0; 359 | }; 360 | 607FACE31AFB9204008FA782 /* Resources */ = { 361 | isa = PBXResourcesBuildPhase; 362 | buildActionMask = 2147483647; 363 | files = ( 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | }; 367 | DA3A54251DE3A309000F068A /* Resources */ = { 368 | isa = PBXResourcesBuildPhase; 369 | buildActionMask = 2147483647; 370 | files = ( 371 | ); 372 | runOnlyForDeploymentPostprocessing = 0; 373 | }; 374 | /* End PBXResourcesBuildPhase section */ 375 | 376 | /* Begin PBXShellScriptBuildPhase section */ 377 | 044ACA725B105936C49EDFF6 /* [CP] Check Pods Manifest.lock */ = { 378 | isa = PBXShellScriptBuildPhase; 379 | buildActionMask = 2147483647; 380 | files = ( 381 | ); 382 | inputPaths = ( 383 | ); 384 | name = "[CP] Check Pods Manifest.lock"; 385 | outputPaths = ( 386 | ); 387 | runOnlyForDeploymentPostprocessing = 0; 388 | shellPath = /bin/sh; 389 | shellScript = "diff \"${PODS_ROOT}/../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"; 390 | showEnvVarsInLog = 0; 391 | }; 392 | 12C224CD103163E5691446E4 /* [CP] Embed Pods Frameworks */ = { 393 | isa = PBXShellScriptBuildPhase; 394 | buildActionMask = 2147483647; 395 | files = ( 396 | ); 397 | inputPaths = ( 398 | ); 399 | name = "[CP] Embed Pods Frameworks"; 400 | outputPaths = ( 401 | ); 402 | runOnlyForDeploymentPostprocessing = 0; 403 | shellPath = /bin/sh; 404 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-frameworks.sh\"\n"; 405 | showEnvVarsInLog = 0; 406 | }; 407 | 5874E22B9CFFD8FF6710B47C /* [CP] Copy Pods Resources */ = { 408 | isa = PBXShellScriptBuildPhase; 409 | buildActionMask = 2147483647; 410 | files = ( 411 | ); 412 | inputPaths = ( 413 | ); 414 | name = "[CP] Copy Pods Resources"; 415 | outputPaths = ( 416 | ); 417 | runOnlyForDeploymentPostprocessing = 0; 418 | shellPath = /bin/sh; 419 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-resources.sh\"\n"; 420 | showEnvVarsInLog = 0; 421 | }; 422 | 83F9DA1A24174BD9B1109458 /* [CP] Copy Pods Resources */ = { 423 | isa = PBXShellScriptBuildPhase; 424 | buildActionMask = 2147483647; 425 | files = ( 426 | ); 427 | inputPaths = ( 428 | ); 429 | name = "[CP] Copy Pods Resources"; 430 | outputPaths = ( 431 | ); 432 | runOnlyForDeploymentPostprocessing = 0; 433 | shellPath = /bin/sh; 434 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-resources.sh\"\n"; 435 | showEnvVarsInLog = 0; 436 | }; 437 | 981424ACC99AAEEE201A7530 /* [CP] Check Pods Manifest.lock */ = { 438 | isa = PBXShellScriptBuildPhase; 439 | buildActionMask = 2147483647; 440 | files = ( 441 | ); 442 | inputPaths = ( 443 | ); 444 | name = "[CP] Check Pods Manifest.lock"; 445 | outputPaths = ( 446 | ); 447 | runOnlyForDeploymentPostprocessing = 0; 448 | shellPath = /bin/sh; 449 | shellScript = "diff \"${PODS_ROOT}/../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"; 450 | showEnvVarsInLog = 0; 451 | }; 452 | A8F63B23C0C1C48F2E467D41 /* [CP] Embed Pods Frameworks */ = { 453 | isa = PBXShellScriptBuildPhase; 454 | buildActionMask = 2147483647; 455 | files = ( 456 | ); 457 | inputPaths = ( 458 | ); 459 | name = "[CP] Embed Pods Frameworks"; 460 | outputPaths = ( 461 | ); 462 | runOnlyForDeploymentPostprocessing = 0; 463 | shellPath = /bin/sh; 464 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-frameworks.sh\"\n"; 465 | showEnvVarsInLog = 0; 466 | }; 467 | /* End PBXShellScriptBuildPhase section */ 468 | 469 | /* Begin PBXSourcesBuildPhase section */ 470 | 607FACCC1AFB9204008FA782 /* Sources */ = { 471 | isa = PBXSourcesBuildPhase; 472 | buildActionMask = 2147483647; 473 | files = ( 474 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 475 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 476 | ); 477 | runOnlyForDeploymentPostprocessing = 0; 478 | }; 479 | 607FACE11AFB9204008FA782 /* Sources */ = { 480 | isa = PBXSourcesBuildPhase; 481 | buildActionMask = 2147483647; 482 | files = ( 483 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 484 | ); 485 | runOnlyForDeploymentPostprocessing = 0; 486 | }; 487 | DA3A54221DE3A309000F068A /* Sources */ = { 488 | isa = PBXSourcesBuildPhase; 489 | buildActionMask = 2147483647; 490 | files = ( 491 | DAABD5201DE6258D00548B1B /* JHTTextField.swift in Sources */, 492 | DA3A54331DE3A315000F068A /* UIColor+Extension.swift in Sources */, 493 | DA3A54361DE3A315000F068A /* JHTAlertController.swift in Sources */, 494 | DA3A54351DE3A315000F068A /* JHTAlertAnimation.swift in Sources */, 495 | DA3A54341DE3A315000F068A /* JHTAlertAction.swift in Sources */, 496 | ); 497 | runOnlyForDeploymentPostprocessing = 0; 498 | }; 499 | /* End PBXSourcesBuildPhase section */ 500 | 501 | /* Begin PBXTargetDependency section */ 502 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 503 | isa = PBXTargetDependency; 504 | target = 607FACCF1AFB9204008FA782 /* JHTAlertController_Example */; 505 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 506 | }; 507 | /* End PBXTargetDependency section */ 508 | 509 | /* Begin PBXVariantGroup section */ 510 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 511 | isa = PBXVariantGroup; 512 | children = ( 513 | 607FACDA1AFB9204008FA782 /* Base */, 514 | ); 515 | name = Main.storyboard; 516 | sourceTree = ""; 517 | }; 518 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 519 | isa = PBXVariantGroup; 520 | children = ( 521 | 607FACDF1AFB9204008FA782 /* Base */, 522 | ); 523 | name = LaunchScreen.xib; 524 | sourceTree = ""; 525 | }; 526 | /* End PBXVariantGroup section */ 527 | 528 | /* Begin XCBuildConfiguration section */ 529 | 607FACED1AFB9204008FA782 /* Debug */ = { 530 | isa = XCBuildConfiguration; 531 | buildSettings = { 532 | ALWAYS_SEARCH_USER_PATHS = NO; 533 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 534 | CLANG_CXX_LIBRARY = "libc++"; 535 | CLANG_ENABLE_MODULES = YES; 536 | CLANG_ENABLE_OBJC_ARC = YES; 537 | CLANG_WARN_BOOL_CONVERSION = YES; 538 | CLANG_WARN_CONSTANT_CONVERSION = YES; 539 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 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_OBJC_ROOT_CLASS = YES_ERROR; 545 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 546 | CLANG_WARN_UNREACHABLE_CODE = YES; 547 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 548 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 549 | COPY_PHASE_STRIP = NO; 550 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 551 | ENABLE_STRICT_OBJC_MSGSEND = YES; 552 | ENABLE_TESTABILITY = YES; 553 | GCC_C_LANGUAGE_STANDARD = gnu99; 554 | GCC_DYNAMIC_NO_PIC = NO; 555 | GCC_NO_COMMON_BLOCKS = YES; 556 | GCC_OPTIMIZATION_LEVEL = 0; 557 | GCC_PREPROCESSOR_DEFINITIONS = ( 558 | "DEBUG=1", 559 | "$(inherited)", 560 | ); 561 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 562 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 563 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 564 | GCC_WARN_UNDECLARED_SELECTOR = YES; 565 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 566 | GCC_WARN_UNUSED_FUNCTION = YES; 567 | GCC_WARN_UNUSED_VARIABLE = YES; 568 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 569 | MTL_ENABLE_DEBUG_INFO = YES; 570 | ONLY_ACTIVE_ARCH = YES; 571 | SDKROOT = iphoneos; 572 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 573 | SWIFT_VERSION = 3.0; 574 | }; 575 | name = Debug; 576 | }; 577 | 607FACEE1AFB9204008FA782 /* Release */ = { 578 | isa = XCBuildConfiguration; 579 | buildSettings = { 580 | ALWAYS_SEARCH_USER_PATHS = NO; 581 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 582 | CLANG_CXX_LIBRARY = "libc++"; 583 | CLANG_ENABLE_MODULES = YES; 584 | CLANG_ENABLE_OBJC_ARC = YES; 585 | CLANG_WARN_BOOL_CONVERSION = YES; 586 | CLANG_WARN_CONSTANT_CONVERSION = YES; 587 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 588 | CLANG_WARN_EMPTY_BODY = YES; 589 | CLANG_WARN_ENUM_CONVERSION = YES; 590 | CLANG_WARN_INFINITE_RECURSION = YES; 591 | CLANG_WARN_INT_CONVERSION = YES; 592 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 593 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 594 | CLANG_WARN_UNREACHABLE_CODE = YES; 595 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 596 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 597 | COPY_PHASE_STRIP = NO; 598 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 599 | ENABLE_NS_ASSERTIONS = NO; 600 | ENABLE_STRICT_OBJC_MSGSEND = YES; 601 | GCC_C_LANGUAGE_STANDARD = gnu99; 602 | GCC_NO_COMMON_BLOCKS = YES; 603 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 604 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 605 | GCC_WARN_UNDECLARED_SELECTOR = YES; 606 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 607 | GCC_WARN_UNUSED_FUNCTION = YES; 608 | GCC_WARN_UNUSED_VARIABLE = YES; 609 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 610 | MTL_ENABLE_DEBUG_INFO = NO; 611 | SDKROOT = iphoneos; 612 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 613 | SWIFT_VERSION = 3.0; 614 | VALIDATE_PRODUCT = YES; 615 | }; 616 | name = Release; 617 | }; 618 | 607FACF01AFB9204008FA782 /* Debug */ = { 619 | isa = XCBuildConfiguration; 620 | baseConfigurationReference = B0F3121F6C7917FE3C77C7C2 /* Pods-JHTAlertController_Example.debug.xcconfig */; 621 | buildSettings = { 622 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 623 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 624 | DEVELOPMENT_TEAM = 8TXUP5R8B7; 625 | INFOPLIST_FILE = JHTAlertController/Info.plist; 626 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 627 | MODULE_NAME = ExampleApp; 628 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 629 | PRODUCT_NAME = "$(TARGET_NAME)"; 630 | SWIFT_VERSION = 3.0; 631 | }; 632 | name = Debug; 633 | }; 634 | 607FACF11AFB9204008FA782 /* Release */ = { 635 | isa = XCBuildConfiguration; 636 | baseConfigurationReference = 67BC7CA07F69E43996AF5DA8 /* Pods-JHTAlertController_Example.release.xcconfig */; 637 | buildSettings = { 638 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 639 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 640 | DEVELOPMENT_TEAM = 8TXUP5R8B7; 641 | INFOPLIST_FILE = JHTAlertController/Info.plist; 642 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 643 | MODULE_NAME = ExampleApp; 644 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 645 | PRODUCT_NAME = "$(TARGET_NAME)"; 646 | SWIFT_VERSION = 3.0; 647 | }; 648 | name = Release; 649 | }; 650 | 607FACF31AFB9204008FA782 /* Debug */ = { 651 | isa = XCBuildConfiguration; 652 | baseConfigurationReference = F706E5E0F596B327966E0AE6 /* Pods-JHTAlertController_Tests.debug.xcconfig */; 653 | buildSettings = { 654 | DEVELOPMENT_TEAM = ""; 655 | FRAMEWORK_SEARCH_PATHS = ( 656 | "$(SDKROOT)/Developer/Library/Frameworks", 657 | "$(inherited)", 658 | ); 659 | GCC_PREPROCESSOR_DEFINITIONS = ( 660 | "DEBUG=1", 661 | "$(inherited)", 662 | ); 663 | INFOPLIST_FILE = Tests/Info.plist; 664 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 665 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 666 | PRODUCT_NAME = "$(TARGET_NAME)"; 667 | SWIFT_VERSION = 3.0; 668 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JHTAlertController_Example.app/JHTAlertController_Example"; 669 | }; 670 | name = Debug; 671 | }; 672 | 607FACF41AFB9204008FA782 /* Release */ = { 673 | isa = XCBuildConfiguration; 674 | baseConfigurationReference = C593C442AD38B1650D34BC32 /* Pods-JHTAlertController_Tests.release.xcconfig */; 675 | buildSettings = { 676 | DEVELOPMENT_TEAM = ""; 677 | FRAMEWORK_SEARCH_PATHS = ( 678 | "$(SDKROOT)/Developer/Library/Frameworks", 679 | "$(inherited)", 680 | ); 681 | INFOPLIST_FILE = Tests/Info.plist; 682 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 683 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 684 | PRODUCT_NAME = "$(TARGET_NAME)"; 685 | SWIFT_VERSION = 3.0; 686 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JHTAlertController_Example.app/JHTAlertController_Example"; 687 | }; 688 | name = Release; 689 | }; 690 | DA3A542D1DE3A309000F068A /* Debug */ = { 691 | isa = XCBuildConfiguration; 692 | buildSettings = { 693 | CLANG_ANALYZER_NONNULL = YES; 694 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 695 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 696 | CODE_SIGN_IDENTITY = ""; 697 | CURRENT_PROJECT_VERSION = 1; 698 | DEBUG_INFORMATION_FORMAT = dwarf; 699 | DEFINES_MODULE = YES; 700 | DEVELOPMENT_TEAM = 8TXUP5R8B7; 701 | DYLIB_COMPATIBILITY_VERSION = 1; 702 | DYLIB_CURRENT_VERSION = 1; 703 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 704 | INFOPLIST_FILE = JHTAlertController/Info.plist; 705 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 706 | IPHONEOS_DEPLOYMENT_TARGET = 10.1; 707 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 708 | PRODUCT_BUNDLE_IDENTIFIER = com.prolink.JHTAlertController; 709 | PRODUCT_NAME = "$(TARGET_NAME)"; 710 | SKIP_INSTALL = YES; 711 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 712 | SWIFT_VERSION = 3.0; 713 | TARGETED_DEVICE_FAMILY = "1,2"; 714 | VERSIONING_SYSTEM = "apple-generic"; 715 | VERSION_INFO_PREFIX = ""; 716 | }; 717 | name = Debug; 718 | }; 719 | DA3A542E1DE3A309000F068A /* Release */ = { 720 | isa = XCBuildConfiguration; 721 | buildSettings = { 722 | CLANG_ANALYZER_NONNULL = YES; 723 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 724 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 725 | CODE_SIGN_IDENTITY = ""; 726 | CURRENT_PROJECT_VERSION = 1; 727 | DEFINES_MODULE = YES; 728 | DEVELOPMENT_TEAM = 8TXUP5R8B7; 729 | DYLIB_COMPATIBILITY_VERSION = 1; 730 | DYLIB_CURRENT_VERSION = 1; 731 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 732 | INFOPLIST_FILE = JHTAlertController/Info.plist; 733 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 734 | IPHONEOS_DEPLOYMENT_TARGET = 10.1; 735 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 736 | PRODUCT_BUNDLE_IDENTIFIER = com.prolink.JHTAlertController; 737 | PRODUCT_NAME = "$(TARGET_NAME)"; 738 | SKIP_INSTALL = YES; 739 | SWIFT_VERSION = 3.0; 740 | TARGETED_DEVICE_FAMILY = "1,2"; 741 | VERSIONING_SYSTEM = "apple-generic"; 742 | VERSION_INFO_PREFIX = ""; 743 | }; 744 | name = Release; 745 | }; 746 | /* End XCBuildConfiguration section */ 747 | 748 | /* Begin XCConfigurationList section */ 749 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "JHTAlertController" */ = { 750 | isa = XCConfigurationList; 751 | buildConfigurations = ( 752 | 607FACED1AFB9204008FA782 /* Debug */, 753 | 607FACEE1AFB9204008FA782 /* Release */, 754 | ); 755 | defaultConfigurationIsVisible = 0; 756 | defaultConfigurationName = Release; 757 | }; 758 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "JHTAlertController_Example" */ = { 759 | isa = XCConfigurationList; 760 | buildConfigurations = ( 761 | 607FACF01AFB9204008FA782 /* Debug */, 762 | 607FACF11AFB9204008FA782 /* Release */, 763 | ); 764 | defaultConfigurationIsVisible = 0; 765 | defaultConfigurationName = Release; 766 | }; 767 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "JHTAlertController_Tests" */ = { 768 | isa = XCConfigurationList; 769 | buildConfigurations = ( 770 | 607FACF31AFB9204008FA782 /* Debug */, 771 | 607FACF41AFB9204008FA782 /* Release */, 772 | ); 773 | defaultConfigurationIsVisible = 0; 774 | defaultConfigurationName = Release; 775 | }; 776 | DA3A542C1DE3A309000F068A /* Build configuration list for PBXNativeTarget "JHTAlertController" */ = { 777 | isa = XCConfigurationList; 778 | buildConfigurations = ( 779 | DA3A542D1DE3A309000F068A /* Debug */, 780 | DA3A542E1DE3A309000F068A /* Release */, 781 | ); 782 | defaultConfigurationIsVisible = 0; 783 | defaultConfigurationName = Release; 784 | }; 785 | /* End XCConfigurationList section */ 786 | }; 787 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 788 | } 789 | -------------------------------------------------------------------------------- /Example/JHTAlertController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/JHTAlertController.xcodeproj/xcshareddata/xcschemes/JHTAlertController-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 57 | 63 | 64 | 65 | 66 | 67 | 73 | 74 | 75 | 76 | 77 | 78 | 88 | 90 | 96 | 97 | 98 | 99 | 100 | 101 | 107 | 109 | 115 | 116 | 117 | 118 | 120 | 121 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /Example/JHTAlertController.xcodeproj/xcshareddata/xcschemes/JHTAlertController.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Example/JHTAlertController.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/JHTAlertController/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // JHTAlertController 4 | // 5 | // Created by placeholder for master on 11/17/2016. 6 | // Copyright (c) 2016 placeholder for master. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Example/JHTAlertController/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 24 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Example/JHTAlertController/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 35 | 44 | 53 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Example/JHTAlertController/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | } 43 | ], 44 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /Example/JHTAlertController/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/JHTAlertController/Images.xcassets/Turtle.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Turtle.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/JHTAlertController/Images.xcassets/Turtle.imageset/Turtle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/Example/JHTAlertController/Images.xcassets/Turtle.imageset/Turtle.png -------------------------------------------------------------------------------- /Example/JHTAlertController/Images.xcassets/TurtleDark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Turtle.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/JHTAlertController/Images.xcassets/TurtleDark.imageset/Turtle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/Example/JHTAlertController/Images.xcassets/TurtleDark.imageset/Turtle.png -------------------------------------------------------------------------------- /Example/JHTAlertController/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | 28 | 29 | -------------------------------------------------------------------------------- /Example/JHTAlertController/JHTAlertController.h: -------------------------------------------------------------------------------- 1 | // 2 | // JHTAlertController.h 3 | // JHTAlertController 4 | // 5 | // Created by Jessel, Jeremiah on 11/21/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for JHTAlertController. 12 | FOUNDATION_EXPORT double JHTAlertControllerVersionNumber; 13 | 14 | //! Project version string for JHTAlertController. 15 | FOUNDATION_EXPORT const unsigned char JHTAlertControllerVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Example/JHTAlertController/Turtle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/Example/JHTAlertController/Turtle.png -------------------------------------------------------------------------------- /Example/JHTAlertController/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // JHTAlertController 4 | // 5 | // Created by placeholder for master on 11/17/2016. 6 | // Copyright (c) 2016 placeholder for master. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import JHTAlertController 11 | 12 | class ViewController: UIViewController { 13 | let defaultBgColor = UIColor(red:0.82, green:0.93, blue:0.99, alpha:1.0) 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | view.backgroundColor = defaultBgColor 18 | } 19 | @IBAction func darkAlert(_ sender: Any) { 20 | let alertController = JHTAlertController(title: "", message: "This is an alert. It is only an alert.", preferredStyle: .alert) 21 | alertController.titleImage = #imageLiteral(resourceName: "Turtle") 22 | alertController.titleViewBackgroundColor = .black 23 | alertController.alertBackgroundColor = .black 24 | alertController.setAllButtonBackgroundColors(to: .black) 25 | alertController.hasRoundedCorners = true 26 | 27 | // Create the action. 28 | let cancelAction = JHTAlertAction(title: "Cancel", style: .cancel, handler: nil) 29 | let okAction = JHTAlertAction(title: "Yes", style: .default) { _ in 30 | print("Do something here!") 31 | } 32 | 33 | alertController.addAction(cancelAction) 34 | alertController.addAction(okAction) 35 | 36 | // Show alert 37 | present(alertController, animated: true, completion: nil) 38 | } 39 | @IBAction func lightAlert(_ sender: Any) { 40 | let alertController = JHTAlertController(title: "", message: "This message is a placeholder so you can see what the alert looks like with a message.", preferredStyle: .alert) 41 | alertController.titleImage = #imageLiteral(resourceName: "Turtle") 42 | alertController.titleViewBackgroundColor = .black 43 | alertController.alertBackgroundColor = .lightGray 44 | alertController.setAllButtonBackgroundColors(to: .lightGray) 45 | 46 | alertController.hasRoundedCorners = true 47 | 48 | let cancelAction = JHTAlertAction(title: "Cancel", style: .cancel, handler: nil) 49 | let okAction = JHTAlertAction(title: "Yes", style: .default) { _ in 50 | print("Do something here!") 51 | } 52 | 53 | alertController.addAction(cancelAction) 54 | alertController.addAction(okAction) 55 | 56 | present(alertController, animated: true, completion: nil) 57 | } 58 | @IBAction func threeButtonAlert(_ sender: Any) { 59 | let alertController = JHTAlertController(title: "Turtle", message: "In this alert we use a String for the title instead of an image.", preferredStyle: .alert) 60 | alertController.titleViewBackgroundColor = UIColor.white 61 | alertController.titleTextColor = .black 62 | alertController.alertBackgroundColor = .black 63 | alertController.setAllButtonBackgroundColors(to: .black) 64 | alertController.hasRoundedCorners = true 65 | // You can add plural action. 66 | let cancelAction = JHTAlertAction(title: "Cancel", style: .cancel, handler: nil) 67 | 68 | let defaultAction = JHTAlertAction(title: "Default", style: .default, handler: { [weak self] _ in 69 | self?.view.backgroundColor = self?.defaultBgColor 70 | }) 71 | 72 | let blueAction = JHTAlertAction(title: "Red", style: .default) { [weak self] _ in 73 | self?.view.backgroundColor = .red 74 | } 75 | alertController.addActions([defaultAction,blueAction, cancelAction]) 76 | 77 | // Show alert 78 | present(alertController, animated: true, completion: nil) 79 | } 80 | @IBAction func iconAlert(_ sender: Any) { 81 | let alertController = JHTAlertController(title: "Creating a long title message to test what happens when it is really long.!", message: "You can even set an icon for the alert.", preferredStyle: .alert, iconImage: #imageLiteral(resourceName: "TurtleDark") ) 82 | alertController.titleViewBackgroundColor = .white 83 | alertController.titleTextColor = .black 84 | alertController.alertBackgroundColor = .white 85 | alertController.messageFont = .systemFont(ofSize: 18) 86 | alertController.messageTextColor = .black 87 | alertController.setAllButtonBackgroundColors(to: .white) 88 | alertController.setButtonTextColorFor(.default, to: .black) 89 | alertController.setButtonTextColorFor(.cancel, to: .black) 90 | alertController.dividerColor = .black 91 | alertController.hasRoundedCorners = true 92 | 93 | // Create the action. 94 | let cancelAction = JHTAlertAction(title: "Cancel", style: .cancel, handler: nil) 95 | let okAction = JHTAlertAction(title: "Yes", style: .default) { _ in 96 | guard let textField = alertController.textFields?.first else { return } 97 | print(textField.text!) 98 | } 99 | 100 | alertController.addAction(cancelAction) 101 | alertController.addAction(okAction) 102 | 103 | alertController.addTextFieldWithConfigurationHandler { (textField) in 104 | textField.placeholder = "Some Info Here" 105 | textField.backgroundColor = .black 106 | textField.textColor = .white 107 | } 108 | 109 | alertController.addTextFieldWithConfigurationHandler { (textField) in 110 | textField.placeholder = "Password" 111 | textField.backgroundColor = .black 112 | textField.isSecureTextEntry = true 113 | textField.textColor = .white 114 | } 115 | 116 | // Show alert 117 | present(alertController, animated: true, completion: nil) 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'JHTAlertController_Example' do 4 | pod 'JHTAlertController', :path => '../' 5 | 6 | target 'JHTAlertController_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - JHTAlertController (0.2.2) 3 | 4 | DEPENDENCIES: 5 | - JHTAlertController (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | JHTAlertController: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | JHTAlertController: a7c4461cf5204ff174f8e6f2184ecd34f1d5ec00 13 | 14 | PODFILE CHECKSUM: 4aa0b1fe38431f2bc4a6eedb98e878dad2a21c19 15 | 16 | COCOAPODS: 1.1.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/JHTAlertController.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "JHTAlertController", 3 | "version": "0.2.2", 4 | "summary": "A stock replacement for UIAlertController to customize the colors, fonts, and images to suit your needs.", 5 | "description": "JHTAlertController is a replacement for the stock UIAlertController. With it, you can customize the background colors, text colors, and add images to the alert.", 6 | "homepage": "https://github.com/jjessel/JHTAlertController", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Jeremiah Jessel": "Jacuzzi Hot Tubs, LLC" 13 | }, 14 | "source": { 15 | "git": "https://github.com/jjessel/JHTAlertController.git", 16 | "tag": "0.2.2" 17 | }, 18 | "social_media_url": "https://twitter.com/jcubedapps", 19 | "platforms": { 20 | "ios": "9.0" 21 | }, 22 | "source_files": "Source/*" 23 | } 24 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - JHTAlertController (0.2.2) 3 | 4 | DEPENDENCIES: 5 | - JHTAlertController (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | JHTAlertController: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | JHTAlertController: a7c4461cf5204ff174f8e6f2184ecd34f1d5ec00 13 | 14 | PODFILE CHECKSUM: 4aa0b1fe38431f2bc4a6eedb98e878dad2a21c19 15 | 16 | COCOAPODS: 1.1.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0D1248BDD5EF06AAABDA91A2ED39A941 /* JHTTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA4101E9EA0E52F8A06A0A21856A927B /* JHTTextField.swift */; }; 11 | 3494D637635B9B1CD6D2B4044525DF6B /* JHTAlertController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EC030C86A6CC479AFFD313FBB7B8A74A /* JHTAlertController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 3BFA372D6CDDA4E55B988CF51E839D94 /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0867F804009532F339179F0E05CA669F /* UIColor+Extension.swift */; }; 13 | 7F30ABAC2AAC441CD2FAA5A0A4D45E35 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; 14 | 8D96B403E27F9DAD8424536707BBE59E /* Pods-JHTAlertController_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ACB69F6CD3DEA1403F3250F35E38A395 /* Pods-JHTAlertController_Tests-dummy.m */; }; 15 | 8F4478772CAEA6D046452E555D06818A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; 16 | 9C983FCDD74D9950DFAD9B323CBC6E8F /* JHTAlertAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3ACD1B8267B23516608D1B0173542F /* JHTAlertAnimation.swift */; }; 17 | A94C2A46FD93C260AFD4911D5797485E /* JHTAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61F837EE4D6802AD6AEE19520AF681BB /* JHTAlertController.swift */; }; 18 | AA62CFA03D9BAF6D6F24E62ADF6CB2BC /* Pods-JHTAlertController_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F25F45A10D5D56FAA03B77D7DED868 /* Pods-JHTAlertController_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | C059FEF3FF14B007F50FD4E24CCABF28 /* Pods-JHTAlertController_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D008A30E7F0D093B5A4BFA891DB1EFE /* Pods-JHTAlertController_Example-dummy.m */; }; 20 | CA4DA252417499A31E885102AAD228B0 /* JHTAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9299084E61B4D55F95BA4353CA7CA9CD /* JHTAlertAction.swift */; }; 21 | CD4D1A07E0B30C5B308A2D65BBAB7936 /* JHTAlertController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D983478C103AAB5C491033B89ABA9F /* JHTAlertController-dummy.m */; }; 22 | D724E3CA874F7D217962DAE597642A01 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; 23 | F76A60F82E7B46B88280B3043B951FCE /* Pods-JHTAlertController_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 540C3F947FB84B9626873A31E9834989 /* Pods-JHTAlertController_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | 33CE8880B8BE05729D579AB05A7F0CF0 /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 30 | proxyType = 1; 31 | remoteGlobalIDString = A275A35D4BF32CEF5B46DD3EAAC8EE31; 32 | remoteInfo = JHTAlertController; 33 | }; 34 | /* End PBXContainerItemProxy section */ 35 | 36 | /* Begin PBXFileReference section */ 37 | 0867F804009532F339179F0E05CA669F /* UIColor+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+Extension.swift"; sourceTree = ""; }; 38 | 0FB3BBC6784B5536A1794A9C997071A8 /* JHTAlertController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JHTAlertController.xcconfig; sourceTree = ""; }; 39 | 113795B980A7BD0D00B2DE9CEEBCA8B6 /* Pods-JHTAlertController_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JHTAlertController_Tests.debug.xcconfig"; sourceTree = ""; }; 40 | 2AD348A5D2941D208935C17A52DBE9F7 /* Pods-JHTAlertController_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-JHTAlertController_Tests-frameworks.sh"; sourceTree = ""; }; 41 | 2D8D7A9F82D064D245343FA8274D062C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42 | 4265211701A908D7D06C3D15C4EB37A2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 43 | 4EF8DF90547B8C4911A6ACB1F1B17B82 /* Pods_JHTAlertController_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JHTAlertController_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 513CB5F5668B453327A282440A175C33 /* JHTAlertController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JHTAlertController-prefix.pch"; sourceTree = ""; }; 45 | 540C3F947FB84B9626873A31E9834989 /* Pods-JHTAlertController_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-JHTAlertController_Example-umbrella.h"; sourceTree = ""; }; 46 | 59F25F45A10D5D56FAA03B77D7DED868 /* Pods-JHTAlertController_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-JHTAlertController_Tests-umbrella.h"; sourceTree = ""; }; 47 | 60DB04703CA8C4DB3F0160274F283D46 /* Pods-JHTAlertController_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-JHTAlertController_Example-acknowledgements.markdown"; sourceTree = ""; }; 48 | 61F837EE4D6802AD6AEE19520AF681BB /* JHTAlertController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JHTAlertController.swift; sourceTree = ""; }; 49 | 62840636F0BCA2C1F1DCD8E5FB209D0D /* Pods-JHTAlertController_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-JHTAlertController_Example-frameworks.sh"; sourceTree = ""; }; 50 | 86E6A358386BB16DD9D30490CA0330C4 /* Pods-JHTAlertController_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-JHTAlertController_Example.modulemap"; sourceTree = ""; }; 51 | 8D008A30E7F0D093B5A4BFA891DB1EFE /* Pods-JHTAlertController_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-JHTAlertController_Example-dummy.m"; sourceTree = ""; }; 52 | 9299084E61B4D55F95BA4353CA7CA9CD /* JHTAlertAction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JHTAlertAction.swift; sourceTree = ""; }; 53 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 54 | 989FB9435DC787BC805C291C3632C21B /* Pods-JHTAlertController_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-JHTAlertController_Tests-resources.sh"; sourceTree = ""; }; 55 | 9A3ACD1B8267B23516608D1B0173542F /* JHTAlertAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JHTAlertAnimation.swift; sourceTree = ""; }; 56 | ACB69F6CD3DEA1403F3250F35E38A395 /* Pods-JHTAlertController_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-JHTAlertController_Tests-dummy.m"; sourceTree = ""; }; 57 | B24B3485050C793D91CD0F488BF3E9A9 /* Pods-JHTAlertController_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-JHTAlertController_Tests-acknowledgements.markdown"; sourceTree = ""; }; 58 | B3E28FCE5B27C1A7BFE9F2B4FC6D6130 /* Pods-JHTAlertController_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JHTAlertController_Example.release.xcconfig"; sourceTree = ""; }; 59 | C2C8C0E373478775B16D5483A764DDC0 /* Pods-JHTAlertController_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JHTAlertController_Tests.release.xcconfig"; sourceTree = ""; }; 60 | C569C89548AA34E55EE5285B92504FCA /* Pods-JHTAlertController_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-JHTAlertController_Tests-acknowledgements.plist"; sourceTree = ""; }; 61 | CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 62 | D1DC52CA0581134C6E91307823667B2B /* Pods_JHTAlertController_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JHTAlertController_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | D3D983478C103AAB5C491033B89ABA9F /* JHTAlertController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JHTAlertController-dummy.m"; sourceTree = ""; }; 64 | D791AF6AA4086F557838F8B5160FE12A /* JHTAlertController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JHTAlertController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 65 | D82954518D45FC4B788D014000525E4C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 66 | D86634A08727C1A89C3EB4A7482D1BDC /* JHTAlertController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = JHTAlertController.modulemap; sourceTree = ""; }; 67 | D9EF94E22B476794391CD5AF9BFC273F /* Pods-JHTAlertController_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-JHTAlertController_Tests.modulemap"; sourceTree = ""; }; 68 | DBA716F7696A1DC72B69E4B8989E9888 /* Pods-JHTAlertController_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JHTAlertController_Example.debug.xcconfig"; sourceTree = ""; }; 69 | E27AD309898A2728353046D5C58D005A /* Pods-JHTAlertController_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-JHTAlertController_Example-resources.sh"; sourceTree = ""; }; 70 | EA4101E9EA0E52F8A06A0A21856A927B /* JHTTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JHTTextField.swift; sourceTree = ""; }; 71 | EC030C86A6CC479AFFD313FBB7B8A74A /* JHTAlertController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JHTAlertController-umbrella.h"; sourceTree = ""; }; 72 | F1D9075BE959A1AF122053FBFF61C332 /* Pods-JHTAlertController_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-JHTAlertController_Example-acknowledgements.plist"; sourceTree = ""; }; 73 | /* End PBXFileReference section */ 74 | 75 | /* Begin PBXFrameworksBuildPhase section */ 76 | 01B5388E37B0608DC0809123F1CFF199 /* Frameworks */ = { 77 | isa = PBXFrameworksBuildPhase; 78 | buildActionMask = 2147483647; 79 | files = ( 80 | D724E3CA874F7D217962DAE597642A01 /* Foundation.framework in Frameworks */, 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | 16E9913C8F449A3B0D6E62F91B171E6E /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | 7F30ABAC2AAC441CD2FAA5A0A4D45E35 /* Foundation.framework in Frameworks */, 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | 68C4A48C6A095AC18D4EC2657F8E899C /* Frameworks */ = { 93 | isa = PBXFrameworksBuildPhase; 94 | buildActionMask = 2147483647; 95 | files = ( 96 | 8F4478772CAEA6D046452E555D06818A /* Foundation.framework in Frameworks */, 97 | ); 98 | runOnlyForDeploymentPostprocessing = 0; 99 | }; 100 | /* End PBXFrameworksBuildPhase section */ 101 | 102 | /* Begin PBXGroup section */ 103 | 02658000D152F687F5419F4143EF33C7 /* Pods-JHTAlertController_Example */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 2D8D7A9F82D064D245343FA8274D062C /* Info.plist */, 107 | 86E6A358386BB16DD9D30490CA0330C4 /* Pods-JHTAlertController_Example.modulemap */, 108 | 60DB04703CA8C4DB3F0160274F283D46 /* Pods-JHTAlertController_Example-acknowledgements.markdown */, 109 | F1D9075BE959A1AF122053FBFF61C332 /* Pods-JHTAlertController_Example-acknowledgements.plist */, 110 | 8D008A30E7F0D093B5A4BFA891DB1EFE /* Pods-JHTAlertController_Example-dummy.m */, 111 | 62840636F0BCA2C1F1DCD8E5FB209D0D /* Pods-JHTAlertController_Example-frameworks.sh */, 112 | E27AD309898A2728353046D5C58D005A /* Pods-JHTAlertController_Example-resources.sh */, 113 | 540C3F947FB84B9626873A31E9834989 /* Pods-JHTAlertController_Example-umbrella.h */, 114 | DBA716F7696A1DC72B69E4B8989E9888 /* Pods-JHTAlertController_Example.debug.xcconfig */, 115 | B3E28FCE5B27C1A7BFE9F2B4FC6D6130 /* Pods-JHTAlertController_Example.release.xcconfig */, 116 | ); 117 | name = "Pods-JHTAlertController_Example"; 118 | path = "Target Support Files/Pods-JHTAlertController_Example"; 119 | sourceTree = ""; 120 | }; 121 | 2C282ACE3EE9F7ED6AC16570553A73BE /* Products */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | D791AF6AA4086F557838F8B5160FE12A /* JHTAlertController.framework */, 125 | 4EF8DF90547B8C4911A6ACB1F1B17B82 /* Pods_JHTAlertController_Example.framework */, 126 | D1DC52CA0581134C6E91307823667B2B /* Pods_JHTAlertController_Tests.framework */, 127 | ); 128 | name = Products; 129 | sourceTree = ""; 130 | }; 131 | 33CDB42E4160EA9B443563B8E8A47713 /* JHTAlertController */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | 50D6DB64C194B46FD6476A6F2A6825D6 /* Source */, 135 | 822B2A72D1109B22B91548D6780583E3 /* Support Files */, 136 | ); 137 | name = JHTAlertController; 138 | path = ../..; 139 | sourceTree = ""; 140 | }; 141 | 410D64DE750165DBE7055044D33CE3A9 /* Development Pods */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 33CDB42E4160EA9B443563B8E8A47713 /* JHTAlertController */, 145 | ); 146 | name = "Development Pods"; 147 | sourceTree = ""; 148 | }; 149 | 50D6DB64C194B46FD6476A6F2A6825D6 /* Source */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | 9299084E61B4D55F95BA4353CA7CA9CD /* JHTAlertAction.swift */, 153 | 9A3ACD1B8267B23516608D1B0173542F /* JHTAlertAnimation.swift */, 154 | 61F837EE4D6802AD6AEE19520AF681BB /* JHTAlertController.swift */, 155 | EA4101E9EA0E52F8A06A0A21856A927B /* JHTTextField.swift */, 156 | 0867F804009532F339179F0E05CA669F /* UIColor+Extension.swift */, 157 | ); 158 | path = Source; 159 | sourceTree = ""; 160 | }; 161 | 712551BF28179DE1A6FF84B0E492BC0E /* Pods-JHTAlertController_Tests */ = { 162 | isa = PBXGroup; 163 | children = ( 164 | 4265211701A908D7D06C3D15C4EB37A2 /* Info.plist */, 165 | D9EF94E22B476794391CD5AF9BFC273F /* Pods-JHTAlertController_Tests.modulemap */, 166 | B24B3485050C793D91CD0F488BF3E9A9 /* Pods-JHTAlertController_Tests-acknowledgements.markdown */, 167 | C569C89548AA34E55EE5285B92504FCA /* Pods-JHTAlertController_Tests-acknowledgements.plist */, 168 | ACB69F6CD3DEA1403F3250F35E38A395 /* Pods-JHTAlertController_Tests-dummy.m */, 169 | 2AD348A5D2941D208935C17A52DBE9F7 /* Pods-JHTAlertController_Tests-frameworks.sh */, 170 | 989FB9435DC787BC805C291C3632C21B /* Pods-JHTAlertController_Tests-resources.sh */, 171 | 59F25F45A10D5D56FAA03B77D7DED868 /* Pods-JHTAlertController_Tests-umbrella.h */, 172 | 113795B980A7BD0D00B2DE9CEEBCA8B6 /* Pods-JHTAlertController_Tests.debug.xcconfig */, 173 | C2C8C0E373478775B16D5483A764DDC0 /* Pods-JHTAlertController_Tests.release.xcconfig */, 174 | ); 175 | name = "Pods-JHTAlertController_Tests"; 176 | path = "Target Support Files/Pods-JHTAlertController_Tests"; 177 | sourceTree = ""; 178 | }; 179 | 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */, 183 | ); 184 | name = iOS; 185 | sourceTree = ""; 186 | }; 187 | 77DA0F13D3D8B84D604320F54716BDB0 /* Targets Support Files */ = { 188 | isa = PBXGroup; 189 | children = ( 190 | 02658000D152F687F5419F4143EF33C7 /* Pods-JHTAlertController_Example */, 191 | 712551BF28179DE1A6FF84B0E492BC0E /* Pods-JHTAlertController_Tests */, 192 | ); 193 | name = "Targets Support Files"; 194 | sourceTree = ""; 195 | }; 196 | 7DB346D0F39D3F0E887471402A8071AB = { 197 | isa = PBXGroup; 198 | children = ( 199 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 200 | 410D64DE750165DBE7055044D33CE3A9 /* Development Pods */, 201 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 202 | 2C282ACE3EE9F7ED6AC16570553A73BE /* Products */, 203 | 77DA0F13D3D8B84D604320F54716BDB0 /* Targets Support Files */, 204 | ); 205 | sourceTree = ""; 206 | }; 207 | 822B2A72D1109B22B91548D6780583E3 /* Support Files */ = { 208 | isa = PBXGroup; 209 | children = ( 210 | D82954518D45FC4B788D014000525E4C /* Info.plist */, 211 | D86634A08727C1A89C3EB4A7482D1BDC /* JHTAlertController.modulemap */, 212 | 0FB3BBC6784B5536A1794A9C997071A8 /* JHTAlertController.xcconfig */, 213 | D3D983478C103AAB5C491033B89ABA9F /* JHTAlertController-dummy.m */, 214 | 513CB5F5668B453327A282440A175C33 /* JHTAlertController-prefix.pch */, 215 | EC030C86A6CC479AFFD313FBB7B8A74A /* JHTAlertController-umbrella.h */, 216 | ); 217 | name = "Support Files"; 218 | path = "Example/Pods/Target Support Files/JHTAlertController"; 219 | sourceTree = ""; 220 | }; 221 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 222 | isa = PBXGroup; 223 | children = ( 224 | 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */, 225 | ); 226 | name = Frameworks; 227 | sourceTree = ""; 228 | }; 229 | /* End PBXGroup section */ 230 | 231 | /* Begin PBXHeadersBuildPhase section */ 232 | 07BCE02BEA694253158A1ED7829BE885 /* Headers */ = { 233 | isa = PBXHeadersBuildPhase; 234 | buildActionMask = 2147483647; 235 | files = ( 236 | F76A60F82E7B46B88280B3043B951FCE /* Pods-JHTAlertController_Example-umbrella.h in Headers */, 237 | ); 238 | runOnlyForDeploymentPostprocessing = 0; 239 | }; 240 | 333AB84478B5D1753E69547B87B8804D /* Headers */ = { 241 | isa = PBXHeadersBuildPhase; 242 | buildActionMask = 2147483647; 243 | files = ( 244 | AA62CFA03D9BAF6D6F24E62ADF6CB2BC /* Pods-JHTAlertController_Tests-umbrella.h in Headers */, 245 | ); 246 | runOnlyForDeploymentPostprocessing = 0; 247 | }; 248 | D08ED79044F39A850CA5AFBB5CFD40BE /* Headers */ = { 249 | isa = PBXHeadersBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | 3494D637635B9B1CD6D2B4044525DF6B /* JHTAlertController-umbrella.h in Headers */, 253 | ); 254 | runOnlyForDeploymentPostprocessing = 0; 255 | }; 256 | /* End PBXHeadersBuildPhase section */ 257 | 258 | /* Begin PBXNativeTarget section */ 259 | A111CBDFABA023612FC3F7A4268506FD /* Pods-JHTAlertController_Tests */ = { 260 | isa = PBXNativeTarget; 261 | buildConfigurationList = 00AD79779C192CAD443A69E4C1EF83E6 /* Build configuration list for PBXNativeTarget "Pods-JHTAlertController_Tests" */; 262 | buildPhases = ( 263 | F07E4BB6970EC7ADADAE118280F833C3 /* Sources */, 264 | 68C4A48C6A095AC18D4EC2657F8E899C /* Frameworks */, 265 | 333AB84478B5D1753E69547B87B8804D /* Headers */, 266 | ); 267 | buildRules = ( 268 | ); 269 | dependencies = ( 270 | ); 271 | name = "Pods-JHTAlertController_Tests"; 272 | productName = "Pods-JHTAlertController_Tests"; 273 | productReference = D1DC52CA0581134C6E91307823667B2B /* Pods_JHTAlertController_Tests.framework */; 274 | productType = "com.apple.product-type.framework"; 275 | }; 276 | A275A35D4BF32CEF5B46DD3EAAC8EE31 /* JHTAlertController */ = { 277 | isa = PBXNativeTarget; 278 | buildConfigurationList = C07C24A8ABBAE11E5F62C3392C0A9880 /* Build configuration list for PBXNativeTarget "JHTAlertController" */; 279 | buildPhases = ( 280 | 250D83E72EF139B0B1FA62B5D0237FC5 /* Sources */, 281 | 01B5388E37B0608DC0809123F1CFF199 /* Frameworks */, 282 | D08ED79044F39A850CA5AFBB5CFD40BE /* Headers */, 283 | ); 284 | buildRules = ( 285 | ); 286 | dependencies = ( 287 | ); 288 | name = JHTAlertController; 289 | productName = JHTAlertController; 290 | productReference = D791AF6AA4086F557838F8B5160FE12A /* JHTAlertController.framework */; 291 | productType = "com.apple.product-type.framework"; 292 | }; 293 | CA6A319198A90614CF55168F53771868 /* Pods-JHTAlertController_Example */ = { 294 | isa = PBXNativeTarget; 295 | buildConfigurationList = 1D522E0CC94F7F2E273ACCB56F6EFC65 /* Build configuration list for PBXNativeTarget "Pods-JHTAlertController_Example" */; 296 | buildPhases = ( 297 | 79242CD36A4776954F2BF0C8740EA635 /* Sources */, 298 | 16E9913C8F449A3B0D6E62F91B171E6E /* Frameworks */, 299 | 07BCE02BEA694253158A1ED7829BE885 /* Headers */, 300 | ); 301 | buildRules = ( 302 | ); 303 | dependencies = ( 304 | 4DB420953624A75BD96DB33CD0088E61 /* PBXTargetDependency */, 305 | ); 306 | name = "Pods-JHTAlertController_Example"; 307 | productName = "Pods-JHTAlertController_Example"; 308 | productReference = 4EF8DF90547B8C4911A6ACB1F1B17B82 /* Pods_JHTAlertController_Example.framework */; 309 | productType = "com.apple.product-type.framework"; 310 | }; 311 | /* End PBXNativeTarget section */ 312 | 313 | /* Begin PBXProject section */ 314 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 315 | isa = PBXProject; 316 | attributes = { 317 | LastSwiftUpdateCheck = 0730; 318 | LastUpgradeCheck = 0700; 319 | }; 320 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 321 | compatibilityVersion = "Xcode 3.2"; 322 | developmentRegion = English; 323 | hasScannedForEncodings = 0; 324 | knownRegions = ( 325 | en, 326 | ); 327 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 328 | productRefGroup = 2C282ACE3EE9F7ED6AC16570553A73BE /* Products */; 329 | projectDirPath = ""; 330 | projectRoot = ""; 331 | targets = ( 332 | A275A35D4BF32CEF5B46DD3EAAC8EE31 /* JHTAlertController */, 333 | CA6A319198A90614CF55168F53771868 /* Pods-JHTAlertController_Example */, 334 | A111CBDFABA023612FC3F7A4268506FD /* Pods-JHTAlertController_Tests */, 335 | ); 336 | }; 337 | /* End PBXProject section */ 338 | 339 | /* Begin PBXSourcesBuildPhase section */ 340 | 250D83E72EF139B0B1FA62B5D0237FC5 /* Sources */ = { 341 | isa = PBXSourcesBuildPhase; 342 | buildActionMask = 2147483647; 343 | files = ( 344 | CA4DA252417499A31E885102AAD228B0 /* JHTAlertAction.swift in Sources */, 345 | 9C983FCDD74D9950DFAD9B323CBC6E8F /* JHTAlertAnimation.swift in Sources */, 346 | CD4D1A07E0B30C5B308A2D65BBAB7936 /* JHTAlertController-dummy.m in Sources */, 347 | A94C2A46FD93C260AFD4911D5797485E /* JHTAlertController.swift in Sources */, 348 | 0D1248BDD5EF06AAABDA91A2ED39A941 /* JHTTextField.swift in Sources */, 349 | 3BFA372D6CDDA4E55B988CF51E839D94 /* UIColor+Extension.swift in Sources */, 350 | ); 351 | runOnlyForDeploymentPostprocessing = 0; 352 | }; 353 | 79242CD36A4776954F2BF0C8740EA635 /* Sources */ = { 354 | isa = PBXSourcesBuildPhase; 355 | buildActionMask = 2147483647; 356 | files = ( 357 | C059FEF3FF14B007F50FD4E24CCABF28 /* Pods-JHTAlertController_Example-dummy.m in Sources */, 358 | ); 359 | runOnlyForDeploymentPostprocessing = 0; 360 | }; 361 | F07E4BB6970EC7ADADAE118280F833C3 /* Sources */ = { 362 | isa = PBXSourcesBuildPhase; 363 | buildActionMask = 2147483647; 364 | files = ( 365 | 8D96B403E27F9DAD8424536707BBE59E /* Pods-JHTAlertController_Tests-dummy.m in Sources */, 366 | ); 367 | runOnlyForDeploymentPostprocessing = 0; 368 | }; 369 | /* End PBXSourcesBuildPhase section */ 370 | 371 | /* Begin PBXTargetDependency section */ 372 | 4DB420953624A75BD96DB33CD0088E61 /* PBXTargetDependency */ = { 373 | isa = PBXTargetDependency; 374 | name = JHTAlertController; 375 | target = A275A35D4BF32CEF5B46DD3EAAC8EE31 /* JHTAlertController */; 376 | targetProxy = 33CE8880B8BE05729D579AB05A7F0CF0 /* PBXContainerItemProxy */; 377 | }; 378 | /* End PBXTargetDependency section */ 379 | 380 | /* Begin XCBuildConfiguration section */ 381 | 2EF2676D5076114BBC03A3896138ED4E /* Debug */ = { 382 | isa = XCBuildConfiguration; 383 | baseConfigurationReference = 0FB3BBC6784B5536A1794A9C997071A8 /* JHTAlertController.xcconfig */; 384 | buildSettings = { 385 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 386 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 387 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 388 | CURRENT_PROJECT_VERSION = 1; 389 | DEBUG_INFORMATION_FORMAT = dwarf; 390 | DEFINES_MODULE = YES; 391 | DYLIB_COMPATIBILITY_VERSION = 1; 392 | DYLIB_CURRENT_VERSION = 1; 393 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 394 | ENABLE_STRICT_OBJC_MSGSEND = YES; 395 | GCC_NO_COMMON_BLOCKS = YES; 396 | GCC_PREFIX_HEADER = "Target Support Files/JHTAlertController/JHTAlertController-prefix.pch"; 397 | INFOPLIST_FILE = "Target Support Files/JHTAlertController/Info.plist"; 398 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 399 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 400 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 401 | MODULEMAP_FILE = "Target Support Files/JHTAlertController/JHTAlertController.modulemap"; 402 | MTL_ENABLE_DEBUG_INFO = YES; 403 | PRODUCT_NAME = JHTAlertController; 404 | SDKROOT = iphoneos; 405 | SKIP_INSTALL = YES; 406 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 407 | SWIFT_VERSION = 3.0; 408 | TARGETED_DEVICE_FAMILY = "1,2"; 409 | VERSIONING_SYSTEM = "apple-generic"; 410 | VERSION_INFO_PREFIX = ""; 411 | }; 412 | name = Debug; 413 | }; 414 | 3C5BE3B8965D8FE09EE080AD792C408D /* Release */ = { 415 | isa = XCBuildConfiguration; 416 | baseConfigurationReference = B3E28FCE5B27C1A7BFE9F2B4FC6D6130 /* Pods-JHTAlertController_Example.release.xcconfig */; 417 | buildSettings = { 418 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 419 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 420 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 421 | CURRENT_PROJECT_VERSION = 1; 422 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 423 | DEFINES_MODULE = YES; 424 | DYLIB_COMPATIBILITY_VERSION = 1; 425 | DYLIB_CURRENT_VERSION = 1; 426 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 427 | ENABLE_STRICT_OBJC_MSGSEND = YES; 428 | GCC_NO_COMMON_BLOCKS = YES; 429 | INFOPLIST_FILE = "Target Support Files/Pods-JHTAlertController_Example/Info.plist"; 430 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 431 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 432 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 433 | MACH_O_TYPE = staticlib; 434 | MODULEMAP_FILE = "Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example.modulemap"; 435 | MTL_ENABLE_DEBUG_INFO = NO; 436 | OTHER_LDFLAGS = ""; 437 | OTHER_LIBTOOLFLAGS = ""; 438 | PODS_ROOT = "$(SRCROOT)"; 439 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 440 | PRODUCT_NAME = Pods_JHTAlertController_Example; 441 | SDKROOT = iphoneos; 442 | SKIP_INSTALL = YES; 443 | TARGETED_DEVICE_FAMILY = "1,2"; 444 | VERSIONING_SYSTEM = "apple-generic"; 445 | VERSION_INFO_PREFIX = ""; 446 | }; 447 | name = Release; 448 | }; 449 | 59B042A655B7C20CBAB90E385BF4E4C7 /* Debug */ = { 450 | isa = XCBuildConfiguration; 451 | buildSettings = { 452 | ALWAYS_SEARCH_USER_PATHS = NO; 453 | CLANG_ANALYZER_NONNULL = YES; 454 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 455 | CLANG_CXX_LIBRARY = "libc++"; 456 | CLANG_ENABLE_MODULES = YES; 457 | CLANG_ENABLE_OBJC_ARC = YES; 458 | CLANG_WARN_BOOL_CONVERSION = YES; 459 | CLANG_WARN_CONSTANT_CONVERSION = YES; 460 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 461 | CLANG_WARN_EMPTY_BODY = YES; 462 | CLANG_WARN_ENUM_CONVERSION = YES; 463 | CLANG_WARN_INT_CONVERSION = YES; 464 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 465 | CLANG_WARN_UNREACHABLE_CODE = YES; 466 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 467 | CODE_SIGNING_REQUIRED = NO; 468 | COPY_PHASE_STRIP = NO; 469 | ENABLE_TESTABILITY = YES; 470 | GCC_C_LANGUAGE_STANDARD = gnu99; 471 | GCC_DYNAMIC_NO_PIC = NO; 472 | GCC_OPTIMIZATION_LEVEL = 0; 473 | GCC_PREPROCESSOR_DEFINITIONS = ( 474 | "POD_CONFIGURATION_DEBUG=1", 475 | "DEBUG=1", 476 | "$(inherited)", 477 | ); 478 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 479 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 480 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 481 | GCC_WARN_UNDECLARED_SELECTOR = YES; 482 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 483 | GCC_WARN_UNUSED_FUNCTION = YES; 484 | GCC_WARN_UNUSED_VARIABLE = YES; 485 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 486 | ONLY_ACTIVE_ARCH = YES; 487 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 488 | STRIP_INSTALLED_PRODUCT = NO; 489 | SWIFT_VERSION = 3.0; 490 | SYMROOT = "${SRCROOT}/../build"; 491 | }; 492 | name = Debug; 493 | }; 494 | 835C4F2FC4A3D14C5CBF6247448C4F2D /* Release */ = { 495 | isa = XCBuildConfiguration; 496 | baseConfigurationReference = C2C8C0E373478775B16D5483A764DDC0 /* Pods-JHTAlertController_Tests.release.xcconfig */; 497 | buildSettings = { 498 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 499 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 500 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 501 | CURRENT_PROJECT_VERSION = 1; 502 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 503 | DEFINES_MODULE = YES; 504 | DYLIB_COMPATIBILITY_VERSION = 1; 505 | DYLIB_CURRENT_VERSION = 1; 506 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 507 | ENABLE_STRICT_OBJC_MSGSEND = YES; 508 | GCC_NO_COMMON_BLOCKS = YES; 509 | INFOPLIST_FILE = "Target Support Files/Pods-JHTAlertController_Tests/Info.plist"; 510 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 511 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 512 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 513 | MACH_O_TYPE = staticlib; 514 | MODULEMAP_FILE = "Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests.modulemap"; 515 | MTL_ENABLE_DEBUG_INFO = NO; 516 | OTHER_LDFLAGS = ""; 517 | OTHER_LIBTOOLFLAGS = ""; 518 | PODS_ROOT = "$(SRCROOT)"; 519 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 520 | PRODUCT_NAME = Pods_JHTAlertController_Tests; 521 | SDKROOT = iphoneos; 522 | SKIP_INSTALL = YES; 523 | TARGETED_DEVICE_FAMILY = "1,2"; 524 | VERSIONING_SYSTEM = "apple-generic"; 525 | VERSION_INFO_PREFIX = ""; 526 | }; 527 | name = Release; 528 | }; 529 | B7324857C38B065FEB1EEE3105C2367A /* Release */ = { 530 | isa = XCBuildConfiguration; 531 | buildSettings = { 532 | ALWAYS_SEARCH_USER_PATHS = NO; 533 | CLANG_ANALYZER_NONNULL = YES; 534 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 535 | CLANG_CXX_LIBRARY = "libc++"; 536 | CLANG_ENABLE_MODULES = YES; 537 | CLANG_ENABLE_OBJC_ARC = YES; 538 | CLANG_WARN_BOOL_CONVERSION = YES; 539 | CLANG_WARN_CONSTANT_CONVERSION = YES; 540 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 541 | CLANG_WARN_EMPTY_BODY = YES; 542 | CLANG_WARN_ENUM_CONVERSION = YES; 543 | CLANG_WARN_INT_CONVERSION = YES; 544 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 545 | CLANG_WARN_UNREACHABLE_CODE = YES; 546 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 547 | CODE_SIGNING_REQUIRED = NO; 548 | COPY_PHASE_STRIP = YES; 549 | ENABLE_NS_ASSERTIONS = NO; 550 | GCC_C_LANGUAGE_STANDARD = gnu99; 551 | GCC_PREPROCESSOR_DEFINITIONS = ( 552 | "POD_CONFIGURATION_RELEASE=1", 553 | "$(inherited)", 554 | ); 555 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 556 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 557 | GCC_WARN_UNDECLARED_SELECTOR = YES; 558 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 559 | GCC_WARN_UNUSED_FUNCTION = YES; 560 | GCC_WARN_UNUSED_VARIABLE = YES; 561 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 562 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 563 | STRIP_INSTALLED_PRODUCT = NO; 564 | SWIFT_VERSION = 3.0; 565 | SYMROOT = "${SRCROOT}/../build"; 566 | VALIDATE_PRODUCT = YES; 567 | }; 568 | name = Release; 569 | }; 570 | CF5881062634DC490EEC42D0067359AD /* Debug */ = { 571 | isa = XCBuildConfiguration; 572 | baseConfigurationReference = DBA716F7696A1DC72B69E4B8989E9888 /* Pods-JHTAlertController_Example.debug.xcconfig */; 573 | buildSettings = { 574 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 575 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 576 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 577 | CURRENT_PROJECT_VERSION = 1; 578 | DEBUG_INFORMATION_FORMAT = dwarf; 579 | DEFINES_MODULE = YES; 580 | DYLIB_COMPATIBILITY_VERSION = 1; 581 | DYLIB_CURRENT_VERSION = 1; 582 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 583 | ENABLE_STRICT_OBJC_MSGSEND = YES; 584 | GCC_NO_COMMON_BLOCKS = YES; 585 | INFOPLIST_FILE = "Target Support Files/Pods-JHTAlertController_Example/Info.plist"; 586 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 587 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 588 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 589 | MACH_O_TYPE = staticlib; 590 | MODULEMAP_FILE = "Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example.modulemap"; 591 | MTL_ENABLE_DEBUG_INFO = YES; 592 | OTHER_LDFLAGS = ""; 593 | OTHER_LIBTOOLFLAGS = ""; 594 | PODS_ROOT = "$(SRCROOT)"; 595 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 596 | PRODUCT_NAME = Pods_JHTAlertController_Example; 597 | SDKROOT = iphoneos; 598 | SKIP_INSTALL = YES; 599 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 600 | TARGETED_DEVICE_FAMILY = "1,2"; 601 | VERSIONING_SYSTEM = "apple-generic"; 602 | VERSION_INFO_PREFIX = ""; 603 | }; 604 | name = Debug; 605 | }; 606 | D8A8C97C4CE9501CC3900E127852F095 /* Release */ = { 607 | isa = XCBuildConfiguration; 608 | baseConfigurationReference = 0FB3BBC6784B5536A1794A9C997071A8 /* JHTAlertController.xcconfig */; 609 | buildSettings = { 610 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 611 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 612 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 613 | CURRENT_PROJECT_VERSION = 1; 614 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 615 | DEFINES_MODULE = YES; 616 | DYLIB_COMPATIBILITY_VERSION = 1; 617 | DYLIB_CURRENT_VERSION = 1; 618 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 619 | ENABLE_STRICT_OBJC_MSGSEND = YES; 620 | GCC_NO_COMMON_BLOCKS = YES; 621 | GCC_PREFIX_HEADER = "Target Support Files/JHTAlertController/JHTAlertController-prefix.pch"; 622 | INFOPLIST_FILE = "Target Support Files/JHTAlertController/Info.plist"; 623 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 624 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 625 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 626 | MODULEMAP_FILE = "Target Support Files/JHTAlertController/JHTAlertController.modulemap"; 627 | MTL_ENABLE_DEBUG_INFO = NO; 628 | PRODUCT_NAME = JHTAlertController; 629 | SDKROOT = iphoneos; 630 | SKIP_INSTALL = YES; 631 | SWIFT_VERSION = 3.0; 632 | TARGETED_DEVICE_FAMILY = "1,2"; 633 | VERSIONING_SYSTEM = "apple-generic"; 634 | VERSION_INFO_PREFIX = ""; 635 | }; 636 | name = Release; 637 | }; 638 | FD59B84A70DB823FAC7EDFE464521863 /* Debug */ = { 639 | isa = XCBuildConfiguration; 640 | baseConfigurationReference = 113795B980A7BD0D00B2DE9CEEBCA8B6 /* Pods-JHTAlertController_Tests.debug.xcconfig */; 641 | buildSettings = { 642 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 643 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 644 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 645 | CURRENT_PROJECT_VERSION = 1; 646 | DEBUG_INFORMATION_FORMAT = dwarf; 647 | DEFINES_MODULE = YES; 648 | DYLIB_COMPATIBILITY_VERSION = 1; 649 | DYLIB_CURRENT_VERSION = 1; 650 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 651 | ENABLE_STRICT_OBJC_MSGSEND = YES; 652 | GCC_NO_COMMON_BLOCKS = YES; 653 | INFOPLIST_FILE = "Target Support Files/Pods-JHTAlertController_Tests/Info.plist"; 654 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 655 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 656 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 657 | MACH_O_TYPE = staticlib; 658 | MODULEMAP_FILE = "Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests.modulemap"; 659 | MTL_ENABLE_DEBUG_INFO = YES; 660 | OTHER_LDFLAGS = ""; 661 | OTHER_LIBTOOLFLAGS = ""; 662 | PODS_ROOT = "$(SRCROOT)"; 663 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 664 | PRODUCT_NAME = Pods_JHTAlertController_Tests; 665 | SDKROOT = iphoneos; 666 | SKIP_INSTALL = YES; 667 | TARGETED_DEVICE_FAMILY = "1,2"; 668 | VERSIONING_SYSTEM = "apple-generic"; 669 | VERSION_INFO_PREFIX = ""; 670 | }; 671 | name = Debug; 672 | }; 673 | /* End XCBuildConfiguration section */ 674 | 675 | /* Begin XCConfigurationList section */ 676 | 00AD79779C192CAD443A69E4C1EF83E6 /* Build configuration list for PBXNativeTarget "Pods-JHTAlertController_Tests" */ = { 677 | isa = XCConfigurationList; 678 | buildConfigurations = ( 679 | FD59B84A70DB823FAC7EDFE464521863 /* Debug */, 680 | 835C4F2FC4A3D14C5CBF6247448C4F2D /* Release */, 681 | ); 682 | defaultConfigurationIsVisible = 0; 683 | defaultConfigurationName = Release; 684 | }; 685 | 1D522E0CC94F7F2E273ACCB56F6EFC65 /* Build configuration list for PBXNativeTarget "Pods-JHTAlertController_Example" */ = { 686 | isa = XCConfigurationList; 687 | buildConfigurations = ( 688 | CF5881062634DC490EEC42D0067359AD /* Debug */, 689 | 3C5BE3B8965D8FE09EE080AD792C408D /* Release */, 690 | ); 691 | defaultConfigurationIsVisible = 0; 692 | defaultConfigurationName = Release; 693 | }; 694 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 695 | isa = XCConfigurationList; 696 | buildConfigurations = ( 697 | 59B042A655B7C20CBAB90E385BF4E4C7 /* Debug */, 698 | B7324857C38B065FEB1EEE3105C2367A /* Release */, 699 | ); 700 | defaultConfigurationIsVisible = 0; 701 | defaultConfigurationName = Release; 702 | }; 703 | C07C24A8ABBAE11E5F62C3392C0A9880 /* Build configuration list for PBXNativeTarget "JHTAlertController" */ = { 704 | isa = XCConfigurationList; 705 | buildConfigurations = ( 706 | 2EF2676D5076114BBC03A3896138ED4E /* Debug */, 707 | D8A8C97C4CE9501CC3900E127852F095 /* Release */, 708 | ); 709 | defaultConfigurationIsVisible = 0; 710 | defaultConfigurationName = Release; 711 | }; 712 | /* End XCConfigurationList section */ 713 | }; 714 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 715 | } 716 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JHTAlertController/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.2.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JHTAlertController/JHTAlertController-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_JHTAlertController : NSObject 3 | @end 4 | @implementation PodsDummy_JHTAlertController 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JHTAlertController/JHTAlertController-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JHTAlertController/JHTAlertController-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | 6 | FOUNDATION_EXPORT double JHTAlertControllerVersionNumber; 7 | FOUNDATION_EXPORT const unsigned char JHTAlertControllerVersionString[]; 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JHTAlertController/JHTAlertController.modulemap: -------------------------------------------------------------------------------- 1 | framework module JHTAlertController { 2 | umbrella header "JHTAlertController-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JHTAlertController/JHTAlertController.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/JHTAlertController 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## JHTAlertController 5 | 6 | MIT License 7 | 8 | Copyright (c) 2016 Jacuzzi Hot Tubs, LLC 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2016 Jacuzzi Hot Tubs, LLC 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | 38 | 39 | License 40 | MIT 41 | Title 42 | JHTAlertController 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_JHTAlertController_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_JHTAlertController_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/JHTAlertController/JHTAlertController.framework" 88 | fi 89 | if [[ "$CONFIGURATION" == "Release" ]]; then 90 | install_framework "$BUILT_PRODUCTS_DIR/JHTAlertController/JHTAlertController.framework" 91 | fi 92 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | install_resource() 27 | { 28 | if [[ "$1" = /* ]] ; then 29 | RESOURCE_PATH="$1" 30 | else 31 | RESOURCE_PATH="${PODS_ROOT}/$1" 32 | fi 33 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 34 | cat << EOM 35 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 36 | EOM 37 | exit 1 38 | fi 39 | case $RESOURCE_PATH in 40 | *.storyboard) 41 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 42 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 43 | ;; 44 | *.xib) 45 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 46 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 47 | ;; 48 | *.framework) 49 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 50 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 51 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 52 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | ;; 54 | *.xcdatamodel) 55 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 56 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 57 | ;; 58 | *.xcdatamodeld) 59 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 60 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 61 | ;; 62 | *.xcmappingmodel) 63 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 64 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 65 | ;; 66 | *.xcassets) 67 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 68 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 69 | ;; 70 | *) 71 | echo "$RESOURCE_PATH" 72 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 73 | ;; 74 | esac 75 | } 76 | 77 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 78 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 79 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 80 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | fi 83 | rm -f "$RESOURCES_TO_COPY" 84 | 85 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 86 | then 87 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 88 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 89 | while read line; do 90 | if [[ $line != "${PODS_ROOT}*" ]]; then 91 | XCASSET_FILES+=("$line") 92 | fi 93 | done <<<"$OTHER_XCASSETS" 94 | 95 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | fi 97 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | 6 | FOUNDATION_EXPORT double Pods_JHTAlertController_ExampleVersionNumber; 7 | FOUNDATION_EXPORT const unsigned char Pods_JHTAlertController_ExampleVersionString[]; 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController/JHTAlertController.framework/Headers" 7 | OTHER_LDFLAGS = $(inherited) -framework "JHTAlertController" 8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = $BUILD_DIR 10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_JHTAlertController_Example { 2 | umbrella header "Pods-JHTAlertController_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Example/Pods-JHTAlertController_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController/JHTAlertController.framework/Headers" 7 | OTHER_LDFLAGS = $(inherited) -framework "JHTAlertController" 8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = $BUILD_DIR 10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_JHTAlertController_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_JHTAlertController_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | install_resource() 27 | { 28 | if [[ "$1" = /* ]] ; then 29 | RESOURCE_PATH="$1" 30 | else 31 | RESOURCE_PATH="${PODS_ROOT}/$1" 32 | fi 33 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 34 | cat << EOM 35 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 36 | EOM 37 | exit 1 38 | fi 39 | case $RESOURCE_PATH in 40 | *.storyboard) 41 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 42 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 43 | ;; 44 | *.xib) 45 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 46 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 47 | ;; 48 | *.framework) 49 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 50 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 51 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 52 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | ;; 54 | *.xcdatamodel) 55 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 56 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 57 | ;; 58 | *.xcdatamodeld) 59 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 60 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 61 | ;; 62 | *.xcmappingmodel) 63 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 64 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 65 | ;; 66 | *.xcassets) 67 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 68 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 69 | ;; 70 | *) 71 | echo "$RESOURCE_PATH" 72 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 73 | ;; 74 | esac 75 | } 76 | 77 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 78 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 79 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 80 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | fi 83 | rm -f "$RESOURCES_TO_COPY" 84 | 85 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 86 | then 87 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 88 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 89 | while read line; do 90 | if [[ $line != "${PODS_ROOT}*" ]]; then 91 | XCASSET_FILES+=("$line") 92 | fi 93 | done <<<"$OTHER_XCASSETS" 94 | 95 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | fi 97 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | 6 | FOUNDATION_EXPORT double Pods_JHTAlertController_TestsVersionNumber; 7 | FOUNDATION_EXPORT const unsigned char Pods_JHTAlertController_TestsVersionString[]; 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController/JHTAlertController.framework/Headers" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_JHTAlertController_Tests { 2 | umbrella header "Pods-JHTAlertController_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JHTAlertController_Tests/Pods-JHTAlertController_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/JHTAlertController/JHTAlertController.framework/Headers" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | @testable import JHTAlertController 4 | 5 | class Tests: XCTestCase { 6 | 7 | var alert: JHTAlertController! 8 | let testFont = UIFont.systemFont(ofSize: 18) 9 | 10 | override func setUp() { 11 | super.setUp() 12 | alert = JHTAlertController(title: "Test Message", message: "This is an alert. It is only an alert.", preferredStyle: .alert, iconImage: nil) 13 | 14 | } 15 | 16 | func testTitleBgColor() { 17 | alert.titleViewBackgroundColor = .black 18 | XCTAssertEqual(alert.titleViewBackgroundColor, .black) 19 | } 20 | 21 | func testAlertBgColor() { 22 | alert.alertBackgroundColor = .black 23 | XCTAssertEqual(alert.alertBackgroundColor, .black) 24 | } 25 | 26 | func testRoundedCorners() { 27 | alert.hasRoundedCorners = false 28 | XCTAssert(!alert.hasRoundedCorners) 29 | } 30 | 31 | func testTitleFont() { 32 | alert.titleFont = testFont 33 | XCTAssertEqual(alert.titleFont, testFont) 34 | 35 | } 36 | 37 | func testMessageFont() { 38 | alert.messageFont = testFont 39 | XCTAssertEqual(alert.messageFont, testFont) 40 | } 41 | 42 | func testTitleTextColor() { 43 | alert.titleTextColor = .black 44 | XCTAssertEqual(alert.titleTextColor, .black) 45 | } 46 | 47 | func testMessageTextColor() { 48 | alert.messageTextColor = .black 49 | XCTAssertEqual(alert.messageTextColor, .black) 50 | } 51 | 52 | func testNilIconImage() { 53 | XCTAssertNil(alert.titleImage) 54 | 55 | } 56 | func testAddingIconImage() { 57 | alert.titleImage = #imageLiteral(resourceName: "Turtle") 58 | XCTAssertNotNil(alert.titleImage) 59 | } 60 | 61 | func testTitleImage() { 62 | XCTAssertNil(alert.titleImage) 63 | } 64 | 65 | func testAddingTitleImage() { 66 | alert.titleImage = #imageLiteral(resourceName: "Turtle") 67 | XCTAssertNotNil(alert.titleImage) 68 | } 69 | 70 | func testDividerColor() { 71 | alert.dividerColor = .black 72 | XCTAssertEqual(alert.dividerColor, .black) 73 | } 74 | 75 | func testDefaultActionTextColors() { 76 | XCTAssertEqual(alert.buttonTextColor[.default], .white) 77 | XCTAssertEqual(alert.buttonTextColor[.cancel], .white) 78 | XCTAssertEqual(alert.buttonTextColor[.destructive], .red) 79 | } 80 | 81 | func testSettingActionTextColor() { 82 | alert.setButtonTextColorFor(.default, to: .black) 83 | XCTAssertEqual(alert.buttonTextColor[.default], .black) 84 | } 85 | 86 | func testDefaultActionBgColors() { 87 | XCTAssertEqual(alert.buttonBackgroundColor[.default], UIColor(red:0.38, green:0.38, blue:0.38, alpha:1.0)) 88 | XCTAssertEqual(alert.buttonBackgroundColor[.cancel], UIColor(red:0.38, green:0.38, blue:0.38, alpha:1.0)) 89 | XCTAssertEqual(alert.buttonBackgroundColor[.destructive], UIColor(red:0.38, green:0.38, blue:0.38, alpha:1.0)) 90 | } 91 | 92 | func testSettingActionBgColor() { 93 | alert.setButtonBackgroundColorFor(.default, to: .black) 94 | XCTAssertEqual(alert.buttonBackgroundColor[.default], .black) 95 | } 96 | 97 | func testDefaultActionFont() { 98 | XCTAssertEqual(alert.buttonFont[.default], UIFont(name: "Avenir-Roman", size: 18)!) 99 | XCTAssertEqual(alert.buttonFont[.cancel], UIFont(name: "Avenir-Black", size: 18)!) 100 | XCTAssertEqual(alert.buttonFont[.destructive], UIFont(name: "Avenir-Roman", size: 18)!) 101 | } 102 | 103 | func testSettingActionFont() { 104 | alert.setButtonFontFor(.default, to: testFont) 105 | XCTAssertEqual(alert.buttonFont[.default], testFont) 106 | } 107 | 108 | func testAddActions() { 109 | let cancelAction = JHTAlertAction(title: "Cancel", style: .cancel, handler: nil) 110 | let okAction = JHTAlertAction(title: "Yes", style: .default) { _ in 111 | print("Do something here!") 112 | } 113 | 114 | alert.addAction(cancelAction) 115 | alert.addAction(okAction) 116 | 117 | XCTAssertEqual(alert.actionCount, 2) 118 | } 119 | 120 | func testAddTextFields() { 121 | alert.addTextFieldWithConfigurationHandler { (textfield) in 122 | textfield.placeholder = "Test" 123 | } 124 | XCTAssertEqual(alert.textFields?.count, 1) 125 | } 126 | 127 | func testTitleLabelNumberOfLines() { 128 | alert.titleNumberOfLines = 1 129 | XCTAssertEqual(alert.titleNumberOfLines, 1) 130 | } 131 | 132 | 133 | 134 | 135 | } 136 | -------------------------------------------------------------------------------- /JHTAlertController.framework.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/JHTAlertController.framework.zip -------------------------------------------------------------------------------- /JHTAlertController.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | s.name = 'JHTAlertController' 4 | s.version = '0.2.4' 5 | s.summary = 'A stock replacement for UIAlertController to customize the colors, fonts, and images to suit your needs.' 6 | 7 | s.description = <<-DESC 8 | JHTAlertController is a replacement for the stock UIAlertController. With it, you can customize the background colors, text colors, and add images to the alert. 9 | DESC 10 | 11 | s.homepage = 'https://github.com/jjessel/JHTAlertController' 12 | s.license = { :type => 'MIT', :file => 'LICENSE' } 13 | s.author = { 'Jeremiah Jessel' => 'Jacuzzi Hot Tubs, LLC' } 14 | s.source = { :git => 'https://github.com/jjessel/JHTAlertController.git', :tag => s.version.to_s } 15 | s.social_media_url = 'https://twitter.com/jcubedapps' 16 | 17 | s.ios.deployment_target = '9.0' 18 | 19 | s.source_files = 'Source/*' 20 | 21 | end 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Jacuzzi Hot Tubs, LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | 22 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // Package.swift 2 | // 3 | // Copyright (c) 2016 Jacuzzi Hot Tubs, LLC 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | import PackageDescription 24 | 25 | let package = Package( 26 | name: "JHTAlertController", 27 | exclude: ["Tests"] 28 | ) 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JHTAlertController 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/JHTAlertController.svg?style=flat)](http://cocoapods.org/pods/JHTAlertController) 4 | [![License](https://img.shields.io/cocoapods/l/JHTAlertController.svg?style=flat)](http://cocoapods.org/pods/JHTAlertController/blob/master/LICENSE) 5 | [![Platform](https://img.shields.io/cocoapods/p/JHTAlertController.svg?style=flat)](http://cocoapods.org/pods/JHTAlertController) 6 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 7 | 8 | ![alt tag](https://github.com/jjessel/JHTAlertController/blob/master/img/dark.PNG) 9 | ![alt tag](https://github.com/jjessel/JHTAlertController/blob/master/img/light.PNG) 10 | ![alt tag](https://github.com/jjessel/JHTAlertController/blob/master/img/icon.PNG) 11 | 12 | ## Easy to use 13 | JHTAlertController is an easy to use replacement for `UIAlertController`. You can customize the appearance of your alert to match the theme of your app. 14 | 15 | ```swift 16 | // Setting up an alert with a title and message 17 | let alertController = JHTAlertController(title: "Turtle", message: "In this alert we use a String for the title instead of an image.", preferredStyle: .alert) 18 | 19 | // Create the action. 20 | let cancelAction = JHTAlertAction(title: "Cancel", style: .cancel, handler: nil) 21 | 22 | // Create an action with a completionl handler. 23 | let okAction = JHTAlertAction(title: "Ok", style: .default) { _ in 24 | print("Do something here!") 25 | } 26 | 27 | // Add the actions to the alert. 28 | alertController.addAction(cancelAction) 29 | alertController.addAction(okAction) 30 | 31 | // Show the action 32 | present(alertController, animated: true, completion: nil) 33 | ``` 34 | 35 | ## Customize the Appearance 36 | 37 | * Change Fonts 38 | * Change Colors 39 | * Add Icons 40 | 41 | 42 | #### Alert 43 | ```swift 44 | // Change the background color 45 | alertController.alertBackgroundColor = .black 46 | 47 | // Round the corners 48 | alertController.hasRoundedCorners = true 49 | ``` 50 | #### Title Block 51 | ```swift 52 | // Use an image instead of text 53 | alertController.titleImage = UIImage(named: "Turtle") 54 | // If you add an image to the title block, you may need to set restrictTitleViewHeight to true, depending on the image size 55 | 56 | // Change the color of the text 57 | alertController.titleTextColor = .black 58 | 59 | // Change the font 60 | alertController.titleFont = .systemFont(ofSize: 18) 61 | 62 | // Change the title block color 63 | alertController.titleViewBackgroundColor = .black 64 | 65 | // Add an icon image to the title block 66 | let alertController = JHTAlertController(title: "Wow!", message: "You can even set an icon for the alert.", preferredStyle: .alert, iconImage: UIImage(named: "TurtleDark")) 67 | ``` 68 | #### Message 69 | ```swift 70 | // Change the font 71 | alertController.messageFont = .systemFont(ofSize: 18) 72 | 73 | / Change thte text color 74 | alertController.messageTextColor = .black 75 | ``` 76 | #### Button 77 | ```swift 78 | // Change the color of the divider 79 | alertController.dividerColor = .black 80 | 81 | // Change the color of the button during the creation of the action 82 | let blueAction = JHTAlertAction(title: "Blue", style: .default, bgColor: .blue, handler: nil) 83 | 84 | // Change the color for all buttons of a specific action 85 | alertController.setButtonBackgroundColorFor(.default, to: .blue) 86 | 87 | // Change the text color for a specific action 88 | alertController.setButtonTextColorFor(.default, to: .white) 89 | 90 | // Change the font for a specific action 91 | alertController.setButtonFontFor(.default, to: .systemFont(ofSize: 18)) 92 | 93 | // Change all action types to a specific color 94 | alertController.setAllButtonBackgroundColors(to: .blue) 95 | ``` 96 | 97 | ## Example 98 | 99 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 100 | 101 | ## Requirements 102 | iOS 9.0 and higher 103 | 104 | ## Installation 105 | 106 | ### CocoaPods 107 | JHTAlertController is available through [CocoaPods](http://cocoapods.org). To install 108 | it, simply add the following line to your Podfile: 109 | 110 | ```ruby 111 | pod "JHTAlertController" 112 | ``` 113 | ### Carthage 114 | [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. 115 | 116 | You can install Carthage using Homebrew: 117 | ``` 118 | $ brew update 119 | $ brew install carthage 120 | ``` 121 | To add JHTAlertController to your Xcode project using Carthage, update your Cartfile: 122 | ``` 123 | github "jjessel/JHTAlertController" ~> 0.2.4 124 | ``` 125 | Run ```carthage update``` to build the framework and drag the built JHTAlertController.framework into your Xcode project. 126 | 127 | ## Author 128 | 129 | Jeremiah Jessel @ Jacuzzi Hot Tubs, LLC 130 | 131 | ## License 132 | 133 | JHTAlertController is available under the MIT license. See the LICENSE file for more info. 134 | -------------------------------------------------------------------------------- /Source/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/Source/.gitkeep -------------------------------------------------------------------------------- /Source/JHTAlertAction.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JHTAlertAction.swift 3 | // JHTAlertController 4 | // 5 | // Created by Jessel, Jeremiah on 11/15/16. 6 | // Copyright © 2016 Jacuzzi Hot Tubs, LLC. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public class JHTAlertAction: NSObject, NSCopying { 12 | 13 | var title: String 14 | var style: JHTAlertActionStyle 15 | var handler: ((JHTAlertAction) -> Void)! 16 | var bgColor: UIColor? 17 | var isEnabled = true 18 | 19 | // MARK: JHTAlertAction Setup 20 | 21 | /// Initialize the JHTAlertAction 22 | /// 23 | /// - Parameters: 24 | /// - title: the title of the action 25 | /// - style: the action style 26 | /// - bgColor: the background color of the action 27 | /// - handler: the handler to fire when interacted with 28 | required public init(title: String, style: JHTAlertActionStyle, bgColor: UIColor? = nil, handler: ((JHTAlertAction) -> Void)!) { 29 | self.title = title 30 | self.style = style 31 | self.bgColor = bgColor 32 | self.handler = handler 33 | } 34 | 35 | 36 | /// Conformance to NSCopying 37 | /// 38 | /// - Parameter zone: the zone 39 | /// - Returns: returns a copy of JHTAlertAction 40 | public func copy(with zone: NSZone? = nil) -> Any { 41 | let copy = type(of: self).init(title: title, style: style, bgColor: bgColor, handler: handler) 42 | copy.isEnabled = self.isEnabled 43 | return copy 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /Source/JHTAlertAnimation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JHTAlertAnimation.swift 3 | // JHTAlertController 4 | // 5 | // Created by Jessel, Jeremiah on 11/15/16. 6 | // Copyright © 2016 Jacuzzi Hot Tubs, LLC. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public class JHTAlertAnimation : NSObject, UIViewControllerAnimatedTransitioning { 12 | 13 | /// Lets the animation transition know if the alert is presenting or dismissing 14 | let isPresenting: Bool 15 | 16 | 17 | /// The initialization of the JHTAlertAnimation 18 | /// 19 | /// - Parameter isPresenting: a Bool that determines if the alert is presenting or dismissing 20 | init(isPresenting: Bool) { 21 | self.isPresenting = isPresenting 22 | } 23 | 24 | // MARK: Transition Animations 25 | 26 | /// The duration of the animation. 27 | /// 28 | /// - Parameter transitionContext: the context of the animation 29 | /// - Returns: a time interval that differes if the alert is presenting or dismissing 30 | public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { 31 | return isPresenting ? 0.2 : 0.2 32 | } 33 | 34 | /// Calls the appropriate animatation 35 | /// 36 | /// - Parameter transitionContext: the context of the animation 37 | public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 38 | if isPresenting { 39 | self.presentAnimateTransition(transitionContext) 40 | } else { 41 | self.dismissAnimateTransition(transitionContext) 42 | } 43 | } 44 | 45 | /// Presents the alert animation 46 | /// 47 | /// - Parameter transitionContext: the context for the animation 48 | func presentAnimateTransition(_ transitionContext: UIViewControllerContextTransitioning) { 49 | 50 | guard let alertController = transitionContext.viewController(forKey: .to) as? JHTAlertController else { 51 | return 52 | } 53 | 54 | let containerView = transitionContext.containerView 55 | containerView.addSubview(alertController.view) 56 | containerView.backgroundColor = UIColor.black.withAlphaComponent(0.3) 57 | containerView.alpha = 0 58 | 59 | alertController.view.alpha = 0.0 60 | alertController.view.transform = CGAffineTransform(scaleX: 0.7, y: 0.7) 61 | 62 | UIView.animate(withDuration:self.transitionDuration(using: transitionContext), animations: { 63 | alertController.view.alpha = 1.0 64 | containerView.alpha = 1.0 65 | alertController.view.transform = CGAffineTransform(scaleX: 1.05, y: 1.05) 66 | }, completion: { _ in 67 | UIView.animate(withDuration: 0.2, animations: { 68 | alertController.view.transform = CGAffineTransform.identity 69 | }, completion: { _ in 70 | 71 | transitionContext.completeTransition(true) 72 | 73 | }) 74 | }) 75 | } 76 | 77 | /// The dismiss animation for the alert 78 | /// 79 | /// - Parameter transitionContext: the context for the animation 80 | func dismissAnimateTransition(_ transitionContext: UIViewControllerContextTransitioning) { 81 | let alertController = transitionContext.viewController(forKey: .from) as! JHTAlertController 82 | let containerView = transitionContext.containerView 83 | 84 | UIView.animate(withDuration: self.transitionDuration(using: transitionContext), animations: { 85 | alertController.view.alpha = 0.0 86 | containerView.alpha = 0.0 87 | }, completion: { _ in 88 | transitionContext.completeTransition(true) 89 | }) 90 | 91 | } 92 | 93 | 94 | } 95 | -------------------------------------------------------------------------------- /Source/JHTAlertController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JHTAlert.swift 3 | // JHTAlertController 4 | // 5 | // Created by Jessel, Jeremiah on 11/16/16. 6 | // Copyright © 2016 Jacuzzi Hot Tubs, LLC. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | /// Used to represent the style of the alert action 12 | /// 13 | /// - default: will display with standard font choice 14 | /// 15 | /// - cancel: will display with a bold style font 16 | /// 17 | /// - destructive: will display with red text color to indicate a destructive behavior 18 | public enum JHTAlertActionStyle : Int { 19 | /// will display with standard font choice 20 | case `default` 21 | /// will display with a bold style font 22 | case cancel 23 | /// will display with red text color to indicate a destructive behavior 24 | case destructive 25 | } 26 | 27 | /// Used to represent the style of the alert 28 | /// 29 | /// - actionSheet: an alert that slides from the bottom 30 | /// 31 | /// - alert: an alert that is diplayed in the center of the view 32 | public enum JHTAlertControllerStyle : Int { 33 | /// an alert that slides from the bottom 34 | case actionSheet 35 | /// an alert that is diplayed in the center of the view 36 | case alert 37 | } 38 | 39 | /// The class for configuring and creating customizable alerts. See https://github.com/jjessel/JHTAlertController for more information. 40 | public class JHTAlertController: UIViewController, UIViewControllerTransitioningDelegate, UITextFieldDelegate { 41 | // MARK: Configuring the Alert 42 | private(set) var preferredStyle: JHTAlertControllerStyle! 43 | 44 | /// Is the alert style of .alert 45 | var isAlert: Bool { return preferredStyle == .alert } 46 | 47 | private var shapeLayer = CAShapeLayer() 48 | private var iconBackgroundRadius: CGFloat = 45.0 49 | 50 | // MARK: ContainerView for all Alert Components 51 | private var containerView = UIView() 52 | private var containerViewWidth: CGFloat = 270.0 53 | 54 | /// The corner radius for the alert 55 | public var cornerRadius: CGFloat = 15.0 { 56 | didSet { 57 | containerView.layer.cornerRadius = self.cornerRadius 58 | } 59 | } 60 | 61 | /// Defines whether the alert has rounded corners 62 | public var hasRoundedCorners = true { 63 | didSet { 64 | if hasRoundedCorners { 65 | containerView.layer.cornerRadius = self.cornerRadius 66 | } else { 67 | containerView.layer.cornerRadius = 0.0 68 | } 69 | } 70 | } 71 | 72 | /// The background color for the message area of the alert 73 | public var alertBackgroundColor = UIColor(red:0.38, green:0.38, blue:0.38, alpha:1.0) { 74 | didSet { 75 | containerView.backgroundColor = alertBackgroundColor 76 | } 77 | } 78 | 79 | // MARK: TitleSection 80 | private var titleView = UIView() 81 | private let titleViewHeight: CGFloat = 45.0 82 | 83 | /// The background color for the title block 84 | public var titleViewBackgroundColor = UIColor.black { 85 | didSet { 86 | titleView.backgroundColor = titleViewBackgroundColor 87 | shapeLayer.fillColor = titleViewBackgroundColor.cgColor 88 | } 89 | } 90 | private var titleLabel = UILabel() 91 | 92 | /// The font to be used for the title block 93 | public var titleFont = UIFont(name: "Avenir-Roman", size: 22) { 94 | didSet { 95 | titleLabel.font = titleFont 96 | } 97 | } 98 | 99 | /// The number of the lines to be used for the title block 100 | public var titleNumberOfLines = 0 { 101 | didSet { 102 | titleLabel.numberOfLines = titleNumberOfLines 103 | } 104 | } 105 | 106 | /// Restrict the height of the title block to the same as the button height 107 | public var restrictTitleViewHeight = false { 108 | didSet { 109 | addTitleHeightConstraint() 110 | } 111 | } 112 | 113 | /// The text color for the title block 114 | public var titleTextColor = UIColor.white { 115 | didSet { 116 | titleLabel.textColor = titleTextColor 117 | } 118 | } 119 | 120 | /// The image to be used in the title block 121 | public var titleImage: UIImage? { 122 | didSet { 123 | updateTitleImage() 124 | } 125 | } 126 | 127 | private var iconImageView: UIImageView? 128 | 129 | // MARK: MessageView 130 | private var messageView = UIView() 131 | private var messageLabel = UILabel() 132 | /// The font for the alert message 133 | public var messageFont = UIFont(name: "Avenir-Roman", size: 16) { 134 | didSet { 135 | messageLabel.font = messageFont 136 | } 137 | } 138 | /// The text color for the alert message 139 | public var messageTextColor = UIColor.white { 140 | didSet { 141 | messageLabel.textColor = messageTextColor 142 | } 143 | } 144 | private var message: String! 145 | 146 | // MARK: ButtonContainer 147 | private var buttonContainerView = UIStackView() 148 | 149 | private var buttonActions: [JHTAlertAction] = [] 150 | private var defaultButton = UIButton() 151 | /// The separator color between the actions and the message 152 | public var dividerColor = UIColor.white 153 | private var borderWidth: CGFloat = 0.5 154 | 155 | // Button configurations 156 | private var buttons = [UIButton]() 157 | private var cancelButtonTag = 0 158 | 159 | /// The default fonts for actions 160 | /// 161 | /// - default: Avenir-Roman, 18 162 | /// 163 | /// - cancel: Avenir-Black, 18 164 | /// 165 | /// - destructive: Avenir-Roman, 18 166 | private(set) var buttonFont: [JHTAlertActionStyle : UIFont] = [ 167 | .default : UIFont(name: "Avenir-Roman", size: 18)!, 168 | .cancel : UIFont(name: "Avenir-Black", size: 18)!, 169 | .destructive : UIFont(name: "Avenir-Roman", size: 18)! 170 | ] 171 | 172 | /// The default text colors for actions 173 | /// 174 | /// - default: white 175 | /// 176 | /// - cancel: white 177 | /// 178 | /// - destructive: red 179 | private(set) var buttonTextColor: [JHTAlertActionStyle : UIColor] = [ 180 | .default : UIColor.white, 181 | .cancel : UIColor.white, 182 | .destructive : UIColor.red 183 | ] 184 | 185 | /// The default background colors for the actions 186 | /// 187 | /// - default: grey 188 | /// 189 | /// - cancel: grey 190 | /// 191 | /// - destructive: grey 192 | private(set) var buttonBackgroundColor: [JHTAlertActionStyle : UIColor] = [ 193 | .default : UIColor(red:0.38, green:0.38, blue:0.38, alpha:1.0), 194 | .cancel : UIColor(red:0.38, green:0.38, blue:0.38, alpha:1.0), 195 | .destructive : UIColor(red:0.38, green:0.38, blue:0.38, alpha:1.0) 196 | ] 197 | /// the number of actions added to the alert 198 | public var actionCount: Int { 199 | return buttonContainerView.arrangedSubviews.count 200 | } 201 | 202 | // MARK: Textfield 203 | private let textFieldHeight: CGFloat = 30.0 204 | /// The textfields that have been added to the alert 205 | public private(set) var textFields: [JHTTextField]? 206 | /// The background color of the text field. The default color is white. 207 | var textFieldBackgroundColor = UIColor.white 208 | /// The color of the border outline for the text field. The default color is gray. 209 | var textFieldBorderColor = UIColor.gray 210 | /// The type of border around the text field. Default is none 211 | var textFieldBorderStyle = UITextBorderStyle.none 212 | private var textFieldContainerView = UIStackView() 213 | /// An override for the textfield to have rounded corners 214 | public var textFieldHasRoundedCorners = true 215 | private let textFieldCornerRadius: CGFloat = 4.0 216 | 217 | // MARK:- Initialization and Setup 218 | 219 | /// Initialize the JHTAlertController 220 | /// 221 | /// - Parameters: 222 | /// - title: the title to be displayed on the alert. If there is a title image added later, the title text will not be visible. 223 | /// - message: the message to be displayed in the alert 224 | /// - preferredStyle: the style of the alert 225 | /// - iconImage: an icon image to be added. If there is no icon image specified, the alert will appear like the stock alert. If there is one specified, a round area will display at the top of the alert. 226 | required convenience public init(title: String, message: String, preferredStyle: JHTAlertControllerStyle, iconImage: UIImage? = nil) { 227 | self.init(nibName: nil, bundle: nil) 228 | 229 | self.title = title 230 | self.message = message 231 | self.preferredStyle = preferredStyle 232 | 233 | self.providesPresentationContextTransitionStyle = true 234 | self.definesPresentationContext = true 235 | self.modalPresentationStyle = UIModalPresentationStyle.custom 236 | self.transitioningDelegate = self 237 | 238 | 239 | // Setup ContainerView 240 | containerView.frame.size = CGSize(width: containerViewWidth, height:300) 241 | containerView.backgroundColor = alertBackgroundColor 242 | containerView.translatesAutoresizingMaskIntoConstraints = false 243 | containerView.layer.cornerRadius = cornerRadius 244 | containerView.clipsToBounds = true 245 | view.addSubview(containerView) 246 | 247 | let containerViewCenterXConstraint = NSLayoutConstraint(item: containerView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0.0) 248 | let containerViewCenterYConstraint = NSLayoutConstraint(item: containerView, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0.0) 249 | let containerViewHeightConstraint = NSLayoutConstraint(item: containerView, attribute: .height, relatedBy: .lessThanOrEqual, toItem: view, attribute: .height, multiplier: 1.0, constant: 0.0) 250 | let containterViewWidthConstraint = NSLayoutConstraint(item: containerView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .width, multiplier: 1.0, constant: containerViewWidth) 251 | view.addConstraints([containerViewCenterXConstraint, 252 | containerViewCenterYConstraint, 253 | containterViewWidthConstraint, 254 | containerViewHeightConstraint]) 255 | 256 | // Setup Image Circle 257 | if iconImage != nil { 258 | iconImageView = UIImageView(image: iconImage) 259 | view.addSubview(iconImageView!) 260 | iconImageView!.translatesAutoresizingMaskIntoConstraints = false 261 | 262 | let imageCenterX = NSLayoutConstraint(item: iconImageView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0) 263 | let imageCenterY = NSLayoutConstraint(item: iconImageView, attribute: .bottom, relatedBy: .equal, toItem: containerView, attribute: .top, multiplier: 1.0, constant: 5) 264 | view.addConstraints([imageCenterX, 265 | imageCenterY]) 266 | } 267 | 268 | // Setup TitleView 269 | titleView.frame.size = CGSize(width: containerViewWidth, height: titleViewHeight) 270 | titleView.backgroundColor = titleViewBackgroundColor 271 | titleView.translatesAutoresizingMaskIntoConstraints = false 272 | titleView.clipsToBounds = true 273 | containerView.addSubview(titleView) 274 | 275 | let titleViewLeadingConstraint = NSLayoutConstraint(item: titleView, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .leading, multiplier: 1.0, constant: 0.0) 276 | let titleViewTrailingConstraint = NSLayoutConstraint(item: titleView, attribute: .trailing, relatedBy: .equal, toItem: containerView, attribute: .trailing, multiplier: 1.0, constant: 0.0) 277 | let titleViewTopConstriant = NSLayoutConstraint(item: titleView, attribute: .top, relatedBy: .equal, toItem: containerView, attribute: .top, multiplier: 1.0, constant: 0.0) 278 | let titleViewHeightConstraint = NSLayoutConstraint(item: titleView, attribute: .height, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: .height, multiplier: 1.0, constant: titleViewHeight) 279 | 280 | view.addConstraints([titleViewLeadingConstraint, 281 | titleViewTopConstriant, 282 | titleViewTrailingConstraint, 283 | titleViewHeightConstraint]) 284 | 285 | // Setup TitleLabel 286 | titleLabel.frame.size = titleView.frame.size 287 | titleLabel.translatesAutoresizingMaskIntoConstraints = false 288 | titleLabel.textColor = titleTextColor 289 | titleLabel.font = titleFont 290 | titleLabel.text = title 291 | titleLabel.numberOfLines = titleNumberOfLines 292 | titleLabel.textAlignment = .center 293 | titleView.addSubview(titleLabel) 294 | 295 | let titleLabelLeadingConstraint = NSLayoutConstraint(item: titleLabel, attribute: .leading, relatedBy: .equal, toItem: titleView, attribute: .leading, multiplier: 1.0, constant: 0.0) 296 | let titleLabelTrailingConstraint = NSLayoutConstraint(item: titleLabel, attribute: .trailing, relatedBy: .equal, toItem: titleView, attribute: .trailing, multiplier: 1.0, constant: 0.0) 297 | let titleLabelBottomConstraint = NSLayoutConstraint(item: titleLabel, attribute: .bottom, relatedBy: .equal, toItem: titleView, attribute: .bottom, multiplier: 1.0, constant: 0.0) 298 | let titleLabelTopConstriant = NSLayoutConstraint(item: titleLabel, attribute: .top, relatedBy: .equal, toItem: titleView, attribute: .top, multiplier: 1.0, constant: 0.0) 299 | view.addConstraints([titleLabelLeadingConstraint, 300 | titleLabelTopConstriant, 301 | titleLabelTrailingConstraint, 302 | titleLabelBottomConstraint]) 303 | 304 | // Setup MessageView 305 | messageView.frame.size = CGSize(width: containerViewWidth, height: titleViewHeight) 306 | messageView.translatesAutoresizingMaskIntoConstraints = false 307 | messageView.clipsToBounds = true 308 | containerView.addSubview(messageView) 309 | let messageViewLeadingConstraint = NSLayoutConstraint(item: messageView, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .leading, multiplier: 1.0, constant: 0.0) 310 | let messageViewTrailingConstraint = NSLayoutConstraint(item: messageView, attribute: .trailing, relatedBy: .equal, toItem: containerView, attribute: .trailing, multiplier: 1.0, constant: 0.0) 311 | let messageViewBottomConstraint = NSLayoutConstraint(item: messageView, attribute: .bottom, relatedBy: .lessThanOrEqual, toItem: containerView, attribute: .bottom, multiplier: 1.0, constant: 0.0) 312 | let messageViewTopConstriant = NSLayoutConstraint(item: messageView, attribute: .top, relatedBy: .equal, toItem: titleView, attribute: .bottom, multiplier: 1.0, constant: 8.0) 313 | view.addConstraints([messageViewLeadingConstraint, 314 | messageViewTopConstriant, 315 | messageViewTrailingConstraint, 316 | messageViewBottomConstraint]) 317 | 318 | // Setup MessageLabel 319 | messageLabel.frame.size = CGSize(width:containerViewWidth - 20, height:0.0) 320 | messageLabel.translatesAutoresizingMaskIntoConstraints = false 321 | messageLabel.numberOfLines = 0 322 | messageLabel.minimumScaleFactor = 0.5 323 | messageLabel.textAlignment = .center 324 | messageLabel.font = messageFont 325 | messageLabel.textColor = messageTextColor 326 | messageLabel.text = message 327 | messageView.addSubview(messageLabel) 328 | 329 | let messageLabelLeadingConstraint = NSLayoutConstraint(item: messageLabel, attribute: .leading, relatedBy: .equal, toItem: messageView, attribute: .leading, multiplier: 1.0, constant: 10.0) 330 | let messageLabelTrailingConstraint = NSLayoutConstraint(item: messageLabel, attribute: .trailing, relatedBy: .equal, toItem: messageView, attribute: .trailing, multiplier: 1.0, constant:-10.0) 331 | let messageLabelBottomConstraint = NSLayoutConstraint(item: messageLabel, attribute: .bottom, relatedBy: .equal, toItem: messageView, attribute: .bottom, multiplier: 1.0, constant: 0.0) 332 | let messageLabelTopConstriant = NSLayoutConstraint(item: messageLabel, attribute: .top, relatedBy: .equal, toItem: messageView, attribute: .top, multiplier: 1.0, constant: 0.0) 333 | view.addConstraints([messageLabelLeadingConstraint, 334 | messageLabelTopConstriant, 335 | messageLabelTrailingConstraint, 336 | messageLabelBottomConstraint]) 337 | 338 | // Setup TextFieldContainerView 339 | textFieldContainerView.frame.size = CGSize(width: containerViewWidth, height: 240.00) 340 | textFieldContainerView.translatesAutoresizingMaskIntoConstraints = false 341 | textFieldContainerView.clipsToBounds = true 342 | textFieldContainerView.distribution = .fillEqually 343 | textFieldContainerView.alignment = .fill 344 | textFieldContainerView.axis = .vertical 345 | textFieldContainerView.spacing = 4 346 | 347 | containerView.addSubview(textFieldContainerView) 348 | 349 | } 350 | 351 | /// The standard view controller life cycle viewWillAppear 352 | /// 353 | /// - Parameter animated: an animated appearance 354 | override public func viewWillAppear(_ animated: Bool) { 355 | 356 | // Setup ButtonContainerView 357 | buttonContainerView.frame.size = CGSize(width: containerViewWidth, height: 240.0) 358 | buttonContainerView.translatesAutoresizingMaskIntoConstraints = false 359 | buttonContainerView.clipsToBounds = true 360 | buttonContainerView.distribution = .fillEqually 361 | buttonContainerView.alignment = .fill 362 | buttonContainerView.axis = (buttonContainerView.arrangedSubviews.count > 2) ? .vertical : .horizontal 363 | 364 | containerView.addSubview(buttonContainerView) 365 | 366 | let buttonContainerViewLeadingConstraint = NSLayoutConstraint(item: buttonContainerView, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .leading, multiplier: 1.0, constant: 0.0) 367 | let buttonContainerViewTrailingConstraint = NSLayoutConstraint(item: buttonContainerView, attribute: .trailing, relatedBy: .equal, toItem: containerView, attribute: .trailing, multiplier: 1.0, constant: 0.0) 368 | let buttonContainerHeight = (buttonContainerView.arrangedSubviews.count > 2) ? titleViewHeight * CGFloat(buttons.count) : titleViewHeight 369 | let buttonContainerViewHeightConstraint = NSLayoutConstraint(item: buttonContainerView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1.0, constant: buttonContainerHeight) 370 | let buttonContainerViewTopConstriant = NSLayoutConstraint(item: buttonContainerView, attribute: .top, relatedBy: .equal, toItem: textFieldContainerView, attribute: .bottom, multiplier: 1.0, constant: 8.0) 371 | let buttonContainerViewBottomConstraint = NSLayoutConstraint(item: buttonContainerView, attribute: .bottom, relatedBy: .equal, toItem: containerView, attribute: .bottom, multiplier: 1.0, constant: 0) 372 | 373 | view.addConstraints([buttonContainerViewLeadingConstraint, 374 | buttonContainerViewTopConstriant, 375 | buttonContainerViewTrailingConstraint, 376 | buttonContainerViewHeightConstraint, 377 | buttonContainerViewBottomConstraint]) 378 | 379 | if buttonContainerView.arrangedSubviews.count == 2 { 380 | let btn = buttonContainerView.arrangedSubviews.last as! UIButton 381 | let border = CALayer() 382 | border.borderWidth = borderWidth 383 | border.borderColor = dividerColor.cgColor 384 | border.frame = CGRect(x: 0, y: 0, width: btn.frame.size.width + 2, height: btn.frame.size.height + 2) 385 | btn.layer.addSublayer(border) 386 | } 387 | updateIconImage() 388 | 389 | // Setup TextFieldContainerView Constraints 390 | 391 | let textFieldContainerLeadingConstraint = NSLayoutConstraint(item: textFieldContainerView, attribute: .leading, relatedBy: .equal, toItem: messageView, attribute: .leading, multiplier: 1.0, constant: 10) 392 | let textFieldContainerTrailingConstraint = NSLayoutConstraint(item: textFieldContainerView, attribute: .trailing, relatedBy: .equal, toItem: messageView, attribute: .trailing, multiplier: 1.0, constant: -10) 393 | let textFieldContainerTopConstraint = NSLayoutConstraint(item: textFieldContainerView, attribute: .top, relatedBy: .equal, toItem: messageView, attribute: .bottom, multiplier: 1.0, constant: 8.0) 394 | let textFieldContainerHeight = CGFloat(textFieldContainerView.arrangedSubviews.count) * textFieldHeight 395 | let textFieldContainerHeightConstraint = NSLayoutConstraint(item: textFieldContainerView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1.0, constant: textFieldContainerHeight) 396 | 397 | view.addConstraints([textFieldContainerLeadingConstraint, 398 | textFieldContainerTrailingConstraint, 399 | textFieldContainerTopConstraint, 400 | textFieldContainerHeightConstraint]) 401 | 402 | 403 | } 404 | 405 | /// Add the title block constraint 406 | private func addTitleHeightConstraint() { 407 | if restrictTitleViewHeight { 408 | let titleViewHeightConstraint = NSLayoutConstraint(item: titleView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1.0, constant: titleViewHeight) 409 | view.addConstraint(titleViewHeightConstraint) 410 | } 411 | } 412 | 413 | /// Update the title image if it was added after initialization 414 | private func updateTitleImage() { 415 | guard titleImage != nil else { return } 416 | let imageView = UIImageView() 417 | imageView.frame = titleView.frame 418 | imageView.contentMode = .scaleAspectFit 419 | imageView.image = titleImage 420 | titleView.addSubview(imageView) 421 | 422 | imageView.translatesAutoresizingMaskIntoConstraints = false 423 | let trailing = NSLayoutConstraint(item: imageView, attribute: .trailing, relatedBy: .equal, toItem: titleView, attribute: .trailing, multiplier: 1.0, constant: 0) 424 | let leading = NSLayoutConstraint(item: imageView, attribute: .leading, relatedBy: .equal, toItem: titleView, attribute: .leading, multiplier: 1.0, constant: 0) 425 | let top = NSLayoutConstraint(item: imageView, attribute: .top, relatedBy: .equal, toItem: titleView, attribute: .top, multiplier: 1.0, constant: 8) 426 | let bottom = NSLayoutConstraint(item: imageView, attribute: .bottom, relatedBy: .equal, toItem: titleView, attribute: .bottom, multiplier: 1.0, constant: -8) 427 | 428 | view.addConstraints([trailing, leading, top, bottom]) 429 | } 430 | 431 | /// Updates the icon image based on the height of the alert. 432 | private func updateIconImage() { 433 | if iconImageView != nil { 434 | 435 | let shapeView = UIView(frame: iconImageView!.frame) 436 | shapeView.clipsToBounds = true 437 | 438 | shapeView.translatesAutoresizingMaskIntoConstraints = false 439 | view.insertSubview(shapeView, belowSubview: containerView) 440 | let centerXConstraint = NSLayoutConstraint(item: shapeView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0) 441 | let centerYConstraint = NSLayoutConstraint(item: shapeView, attribute: .centerY, relatedBy: .equal, toItem: iconImageView, attribute: .centerY, multiplier: 1.0, constant: 5) 442 | let heightConstraint = NSLayoutConstraint(item: shapeView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1.0, constant: iconBackgroundRadius * 2.2) 443 | let widthConstraint = NSLayoutConstraint(item: shapeView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .width, multiplier: 1.0, constant: iconBackgroundRadius * 2.2) 444 | view.addConstraints([centerXConstraint, 445 | centerYConstraint, 446 | heightConstraint, 447 | widthConstraint]) 448 | 449 | let circlePath = UIBezierPath(arcCenter: CGPoint(x: shapeView.frame.maxX,y: shapeView.frame.maxY), radius: CGFloat(iconBackgroundRadius), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true) 450 | 451 | shapeLayer = CAShapeLayer() 452 | shapeLayer.path = circlePath.cgPath 453 | 454 | //change the fill color 455 | shapeLayer.fillColor = titleViewBackgroundColor.cgColor 456 | 457 | shapeView.layer.addSublayer(shapeLayer) 458 | } 459 | } 460 | 461 | // MARK:- Public Methods 462 | 463 | /// Adds an action to be presented in the alert. 464 | /// 465 | /// - Parameter action: the action to be added to the alert 466 | public func addAction(_ action: JHTAlertAction) { 467 | 468 | // Add action to list 469 | buttonActions.append(action) 470 | 471 | // Create button 472 | let button = UIButton(frame: CGRect(x: 0, y: 0, width: containerViewWidth, height: titleViewHeight)) 473 | button.setTitle(action.title, for: .normal) 474 | button.titleLabel?.font = buttonFont[action.style] 475 | button.setTitleColor(buttonTextColor[action.style], for: .normal) 476 | button.isEnabled = action.isEnabled 477 | button.addTarget(self, action: #selector(buttonTapped(sender:)), for: .touchUpInside) 478 | let bgColor = (action.bgColor != nil) ? action.bgColor! : buttonBackgroundColor[action.style]! 479 | button.backgroundColor = bgColor 480 | button.setBackgroundImage(UIColor.imageWithColor(bgColor.darker(), size: button.frame.size), for: .highlighted) 481 | button.tag = buttons.count + 1 482 | button.clipsToBounds = true 483 | 484 | // Setup border for separation 485 | let border = CALayer() 486 | border.borderWidth = borderWidth 487 | border.borderColor = dividerColor.cgColor 488 | border.frame = CGRect(x: -1, y: 0, width: button.frame.size.width + 2, height: button.frame.size.height + 2) 489 | button.layer.addSublayer(border) 490 | 491 | // Add button to list and stackview 492 | buttons.append(button) 493 | buttonContainerView.addArrangedSubview(button) 494 | } 495 | 496 | /// Convenience method to add multiple actions to the alert 497 | /// 498 | /// - Parameter actions: an array of JHTAlertAction 499 | public func addActions(_ actions: [JHTAlertAction]) { 500 | for action in actions { 501 | addAction(action) 502 | } 503 | } 504 | 505 | /// The handler method for the action. This is where the code is executed. 506 | /// 507 | /// - Parameter sender: the UIButton that was pressed 508 | public func buttonTapped(sender: UIButton) { 509 | self.dismiss(animated: true, completion: nil) 510 | sender.isSelected = true 511 | let action = buttonActions[sender.tag - 1] 512 | if action.handler != nil { 513 | action.handler(action) 514 | } 515 | } 516 | 517 | /// Set the font for an individual action style. This method needs to be called before the actions are added to the alert. 518 | /// 519 | /// - Parameters: 520 | /// - action: the type of action to apply the font to 521 | /// - font: the font to be applied 522 | public func setButtonFontFor(_ action: JHTAlertActionStyle, to font: UIFont) { 523 | buttonFont[action] = font 524 | } 525 | 526 | /// Set the text color for an individual action style. This method needs to be called before the actions are added to the alert. 527 | /// 528 | /// - Parameters: 529 | /// - action: the type of action to apply the text color to 530 | /// - color: the color to be applied 531 | public func setButtonTextColorFor(_ action: JHTAlertActionStyle, to color: UIColor) { 532 | buttonTextColor[action] = color 533 | } 534 | 535 | /// Set the background color for an individual action style. This method needs to be called before the actions are added to the alert. 536 | /// 537 | /// - Parameters: 538 | /// - action: the type of action to apply the background color to 539 | /// - color: the color to be applied 540 | public func setButtonBackgroundColorFor( _ action: JHTAlertActionStyle, to color: UIColor) { 541 | buttonBackgroundColor[action] = color 542 | } 543 | 544 | /// An easy way to change all the colors of the actions to one color 545 | /// 546 | /// - Parameter color: the color to be applied 547 | public func setAllButtonBackgroundColors(to color: UIColor) { 548 | buttonBackgroundColor[JHTAlertActionStyle.default] = color 549 | buttonBackgroundColor[JHTAlertActionStyle.destructive] = color 550 | buttonBackgroundColor[JHTAlertActionStyle.cancel] = color 551 | } 552 | 553 | /// Add a text fiel to the alert 554 | /// 555 | /// - Parameter configurationHandler: the copletion of the textfield 556 | public func addTextFieldWithConfigurationHandler(configurationHandler: ((JHTTextField) -> Void)!) { 557 | var textField = JHTTextField() 558 | textField.frame.size = CGSize(width: containerViewWidth, height: textFieldHeight) 559 | textField.borderStyle = textFieldBorderStyle 560 | textField.delegate = self 561 | 562 | if configurationHandler != nil { 563 | configurationHandler(textField) 564 | } 565 | 566 | if textFields == nil { 567 | textFields = [] 568 | } 569 | 570 | if textFieldHasRoundedCorners { 571 | textField.layer.cornerRadius = textFieldCornerRadius 572 | textField.clipsToBounds = true 573 | } 574 | 575 | textFields!.append(textField) 576 | textFieldContainerView.addArrangedSubview(textField) 577 | } 578 | 579 | /// The textfield will resign the first responder 580 | /// 581 | /// - Parameter textField: the textfield that was pressed 582 | /// - Returns: should return value 583 | public func textFieldShouldReturn(_ textField: UITextField) -> Bool { 584 | textField.resignFirstResponder() 585 | return true 586 | } 587 | 588 | // MARK:- UIViewControllerTransitioningDelegate Methods 589 | 590 | /// Asks your delegate for the transition animator object to use when presenting a view controller. 591 | /// 592 | /// - Parameters: 593 | /// - presented: The view controller object that is about to be presented onscreen. 594 | /// - presenting: The view controller that is presenting the view controller in the presented parameter. The object in this parameter could be the root view controller of the window, a parent view controller that is marked as defining the current context, or the last view controller that was presented. This view controller may or may not be the same as the one in the source parameter. 595 | /// - source: The view controller whose present(_:animated:completion:) method was called. 596 | /// - Returns: The animator object to use when presenting the view controller or nil if you do not want to present the view controller using a custom transition. The object you return should be capable of performing a fixed-length animation that is not interactive. 597 | public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 598 | return JHTAlertAnimation(isPresenting: true) 599 | } 600 | 601 | /// Asks your delegate for the transition animator object to use when dismissing a view controller. 602 | /// 603 | /// - Parameter dismissed: The view controller object that is about to be dismissed. 604 | /// - Returns: The animator object to use when dismissing the view controller or nil if you do not want to dismiss the view controller using a custom transition. The object you return should be capable of performing a fixed-length animation that is not interactive. 605 | public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 606 | return JHTAlertAnimation(isPresenting: false) 607 | } 608 | } 609 | -------------------------------------------------------------------------------- /Source/JHTTextField.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JHTTextField.swift 3 | // Pods 4 | // 5 | // Created by Jessel, Jeremiah on 11/23/16. 6 | // 7 | // 8 | 9 | import UIKit 10 | 11 | /// A textfield that provides an inset for the text 12 | public class JHTTextField: UITextField { 13 | let inset: CGFloat = 10 14 | 15 | /// placeholder position 16 | override public func textRect(forBounds bounds: CGRect) -> CGRect { 17 | return bounds.insetBy(dx: inset , dy: 0) 18 | } 19 | 20 | /// text position 21 | override public func editingRect(forBounds bounds: CGRect) -> CGRect { 22 | return bounds.insetBy(dx: inset , dy: 0) 23 | } 24 | 25 | /// the placeholder rect 26 | override public func placeholderRect(forBounds bounds: CGRect) -> CGRect { 27 | return bounds.insetBy(dx: inset, dy: 0) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Source/UIColor+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Extension.swift 3 | // JHTAlertController 4 | // 5 | // Created by Jessel, Jeremiah on 11/16/16. 6 | // Copyright © 2016 Jacuzzi Hot Tubs, LLC. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | public extension UIColor { 13 | 14 | // MARK: Appearances 15 | 16 | /// A lighter representation of the color 17 | /// 18 | /// - Returns: the lighter color 19 | public func lightColor() -> UIColor { 20 | return self.withAlphaComponent(0.5) 21 | } 22 | 23 | /// A darker representation of the color 24 | /// 25 | /// - Returns: the darker color 26 | public func darker() -> UIColor { 27 | 28 | var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0 29 | 30 | if self.getRed(&r, green: &g, blue: &b, alpha: &a){ 31 | return UIColor(red: max(r - 0.2, 0.0), green: max(g - 0.2, 0.0), blue: max(b - 0.2, 0.0), alpha: a) 32 | } 33 | 34 | return UIColor() 35 | } 36 | 37 | /// Creates an image with a specified color 38 | /// 39 | /// - Parameters: 40 | /// - color: the color to create an image from 41 | /// - size: the size of the image 42 | /// - Returns: the image with the color specified 43 | class func imageWithColor(_ color: UIColor, size: CGSize = CGSize(width: 60, height: 60)) -> UIImage { 44 | let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) 45 | UIGraphicsBeginImageContext(rect.size) 46 | let context = UIGraphicsGetCurrentContext() 47 | 48 | context!.setFillColor(color.cgColor); 49 | context!.fill(rect); 50 | 51 | let image = UIGraphicsGetImageFromCurrentImageContext()! 52 | 53 | UIGraphicsEndImageContext(); 54 | 55 | return image; 56 | } 57 | 58 | /// Creates an image with a specified color 59 | /// 60 | /// - Parameter size: the size of the image 61 | /// - Returns: the image with the color specified 62 | public func imageWithColor(size: CGSize = CGSize(width: 60, height: 60)) -> UIImage { 63 | let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) 64 | UIGraphicsBeginImageContext(rect.size) 65 | let context = UIGraphicsGetCurrentContext() 66 | 67 | context!.setFillColor(self.cgColor); 68 | context!.fill(rect); 69 | 70 | let image = UIGraphicsGetImageFromCurrentImageContext()! 71 | 72 | UIGraphicsEndImageContext(); 73 | 74 | return image; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /img/dark.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/img/dark.PNG -------------------------------------------------------------------------------- /img/icon.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/img/icon.PNG -------------------------------------------------------------------------------- /img/light.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jjessel/JHTAlertController/c05a5e2defe469c0955e23f1560a1aa9fc7d9040/img/light.PNG --------------------------------------------------------------------------------