├── .gitignore ├── .swift-version ├── .travis.yml ├── Example ├── GLNotificationBar.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── GLNotificationBar-Example.xcscheme ├── GLNotificationBar.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── GLNotificationBar │ ├── AppDelegate.swift │ ├── Base.lproj │ │ └── LaunchScreen.xib │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x-1.png │ │ │ ├── Icon-App-29x29@2x-2.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x-1.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x-1.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── BG3.imageset │ │ │ ├── BG3.jpg │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Info.plist │ ├── Main.storyboard │ └── ViewController.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── GLNotificationBar.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Target Support Files │ │ ├── GLNotificationBar │ │ ├── GLNotificationBar-dummy.m │ │ ├── GLNotificationBar-prefix.pch │ │ ├── GLNotificationBar-umbrella.h │ │ ├── GLNotificationBar.modulemap │ │ ├── GLNotificationBar.xcconfig │ │ ├── Info.plist │ │ └── ResourceBundle-GLNotificationBar-Info.plist │ │ ├── Pods-GLNotificationBar_Example │ │ ├── Info.plist │ │ ├── Pods-GLNotificationBar_Example-acknowledgements.markdown │ │ ├── Pods-GLNotificationBar_Example-acknowledgements.plist │ │ ├── Pods-GLNotificationBar_Example-dummy.m │ │ ├── Pods-GLNotificationBar_Example-frameworks.sh │ │ ├── Pods-GLNotificationBar_Example-resources.sh │ │ ├── Pods-GLNotificationBar_Example-umbrella.h │ │ ├── Pods-GLNotificationBar_Example.debug.xcconfig │ │ ├── Pods-GLNotificationBar_Example.modulemap │ │ └── Pods-GLNotificationBar_Example.release.xcconfig │ │ └── Pods-GLNotificationBar_Tests │ │ ├── Info.plist │ │ ├── Pods-GLNotificationBar_Tests-acknowledgements.markdown │ │ ├── Pods-GLNotificationBar_Tests-acknowledgements.plist │ │ ├── Pods-GLNotificationBar_Tests-dummy.m │ │ ├── Pods-GLNotificationBar_Tests-frameworks.sh │ │ ├── Pods-GLNotificationBar_Tests-resources.sh │ │ ├── Pods-GLNotificationBar_Tests-umbrella.h │ │ ├── Pods-GLNotificationBar_Tests.debug.xcconfig │ │ ├── Pods-GLNotificationBar_Tests.modulemap │ │ └── Pods-GLNotificationBar_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── GLNotificationBar.podspec ├── GLNotificationBar ├── Assets │ ├── .gitkeep │ ├── Close.png │ └── Close@2x.png └── Classes │ ├── .gitkeep │ ├── GLNotificationBar.swift │ └── GLNotificationBar.xib ├── LICENSE ├── README.md ├── ScreenShots ├── Demo.png ├── DetailedBanner.gif ├── SimpleBanner.gif └── TextInput_ActionType.gif └── _Pods.xcodeproj /.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 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 3.1 2 | 3 | -------------------------------------------------------------------------------- /.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: xcode10 6 | language: swift 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/GLNotificationBar.xcworkspace -scheme GLNotificationBar-Example -sdk iphonesimulator12.0 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/GLNotificationBar.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 350DE4D09E9EFC35B92913D8 /* Pods_GLNotificationBar_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48B51E6CF701C7935A554380 /* Pods_GLNotificationBar_Example.framework */; }; 11 | 58358332217653AD0084E1C8 /* GLNotificationBar.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 58358331217653AD0084E1C8 /* GLNotificationBar.podspec */; }; 12 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 13 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 14 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 15 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 16 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 17 | 80882E931DD5E960004A3CED /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 80882E921DD5E960004A3CED /* Main.storyboard */; }; 18 | FDC01DA7C77110656DF58625 /* Pods_GLNotificationBar_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EFC1E7AD5386B03E8D709AD /* Pods_GLNotificationBar_Tests.framework */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 27 | remoteInfo = GLNotificationBar; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 0F9492861D890755D006C982 /* Pods-GLNotificationBar_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GLNotificationBar_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests.debug.xcconfig"; sourceTree = ""; }; 33 | 33614ED4449E390C949A865A /* Pods-GLNotificationBar_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GLNotificationBar_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests.release.xcconfig"; sourceTree = ""; }; 34 | 3C620727D4F0105034BE5054 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 35 | 3EFC1E7AD5386B03E8D709AD /* Pods_GLNotificationBar_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GLNotificationBar_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 48B51E6CF701C7935A554380 /* Pods_GLNotificationBar_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GLNotificationBar_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | 58358331217653AD0084E1C8 /* GLNotificationBar.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = GLNotificationBar.podspec; path = ../GLNotificationBar.podspec; sourceTree = ""; }; 38 | 607FACD01AFB9204008FA782 /* GLNotificationBar_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GLNotificationBar_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 40 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 41 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 42 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 43 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 44 | 607FACE51AFB9204008FA782 /* GLNotificationBar_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLNotificationBar_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 46 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 47 | 80882E921DD5E960004A3CED /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 48 | 97D4FD22C283574F292CE22C /* Pods-GLNotificationBar_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GLNotificationBar_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example.release.xcconfig"; sourceTree = ""; }; 49 | D98F63155DFFDCEE3D61D6DA /* Pods-GLNotificationBar_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GLNotificationBar_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example.debug.xcconfig"; sourceTree = ""; }; 50 | E5FFD64F565E296EB53F3EF6 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 51 | /* End PBXFileReference section */ 52 | 53 | /* Begin PBXFrameworksBuildPhase section */ 54 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 55 | isa = PBXFrameworksBuildPhase; 56 | buildActionMask = 2147483647; 57 | files = ( 58 | 350DE4D09E9EFC35B92913D8 /* Pods_GLNotificationBar_Example.framework in Frameworks */, 59 | ); 60 | runOnlyForDeploymentPostprocessing = 0; 61 | }; 62 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | FDC01DA7C77110656DF58625 /* Pods_GLNotificationBar_Tests.framework in Frameworks */, 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | /* End PBXFrameworksBuildPhase section */ 71 | 72 | /* Begin PBXGroup section */ 73 | 1A75908D0AB51FCBE9904B3C /* Pods */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | D98F63155DFFDCEE3D61D6DA /* Pods-GLNotificationBar_Example.debug.xcconfig */, 77 | 97D4FD22C283574F292CE22C /* Pods-GLNotificationBar_Example.release.xcconfig */, 78 | 0F9492861D890755D006C982 /* Pods-GLNotificationBar_Tests.debug.xcconfig */, 79 | 33614ED4449E390C949A865A /* Pods-GLNotificationBar_Tests.release.xcconfig */, 80 | ); 81 | name = Pods; 82 | sourceTree = ""; 83 | }; 84 | 607FACC71AFB9204008FA782 = { 85 | isa = PBXGroup; 86 | children = ( 87 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 88 | 607FACD21AFB9204008FA782 /* Example for GLNotificationBar */, 89 | 607FACE81AFB9204008FA782 /* Tests */, 90 | 607FACD11AFB9204008FA782 /* Products */, 91 | 1A75908D0AB51FCBE9904B3C /* Pods */, 92 | 7C8DC2B9BE68FACFDBF4D92F /* Frameworks */, 93 | ); 94 | sourceTree = ""; 95 | }; 96 | 607FACD11AFB9204008FA782 /* Products */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | 607FACD01AFB9204008FA782 /* GLNotificationBar_Example.app */, 100 | 607FACE51AFB9204008FA782 /* GLNotificationBar_Tests.xctest */, 101 | ); 102 | name = Products; 103 | sourceTree = ""; 104 | }; 105 | 607FACD21AFB9204008FA782 /* Example for GLNotificationBar */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 109 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 110 | 80882E921DD5E960004A3CED /* Main.storyboard */, 111 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 112 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 113 | 607FACD31AFB9204008FA782 /* Supporting Files */, 114 | ); 115 | name = "Example for GLNotificationBar"; 116 | path = GLNotificationBar; 117 | sourceTree = ""; 118 | }; 119 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | 607FACD41AFB9204008FA782 /* Info.plist */, 123 | ); 124 | name = "Supporting Files"; 125 | sourceTree = ""; 126 | }; 127 | 607FACE81AFB9204008FA782 /* Tests */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 131 | 607FACE91AFB9204008FA782 /* Supporting Files */, 132 | ); 133 | path = Tests; 134 | sourceTree = ""; 135 | }; 136 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 607FACEA1AFB9204008FA782 /* Info.plist */, 140 | ); 141 | name = "Supporting Files"; 142 | sourceTree = ""; 143 | }; 144 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | 58358331217653AD0084E1C8 /* GLNotificationBar.podspec */, 148 | 3C620727D4F0105034BE5054 /* README.md */, 149 | E5FFD64F565E296EB53F3EF6 /* LICENSE */, 150 | ); 151 | name = "Podspec Metadata"; 152 | sourceTree = ""; 153 | }; 154 | 7C8DC2B9BE68FACFDBF4D92F /* Frameworks */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 48B51E6CF701C7935A554380 /* Pods_GLNotificationBar_Example.framework */, 158 | 3EFC1E7AD5386B03E8D709AD /* Pods_GLNotificationBar_Tests.framework */, 159 | ); 160 | name = Frameworks; 161 | sourceTree = ""; 162 | }; 163 | /* End PBXGroup section */ 164 | 165 | /* Begin PBXNativeTarget section */ 166 | 607FACCF1AFB9204008FA782 /* GLNotificationBar_Example */ = { 167 | isa = PBXNativeTarget; 168 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "GLNotificationBar_Example" */; 169 | buildPhases = ( 170 | 5F18CD3881C43FC5320A89FC /* [CP] Check Pods Manifest.lock */, 171 | 607FACCC1AFB9204008FA782 /* Sources */, 172 | 607FACCD1AFB9204008FA782 /* Frameworks */, 173 | 607FACCE1AFB9204008FA782 /* Resources */, 174 | D4ED851FA7CDCABB027A585B /* [CP] Embed Pods Frameworks */, 175 | 4B4B16EA85AB662ED9D8F649 /* [CP] Copy Pods Resources */, 176 | ); 177 | buildRules = ( 178 | ); 179 | dependencies = ( 180 | ); 181 | name = GLNotificationBar_Example; 182 | productName = GLNotificationBar; 183 | productReference = 607FACD01AFB9204008FA782 /* GLNotificationBar_Example.app */; 184 | productType = "com.apple.product-type.application"; 185 | }; 186 | 607FACE41AFB9204008FA782 /* GLNotificationBar_Tests */ = { 187 | isa = PBXNativeTarget; 188 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "GLNotificationBar_Tests" */; 189 | buildPhases = ( 190 | AED2466AF7E85D2C04BAECC5 /* [CP] Check Pods Manifest.lock */, 191 | 607FACE11AFB9204008FA782 /* Sources */, 192 | 607FACE21AFB9204008FA782 /* Frameworks */, 193 | 607FACE31AFB9204008FA782 /* Resources */, 194 | 28C43EE5DFCE5FFA7F36A54D /* [CP] Embed Pods Frameworks */, 195 | 6AE5C2C99B55906CB715593F /* [CP] Copy Pods Resources */, 196 | ); 197 | buildRules = ( 198 | ); 199 | dependencies = ( 200 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 201 | ); 202 | name = GLNotificationBar_Tests; 203 | productName = Tests; 204 | productReference = 607FACE51AFB9204008FA782 /* GLNotificationBar_Tests.xctest */; 205 | productType = "com.apple.product-type.bundle.unit-test"; 206 | }; 207 | /* End PBXNativeTarget section */ 208 | 209 | /* Begin PBXProject section */ 210 | 607FACC81AFB9204008FA782 /* Project object */ = { 211 | isa = PBXProject; 212 | attributes = { 213 | LastSwiftUpdateCheck = 0720; 214 | LastUpgradeCheck = 1000; 215 | ORGANIZATIONNAME = CocoaPods; 216 | TargetAttributes = { 217 | 607FACCF1AFB9204008FA782 = { 218 | CreatedOnToolsVersion = 6.3.1; 219 | LastSwiftMigration = ""; 220 | }; 221 | 607FACE41AFB9204008FA782 = { 222 | CreatedOnToolsVersion = 6.3.1; 223 | LastSwiftMigration = 1000; 224 | TestTargetID = 607FACCF1AFB9204008FA782; 225 | }; 226 | }; 227 | }; 228 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "GLNotificationBar" */; 229 | compatibilityVersion = "Xcode 3.2"; 230 | developmentRegion = English; 231 | hasScannedForEncodings = 0; 232 | knownRegions = ( 233 | en, 234 | Base, 235 | ); 236 | mainGroup = 607FACC71AFB9204008FA782; 237 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 238 | projectDirPath = ""; 239 | projectRoot = ""; 240 | targets = ( 241 | 607FACCF1AFB9204008FA782 /* GLNotificationBar_Example */, 242 | 607FACE41AFB9204008FA782 /* GLNotificationBar_Tests */, 243 | ); 244 | }; 245 | /* End PBXProject section */ 246 | 247 | /* Begin PBXResourcesBuildPhase section */ 248 | 607FACCE1AFB9204008FA782 /* Resources */ = { 249 | isa = PBXResourcesBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | 58358332217653AD0084E1C8 /* GLNotificationBar.podspec in Resources */, 253 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 254 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 255 | 80882E931DD5E960004A3CED /* Main.storyboard in Resources */, 256 | ); 257 | runOnlyForDeploymentPostprocessing = 0; 258 | }; 259 | 607FACE31AFB9204008FA782 /* Resources */ = { 260 | isa = PBXResourcesBuildPhase; 261 | buildActionMask = 2147483647; 262 | files = ( 263 | ); 264 | runOnlyForDeploymentPostprocessing = 0; 265 | }; 266 | /* End PBXResourcesBuildPhase section */ 267 | 268 | /* Begin PBXShellScriptBuildPhase section */ 269 | 28C43EE5DFCE5FFA7F36A54D /* [CP] Embed Pods Frameworks */ = { 270 | isa = PBXShellScriptBuildPhase; 271 | buildActionMask = 2147483647; 272 | files = ( 273 | ); 274 | inputPaths = ( 275 | ); 276 | name = "[CP] Embed Pods Frameworks"; 277 | outputPaths = ( 278 | ); 279 | runOnlyForDeploymentPostprocessing = 0; 280 | shellPath = /bin/sh; 281 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests-frameworks.sh\"\n"; 282 | showEnvVarsInLog = 0; 283 | }; 284 | 4B4B16EA85AB662ED9D8F649 /* [CP] Copy Pods Resources */ = { 285 | isa = PBXShellScriptBuildPhase; 286 | buildActionMask = 2147483647; 287 | files = ( 288 | ); 289 | inputPaths = ( 290 | ); 291 | name = "[CP] Copy Pods Resources"; 292 | outputPaths = ( 293 | ); 294 | runOnlyForDeploymentPostprocessing = 0; 295 | shellPath = /bin/sh; 296 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example-resources.sh\"\n"; 297 | showEnvVarsInLog = 0; 298 | }; 299 | 5F18CD3881C43FC5320A89FC /* [CP] Check Pods Manifest.lock */ = { 300 | isa = PBXShellScriptBuildPhase; 301 | buildActionMask = 2147483647; 302 | files = ( 303 | ); 304 | inputPaths = ( 305 | ); 306 | name = "[CP] Check Pods Manifest.lock"; 307 | outputPaths = ( 308 | ); 309 | runOnlyForDeploymentPostprocessing = 0; 310 | shellPath = /bin/sh; 311 | 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"; 312 | showEnvVarsInLog = 0; 313 | }; 314 | 6AE5C2C99B55906CB715593F /* [CP] Copy Pods Resources */ = { 315 | isa = PBXShellScriptBuildPhase; 316 | buildActionMask = 2147483647; 317 | files = ( 318 | ); 319 | inputPaths = ( 320 | ); 321 | name = "[CP] Copy Pods Resources"; 322 | outputPaths = ( 323 | ); 324 | runOnlyForDeploymentPostprocessing = 0; 325 | shellPath = /bin/sh; 326 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests-resources.sh\"\n"; 327 | showEnvVarsInLog = 0; 328 | }; 329 | AED2466AF7E85D2C04BAECC5 /* [CP] Check Pods Manifest.lock */ = { 330 | isa = PBXShellScriptBuildPhase; 331 | buildActionMask = 2147483647; 332 | files = ( 333 | ); 334 | inputPaths = ( 335 | ); 336 | name = "[CP] Check Pods Manifest.lock"; 337 | outputPaths = ( 338 | ); 339 | runOnlyForDeploymentPostprocessing = 0; 340 | shellPath = /bin/sh; 341 | 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"; 342 | showEnvVarsInLog = 0; 343 | }; 344 | D4ED851FA7CDCABB027A585B /* [CP] Embed Pods Frameworks */ = { 345 | isa = PBXShellScriptBuildPhase; 346 | buildActionMask = 2147483647; 347 | files = ( 348 | ); 349 | inputPaths = ( 350 | ); 351 | name = "[CP] Embed Pods Frameworks"; 352 | outputPaths = ( 353 | ); 354 | runOnlyForDeploymentPostprocessing = 0; 355 | shellPath = /bin/sh; 356 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example-frameworks.sh\"\n"; 357 | showEnvVarsInLog = 0; 358 | }; 359 | /* End PBXShellScriptBuildPhase section */ 360 | 361 | /* Begin PBXSourcesBuildPhase section */ 362 | 607FACCC1AFB9204008FA782 /* Sources */ = { 363 | isa = PBXSourcesBuildPhase; 364 | buildActionMask = 2147483647; 365 | files = ( 366 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 367 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 368 | ); 369 | runOnlyForDeploymentPostprocessing = 0; 370 | }; 371 | 607FACE11AFB9204008FA782 /* Sources */ = { 372 | isa = PBXSourcesBuildPhase; 373 | buildActionMask = 2147483647; 374 | files = ( 375 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 376 | ); 377 | runOnlyForDeploymentPostprocessing = 0; 378 | }; 379 | /* End PBXSourcesBuildPhase section */ 380 | 381 | /* Begin PBXTargetDependency section */ 382 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 383 | isa = PBXTargetDependency; 384 | target = 607FACCF1AFB9204008FA782 /* GLNotificationBar_Example */; 385 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 386 | }; 387 | /* End PBXTargetDependency section */ 388 | 389 | /* Begin PBXVariantGroup section */ 390 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 391 | isa = PBXVariantGroup; 392 | children = ( 393 | 607FACDF1AFB9204008FA782 /* Base */, 394 | ); 395 | name = LaunchScreen.xib; 396 | sourceTree = ""; 397 | }; 398 | /* End PBXVariantGroup section */ 399 | 400 | /* Begin XCBuildConfiguration section */ 401 | 607FACED1AFB9204008FA782 /* Debug */ = { 402 | isa = XCBuildConfiguration; 403 | buildSettings = { 404 | ALWAYS_SEARCH_USER_PATHS = NO; 405 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 406 | CLANG_CXX_LIBRARY = "libc++"; 407 | CLANG_ENABLE_MODULES = YES; 408 | CLANG_ENABLE_OBJC_ARC = YES; 409 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 410 | CLANG_WARN_BOOL_CONVERSION = YES; 411 | CLANG_WARN_COMMA = YES; 412 | CLANG_WARN_CONSTANT_CONVERSION = YES; 413 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 414 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 415 | CLANG_WARN_EMPTY_BODY = YES; 416 | CLANG_WARN_ENUM_CONVERSION = YES; 417 | CLANG_WARN_INFINITE_RECURSION = YES; 418 | CLANG_WARN_INT_CONVERSION = YES; 419 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 420 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 421 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 422 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 423 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 424 | CLANG_WARN_STRICT_PROTOTYPES = YES; 425 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 426 | CLANG_WARN_UNREACHABLE_CODE = YES; 427 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 428 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 429 | COPY_PHASE_STRIP = NO; 430 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 431 | ENABLE_STRICT_OBJC_MSGSEND = YES; 432 | ENABLE_TESTABILITY = YES; 433 | GCC_C_LANGUAGE_STANDARD = gnu99; 434 | GCC_DYNAMIC_NO_PIC = NO; 435 | GCC_NO_COMMON_BLOCKS = YES; 436 | GCC_OPTIMIZATION_LEVEL = 0; 437 | GCC_PREPROCESSOR_DEFINITIONS = ( 438 | "DEBUG=1", 439 | "$(inherited)", 440 | ); 441 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 442 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 443 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 444 | GCC_WARN_UNDECLARED_SELECTOR = YES; 445 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 446 | GCC_WARN_UNUSED_FUNCTION = YES; 447 | GCC_WARN_UNUSED_VARIABLE = YES; 448 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 449 | MTL_ENABLE_DEBUG_INFO = YES; 450 | ONLY_ACTIVE_ARCH = YES; 451 | SDKROOT = iphoneos; 452 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 453 | SWIFT_VERSION = 4.2; 454 | }; 455 | name = Debug; 456 | }; 457 | 607FACEE1AFB9204008FA782 /* Release */ = { 458 | isa = XCBuildConfiguration; 459 | buildSettings = { 460 | ALWAYS_SEARCH_USER_PATHS = NO; 461 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 462 | CLANG_CXX_LIBRARY = "libc++"; 463 | CLANG_ENABLE_MODULES = YES; 464 | CLANG_ENABLE_OBJC_ARC = YES; 465 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 466 | CLANG_WARN_BOOL_CONVERSION = YES; 467 | CLANG_WARN_COMMA = YES; 468 | CLANG_WARN_CONSTANT_CONVERSION = YES; 469 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 470 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 471 | CLANG_WARN_EMPTY_BODY = YES; 472 | CLANG_WARN_ENUM_CONVERSION = YES; 473 | CLANG_WARN_INFINITE_RECURSION = YES; 474 | CLANG_WARN_INT_CONVERSION = YES; 475 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 476 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 477 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 478 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 479 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 480 | CLANG_WARN_STRICT_PROTOTYPES = YES; 481 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 482 | CLANG_WARN_UNREACHABLE_CODE = YES; 483 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 484 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 485 | COPY_PHASE_STRIP = NO; 486 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 487 | ENABLE_NS_ASSERTIONS = NO; 488 | ENABLE_STRICT_OBJC_MSGSEND = YES; 489 | GCC_C_LANGUAGE_STANDARD = gnu99; 490 | GCC_NO_COMMON_BLOCKS = YES; 491 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 492 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 493 | GCC_WARN_UNDECLARED_SELECTOR = YES; 494 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 495 | GCC_WARN_UNUSED_FUNCTION = YES; 496 | GCC_WARN_UNUSED_VARIABLE = YES; 497 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 498 | MTL_ENABLE_DEBUG_INFO = NO; 499 | SDKROOT = iphoneos; 500 | SWIFT_COMPILATION_MODE = wholemodule; 501 | SWIFT_VERSION = 4.2; 502 | VALIDATE_PRODUCT = YES; 503 | }; 504 | name = Release; 505 | }; 506 | 607FACF01AFB9204008FA782 /* Debug */ = { 507 | isa = XCBuildConfiguration; 508 | baseConfigurationReference = D98F63155DFFDCEE3D61D6DA /* Pods-GLNotificationBar_Example.debug.xcconfig */; 509 | buildSettings = { 510 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 511 | INFOPLIST_FILE = GLNotificationBar/Info.plist; 512 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 513 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 514 | MODULE_NAME = ExampleApp; 515 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 516 | PRODUCT_NAME = "$(TARGET_NAME)"; 517 | SWIFT_VERSION = 4.2; 518 | }; 519 | name = Debug; 520 | }; 521 | 607FACF11AFB9204008FA782 /* Release */ = { 522 | isa = XCBuildConfiguration; 523 | baseConfigurationReference = 97D4FD22C283574F292CE22C /* Pods-GLNotificationBar_Example.release.xcconfig */; 524 | buildSettings = { 525 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 526 | INFOPLIST_FILE = GLNotificationBar/Info.plist; 527 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 528 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 529 | MODULE_NAME = ExampleApp; 530 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 531 | PRODUCT_NAME = "$(TARGET_NAME)"; 532 | SWIFT_VERSION = 4.2; 533 | }; 534 | name = Release; 535 | }; 536 | 607FACF31AFB9204008FA782 /* Debug */ = { 537 | isa = XCBuildConfiguration; 538 | baseConfigurationReference = 0F9492861D890755D006C982 /* Pods-GLNotificationBar_Tests.debug.xcconfig */; 539 | buildSettings = { 540 | FRAMEWORK_SEARCH_PATHS = ( 541 | "$(SDKROOT)/Developer/Library/Frameworks", 542 | "$(inherited)", 543 | ); 544 | GCC_PREPROCESSOR_DEFINITIONS = ( 545 | "DEBUG=1", 546 | "$(inherited)", 547 | ); 548 | INFOPLIST_FILE = Tests/Info.plist; 549 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 550 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 551 | PRODUCT_NAME = "$(TARGET_NAME)"; 552 | SWIFT_VERSION = 4.2; 553 | }; 554 | name = Debug; 555 | }; 556 | 607FACF41AFB9204008FA782 /* Release */ = { 557 | isa = XCBuildConfiguration; 558 | baseConfigurationReference = 33614ED4449E390C949A865A /* Pods-GLNotificationBar_Tests.release.xcconfig */; 559 | buildSettings = { 560 | FRAMEWORK_SEARCH_PATHS = ( 561 | "$(SDKROOT)/Developer/Library/Frameworks", 562 | "$(inherited)", 563 | ); 564 | INFOPLIST_FILE = Tests/Info.plist; 565 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 566 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 567 | PRODUCT_NAME = "$(TARGET_NAME)"; 568 | SWIFT_VERSION = 4.2; 569 | }; 570 | name = Release; 571 | }; 572 | /* End XCBuildConfiguration section */ 573 | 574 | /* Begin XCConfigurationList section */ 575 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "GLNotificationBar" */ = { 576 | isa = XCConfigurationList; 577 | buildConfigurations = ( 578 | 607FACED1AFB9204008FA782 /* Debug */, 579 | 607FACEE1AFB9204008FA782 /* Release */, 580 | ); 581 | defaultConfigurationIsVisible = 0; 582 | defaultConfigurationName = Release; 583 | }; 584 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "GLNotificationBar_Example" */ = { 585 | isa = XCConfigurationList; 586 | buildConfigurations = ( 587 | 607FACF01AFB9204008FA782 /* Debug */, 588 | 607FACF11AFB9204008FA782 /* Release */, 589 | ); 590 | defaultConfigurationIsVisible = 0; 591 | defaultConfigurationName = Release; 592 | }; 593 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "GLNotificationBar_Tests" */ = { 594 | isa = XCConfigurationList; 595 | buildConfigurations = ( 596 | 607FACF31AFB9204008FA782 /* Debug */, 597 | 607FACF41AFB9204008FA782 /* Release */, 598 | ); 599 | defaultConfigurationIsVisible = 0; 600 | defaultConfigurationName = Release; 601 | }; 602 | /* End XCConfigurationList section */ 603 | }; 604 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 605 | } 606 | -------------------------------------------------------------------------------- /Example/GLNotificationBar.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/GLNotificationBar.xcodeproj/xcshareddata/xcschemes/GLNotificationBar-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/GLNotificationBar.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/GLNotificationBar.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/GLNotificationBar.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Example/GLNotificationBar/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // GLNotificationBar 4 | // 5 | // Created by gokul on 11/11/2016. 6 | // Copyright (c) 2016 gokul. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // 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/GLNotificationBar/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/GLNotificationBar/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 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "Icon-App-29x29@2x-1.png", 17 | "scale" : "2x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "Icon-App-29x29@3x-1.png", 23 | "scale" : "3x" 24 | }, 25 | { 26 | "size" : "40x40", 27 | "idiom" : "iphone", 28 | "filename" : "Icon-App-40x40@2x-1.png", 29 | "scale" : "2x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "Icon-App-40x40@3x.png", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "size" : "60x60", 39 | "idiom" : "iphone", 40 | "filename" : "Icon-App-60x60@2x.png", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "size" : "60x60", 45 | "idiom" : "iphone", 46 | "filename" : "Icon-App-60x60@3x.png", 47 | "scale" : "3x" 48 | }, 49 | { 50 | "idiom" : "ipad", 51 | "size" : "20x20", 52 | "scale" : "1x" 53 | }, 54 | { 55 | "idiom" : "ipad", 56 | "size" : "20x20", 57 | "scale" : "2x" 58 | }, 59 | { 60 | "size" : "29x29", 61 | "idiom" : "ipad", 62 | "filename" : "Icon-App-29x29@1x.png", 63 | "scale" : "1x" 64 | }, 65 | { 66 | "size" : "29x29", 67 | "idiom" : "ipad", 68 | "filename" : "Icon-App-29x29@2x-2.png", 69 | "scale" : "2x" 70 | }, 71 | { 72 | "size" : "40x40", 73 | "idiom" : "ipad", 74 | "filename" : "Icon-App-40x40@1x.png", 75 | "scale" : "1x" 76 | }, 77 | { 78 | "size" : "40x40", 79 | "idiom" : "ipad", 80 | "filename" : "Icon-App-40x40@2x.png", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "size" : "76x76", 85 | "idiom" : "ipad", 86 | "filename" : "Icon-App-76x76@1x.png", 87 | "scale" : "1x" 88 | }, 89 | { 90 | "size" : "76x76", 91 | "idiom" : "ipad", 92 | "filename" : "Icon-App-76x76@2x.png", 93 | "scale" : "2x" 94 | }, 95 | { 96 | "size" : "83.5x83.5", 97 | "idiom" : "ipad", 98 | "filename" : "Icon-App-83.5x83.5@2x.png", 99 | "scale" : "2x" 100 | }, 101 | { 102 | "idiom" : "ios-marketing", 103 | "size" : "1024x1024", 104 | "scale" : "1x" 105 | }, 106 | { 107 | "size" : "24x24", 108 | "idiom" : "watch", 109 | "scale" : "2x", 110 | "role" : "notificationCenter", 111 | "subtype" : "38mm" 112 | }, 113 | { 114 | "size" : "27.5x27.5", 115 | "idiom" : "watch", 116 | "scale" : "2x", 117 | "role" : "notificationCenter", 118 | "subtype" : "42mm" 119 | }, 120 | { 121 | "size" : "29x29", 122 | "idiom" : "watch", 123 | "filename" : "Icon-App-29x29@2x.png", 124 | "role" : "companionSettings", 125 | "scale" : "2x" 126 | }, 127 | { 128 | "size" : "29x29", 129 | "idiom" : "watch", 130 | "filename" : "Icon-App-29x29@3x.png", 131 | "role" : "companionSettings", 132 | "scale" : "3x" 133 | }, 134 | { 135 | "size" : "40x40", 136 | "idiom" : "watch", 137 | "scale" : "2x", 138 | "role" : "appLauncher", 139 | "subtype" : "38mm" 140 | }, 141 | { 142 | "size" : "86x86", 143 | "idiom" : "watch", 144 | "scale" : "2x", 145 | "role" : "quickLook", 146 | "subtype" : "38mm" 147 | }, 148 | { 149 | "size" : "98x98", 150 | "idiom" : "watch", 151 | "scale" : "2x", 152 | "role" : "quickLook", 153 | "subtype" : "42mm" 154 | }, 155 | { 156 | "idiom" : "watch-marketing", 157 | "size" : "1024x1024", 158 | "scale" : "1x" 159 | } 160 | ], 161 | "info" : { 162 | "version" : 1, 163 | "author" : "xcode" 164 | } 165 | } -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-2.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x-1.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/BG3.imageset/BG3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/Example/GLNotificationBar/Images.xcassets/BG3.imageset/BG3.jpg -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/BG3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "BG3.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/GLNotificationBar/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/GLNotificationBar/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 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/GLNotificationBar/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // GLNotificationBar 4 | // 5 | // Created by gokul on 11/11/2016. 6 | // Copyright (c) 2016 gokul. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AVFoundation 11 | import GLNotificationBar 12 | 13 | class ViewController: UIViewController { 14 | 15 | var colorStyle:GLNotificationColorType = .extraLight 16 | 17 | 18 | @IBOutlet weak var notificationTitle: UITextField! 19 | @IBOutlet weak var notificationMessage: UITextField! 20 | @IBOutlet weak var soundName: UITextField! 21 | @IBOutlet weak var soundType: UITextField! 22 | 23 | @IBOutlet weak var vibrate: UISwitch! 24 | @IBOutlet weak var sound: UISwitch! 25 | @IBOutlet weak var notificationAction: UISwitch! 26 | 27 | @IBOutlet weak var timeOutLabel: UILabel! 28 | @IBOutlet weak var stepper: UIStepper! 29 | @IBOutlet weak var notificationBarType: UISegmentedControl! 30 | 31 | override func viewDidLoad() { 32 | super.viewDidLoad() 33 | let tap = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard(_:))) 34 | self.view .addGestureRecognizer(tap) 35 | } 36 | 37 | override func didReceiveMemoryWarning() { 38 | super.didReceiveMemoryWarning() 39 | // Dispose of any resources that can be recreated. 40 | } 41 | 42 | 43 | @IBAction func showNotification(_ sender: AnyObject) { 44 | 45 | var style:GLNotificationStyle! 46 | 47 | if notificationBarType.selectedSegmentIndex == 0 { 48 | style = .detailedBanner 49 | }else{ 50 | style = .simpleBanner 51 | } 52 | 53 | let notificationBar = GLNotificationBar(title: notificationTitle.text!, message:notificationMessage.text! , preferredStyle:style) { (bool) in 54 | let alert = UIAlertController(title: "Handler", message: "Catch didSelectNotification action in GLNotificationBar completion handler.", preferredStyle: .alert) 55 | alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) 56 | self.present(alert, animated: true, completion: nil) 57 | } 58 | // Set visual effectview style. 59 | notificationBar.setColorStyle(colorStyle) 60 | notificationBar.setShadow(true) 61 | 62 | if notificationAction.isOn { 63 | //Type: .Cancel 64 | notificationBar.addAction(GLNotifyAction(title: "Cancel", style: .cancel, handler: { (result) in 65 | let alert = UIAlertController(title: result.actionTitle, message: "Apply a style that indicates the action cancels the operation and leaves things unchanged.", preferredStyle: .alert) 66 | alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) 67 | self.present(alert, animated: true, completion: nil) 68 | })) 69 | 70 | //Type: .Destructive 71 | notificationBar.addAction(GLNotifyAction(title: "Destructive", style: .destructive, handler: { (result) in 72 | let alert = UIAlertController(title: result.actionTitle, message: " Apply a style that indicates the action might change or delete data.", preferredStyle: .alert) 73 | alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) 74 | self.present(alert, animated: true, completion: nil) 75 | })) 76 | 77 | //Type: .Default 78 | notificationBar.addAction(GLNotifyAction(title: "Default", style: .default, handler: { (result) in 79 | let alert = UIAlertController(title: result.actionTitle, message: "Apply the default style to the action’s button.", preferredStyle: .alert) 80 | alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) 81 | self.present(alert, animated: true, completion: nil) 82 | })) 83 | 84 | //Type: .TextInput 85 | notificationBar.addAction(GLNotifyAction(title: "Text Input", style: .textInput, handler: { (result) in 86 | let alert = UIAlertController(title: result.actionTitle, message: "Apply a style that indicates the action opens an textinput field helps to respond notification as string.", preferredStyle: .alert) 87 | alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) 88 | self.present(alert, animated: true, completion: nil) 89 | })) 90 | 91 | 92 | // //Type: .OnlyTextInput 93 | // 94 | // notificationBar.addAction(GLNotifyAction(title: "Reply", style: .OnlyTextInput, handler: { (result) in 95 | // let alert = UIAlertController(title: result.actionTitle, message: " Apply a style which removes all other action added and simply adds text field as input to respond notification.", preferredStyle: .Alert) 96 | // alert.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil)) 97 | // self.presentViewController(alert, animated: true, completion: nil) 98 | // })) 99 | } 100 | 101 | 102 | notificationBar.showTime(stepper.value) 103 | 104 | if sound.isOn { 105 | notificationBar.notificationSound(soundName.text, ofType: soundType.text, vibrate: vibrate.isOn) 106 | } 107 | 108 | } 109 | 110 | @IBAction func hideKeyboard(_ sender: UIButton!) { 111 | self.view.endEditing(true) 112 | } 113 | 114 | @IBAction func timeOutInterval(_ sender: UIStepper) { 115 | timeOutLabel.text = "Time out interval \(String(sender.value))" 116 | } 117 | 118 | @IBAction func selectColorType(_ sender: UIButton) { 119 | let actionSheet = UIAlertController(title: "Color Type", message: nil, preferredStyle: .actionSheet) 120 | actionSheet.addAction(UIAlertAction(title: "light", style: .default, handler: { (action) in 121 | self.colorStyle = .light 122 | })) 123 | actionSheet.addAction(UIAlertAction(title: "extra light", style: .default, handler: { (action) in 124 | self.colorStyle = .extraLight 125 | })) 126 | actionSheet.addAction(UIAlertAction(title: "dark", style: .default, handler: { (action) in 127 | self.colorStyle = .dark 128 | })) 129 | actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) 130 | present(actionSheet, animated: true, completion: nil) 131 | } 132 | 133 | } 134 | 135 | 136 | extension ViewController: UITextFieldDelegate { 137 | func textFieldShouldReturn(_ textField: UITextField) -> Bool { 138 | textField.resignFirstResponder() 139 | return true 140 | } 141 | } 142 | 143 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'GLNotificationBar_Example' do 4 | pod 'GLNotificationBar', :path => '../' 5 | 6 | target 'GLNotificationBar_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - GLNotificationBar (2.3.3) 3 | 4 | DEPENDENCIES: 5 | - GLNotificationBar (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | GLNotificationBar: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | GLNotificationBar: 935f3d77d1a444fb7adb9d397594d65f62f31804 13 | 14 | PODFILE CHECKSUM: 3078a13ff14d981dcac78aa148875345e26867e7 15 | 16 | COCOAPODS: 1.2.0 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/GLNotificationBar.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GLNotificationBar", 3 | "version": "2.3.3", 4 | "summary": "GLNotificationBar lets user to handle push notification when app is active.", 5 | "description": "GLNotificationBar is a open source library that lets developers to display push notification or any alert message to end user as banner. iOS below 10 does't displays notification when app is active. This library is inspired by Apple's ios10 notification bar.", 6 | "homepage": "https://github.com/gokulgovind/GLNotificationBar", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "gokul": "gokulece26@gmail.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/gokulgovind/GLNotificationBar.git", 16 | "tag": "2.3.3" 17 | }, 18 | "social_media_url": "https://twitter.com/gokulgovind_", 19 | "platforms": { 20 | "ios": "8.0" 21 | }, 22 | "source_files": "GLNotificationBar/Classes/**/*", 23 | "resource_bundles": { 24 | "GLNotificationBar": [ 25 | "GLNotificationBar/Classes/*.xib", 26 | "GLNotificationBar/Assets/*.png" 27 | ] 28 | }, 29 | "frameworks": "UIKit" 30 | } 31 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - GLNotificationBar (2.3.3) 3 | 4 | DEPENDENCIES: 5 | - GLNotificationBar (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | GLNotificationBar: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | GLNotificationBar: 935f3d77d1a444fb7adb9d397594d65f62f31804 13 | 14 | PODFILE CHECKSUM: 3078a13ff14d981dcac78aa148875345e26867e7 15 | 16 | COCOAPODS: 1.2.0 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 | 0022293E117E924FD9D8C0A1EEEB49AE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 11 | 00AAA85963EFC44C1CC2FEE32AA8FB8D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 12 | 037B891B519BEE9BB65A1F8A52423E13 /* GLNotificationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BA63207B6D7C61DCF164357B85C0432 /* GLNotificationBar.swift */; }; 13 | 08AD3DA1CA6FE2BC2B80B86860839459 /* GLNotificationBar.xib in Sources */ = {isa = PBXBuildFile; fileRef = 2F6C39F4CDB838C724FA19B3226BF587 /* GLNotificationBar.xib */; }; 14 | 52809B4445F05176B52571F1FDF72CA8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 15 | 54B4FD8CF117AA5B3DA5324FCDD602BE /* GLNotificationBar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D21DFBB0FB215CBC58E3C42CD46777E /* GLNotificationBar-dummy.m */; }; 16 | 596398AAA5E3516EB8F3C2BAE2C9E29C /* Pods-GLNotificationBar_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74A4886959AFD079B92CE204F08EE5DF /* Pods-GLNotificationBar_Tests-dummy.m */; }; 17 | 7133822724BB2813763415809655C684 /* Pods-GLNotificationBar_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C0FC37AD651DE71C4496802C30F07DC /* Pods-GLNotificationBar_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18 | 8DF15C37C04CB9BBDB8040239DF29307 /* Close.png in Resources */ = {isa = PBXBuildFile; fileRef = 170ED2997A7EE37DD1A340F2A31FD2F0 /* Close.png */; }; 19 | 9617A19892146FD858A80BA54F9B1115 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */; }; 20 | 972BF071A6E246D91760D7411326522B /* GLNotificationBar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 66AB2FEA71C5CAEC6FE0F65EA28D3C82 /* GLNotificationBar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | 98B528BB9DBEEB87EEF8CFC09865268E /* Close@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 79ACFE112E07C4CAB1D6A5E9D0936B30 /* Close@2x.png */; }; 22 | 99A938B2A558EA4DBE2AB7D7050FB504 /* Pods-GLNotificationBar_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A8E5336837229D83E29FA6232EDD2D85 /* Pods-GLNotificationBar_Example-dummy.m */; }; 23 | CED80830C2AFEBE70588C32DF8E44702 /* GLNotificationBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2F6C39F4CDB838C724FA19B3226BF587 /* GLNotificationBar.xib */; }; 24 | D8807EC48EE18D4C2C432C32E5A55974 /* GLNotificationBar.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B7A7F80428FECE24E2EC5535F9F07F61 /* GLNotificationBar.bundle */; }; 25 | E7E2D5B7C4A9F3E459151C5C049CD1AF /* Pods-GLNotificationBar_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CFB95875B4A06DC4988D82007B34141 /* Pods-GLNotificationBar_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 5A96B757997EBEF73F31B12093756060 /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 1407635236A16AA68FDD84903459E7E5; 34 | remoteInfo = "GLNotificationBar-GLNotificationBar"; 35 | }; 36 | FD5A4BF696EC9E14B0188DC232C5DDFB /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 39 | proxyType = 1; 40 | remoteGlobalIDString = 3AC347AF30B3D1B09D9E55CFF8E6B633; 41 | remoteInfo = GLNotificationBar; 42 | }; 43 | /* End PBXContainerItemProxy section */ 44 | 45 | /* Begin PBXFileReference section */ 46 | 134434EE0DA8E39F7802C287CFB6C32E /* Pods-GLNotificationBar_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GLNotificationBar_Tests.release.xcconfig"; sourceTree = ""; }; 47 | 170ED2997A7EE37DD1A340F2A31FD2F0 /* Close.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = Close.png; sourceTree = ""; }; 48 | 267F10FE56B7A5B6A338C9B5A625185E /* Pods-GLNotificationBar_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GLNotificationBar_Tests-frameworks.sh"; sourceTree = ""; }; 49 | 2BA63207B6D7C61DCF164357B85C0432 /* GLNotificationBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GLNotificationBar.swift; sourceTree = ""; }; 50 | 2C120EAF1E8B5D47BFAA56402023F096 /* GLNotificationBar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GLNotificationBar-prefix.pch"; sourceTree = ""; }; 51 | 2D21DFBB0FB215CBC58E3C42CD46777E /* GLNotificationBar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GLNotificationBar-dummy.m"; sourceTree = ""; }; 52 | 2F6C39F4CDB838C724FA19B3226BF587 /* GLNotificationBar.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = GLNotificationBar.xib; sourceTree = ""; }; 53 | 34642766CEA175CAEE207FBDFA79405C /* Pods-GLNotificationBar_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GLNotificationBar_Example-acknowledgements.plist"; sourceTree = ""; }; 54 | 428F9E719CFFF7BF32382426BE4A6C7E /* GLNotificationBar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GLNotificationBar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 4FBB7D4FF4ECB79531DF3244A20BFA93 /* ResourceBundle-GLNotificationBar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GLNotificationBar-Info.plist"; sourceTree = ""; }; 56 | 5C0FC37AD651DE71C4496802C30F07DC /* Pods-GLNotificationBar_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GLNotificationBar_Tests-umbrella.h"; sourceTree = ""; }; 57 | 5E84F269766BD634720F2457D54C24CF /* GLNotificationBar.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GLNotificationBar.xcconfig; sourceTree = ""; }; 58 | 616BEB51ECCAD129BDBCB7A956B56CC6 /* 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; }; 59 | 66AB2FEA71C5CAEC6FE0F65EA28D3C82 /* GLNotificationBar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GLNotificationBar-umbrella.h"; sourceTree = ""; }; 60 | 67323228660387ACC04B23E6062B9D76 /* Pods-GLNotificationBar_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GLNotificationBar_Example.release.xcconfig"; sourceTree = ""; }; 61 | 6CE0479680662F04F6F155FF963DA230 /* Pods-GLNotificationBar_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GLNotificationBar_Tests-acknowledgements.plist"; sourceTree = ""; }; 62 | 6CFB95875B4A06DC4988D82007B34141 /* Pods-GLNotificationBar_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GLNotificationBar_Example-umbrella.h"; sourceTree = ""; }; 63 | 718393196B4E11A905573799F111B57C /* Pods-GLNotificationBar_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GLNotificationBar_Example.debug.xcconfig"; sourceTree = ""; }; 64 | 74A4886959AFD079B92CE204F08EE5DF /* Pods-GLNotificationBar_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GLNotificationBar_Tests-dummy.m"; sourceTree = ""; }; 65 | 79ACFE112E07C4CAB1D6A5E9D0936B30 /* Close@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; path = "Close@2x.png"; sourceTree = ""; }; 66 | 7BB77FD316EA922B73E80DCEF8244507 /* Pods-GLNotificationBar_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GLNotificationBar_Example-acknowledgements.markdown"; sourceTree = ""; }; 67 | 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 68 | 839F67FD6F93223338799A499427F7DB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 69 | 880C30CE28386EE0D71E4591E13BE03F /* Pods_GLNotificationBar_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GLNotificationBar_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 70 | 89D1298B651E9F413DE2A583096F7BAB /* Pods-GLNotificationBar_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-GLNotificationBar_Tests.modulemap"; sourceTree = ""; }; 71 | 9129AAAB2491D096517E283D558D3A97 /* Pods-GLNotificationBar_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GLNotificationBar_Example-resources.sh"; sourceTree = ""; }; 72 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 73 | 968AD122D686DF54A2AFD71E2DE4CB0B /* Pods_GLNotificationBar_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GLNotificationBar_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74 | 97E34B07746E6E0466458E6667408703 /* Pods-GLNotificationBar_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-GLNotificationBar_Example.modulemap"; sourceTree = ""; }; 75 | A627C49099C6CA9B06B6F2E897F56439 /* Pods-GLNotificationBar_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GLNotificationBar_Example-frameworks.sh"; sourceTree = ""; }; 76 | A8E5336837229D83E29FA6232EDD2D85 /* Pods-GLNotificationBar_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GLNotificationBar_Example-dummy.m"; sourceTree = ""; }; 77 | AD4BB16A086CDE581963EDABF0672FA6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 78 | B7A7F80428FECE24E2EC5535F9F07F61 /* GLNotificationBar.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLNotificationBar.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 79 | BAF8C341BB83573539AEE799C503CC7B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 80 | D3AED74BE35A269327708BF3F505EB6F /* Pods-GLNotificationBar_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GLNotificationBar_Tests.debug.xcconfig"; sourceTree = ""; }; 81 | DA315EEF13D73475C060E3AE24DD1F72 /* GLNotificationBar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = GLNotificationBar.modulemap; sourceTree = ""; }; 82 | E568296A9CDB59C401C84644F5A13B7D /* Pods-GLNotificationBar_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GLNotificationBar_Tests-resources.sh"; sourceTree = ""; }; 83 | E5CDE7ED817AFA821CC216D938DD01B5 /* Pods-GLNotificationBar_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GLNotificationBar_Tests-acknowledgements.markdown"; sourceTree = ""; }; 84 | /* End PBXFileReference section */ 85 | 86 | /* Begin PBXFrameworksBuildPhase section */ 87 | 0554067EBE87CDAB6F86E545C3D08DB8 /* Frameworks */ = { 88 | isa = PBXFrameworksBuildPhase; 89 | buildActionMask = 2147483647; 90 | files = ( 91 | ); 92 | runOnlyForDeploymentPostprocessing = 0; 93 | }; 94 | 05E9FF9CCB81EA7882C39466DFA7AB96 /* Frameworks */ = { 95 | isa = PBXFrameworksBuildPhase; 96 | buildActionMask = 2147483647; 97 | files = ( 98 | 52809B4445F05176B52571F1FDF72CA8 /* Foundation.framework in Frameworks */, 99 | ); 100 | runOnlyForDeploymentPostprocessing = 0; 101 | }; 102 | 65AD4982FBCD7F87DAD860D5AF015919 /* Frameworks */ = { 103 | isa = PBXFrameworksBuildPhase; 104 | buildActionMask = 2147483647; 105 | files = ( 106 | 0022293E117E924FD9D8C0A1EEEB49AE /* Foundation.framework in Frameworks */, 107 | ); 108 | runOnlyForDeploymentPostprocessing = 0; 109 | }; 110 | E3F4DE2EF1C4F2DCE1DE8807CE07AD7E /* Frameworks */ = { 111 | isa = PBXFrameworksBuildPhase; 112 | buildActionMask = 2147483647; 113 | files = ( 114 | 00AAA85963EFC44C1CC2FEE32AA8FB8D /* Foundation.framework in Frameworks */, 115 | 9617A19892146FD858A80BA54F9B1115 /* UIKit.framework in Frameworks */, 116 | ); 117 | runOnlyForDeploymentPostprocessing = 0; 118 | }; 119 | /* End PBXFrameworksBuildPhase section */ 120 | 121 | /* Begin PBXGroup section */ 122 | 0494B24BF51EA2839035804594484263 /* GLNotificationBar */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 32BA0C7492AD6A27B146F7D258550A7C /* GLNotificationBar */, 126 | BDB8F7771E1CE7626EFD6E92E0ABFB64 /* Resources */, 127 | 6388B3C5E87F28BAD40BCF02C62ED1C1 /* Support Files */, 128 | ); 129 | name = GLNotificationBar; 130 | path = ../..; 131 | sourceTree = ""; 132 | }; 133 | 114F7C9011513E9766ABBF1E7F710B0D /* Development Pods */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 0494B24BF51EA2839035804594484263 /* GLNotificationBar */, 137 | ); 138 | name = "Development Pods"; 139 | sourceTree = ""; 140 | }; 141 | 17DF7E495E53C12149E915102D5A6699 /* Assets */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 170ED2997A7EE37DD1A340F2A31FD2F0 /* Close.png */, 145 | 79ACFE112E07C4CAB1D6A5E9D0936B30 /* Close@2x.png */, 146 | ); 147 | path = Assets; 148 | sourceTree = ""; 149 | }; 150 | 32BA0C7492AD6A27B146F7D258550A7C /* GLNotificationBar */ = { 151 | isa = PBXGroup; 152 | children = ( 153 | 75AC429DEA7A279BD821C3837624C7A4 /* Classes */, 154 | ); 155 | path = GLNotificationBar; 156 | sourceTree = ""; 157 | }; 158 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | E6EE98446B568159EE277B68FD442AF0 /* iOS */, 162 | ); 163 | name = Frameworks; 164 | sourceTree = ""; 165 | }; 166 | 6388B3C5E87F28BAD40BCF02C62ED1C1 /* Support Files */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | DA315EEF13D73475C060E3AE24DD1F72 /* GLNotificationBar.modulemap */, 170 | 5E84F269766BD634720F2457D54C24CF /* GLNotificationBar.xcconfig */, 171 | 2D21DFBB0FB215CBC58E3C42CD46777E /* GLNotificationBar-dummy.m */, 172 | 2C120EAF1E8B5D47BFAA56402023F096 /* GLNotificationBar-prefix.pch */, 173 | 66AB2FEA71C5CAEC6FE0F65EA28D3C82 /* GLNotificationBar-umbrella.h */, 174 | 839F67FD6F93223338799A499427F7DB /* Info.plist */, 175 | 4FBB7D4FF4ECB79531DF3244A20BFA93 /* ResourceBundle-GLNotificationBar-Info.plist */, 176 | ); 177 | name = "Support Files"; 178 | path = "Example/Pods/Target Support Files/GLNotificationBar"; 179 | sourceTree = ""; 180 | }; 181 | 75AC429DEA7A279BD821C3837624C7A4 /* Classes */ = { 182 | isa = PBXGroup; 183 | children = ( 184 | 2BA63207B6D7C61DCF164357B85C0432 /* GLNotificationBar.swift */, 185 | 2F6C39F4CDB838C724FA19B3226BF587 /* GLNotificationBar.xib */, 186 | ); 187 | path = Classes; 188 | sourceTree = ""; 189 | }; 190 | 7DB346D0F39D3F0E887471402A8071AB = { 191 | isa = PBXGroup; 192 | children = ( 193 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 194 | 114F7C9011513E9766ABBF1E7F710B0D /* Development Pods */, 195 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, 196 | A34B3C5C3CC801013A446080CFF7261A /* Products */, 197 | FC0FA65BB770478A0DC99E26D28045DC /* Targets Support Files */, 198 | ); 199 | sourceTree = ""; 200 | }; 201 | 83F9C7FBC27A152316FB9164192AB0FF /* Classes */ = { 202 | isa = PBXGroup; 203 | children = ( 204 | ); 205 | path = Classes; 206 | sourceTree = ""; 207 | }; 208 | 8F6206EAA2D2F930947BA44FA29A4F19 /* GLNotificationBar */ = { 209 | isa = PBXGroup; 210 | children = ( 211 | 17DF7E495E53C12149E915102D5A6699 /* Assets */, 212 | 83F9C7FBC27A152316FB9164192AB0FF /* Classes */, 213 | ); 214 | path = GLNotificationBar; 215 | sourceTree = ""; 216 | }; 217 | A09B5EDCAF8CF99092880BD973125E05 /* Pods-GLNotificationBar_Tests */ = { 218 | isa = PBXGroup; 219 | children = ( 220 | BAF8C341BB83573539AEE799C503CC7B /* Info.plist */, 221 | 89D1298B651E9F413DE2A583096F7BAB /* Pods-GLNotificationBar_Tests.modulemap */, 222 | E5CDE7ED817AFA821CC216D938DD01B5 /* Pods-GLNotificationBar_Tests-acknowledgements.markdown */, 223 | 6CE0479680662F04F6F155FF963DA230 /* Pods-GLNotificationBar_Tests-acknowledgements.plist */, 224 | 74A4886959AFD079B92CE204F08EE5DF /* Pods-GLNotificationBar_Tests-dummy.m */, 225 | 267F10FE56B7A5B6A338C9B5A625185E /* Pods-GLNotificationBar_Tests-frameworks.sh */, 226 | E568296A9CDB59C401C84644F5A13B7D /* Pods-GLNotificationBar_Tests-resources.sh */, 227 | 5C0FC37AD651DE71C4496802C30F07DC /* Pods-GLNotificationBar_Tests-umbrella.h */, 228 | D3AED74BE35A269327708BF3F505EB6F /* Pods-GLNotificationBar_Tests.debug.xcconfig */, 229 | 134434EE0DA8E39F7802C287CFB6C32E /* Pods-GLNotificationBar_Tests.release.xcconfig */, 230 | ); 231 | name = "Pods-GLNotificationBar_Tests"; 232 | path = "Target Support Files/Pods-GLNotificationBar_Tests"; 233 | sourceTree = ""; 234 | }; 235 | A34B3C5C3CC801013A446080CFF7261A /* Products */ = { 236 | isa = PBXGroup; 237 | children = ( 238 | B7A7F80428FECE24E2EC5535F9F07F61 /* GLNotificationBar.bundle */, 239 | 428F9E719CFFF7BF32382426BE4A6C7E /* GLNotificationBar.framework */, 240 | 880C30CE28386EE0D71E4591E13BE03F /* Pods_GLNotificationBar_Example.framework */, 241 | 968AD122D686DF54A2AFD71E2DE4CB0B /* Pods_GLNotificationBar_Tests.framework */, 242 | ); 243 | name = Products; 244 | sourceTree = ""; 245 | }; 246 | B498D9E773E79228C412AE37CCAE232C /* Pods-GLNotificationBar_Example */ = { 247 | isa = PBXGroup; 248 | children = ( 249 | AD4BB16A086CDE581963EDABF0672FA6 /* Info.plist */, 250 | 97E34B07746E6E0466458E6667408703 /* Pods-GLNotificationBar_Example.modulemap */, 251 | 7BB77FD316EA922B73E80DCEF8244507 /* Pods-GLNotificationBar_Example-acknowledgements.markdown */, 252 | 34642766CEA175CAEE207FBDFA79405C /* Pods-GLNotificationBar_Example-acknowledgements.plist */, 253 | A8E5336837229D83E29FA6232EDD2D85 /* Pods-GLNotificationBar_Example-dummy.m */, 254 | A627C49099C6CA9B06B6F2E897F56439 /* Pods-GLNotificationBar_Example-frameworks.sh */, 255 | 9129AAAB2491D096517E283D558D3A97 /* Pods-GLNotificationBar_Example-resources.sh */, 256 | 6CFB95875B4A06DC4988D82007B34141 /* Pods-GLNotificationBar_Example-umbrella.h */, 257 | 718393196B4E11A905573799F111B57C /* Pods-GLNotificationBar_Example.debug.xcconfig */, 258 | 67323228660387ACC04B23E6062B9D76 /* Pods-GLNotificationBar_Example.release.xcconfig */, 259 | ); 260 | name = "Pods-GLNotificationBar_Example"; 261 | path = "Target Support Files/Pods-GLNotificationBar_Example"; 262 | sourceTree = ""; 263 | }; 264 | BDB8F7771E1CE7626EFD6E92E0ABFB64 /* Resources */ = { 265 | isa = PBXGroup; 266 | children = ( 267 | 8F6206EAA2D2F930947BA44FA29A4F19 /* GLNotificationBar */, 268 | ); 269 | name = Resources; 270 | sourceTree = ""; 271 | }; 272 | E6EE98446B568159EE277B68FD442AF0 /* iOS */ = { 273 | isa = PBXGroup; 274 | children = ( 275 | 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */, 276 | 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */, 277 | ); 278 | name = iOS; 279 | sourceTree = ""; 280 | }; 281 | FC0FA65BB770478A0DC99E26D28045DC /* Targets Support Files */ = { 282 | isa = PBXGroup; 283 | children = ( 284 | B498D9E773E79228C412AE37CCAE232C /* Pods-GLNotificationBar_Example */, 285 | A09B5EDCAF8CF99092880BD973125E05 /* Pods-GLNotificationBar_Tests */, 286 | ); 287 | name = "Targets Support Files"; 288 | sourceTree = ""; 289 | }; 290 | /* End PBXGroup section */ 291 | 292 | /* Begin PBXHeadersBuildPhase section */ 293 | 22A3A3BC74F1CB3F0AA1E4460A9A81C3 /* Headers */ = { 294 | isa = PBXHeadersBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | 972BF071A6E246D91760D7411326522B /* GLNotificationBar-umbrella.h in Headers */, 298 | ); 299 | runOnlyForDeploymentPostprocessing = 0; 300 | }; 301 | 75DA46B68C2D1FB5895EC859768F0FA4 /* Headers */ = { 302 | isa = PBXHeadersBuildPhase; 303 | buildActionMask = 2147483647; 304 | files = ( 305 | E7E2D5B7C4A9F3E459151C5C049CD1AF /* Pods-GLNotificationBar_Example-umbrella.h in Headers */, 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | }; 309 | 8CC2C02F13B3F086775F3665AF4315F4 /* Headers */ = { 310 | isa = PBXHeadersBuildPhase; 311 | buildActionMask = 2147483647; 312 | files = ( 313 | 7133822724BB2813763415809655C684 /* Pods-GLNotificationBar_Tests-umbrella.h in Headers */, 314 | ); 315 | runOnlyForDeploymentPostprocessing = 0; 316 | }; 317 | /* End PBXHeadersBuildPhase section */ 318 | 319 | /* Begin PBXNativeTarget section */ 320 | 1407635236A16AA68FDD84903459E7E5 /* GLNotificationBar-GLNotificationBar */ = { 321 | isa = PBXNativeTarget; 322 | buildConfigurationList = 83DFE67E3B0D2C112C964EF2D07E9A71 /* Build configuration list for PBXNativeTarget "GLNotificationBar-GLNotificationBar" */; 323 | buildPhases = ( 324 | FA67A45B7061FC3DF7E27FE360F9DF8E /* Sources */, 325 | 0554067EBE87CDAB6F86E545C3D08DB8 /* Frameworks */, 326 | 931A614222E22D0B66BF32D86678C226 /* Resources */, 327 | ); 328 | buildRules = ( 329 | ); 330 | dependencies = ( 331 | ); 332 | name = "GLNotificationBar-GLNotificationBar"; 333 | productName = "GLNotificationBar-GLNotificationBar"; 334 | productReference = B7A7F80428FECE24E2EC5535F9F07F61 /* GLNotificationBar.bundle */; 335 | productType = "com.apple.product-type.bundle"; 336 | }; 337 | 3AC347AF30B3D1B09D9E55CFF8E6B633 /* GLNotificationBar */ = { 338 | isa = PBXNativeTarget; 339 | buildConfigurationList = 7414C33F2E7E16AF3114F7EB0BC6E6DD /* Build configuration list for PBXNativeTarget "GLNotificationBar" */; 340 | buildPhases = ( 341 | 21DC6D118F835C37CB7FF7094ABB2579 /* Sources */, 342 | E3F4DE2EF1C4F2DCE1DE8807CE07AD7E /* Frameworks */, 343 | DD693910F6927F5DB3B7D29AA30A989D /* Resources */, 344 | 22A3A3BC74F1CB3F0AA1E4460A9A81C3 /* Headers */, 345 | ); 346 | buildRules = ( 347 | ); 348 | dependencies = ( 349 | 5818B773566AD1483712B80EE201F51A /* PBXTargetDependency */, 350 | ); 351 | name = GLNotificationBar; 352 | productName = GLNotificationBar; 353 | productReference = 428F9E719CFFF7BF32382426BE4A6C7E /* GLNotificationBar.framework */; 354 | productType = "com.apple.product-type.framework"; 355 | }; 356 | 459D0836942D4C574D5E8AC3DE4FDBB0 /* Pods-GLNotificationBar_Example */ = { 357 | isa = PBXNativeTarget; 358 | buildConfigurationList = 42F1E2FA51A451975E5FF24CE99F4B88 /* Build configuration list for PBXNativeTarget "Pods-GLNotificationBar_Example" */; 359 | buildPhases = ( 360 | D9DAE0A8CA700C19C9E343F70D49D73A /* Sources */, 361 | 05E9FF9CCB81EA7882C39466DFA7AB96 /* Frameworks */, 362 | 75DA46B68C2D1FB5895EC859768F0FA4 /* Headers */, 363 | ); 364 | buildRules = ( 365 | ); 366 | dependencies = ( 367 | 52B690519C753440966C8BC3D8F2788C /* PBXTargetDependency */, 368 | ); 369 | name = "Pods-GLNotificationBar_Example"; 370 | productName = "Pods-GLNotificationBar_Example"; 371 | productReference = 880C30CE28386EE0D71E4591E13BE03F /* Pods_GLNotificationBar_Example.framework */; 372 | productType = "com.apple.product-type.framework"; 373 | }; 374 | EB00213DA52A4850B033ED410196C03C /* Pods-GLNotificationBar_Tests */ = { 375 | isa = PBXNativeTarget; 376 | buildConfigurationList = E9345F589F0BF7AEDE5D28B5ED380BF2 /* Build configuration list for PBXNativeTarget "Pods-GLNotificationBar_Tests" */; 377 | buildPhases = ( 378 | 29EB03E9C8BE161D6297D1CE983DB148 /* Sources */, 379 | 65AD4982FBCD7F87DAD860D5AF015919 /* Frameworks */, 380 | 8CC2C02F13B3F086775F3665AF4315F4 /* Headers */, 381 | ); 382 | buildRules = ( 383 | ); 384 | dependencies = ( 385 | ); 386 | name = "Pods-GLNotificationBar_Tests"; 387 | productName = "Pods-GLNotificationBar_Tests"; 388 | productReference = 968AD122D686DF54A2AFD71E2DE4CB0B /* Pods_GLNotificationBar_Tests.framework */; 389 | productType = "com.apple.product-type.framework"; 390 | }; 391 | /* End PBXNativeTarget section */ 392 | 393 | /* Begin PBXProject section */ 394 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 395 | isa = PBXProject; 396 | attributes = { 397 | LastSwiftUpdateCheck = 0730; 398 | LastUpgradeCheck = 1000; 399 | TargetAttributes = { 400 | 3AC347AF30B3D1B09D9E55CFF8E6B633 = { 401 | LastSwiftMigration = ""; 402 | }; 403 | }; 404 | }; 405 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 406 | compatibilityVersion = "Xcode 3.2"; 407 | developmentRegion = English; 408 | hasScannedForEncodings = 0; 409 | knownRegions = ( 410 | en, 411 | ); 412 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 413 | productRefGroup = A34B3C5C3CC801013A446080CFF7261A /* Products */; 414 | projectDirPath = ""; 415 | projectRoot = ""; 416 | targets = ( 417 | 3AC347AF30B3D1B09D9E55CFF8E6B633 /* GLNotificationBar */, 418 | 1407635236A16AA68FDD84903459E7E5 /* GLNotificationBar-GLNotificationBar */, 419 | 459D0836942D4C574D5E8AC3DE4FDBB0 /* Pods-GLNotificationBar_Example */, 420 | EB00213DA52A4850B033ED410196C03C /* Pods-GLNotificationBar_Tests */, 421 | ); 422 | }; 423 | /* End PBXProject section */ 424 | 425 | /* Begin PBXResourcesBuildPhase section */ 426 | 931A614222E22D0B66BF32D86678C226 /* Resources */ = { 427 | isa = PBXResourcesBuildPhase; 428 | buildActionMask = 2147483647; 429 | files = ( 430 | 8DF15C37C04CB9BBDB8040239DF29307 /* Close.png in Resources */, 431 | 98B528BB9DBEEB87EEF8CFC09865268E /* Close@2x.png in Resources */, 432 | CED80830C2AFEBE70588C32DF8E44702 /* GLNotificationBar.xib in Resources */, 433 | ); 434 | runOnlyForDeploymentPostprocessing = 0; 435 | }; 436 | DD693910F6927F5DB3B7D29AA30A989D /* Resources */ = { 437 | isa = PBXResourcesBuildPhase; 438 | buildActionMask = 2147483647; 439 | files = ( 440 | D8807EC48EE18D4C2C432C32E5A55974 /* GLNotificationBar.bundle in Resources */, 441 | ); 442 | runOnlyForDeploymentPostprocessing = 0; 443 | }; 444 | /* End PBXResourcesBuildPhase section */ 445 | 446 | /* Begin PBXSourcesBuildPhase section */ 447 | 21DC6D118F835C37CB7FF7094ABB2579 /* Sources */ = { 448 | isa = PBXSourcesBuildPhase; 449 | buildActionMask = 2147483647; 450 | files = ( 451 | 54B4FD8CF117AA5B3DA5324FCDD602BE /* GLNotificationBar-dummy.m in Sources */, 452 | 037B891B519BEE9BB65A1F8A52423E13 /* GLNotificationBar.swift in Sources */, 453 | 08AD3DA1CA6FE2BC2B80B86860839459 /* GLNotificationBar.xib in Sources */, 454 | ); 455 | runOnlyForDeploymentPostprocessing = 0; 456 | }; 457 | 29EB03E9C8BE161D6297D1CE983DB148 /* Sources */ = { 458 | isa = PBXSourcesBuildPhase; 459 | buildActionMask = 2147483647; 460 | files = ( 461 | 596398AAA5E3516EB8F3C2BAE2C9E29C /* Pods-GLNotificationBar_Tests-dummy.m in Sources */, 462 | ); 463 | runOnlyForDeploymentPostprocessing = 0; 464 | }; 465 | D9DAE0A8CA700C19C9E343F70D49D73A /* Sources */ = { 466 | isa = PBXSourcesBuildPhase; 467 | buildActionMask = 2147483647; 468 | files = ( 469 | 99A938B2A558EA4DBE2AB7D7050FB504 /* Pods-GLNotificationBar_Example-dummy.m in Sources */, 470 | ); 471 | runOnlyForDeploymentPostprocessing = 0; 472 | }; 473 | FA67A45B7061FC3DF7E27FE360F9DF8E /* Sources */ = { 474 | isa = PBXSourcesBuildPhase; 475 | buildActionMask = 2147483647; 476 | files = ( 477 | ); 478 | runOnlyForDeploymentPostprocessing = 0; 479 | }; 480 | /* End PBXSourcesBuildPhase section */ 481 | 482 | /* Begin PBXTargetDependency section */ 483 | 52B690519C753440966C8BC3D8F2788C /* PBXTargetDependency */ = { 484 | isa = PBXTargetDependency; 485 | name = GLNotificationBar; 486 | target = 3AC347AF30B3D1B09D9E55CFF8E6B633 /* GLNotificationBar */; 487 | targetProxy = FD5A4BF696EC9E14B0188DC232C5DDFB /* PBXContainerItemProxy */; 488 | }; 489 | 5818B773566AD1483712B80EE201F51A /* PBXTargetDependency */ = { 490 | isa = PBXTargetDependency; 491 | name = "GLNotificationBar-GLNotificationBar"; 492 | target = 1407635236A16AA68FDD84903459E7E5 /* GLNotificationBar-GLNotificationBar */; 493 | targetProxy = 5A96B757997EBEF73F31B12093756060 /* PBXContainerItemProxy */; 494 | }; 495 | /* End PBXTargetDependency section */ 496 | 497 | /* Begin XCBuildConfiguration section */ 498 | 015A368F878AC3E2CEAE21DDE8026304 /* Debug */ = { 499 | isa = XCBuildConfiguration; 500 | buildSettings = { 501 | ALWAYS_SEARCH_USER_PATHS = NO; 502 | CLANG_ANALYZER_NONNULL = YES; 503 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 504 | CLANG_CXX_LIBRARY = "libc++"; 505 | CLANG_ENABLE_MODULES = YES; 506 | CLANG_ENABLE_OBJC_ARC = YES; 507 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 508 | CLANG_WARN_BOOL_CONVERSION = YES; 509 | CLANG_WARN_COMMA = YES; 510 | CLANG_WARN_CONSTANT_CONVERSION = YES; 511 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 512 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 513 | CLANG_WARN_EMPTY_BODY = YES; 514 | CLANG_WARN_ENUM_CONVERSION = YES; 515 | CLANG_WARN_INFINITE_RECURSION = YES; 516 | CLANG_WARN_INT_CONVERSION = YES; 517 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 518 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 519 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 520 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 521 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 522 | CLANG_WARN_STRICT_PROTOTYPES = YES; 523 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 524 | CLANG_WARN_UNREACHABLE_CODE = YES; 525 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 526 | CODE_SIGNING_REQUIRED = NO; 527 | COPY_PHASE_STRIP = NO; 528 | ENABLE_STRICT_OBJC_MSGSEND = YES; 529 | ENABLE_TESTABILITY = YES; 530 | GCC_C_LANGUAGE_STANDARD = gnu99; 531 | GCC_DYNAMIC_NO_PIC = NO; 532 | GCC_NO_COMMON_BLOCKS = YES; 533 | GCC_OPTIMIZATION_LEVEL = 0; 534 | GCC_PREPROCESSOR_DEFINITIONS = ( 535 | "POD_CONFIGURATION_DEBUG=1", 536 | "DEBUG=1", 537 | "$(inherited)", 538 | ); 539 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 540 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 541 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 542 | GCC_WARN_UNDECLARED_SELECTOR = YES; 543 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 544 | GCC_WARN_UNUSED_FUNCTION = YES; 545 | GCC_WARN_UNUSED_VARIABLE = YES; 546 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 547 | ONLY_ACTIVE_ARCH = YES; 548 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 549 | STRIP_INSTALLED_PRODUCT = NO; 550 | SWIFT_VERSION = 4.2; 551 | SYMROOT = "${SRCROOT}/../build"; 552 | }; 553 | name = Debug; 554 | }; 555 | 08B16B8950966192D39118A7B5210A94 /* Debug */ = { 556 | isa = XCBuildConfiguration; 557 | baseConfigurationReference = 5E84F269766BD634720F2457D54C24CF /* GLNotificationBar.xcconfig */; 558 | buildSettings = { 559 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GLNotificationBar"; 560 | ENABLE_STRICT_OBJC_MSGSEND = YES; 561 | GCC_NO_COMMON_BLOCKS = YES; 562 | INFOPLIST_FILE = "Target Support Files/GLNotificationBar/ResourceBundle-GLNotificationBar-Info.plist"; 563 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 564 | PRODUCT_NAME = GLNotificationBar; 565 | SDKROOT = iphoneos; 566 | SKIP_INSTALL = YES; 567 | TARGETED_DEVICE_FAMILY = "1,2"; 568 | WRAPPER_EXTENSION = bundle; 569 | }; 570 | name = Debug; 571 | }; 572 | 0F7E1FAC6E0A0A716BD9F387C9C81E77 /* Release */ = { 573 | isa = XCBuildConfiguration; 574 | baseConfigurationReference = 134434EE0DA8E39F7802C287CFB6C32E /* Pods-GLNotificationBar_Tests.release.xcconfig */; 575 | buildSettings = { 576 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 577 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 578 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 579 | CURRENT_PROJECT_VERSION = 1; 580 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 581 | DEFINES_MODULE = YES; 582 | DYLIB_COMPATIBILITY_VERSION = 1; 583 | DYLIB_CURRENT_VERSION = 1; 584 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 585 | ENABLE_STRICT_OBJC_MSGSEND = YES; 586 | GCC_NO_COMMON_BLOCKS = YES; 587 | INFOPLIST_FILE = "Target Support Files/Pods-GLNotificationBar_Tests/Info.plist"; 588 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 589 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 590 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 591 | MACH_O_TYPE = staticlib; 592 | MODULEMAP_FILE = "Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests.modulemap"; 593 | MTL_ENABLE_DEBUG_INFO = NO; 594 | OTHER_LDFLAGS = ""; 595 | OTHER_LIBTOOLFLAGS = ""; 596 | PODS_ROOT = "$(SRCROOT)"; 597 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 598 | PRODUCT_NAME = Pods_GLNotificationBar_Tests; 599 | SDKROOT = iphoneos; 600 | SKIP_INSTALL = YES; 601 | TARGETED_DEVICE_FAMILY = "1,2"; 602 | VERSIONING_SYSTEM = "apple-generic"; 603 | VERSION_INFO_PREFIX = ""; 604 | }; 605 | name = Release; 606 | }; 607 | 168D285A2EB344E13AC5B60DD2BE91D3 /* Debug */ = { 608 | isa = XCBuildConfiguration; 609 | baseConfigurationReference = 718393196B4E11A905573799F111B57C /* Pods-GLNotificationBar_Example.debug.xcconfig */; 610 | buildSettings = { 611 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 612 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 613 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 614 | CURRENT_PROJECT_VERSION = 1; 615 | DEBUG_INFORMATION_FORMAT = dwarf; 616 | DEFINES_MODULE = YES; 617 | DYLIB_COMPATIBILITY_VERSION = 1; 618 | DYLIB_CURRENT_VERSION = 1; 619 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 620 | ENABLE_STRICT_OBJC_MSGSEND = YES; 621 | GCC_NO_COMMON_BLOCKS = YES; 622 | INFOPLIST_FILE = "Target Support Files/Pods-GLNotificationBar_Example/Info.plist"; 623 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 624 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 625 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 626 | MACH_O_TYPE = staticlib; 627 | MODULEMAP_FILE = "Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example.modulemap"; 628 | MTL_ENABLE_DEBUG_INFO = YES; 629 | OTHER_LDFLAGS = ""; 630 | OTHER_LIBTOOLFLAGS = ""; 631 | PODS_ROOT = "$(SRCROOT)"; 632 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 633 | PRODUCT_NAME = Pods_GLNotificationBar_Example; 634 | SDKROOT = iphoneos; 635 | SKIP_INSTALL = YES; 636 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 637 | TARGETED_DEVICE_FAMILY = "1,2"; 638 | VERSIONING_SYSTEM = "apple-generic"; 639 | VERSION_INFO_PREFIX = ""; 640 | }; 641 | name = Debug; 642 | }; 643 | 1BA4EB0E977C67AAC0D084059FD2A0E5 /* Release */ = { 644 | isa = XCBuildConfiguration; 645 | baseConfigurationReference = 5E84F269766BD634720F2457D54C24CF /* GLNotificationBar.xcconfig */; 646 | buildSettings = { 647 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GLNotificationBar"; 648 | ENABLE_STRICT_OBJC_MSGSEND = YES; 649 | GCC_NO_COMMON_BLOCKS = YES; 650 | INFOPLIST_FILE = "Target Support Files/GLNotificationBar/ResourceBundle-GLNotificationBar-Info.plist"; 651 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 652 | PRODUCT_NAME = GLNotificationBar; 653 | SDKROOT = iphoneos; 654 | SKIP_INSTALL = YES; 655 | TARGETED_DEVICE_FAMILY = "1,2"; 656 | WRAPPER_EXTENSION = bundle; 657 | }; 658 | name = Release; 659 | }; 660 | 1F192A19C4B8513F10CD1756C3327167 /* Release */ = { 661 | isa = XCBuildConfiguration; 662 | baseConfigurationReference = 67323228660387ACC04B23E6062B9D76 /* Pods-GLNotificationBar_Example.release.xcconfig */; 663 | buildSettings = { 664 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 665 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 666 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 667 | CURRENT_PROJECT_VERSION = 1; 668 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 669 | DEFINES_MODULE = YES; 670 | DYLIB_COMPATIBILITY_VERSION = 1; 671 | DYLIB_CURRENT_VERSION = 1; 672 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 673 | ENABLE_STRICT_OBJC_MSGSEND = YES; 674 | GCC_NO_COMMON_BLOCKS = YES; 675 | INFOPLIST_FILE = "Target Support Files/Pods-GLNotificationBar_Example/Info.plist"; 676 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 677 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 678 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 679 | MACH_O_TYPE = staticlib; 680 | MODULEMAP_FILE = "Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example.modulemap"; 681 | MTL_ENABLE_DEBUG_INFO = NO; 682 | OTHER_LDFLAGS = ""; 683 | OTHER_LIBTOOLFLAGS = ""; 684 | PODS_ROOT = "$(SRCROOT)"; 685 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 686 | PRODUCT_NAME = Pods_GLNotificationBar_Example; 687 | SDKROOT = iphoneos; 688 | SKIP_INSTALL = YES; 689 | TARGETED_DEVICE_FAMILY = "1,2"; 690 | VERSIONING_SYSTEM = "apple-generic"; 691 | VERSION_INFO_PREFIX = ""; 692 | }; 693 | name = Release; 694 | }; 695 | 356FA85BCC535A6C7056CC6E75217FCB /* Release */ = { 696 | isa = XCBuildConfiguration; 697 | baseConfigurationReference = 5E84F269766BD634720F2457D54C24CF /* GLNotificationBar.xcconfig */; 698 | buildSettings = { 699 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 700 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 701 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 702 | CURRENT_PROJECT_VERSION = 1; 703 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 704 | DEFINES_MODULE = YES; 705 | DYLIB_COMPATIBILITY_VERSION = 1; 706 | DYLIB_CURRENT_VERSION = 1; 707 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 708 | ENABLE_STRICT_OBJC_MSGSEND = YES; 709 | GCC_NO_COMMON_BLOCKS = YES; 710 | GCC_PREFIX_HEADER = "Target Support Files/GLNotificationBar/GLNotificationBar-prefix.pch"; 711 | INFOPLIST_FILE = "Target Support Files/GLNotificationBar/Info.plist"; 712 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 713 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 714 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 715 | MODULEMAP_FILE = "Target Support Files/GLNotificationBar/GLNotificationBar.modulemap"; 716 | MTL_ENABLE_DEBUG_INFO = NO; 717 | PRODUCT_NAME = GLNotificationBar; 718 | SDKROOT = iphoneos; 719 | SKIP_INSTALL = YES; 720 | SWIFT_VERSION = 4.2; 721 | TARGETED_DEVICE_FAMILY = "1,2"; 722 | VERSIONING_SYSTEM = "apple-generic"; 723 | VERSION_INFO_PREFIX = ""; 724 | }; 725 | name = Release; 726 | }; 727 | 44CDBB6D11DE06DB64D6268622BDC47E /* Release */ = { 728 | isa = XCBuildConfiguration; 729 | buildSettings = { 730 | ALWAYS_SEARCH_USER_PATHS = NO; 731 | CLANG_ANALYZER_NONNULL = YES; 732 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 733 | CLANG_CXX_LIBRARY = "libc++"; 734 | CLANG_ENABLE_MODULES = YES; 735 | CLANG_ENABLE_OBJC_ARC = YES; 736 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 737 | CLANG_WARN_BOOL_CONVERSION = YES; 738 | CLANG_WARN_COMMA = YES; 739 | CLANG_WARN_CONSTANT_CONVERSION = YES; 740 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 741 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 742 | CLANG_WARN_EMPTY_BODY = YES; 743 | CLANG_WARN_ENUM_CONVERSION = YES; 744 | CLANG_WARN_INFINITE_RECURSION = YES; 745 | CLANG_WARN_INT_CONVERSION = YES; 746 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 747 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 748 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 749 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 750 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 751 | CLANG_WARN_STRICT_PROTOTYPES = YES; 752 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 753 | CLANG_WARN_UNREACHABLE_CODE = YES; 754 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 755 | CODE_SIGNING_REQUIRED = NO; 756 | COPY_PHASE_STRIP = YES; 757 | ENABLE_NS_ASSERTIONS = NO; 758 | ENABLE_STRICT_OBJC_MSGSEND = YES; 759 | GCC_C_LANGUAGE_STANDARD = gnu99; 760 | GCC_NO_COMMON_BLOCKS = YES; 761 | GCC_PREPROCESSOR_DEFINITIONS = ( 762 | "POD_CONFIGURATION_RELEASE=1", 763 | "$(inherited)", 764 | ); 765 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 766 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 767 | GCC_WARN_UNDECLARED_SELECTOR = YES; 768 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 769 | GCC_WARN_UNUSED_FUNCTION = YES; 770 | GCC_WARN_UNUSED_VARIABLE = YES; 771 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 772 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 773 | STRIP_INSTALLED_PRODUCT = NO; 774 | SWIFT_COMPILATION_MODE = wholemodule; 775 | SWIFT_VERSION = 4.2; 776 | SYMROOT = "${SRCROOT}/../build"; 777 | VALIDATE_PRODUCT = YES; 778 | }; 779 | name = Release; 780 | }; 781 | D144FB73DCEF4D3C159C65D29625CA6E /* Debug */ = { 782 | isa = XCBuildConfiguration; 783 | baseConfigurationReference = 5E84F269766BD634720F2457D54C24CF /* GLNotificationBar.xcconfig */; 784 | buildSettings = { 785 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 786 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 787 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 788 | CURRENT_PROJECT_VERSION = 1; 789 | DEBUG_INFORMATION_FORMAT = dwarf; 790 | DEFINES_MODULE = YES; 791 | DYLIB_COMPATIBILITY_VERSION = 1; 792 | DYLIB_CURRENT_VERSION = 1; 793 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 794 | ENABLE_STRICT_OBJC_MSGSEND = YES; 795 | GCC_NO_COMMON_BLOCKS = YES; 796 | GCC_PREFIX_HEADER = "Target Support Files/GLNotificationBar/GLNotificationBar-prefix.pch"; 797 | INFOPLIST_FILE = "Target Support Files/GLNotificationBar/Info.plist"; 798 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 799 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 800 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 801 | MODULEMAP_FILE = "Target Support Files/GLNotificationBar/GLNotificationBar.modulemap"; 802 | MTL_ENABLE_DEBUG_INFO = YES; 803 | PRODUCT_NAME = GLNotificationBar; 804 | SDKROOT = iphoneos; 805 | SKIP_INSTALL = YES; 806 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 807 | SWIFT_VERSION = 4.2; 808 | TARGETED_DEVICE_FAMILY = "1,2"; 809 | VERSIONING_SYSTEM = "apple-generic"; 810 | VERSION_INFO_PREFIX = ""; 811 | }; 812 | name = Debug; 813 | }; 814 | FDC5C4382CC274280E3E4304A2BF7DD3 /* Debug */ = { 815 | isa = XCBuildConfiguration; 816 | baseConfigurationReference = D3AED74BE35A269327708BF3F505EB6F /* Pods-GLNotificationBar_Tests.debug.xcconfig */; 817 | buildSettings = { 818 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 819 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 820 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 821 | CURRENT_PROJECT_VERSION = 1; 822 | DEBUG_INFORMATION_FORMAT = dwarf; 823 | DEFINES_MODULE = YES; 824 | DYLIB_COMPATIBILITY_VERSION = 1; 825 | DYLIB_CURRENT_VERSION = 1; 826 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 827 | ENABLE_STRICT_OBJC_MSGSEND = YES; 828 | GCC_NO_COMMON_BLOCKS = YES; 829 | INFOPLIST_FILE = "Target Support Files/Pods-GLNotificationBar_Tests/Info.plist"; 830 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 831 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 832 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 833 | MACH_O_TYPE = staticlib; 834 | MODULEMAP_FILE = "Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests.modulemap"; 835 | MTL_ENABLE_DEBUG_INFO = YES; 836 | OTHER_LDFLAGS = ""; 837 | OTHER_LIBTOOLFLAGS = ""; 838 | PODS_ROOT = "$(SRCROOT)"; 839 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 840 | PRODUCT_NAME = Pods_GLNotificationBar_Tests; 841 | SDKROOT = iphoneos; 842 | SKIP_INSTALL = YES; 843 | TARGETED_DEVICE_FAMILY = "1,2"; 844 | VERSIONING_SYSTEM = "apple-generic"; 845 | VERSION_INFO_PREFIX = ""; 846 | }; 847 | name = Debug; 848 | }; 849 | /* End XCBuildConfiguration section */ 850 | 851 | /* Begin XCConfigurationList section */ 852 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 853 | isa = XCConfigurationList; 854 | buildConfigurations = ( 855 | 015A368F878AC3E2CEAE21DDE8026304 /* Debug */, 856 | 44CDBB6D11DE06DB64D6268622BDC47E /* Release */, 857 | ); 858 | defaultConfigurationIsVisible = 0; 859 | defaultConfigurationName = Release; 860 | }; 861 | 42F1E2FA51A451975E5FF24CE99F4B88 /* Build configuration list for PBXNativeTarget "Pods-GLNotificationBar_Example" */ = { 862 | isa = XCConfigurationList; 863 | buildConfigurations = ( 864 | 168D285A2EB344E13AC5B60DD2BE91D3 /* Debug */, 865 | 1F192A19C4B8513F10CD1756C3327167 /* Release */, 866 | ); 867 | defaultConfigurationIsVisible = 0; 868 | defaultConfigurationName = Release; 869 | }; 870 | 7414C33F2E7E16AF3114F7EB0BC6E6DD /* Build configuration list for PBXNativeTarget "GLNotificationBar" */ = { 871 | isa = XCConfigurationList; 872 | buildConfigurations = ( 873 | D144FB73DCEF4D3C159C65D29625CA6E /* Debug */, 874 | 356FA85BCC535A6C7056CC6E75217FCB /* Release */, 875 | ); 876 | defaultConfigurationIsVisible = 0; 877 | defaultConfigurationName = Release; 878 | }; 879 | 83DFE67E3B0D2C112C964EF2D07E9A71 /* Build configuration list for PBXNativeTarget "GLNotificationBar-GLNotificationBar" */ = { 880 | isa = XCConfigurationList; 881 | buildConfigurations = ( 882 | 08B16B8950966192D39118A7B5210A94 /* Debug */, 883 | 1BA4EB0E977C67AAC0D084059FD2A0E5 /* Release */, 884 | ); 885 | defaultConfigurationIsVisible = 0; 886 | defaultConfigurationName = Release; 887 | }; 888 | E9345F589F0BF7AEDE5D28B5ED380BF2 /* Build configuration list for PBXNativeTarget "Pods-GLNotificationBar_Tests" */ = { 889 | isa = XCConfigurationList; 890 | buildConfigurations = ( 891 | FDC5C4382CC274280E3E4304A2BF7DD3 /* Debug */, 892 | 0F7E1FAC6E0A0A716BD9F387C9C81E77 /* Release */, 893 | ); 894 | defaultConfigurationIsVisible = 0; 895 | defaultConfigurationName = Release; 896 | }; 897 | /* End XCConfigurationList section */ 898 | }; 899 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 900 | } 901 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/GLNotificationBar/GLNotificationBar-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_GLNotificationBar : NSObject 3 | @end 4 | @implementation PodsDummy_GLNotificationBar 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/GLNotificationBar/GLNotificationBar-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/GLNotificationBar/GLNotificationBar-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double GLNotificationBarVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char GLNotificationBarVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/GLNotificationBar/GLNotificationBar.modulemap: -------------------------------------------------------------------------------- 1 | framework module GLNotificationBar { 2 | umbrella header "GLNotificationBar-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/GLNotificationBar/GLNotificationBar.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/GLNotificationBar 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "UIKit" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/GLNotificationBar/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 | 2.3.6 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/GLNotificationBar/ResourceBundle-GLNotificationBar-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | ${PRODUCT_BUNDLE_IDENTIFIER} 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | ${PRODUCT_NAME} 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 2.3.3 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_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-GLNotificationBar_Example/Pods-GLNotificationBar_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## GLNotificationBar 5 | 6 | Copyright (c) 2016 gokul 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_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 | Copyright (c) 2016 gokul <gokulece26@gmail.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | GLNotificationBar 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_GLNotificationBar_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_GLNotificationBar_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_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 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | 91 | if [[ "$CONFIGURATION" == "Debug" ]]; then 92 | install_framework "$BUILT_PRODUCTS_DIR/GLNotificationBar/GLNotificationBar.framework" 93 | fi 94 | if [[ "$CONFIGURATION" == "Release" ]]; then 95 | install_framework "$BUILT_PRODUCTS_DIR/GLNotificationBar/GLNotificationBar.framework" 96 | fi 97 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 98 | wait 99 | fi 100 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_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 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | *) 25 | TARGET_DEVICE_ARGS="--target-device mac" 26 | ;; 27 | esac 28 | 29 | install_resource() 30 | { 31 | if [[ "$1" = /* ]] ; then 32 | RESOURCE_PATH="$1" 33 | else 34 | RESOURCE_PATH="${PODS_ROOT}/$1" 35 | fi 36 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 37 | cat << EOM 38 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 39 | EOM 40 | exit 1 41 | fi 42 | case $RESOURCE_PATH in 43 | *.storyboard) 44 | 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}" 45 | 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} 46 | ;; 47 | *.xib) 48 | 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}" 49 | 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} 50 | ;; 51 | *.framework) 52 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 54 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 55 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | ;; 57 | *.xcdatamodel) 58 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 59 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 60 | ;; 61 | *.xcdatamodeld) 62 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 63 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 64 | ;; 65 | *.xcmappingmodel) 66 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 67 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 68 | ;; 69 | *.xcassets) 70 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 71 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 72 | ;; 73 | *) 74 | echo "$RESOURCE_PATH" 75 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 76 | ;; 77 | esac 78 | } 79 | 80 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 83 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | fi 86 | rm -f "$RESOURCES_TO_COPY" 87 | 88 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 89 | then 90 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 91 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 92 | while read line; do 93 | if [[ $line != "${PODS_ROOT}*" ]]; then 94 | XCASSET_FILES+=("$line") 95 | fi 96 | done <<<"$OTHER_XCASSETS" 97 | 98 | 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}" 99 | fi 100 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_GLNotificationBar_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_GLNotificationBar_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GLNotificationBar" 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/GLNotificationBar/GLNotificationBar.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "GLNotificationBar" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_GLNotificationBar_Example { 2 | umbrella header "Pods-GLNotificationBar_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Example/Pods-GLNotificationBar_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GLNotificationBar" 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/GLNotificationBar/GLNotificationBar.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "GLNotificationBar" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_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-GLNotificationBar_Tests/Pods-GLNotificationBar_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-GLNotificationBar_Tests/Pods-GLNotificationBar_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-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_GLNotificationBar_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_GLNotificationBar_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_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 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 91 | wait 92 | fi 93 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_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 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | *) 25 | TARGET_DEVICE_ARGS="--target-device mac" 26 | ;; 27 | esac 28 | 29 | install_resource() 30 | { 31 | if [[ "$1" = /* ]] ; then 32 | RESOURCE_PATH="$1" 33 | else 34 | RESOURCE_PATH="${PODS_ROOT}/$1" 35 | fi 36 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 37 | cat << EOM 38 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 39 | EOM 40 | exit 1 41 | fi 42 | case $RESOURCE_PATH in 43 | *.storyboard) 44 | 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}" 45 | 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} 46 | ;; 47 | *.xib) 48 | 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}" 49 | 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} 50 | ;; 51 | *.framework) 52 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 54 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 55 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | ;; 57 | *.xcdatamodel) 58 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 59 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 60 | ;; 61 | *.xcdatamodeld) 62 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 63 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 64 | ;; 65 | *.xcmappingmodel) 66 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 67 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 68 | ;; 69 | *.xcassets) 70 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 71 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 72 | ;; 73 | *) 74 | echo "$RESOURCE_PATH" 75 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 76 | ;; 77 | esac 78 | } 79 | 80 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 83 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | fi 86 | rm -f "$RESOURCES_TO_COPY" 87 | 88 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 89 | then 90 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 91 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 92 | while read line; do 93 | if [[ $line != "${PODS_ROOT}*" ]]; then 94 | XCASSET_FILES+=("$line") 95 | fi 96 | done <<<"$OTHER_XCASSETS" 97 | 98 | 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}" 99 | fi 100 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_GLNotificationBar_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_GLNotificationBar_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GLNotificationBar" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/GLNotificationBar/GLNotificationBar.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_GLNotificationBar_Tests { 2 | umbrella header "Pods-GLNotificationBar_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-GLNotificationBar_Tests/Pods-GLNotificationBar_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GLNotificationBar" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/GLNotificationBar/GLNotificationBar.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /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 | import GLNotificationBar 4 | 5 | class Tests: XCTestCase { 6 | 7 | override func setUp() { 8 | super.setUp() 9 | // Put setup code here. This method is called before the invocation of each test method in the class. 10 | } 11 | 12 | override func tearDown() { 13 | // Put teardown code here. This method is called after the invocation of each test method in the class. 14 | super.tearDown() 15 | } 16 | 17 | func testExample() { 18 | // This is an example of a functional test case. 19 | XCTAssert(true, "Pass") 20 | } 21 | 22 | func testPerformanceExample() { 23 | // This is an example of a performance test case. 24 | self.measure() { 25 | // Put the code you want to measure the time of here. 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /GLNotificationBar.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint GLNotificationBar.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'GLNotificationBar' 11 | s.version = '2.3.7' 12 | s.summary = 'GLNotificationBar lets user to handle push notification when app is active.' 13 | 14 | # This description is used to generate tags and improve search results. 15 | # * Think: What does it do? Why did you write it? What is the focus? 16 | # * Try to keep it short, snappy and to the point. 17 | # * Write the description between the DESC delimiters below. 18 | # * Finally, don't worry about the indent, CocoaPods strips it! 19 | 20 | s.description = <<-DESC 21 | GLNotificationBar is a open source library that lets developers to display push notification or any alert message to end user as banner. iOS below 10 does't displays notification when app is active. This library is inspired by Apple's ios10 notification bar. 22 | DESC 23 | 24 | 25 | s.homepage = 'https://github.com/gokulgovind/GLNotificationBar' 26 | # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 27 | s.license = { :type => 'MIT', :file => 'LICENSE' } 28 | s.author = { 'gokul' => 'gokulece26@gmail.com' } 29 | s.source = { :git => 'https://github.com/gokulgovind/GLNotificationBar.git', :tag => s.version.to_s } 30 | # s.social_media_url = 'https://twitter.com/gokulgovind_' 31 | 32 | s.ios.deployment_target = '10.0' 33 | 34 | s.source_files = 'GLNotificationBar/Classes/**/*' 35 | 36 | s.resource_bundles = { 37 | 'GLNotificationBar' => ['GLNotificationBar/Classes/*.xib','GLNotificationBar/Assets/*.png'] 38 | } 39 | 40 | # s.public_header_files = 'Pod/Classes/**/*.h' 41 | s.frameworks = 'UIKit' 42 | # s.dependency 'AFNetworking', '~> 2.3' 43 | end 44 | -------------------------------------------------------------------------------- /GLNotificationBar/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/GLNotificationBar/Assets/.gitkeep -------------------------------------------------------------------------------- /GLNotificationBar/Assets/Close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/GLNotificationBar/Assets/Close.png -------------------------------------------------------------------------------- /GLNotificationBar/Assets/Close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/GLNotificationBar/Assets/Close@2x.png -------------------------------------------------------------------------------- /GLNotificationBar/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/GLNotificationBar/Classes/.gitkeep -------------------------------------------------------------------------------- /GLNotificationBar/Classes/GLNotificationBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GLNotificationBar.swift 3 | // GLNotificationBar 4 | // 5 | // Created by gokul on 17/10/16. 6 | // Copyright (c) 2016 gokul. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AVFoundation 11 | 12 | /** 13 | Notification color types. 14 | - ExtraLight 15 | - Light 16 | - Dark 17 | */ 18 | @objc public enum GLNotificationColorType:Int { 19 | ///extraLight: Apply the extra light style. 20 | case extraLight = 0 21 | ///light: Apply the light style. 22 | case light 23 | ///dark: Apply the dark style. 24 | case dark 25 | } 26 | 27 | /** 28 | Notification action types. 29 | - Default 30 | - Destructive 31 | - TextInput 32 | - OnlyTextInput 33 | - Cancel 34 | */ 35 | @objc public enum GLNotificationActionType:Int { 36 | ///Default: Apply the default style to the action’s button. 37 | case `default` = 0 38 | ///Destructive: Apply a style that indicates the action might change or delete data. 39 | case destructive 40 | ///TextInput: Apply a style that indicates the action opens an textinput field helps to respond notification as string. 41 | case textInput 42 | ///OnlyTextInput: Apply a style which removes all other action added and simply adds text field as input to respond notification. 43 | case onlyTextInput 44 | ///Cancel: Apply a style that indicates the action cancels the operation and leaves things unchanged. 45 | case cancel 46 | } 47 | 48 | /** 49 | Notification action types. 50 | - SimpleBanner 51 | - DetailedBanner 52 | */ 53 | @objc public enum GLNotificationStyle:Int { 54 | ///SimpleBanner: Apply the SimpleBanner style that displays notification as simple banner,it can't open in detail by swiping down. 55 | case simpleBanner = 0 56 | ///DetailedBanner: Apply a style that opens message in detail with `GLNotifyAction` if added. 57 | case detailedBanner 58 | } 59 | 60 | enum PanDirection:Int { 61 | case up = -1 62 | case down = 1 63 | } 64 | 65 | enum DeviceOrientation { 66 | case portrait 67 | case landscape 68 | } 69 | /// Default height of `GLNotificationBar` is 100 70 | let BAR_HEIGHT:CGFloat = 100 71 | 72 | /// Default display time of `GLNotificationBar` is 5s 73 | var SHOW_TIME:Double = 5 74 | 75 | 76 | let APP_DELEGATE = UIApplication.shared 77 | let frameWidth:CGFloat! = UIApplication.shared.keyWindow?.bounds.width 78 | private let deviceHeight = UIApplication.shared.keyWindow?.bounds.height 79 | 80 | var appIconName:String! 81 | var appName:String! 82 | var showNotificationInDetail = true 83 | var notificationBar:CustomView! 84 | var audioPlayer = AVAudioPlayer() 85 | var actionArray = [GLNotifyAction]() 86 | 87 | var timer:Timer? 88 | 89 | 90 | var messageDidSelect:((Bool) -> Void)? 91 | 92 | /** 93 | A GLNotificationBar object displays an banner message to user (**iOS 10 Style**) over top of the screen which helps to handle local or remote notification when app is in active state. 94 | 95 | Can add `GLNotifyAction` as action to the message, which provides `button or text input` fields to respond to notification. 96 | 97 | */ 98 | open class GLNotificationBar: NSObject { 99 | 100 | @objc public override init() { 101 | super.init() 102 | } 103 | 104 | /** 105 | Creates and returns a notification bar for displaying an alert to the user. 106 | An initialized notificatio bar object. 107 | 108 | - Parameter title: The title of the alert. Use this string to get the user’s attention and communicate the reason for the notification. 109 | 110 | - Parameter message: Descriptive text that provides additional details about the reason for the alert. 111 | 112 | - Parameter preferredStyle: The style to use when presenting the notification bar. Use this parameter to configure the notification bar as an `simple banner` or as a `detailed banner (as iOS 10 notification)`. 113 | 114 | - Parameter handler: A block to execute when the user selects the notification message. This block has no return value and takes the selected action object as its only parameter. 115 | 116 | - Returns: A inilized GLNotificationBar object. 117 | */ 118 | 119 | @objc public init(title:String!, message :String!, preferredStyle:GLNotificationStyle, handler: ((Bool) -> Void)?) { 120 | super.init() 121 | 122 | actionArray = [GLNotifyAction]() 123 | messageDidSelect = handler 124 | if ((APP_DELEGATE.keyWindow?.subviews) == nil) { 125 | let time = DispatchTime.now() + Double(Int64(5.0 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) 126 | DispatchQueue.main.asyncAfter(deadline: time, execute: { 127 | self.setUpNotificationBar(title, body: message , notificationStyle:preferredStyle) 128 | }) 129 | }else{ 130 | setUpNotificationBar(title, body: message , notificationStyle:preferredStyle) 131 | } 132 | 133 | 134 | DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(1.0 * Double(NSEC_PER_SEC) )) / Double(NSEC_PER_SEC)) { 135 | if SHOW_TIME != 0 { 136 | if (timer != nil) { 137 | timer!.invalidate() 138 | } 139 | timer = Timer.scheduledTimer(timeInterval: SHOW_TIME - 1.0, target: self, selector: #selector(self.hideNotification(_:)), userInfo: nil, repeats: false 140 | ) 141 | } 142 | } 143 | } 144 | 145 | 146 | 147 | /** 148 | *showTime* hides the notification bar after given time period. 149 | 150 | - Parameter timeInSec: Enter the time in seconds, the default value is `5 Sec`. If 0 is set, notification bar auto hide will be disabled. 151 | 152 | - Returns: No return value. 153 | */ 154 | 155 | @objc open func showTime(_ timeInSec: Double){ 156 | SHOW_TIME = timeInSec 157 | } 158 | 159 | 160 | 161 | /** 162 | *notificationSound* helps in playing the sound file while displaying notification, If file name or type does't found.Default sound will be played. 163 | 164 | - Parameter name: Name of the sound file in bundle. 165 | 166 | - Parameter ofType: Sound formate `(.waw, .mp3 etc..)` 167 | 168 | - Parameter vibrate: `Bool` value which helps to tutn on and off vibrate for notification `(NOTE: It may change depending on device sound settings)`. 169 | 170 | - Returns: No return value. 171 | */ 172 | @objc open func notificationSound(_ name: String!, ofType:String!, vibrate:Bool){ 173 | 174 | if vibrate { 175 | AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); 176 | } 177 | guard let path = Bundle.main.path(forResource: name, ofType: ofType) else { 178 | NSLog("\n#NOTE: File name or type does't found.Default sound will be played.\n") 179 | AudioServicesPlaySystemSound(1054); 180 | return 181 | } 182 | let pianoSound = URL(fileURLWithPath:path) 183 | 184 | do { 185 | audioPlayer = try AVAudioPlayer(contentsOf: pianoSound, fileTypeHint: nil) 186 | audioPlayer.prepareToPlay() 187 | audioPlayer.play() 188 | } catch { 189 | AudioServicesPlaySystemSound(1054); 190 | print("Unable to play sound.Default sound will be played.") 191 | } 192 | 193 | } 194 | 195 | /** 196 | `addAction` helps in adding `GLNotifyAction` to notification bar as options to respond notification. 197 | 198 | - Parameter action: add's `GLNotifyAction` object as action which including the title to display in the button, button style , and a handler to execute when the user taps the button 199 | 200 | - Returns: No return value. 201 | */ 202 | 203 | @objc open func addAction(_ action: GLNotifyAction){ 204 | actionArray.append(action) //Action for notification didselect 205 | } 206 | 207 | 208 | @objc open func setColorStyle(_ color: GLNotificationColorType){ 209 | switch color { 210 | case .extraLight: 211 | notificationBar.visualEffectView.effect = UIBlurEffect(style: .extraLight) 212 | notificationBar.body.textColor = UIColor.black 213 | notificationBar.header.textColor = UIColor.black 214 | return 215 | case .light: 216 | notificationBar.visualEffectView.effect = UIBlurEffect(style: .light) 217 | notificationBar.body.textColor = UIColor.black 218 | notificationBar.header.textColor = UIColor.black 219 | return 220 | case .dark: 221 | notificationBar.visualEffectView.effect = UIBlurEffect(style: .dark) 222 | notificationBar.body.textColor = UIColor.white 223 | notificationBar.header.textColor = UIColor.white 224 | return 225 | } 226 | } 227 | 228 | @objc open func setShadow(_ shadow: Bool){ 229 | if (shadow){ 230 | notificationBar.notificationView.backgroundColor = UIColor.white 231 | notificationBar.notificationView.layer.shadowColor = UIColor.black.cgColor 232 | notificationBar.notificationView.layer.shadowOpacity = 0.4 233 | notificationBar.notificationView.layer.shadowOffset = CGSize.zero 234 | notificationBar.notificationView.layer.shadowRadius = 7 235 | } 236 | } 237 | 238 | 239 | 240 | 241 | @IBAction func hideNotification(_ sender:UIButton) { 242 | if (notificationBar != nil) { 243 | UIView.animate(withDuration: 0.5, animations: { 244 | notificationBar.frame.origin = CGPoint(x: 0, y: -BAR_HEIGHT) 245 | }, completion: { (yes) in 246 | notificationBar.removeFromSuperview() 247 | APP_DELEGATE.keyWindow?.windowLevel = UIWindow.Level(rawValue: 0.0) 248 | }) 249 | } 250 | } 251 | 252 | 253 | fileprivate func setUpNotificationBar(_ header:String, body:String, notificationStyle:GLNotificationStyle) { 254 | 255 | for subView in (APP_DELEGATE.keyWindow?.subviews)! { //To clear old notification from queue 256 | if subView is CustomView { 257 | subView.removeFromSuperview() 258 | } 259 | } 260 | 261 | notificationBar = CustomView(frame: CGRect(x: 0, y: -BAR_HEIGHT, width: frameWidth!, height: BAR_HEIGHT)) 262 | 263 | switch notificationStyle { 264 | case .detailedBanner: 265 | notificationBar.notificationStyleIndicator.isHidden = false 266 | showNotificationInDetail = true 267 | break 268 | default: 269 | notificationBar.notificationStyleIndicator.isHidden = true 270 | showNotificationInDetail = false 271 | break 272 | } 273 | 274 | if header.count == 0 { 275 | notificationBar.body.text = body 276 | }else{ 277 | let attributeString = NSMutableAttributedString(string: String("\(header)\n\(body)")) 278 | attributeString.addAttributes([NSAttributedString.Key.font:UIFont.boldSystemFont(ofSize: 15)], range: NSRange(location: 0, length: header.count)) 279 | notificationBar.body.attributedText = attributeString 280 | } 281 | 282 | var infoDic:Dictionary = Bundle.main.infoDictionary! 283 | appName = infoDic["CFBundleName"] as? String 284 | notificationBar.header.text = appName 285 | 286 | if infoDic["CFBundleIcons"] != nil { 287 | infoDic = infoDic["CFBundleIcons"] as! Dictionary 288 | infoDic = infoDic["CFBundlePrimaryIcon"] as! Dictionary 289 | appIconName = (infoDic["CFBundleIconFiles"]! as AnyObject).object(at: 0) as! String 290 | notificationBar.appIcon.image = UIImage(named: appIconName) 291 | 292 | } else { 293 | notificationBar.appIcon.layer.borderColor = UIColor.gray.cgColor 294 | notificationBar.appIcon.layer.borderWidth = 1.0 295 | 296 | appIconName = "" 297 | print("Oops... no app icon found") 298 | } 299 | 300 | 301 | notificationBar.appIcon.layer.cornerRadius = 5.0 302 | notificationBar.appIcon.clipsToBounds = true 303 | 304 | 305 | notificationBar.notificationView.layer.cornerRadius = 14.0 306 | notificationBar.visualEffectView.layer.cornerRadius = 14.0 307 | notificationBar.visualEffectView.clipsToBounds = true 308 | 309 | let didSelectMessage = UITapGestureRecognizer(target: self, action: #selector(CustomView.didSelectmessage(_:))) 310 | notificationBar.addGestureRecognizer(didSelectMessage) 311 | 312 | UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseOut, animations: { 313 | let frame:CGRect! 314 | if deviceHeight == 812 { // If iPhone X yPosition shoud be heigh 315 | frame = CGRect(x: 0, y: 35, width: frameWidth, height: BAR_HEIGHT) 316 | }else{ 317 | frame = CGRect(x: 0, y: 0, width: frameWidth, height: BAR_HEIGHT) 318 | } 319 | notificationBar.frame = frame 320 | }, completion: nil) 321 | 322 | // Hide status bar except iPhone X. 323 | APP_DELEGATE.keyWindow?.windowLevel = deviceHeight == 812 ? UIWindow.Level(rawValue: 0) :(UIWindow.Level.statusBar + 1) 324 | APP_DELEGATE.keyWindow!.addSubview(notificationBar) 325 | 326 | var constraints = [NSLayoutConstraint]() 327 | 328 | let horizontal = NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|", options: [], metrics: nil, views: ["view":notificationBar]) 329 | constraints += horizontal 330 | 331 | let vertical = NSLayoutConstraint.constraints(withVisualFormat: "V:|[view(100)]", options: [], metrics: nil, views: ["view":notificationBar]) 332 | constraints += vertical 333 | 334 | NSLayoutConstraint.activate(constraints) 335 | 336 | } 337 | } 338 | 339 | /** 340 | A GLNotifyAction object represents an action that can be taken when tapping a button in an `GLNotificationBar`. You use this class to configure information about a single action, including the title to display in the button, any styling information, and a handler to execute when the user taps the button. After creating an notificatio action object, add it to a `GLNotificationBar` object before displaying the corresponding notification to the user. 341 | */ 342 | 343 | open class GLNotifyAction : NSObject { 344 | @objc open var actionTitle:String! 345 | @objc open var textResponse:String! 346 | @objc open var actionStyle:GLNotificationActionType = .default 347 | var didSelectAction:((GLNotifyAction) -> Void)? 348 | 349 | @objc public override init() { 350 | super.init() 351 | } 352 | 353 | 354 | /** 355 | Init a notification action and add it as action to `GLNotificationBar`. 356 | 357 | - Parameter title: Title to be displayed in the button. 358 | 359 | - Parameter style: Helps to set different style such as `(.Default, .Destructive, .Cancel, .TextInput, .OnlyTextInput)` to button depending upon the need 360 | 361 | - Parameter handler: A block to execute when the user selects the action. This block has no return value and takes the selected action object as its only parameter. 362 | 363 | - Returns: No return value. 364 | */ 365 | 366 | @objc public init(title:String!, style:GLNotificationActionType, handler: ((GLNotifyAction) -> Void)?){ 367 | actionTitle = title 368 | actionStyle = style 369 | didSelectAction = handler 370 | } 371 | } 372 | 373 | class CustomView : UIView { 374 | //MARK: Outlets: 375 | @IBOutlet fileprivate var view:UIView? 376 | @IBOutlet weak var header: UILabel! 377 | @IBOutlet weak var body: UILabel! 378 | @IBOutlet weak var visualEffectView: UIVisualEffectView! 379 | @IBOutlet weak var appIcon: UIImageView! 380 | @IBOutlet weak var notificationStyleIndicator: UIView! 381 | @IBOutlet weak var notificationView: UIView! 382 | 383 | //MARK: Variables: 384 | var dismissLabelAlpha:CGFloat = 0.0 385 | var dismissLimitReached = false 386 | 387 | var toolBarBottomConstraint: NSLayoutConstraint? 388 | 389 | //MARK: Constants: 390 | let myScrollView = UIScrollView() 391 | let notificationActionView = UIVisualEffectView() 392 | let mainView = UIView() 393 | let dismissLabel = UILabel() 394 | let backgroudView = UIVisualEffectView() 395 | let textField = UITextField() 396 | let toolBar = UIToolbar() 397 | let notificationMessage = UITextView() 398 | 399 | //MARK: Init nib file: 400 | override init(frame: CGRect) { // for using CustomView in code 401 | super.init(frame: frame) 402 | self.commonInit() 403 | } 404 | 405 | required init?(coder aDecoder: NSCoder) { // for using CustomView in IB 406 | super.init(coder: aDecoder) 407 | //self.commonInit() 408 | } 409 | 410 | fileprivate func commonInit() { 411 | Bundle(for: CustomView.self) 412 | .loadNibNamed("GLNotificationBar", owner:self, options:nil) 413 | // NSBundle.mainBundle().loadNibNamed("GLNotificationBar", owner: self, options: nil) 414 | guard let content = view else { return } 415 | content.frame = self.bounds 416 | content.autoresizingMask = [.flexibleHeight, .flexibleWidth] 417 | self.addSubview(content) 418 | 419 | NotificationCenter.default.addObserver(self, selector: #selector(CustomView.keyboardWillShown(_:)), name: UIResponder.keyboardWillShowNotification, object: nil) 420 | NotificationCenter.default.addObserver(self, selector: #selector(CustomView.keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) 421 | 422 | } 423 | 424 | 425 | //MARK: Open in detail: 426 | func setUpDetailedNotificationBar(_ header:String!,body:String!,action:[GLNotifyAction]!) { 427 | notificationStyleIndicator.layer.cornerRadius = 3.0 428 | notificationStyleIndicator.alpha = 0.5 429 | 430 | //Blurry Back ground 431 | let tapGesture = UIPanGestureRecognizer(target: self, action: #selector(CustomView.didSelectmessage(_:))) 432 | backgroudView.addGestureRecognizer(tapGesture) 433 | backgroudView.effect = UIBlurEffect(style: .dark) 434 | backgroudView.autoresizingMask = [.flexibleWidth,.flexibleHeight] // support for device rotation 435 | backgroudView.translatesAutoresizingMaskIntoConstraints = false 436 | 437 | let tapToClose = UITapGestureRecognizer(target: self, action: #selector(CustomView.tapToClose(_:))) 438 | tapToClose.delegate = self 439 | backgroudView.addGestureRecognizer(tapToClose) 440 | //Main_View containing message banner and buttonAction. 441 | 442 | mainView.backgroundColor = UIColor.clear 443 | mainView.translatesAutoresizingMaskIntoConstraints = false 444 | 445 | //Notification Banner 446 | let detailedbanner = UIView() 447 | detailedbanner.translatesAutoresizingMaskIntoConstraints = false 448 | detailedbanner.backgroundColor = UIColor.white 449 | detailedbanner.layer.cornerRadius = 14.0 450 | detailedbanner.clipsToBounds = true 451 | 452 | let didSelectMessage = UITapGestureRecognizer(target: self, action: #selector(CustomView.didSelectmessage(_:))) 453 | detailedbanner.addGestureRecognizer(didSelectMessage) 454 | 455 | mainView.addSubview(detailedbanner) 456 | 457 | let pan = UIPanGestureRecognizer(target: self, action: #selector(CustomView.handleDetailedPanGesture(_:))) 458 | detailedbanner.addGestureRecognizer(pan) 459 | 460 | backgroudView.contentView.addSubview(mainView) 461 | 462 | 463 | dismissLabel.translatesAutoresizingMaskIntoConstraints = false 464 | dismissLabel.text = "DISMISS" 465 | dismissLabel.textAlignment = NSTextAlignment.center 466 | dismissLabel.textColor = UIColor.white 467 | dismissLabel.font = UIFont.systemFont(ofSize: 14) 468 | dismissLabel.alpha = 0.0 469 | mainView.addSubview(dismissLabel) 470 | 471 | 472 | //Message Title 473 | let title = UILabel() 474 | title.translatesAutoresizingMaskIntoConstraints = false 475 | title.text = appName 476 | title.backgroundColor = UIColor.clear 477 | title.textColor = UIColor.gray 478 | title.font = UIFont.systemFont(ofSize: 14) 479 | detailedbanner.addSubview(title) 480 | 481 | //Message body 482 | let tempContainer = body.components(separatedBy: "\n") 483 | let rangeStr = tempContainer[0] 484 | let attributeString = NSMutableAttributedString(string: body) 485 | if body.contains("\n") { 486 | attributeString.addAttributes([NSAttributedString.Key.font:UIFont.boldSystemFont(ofSize: 15)], range: NSRange(location: 0, length: rangeStr.count)) 487 | attributeString.addAttributes([NSAttributedString.Key.font:UIFont.systemFont(ofSize: 15)], range: NSRange(location: rangeStr.count, length: tempContainer[1].count)) 488 | }else{ 489 | attributeString.addAttributes([NSAttributedString.Key.font:UIFont.systemFont(ofSize: 15)], range: NSRange(location: 0, length: body.count)) 490 | } 491 | 492 | notificationMessage.translatesAutoresizingMaskIntoConstraints = false 493 | notificationMessage.font = UIFont.systemFont(ofSize: 25) 494 | notificationMessage.backgroundColor = UIColor.clear 495 | notificationMessage.textColor = UIColor.black 496 | notificationMessage.showsHorizontalScrollIndicator = false 497 | notificationMessage.isScrollEnabled = false 498 | notificationMessage.isEditable = false 499 | notificationMessage.attributedText = attributeString 500 | 501 | 502 | detailedbanner.addSubview(notificationMessage) 503 | 504 | 505 | //Separator Line 506 | let seprator = UIView() 507 | seprator.backgroundColor = UIColor.lightGray 508 | seprator.translatesAutoresizingMaskIntoConstraints = false 509 | detailedbanner .addSubview(seprator) 510 | 511 | //AppIcon 512 | let appIcon = UIImageView() 513 | if appIconName.count != 0 { 514 | appIcon.image = UIImage(named: appIconName) 515 | }else{ 516 | appIcon.layer.borderColor = UIColor.gray.cgColor 517 | appIcon.layer.borderWidth = 1.0 518 | } 519 | 520 | appIcon.layer.cornerRadius = 5.0 521 | appIcon.clipsToBounds = true 522 | appIcon.translatesAutoresizingMaskIntoConstraints = false 523 | detailedbanner.addSubview(appIcon) 524 | 525 | //Close Button 526 | let closeButton = UIButton() 527 | closeButton.setImage(UIImage(named:"Close.png" ), for: UIControl.State()) 528 | closeButton.addTarget(self, action: #selector(CustomView.closeMessage(_:)), for: UIControl.Event.touchUpInside) 529 | closeButton.translatesAutoresizingMaskIntoConstraints = false 530 | detailedbanner.addSubview(closeButton) 531 | 532 | 533 | UIApplication.shared.keyWindow!.addSubview(backgroudView) 534 | 535 | toolBar.translatesAutoresizingMaskIntoConstraints = false 536 | toolBar.isHidden = true 537 | backgroudView.contentView.addSubview(toolBar) 538 | 539 | //Adding autolayout 540 | 541 | addAutoLayout(["visualEffectView":backgroudView,"Main_view":mainView,"host_View" : detailedbanner,"Button_actionView":createNotificationActionView(),"container_Label":notificationMessage,"header_Label":title,"separator":seprator, "app_Icon":appIcon,"close_Button":closeButton,"Dismiss":dismissLabel,"Tool_Bar":toolBar]) 542 | 543 | self.mainView.transform = CGAffineTransform.identity.scaledBy(x: 0.0, y: 0.0) 544 | UIView.animate(withDuration: 0.3/1.5, delay: 0.0, options: .curveEaseOut, animations: { 545 | self.mainView.transform = CGAffineTransform.identity.scaledBy(x: 1.1, y: 1.1) 546 | }) { (bool) in 547 | UIView.animate(withDuration: 0.3/2, delay: 0.0, options: .curveEaseIn, animations: { 548 | self.mainView.transform = CGAffineTransform.identity 549 | },completion:nil) 550 | } 551 | 552 | } 553 | 554 | func createNotificationActionView() -> UIVisualEffectView { 555 | sortActionArray() //sort button action on condition 556 | 557 | notificationActionView.translatesAutoresizingMaskIntoConstraints = false 558 | notificationActionView.effect = UIBlurEffect(style: .extraLight) 559 | notificationActionView.layer.cornerRadius = 14.0 560 | notificationActionView.clipsToBounds = true 561 | mainView.addSubview(notificationActionView) 562 | 563 | let tableView = UITableView() 564 | tableView.backgroundColor = UIColor.clear 565 | tableView.dataSource = self 566 | tableView.delegate = self 567 | tableView.translatesAutoresizingMaskIntoConstraints = false 568 | tableView.showsVerticalScrollIndicator = false 569 | tableView.separatorStyle = .none 570 | notificationActionView.contentView.addSubview(tableView) 571 | 572 | var height = "0" 573 | let tempLabel = UILabel() 574 | tempLabel.text = notificationMessage.text! 575 | let test = CGFloat(actionArray.count * 50) + tempLabel.heightToFit(notificationMessage.text!, width: (APP_DELEGATE.keyWindow?.frame.size.width)!) 576 | if test > APP_DELEGATE.keyWindow!.frame.size.height - 50 { 577 | tableView.isScrollEnabled = actionArray.count > 4 ? true : false 578 | notificationMessage.isScrollEnabled = true 579 | height = actionArray.count > 4 ? "200" : String(actionArray.count * 50) 580 | }else{ 581 | tableView.isScrollEnabled = false 582 | height = String(actionArray.count * 50) 583 | } 584 | 585 | 586 | var constraints = [NSLayoutConstraint]() 587 | let scrollHorizontalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "H:|[table]|", options: [], metrics: nil, views: ["table":tableView]) 588 | constraints += scrollHorizontalConstraint 589 | 590 | let scrollVerticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|[table(h)]|", options: [], metrics: ["h":height], views: ["table":tableView]) 591 | constraints += scrollVerticalConstraint 592 | 593 | NSLayoutConstraint.activate(constraints) 594 | 595 | return notificationActionView 596 | } 597 | 598 | // func addSeprator(_ toObject:AnyObject) -> UIView{ 599 | // let frame = toObject.frame 600 | // let seprator = UIView(frame: CGRect(x: 0,y: (frame?.height)! + 3, width: (APP_DELEGATE.keyWindow?.frame.size.width)! - 20,height: 0.5)) 601 | // seprator.backgroundColor = UIColor.gray 602 | // seprator.alpha = 0.6 603 | // return seprator 604 | // } 605 | 606 | //MARK: AutoLayout Constraints 607 | func addAutoLayout(_ viewDic:[String:AnyObject]) { 608 | 609 | var allConstraints = [NSLayoutConstraint]() 610 | 611 | //Object Horizontal layout 612 | let visualEffectHorizontal = NSLayoutConstraint.constraints(withVisualFormat: "H:|[visualEffectView]|", options: [], metrics: nil, views: viewDic) 613 | allConstraints += visualEffectHorizontal 614 | 615 | let mainHorizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[Main_view]|", options: [], metrics: nil, views: viewDic) 616 | allConstraints += mainHorizontalConstraints 617 | 618 | 619 | let hostHorizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[host_View]-|", options: [], metrics: nil, views: viewDic) 620 | allConstraints += hostHorizontalConstraints 621 | 622 | 623 | let actionHorizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[Button_actionView]-|", options: [], metrics: nil, views: viewDic) 624 | allConstraints += actionHorizontalConstraints 625 | 626 | let dismissHorizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-15-[Dismiss]-15-|", options: [], metrics: nil, views: viewDic) 627 | allConstraints += dismissHorizontalConstraints 628 | 629 | let headerHorizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[app_Icon(20)]-10-[header_Label]-10-[close_Button(30)]-10-|", options: [], metrics: nil, views: viewDic) 630 | allConstraints += headerHorizontalConstraints 631 | 632 | 633 | let separatorHorizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[separator]-|", options: [], metrics: nil, views: viewDic) 634 | allConstraints += separatorHorizontalConstraints 635 | 636 | let labelHorizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-15-[container_Label]-15-|", options: [], metrics: nil, views: viewDic) 637 | allConstraints += labelHorizontalConstraints 638 | 639 | let textInputHorizontalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "H:|[Tool_Bar]|", options: [], metrics: nil, views: viewDic) 640 | allConstraints += textInputHorizontalConstraint 641 | 642 | //Object Vertical layout 643 | 644 | let visualEffectVertical = NSLayoutConstraint.constraints(withVisualFormat: "V:|[visualEffectView]|", options: [], metrics: nil, views: viewDic) 645 | allConstraints += visualEffectVertical 646 | 647 | let main1VerticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|[Main_view]-(>=10)-|", options: [], metrics: nil, views: viewDic) 648 | allConstraints += main1VerticalConstraints 649 | 650 | let mainVerticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|[Main_view(200@250)]-(>=5)-[Tool_Bar]-(0@250)-|", options: [], metrics: nil, views: viewDic) 651 | allConstraints += mainVerticalConstraints 652 | 653 | let hostVerticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-yPosition-[Dismiss]-[host_View(>=20)]-10-[Button_actionView(>=0)]-(>=10)-|", options: [], metrics: ["yPosition" : deviceHeight == 812 ? 30 : 0], views: viewDic) 654 | allConstraints += hostVerticalConstraint 655 | 656 | let hostSecondVerticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:[host_View]-(>=30)-|", options: [], metrics: nil, views: viewDic) 657 | allConstraints += hostSecondVerticalConstraint 658 | 659 | let tempLabel = UILabel() 660 | tempLabel.text = notificationMessage.text! 661 | let expectedContentheight = CGFloat(actionArray.count * 50) + tempLabel.heightToFit(tempLabel.text!, width: (APP_DELEGATE.keyWindow?.frame.size.width)!) 662 | var messageHeight = "" 663 | if expectedContentheight > APP_DELEGATE.keyWindow!.frame.size.height - 50 { 664 | messageHeight = String(describing: APP_DELEGATE.keyWindow!.frame.size.height - CGFloat(actionArray.count < 4 ? actionArray.count * 50 : 200)) 665 | } 666 | if messageHeight.count > 0 { 667 | let verticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-15-[header_Label(20)]-[separator(1)]-[container_Label(h@750)]-(>=5)-|", options: [], metrics: ["h":messageHeight], views: viewDic) 668 | allConstraints += verticalConstraint 669 | }else{ 670 | let verticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-15-[header_Label(20)]-[separator(1)]-[container_Label(30@250)]-(>=5)-|", options: [], metrics: nil, views: viewDic) 671 | allConstraints += verticalConstraint 672 | } 673 | 674 | 675 | /*let verticalConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:|-15-[header_Label(20)]-[separator(1)]-[container_Label(30@250)]-(>=5)-|", options: [], metrics: nil, views: viewDic) 676 | allConstraints += verticalConstraint*/ 677 | 678 | let appIconVerticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-15-[app_Icon(20)]", options: [], metrics: nil, views: viewDic) 679 | allConstraints += appIconVerticalConstraint 680 | 681 | let closeVerticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-15-[close_Button(20)]", options: [], metrics: nil, views: viewDic) 682 | allConstraints += closeVerticalConstraint 683 | 684 | NSLayoutConstraint.activate(allConstraints) 685 | } 686 | 687 | 688 | 689 | //MARK: GestureRecognizer: 690 | @IBAction func didSelectmessage(_ tapgesture: UITapGestureRecognizer) { 691 | if (notificationBar != nil) { 692 | UIView.animate(withDuration: 0.5, animations: { 693 | notificationBar.frame.origin = CGPoint(x: 0, y: -BAR_HEIGHT) 694 | }, completion: { (yes) in 695 | notificationBar.removeFromSuperview() 696 | }) 697 | } 698 | closeMessage(nil) 699 | messageDidSelect?(true) 700 | } 701 | 702 | @IBAction func tapToClose(_ tapgesture: UITapGestureRecognizer) { 703 | closeMessage(nil) 704 | } 705 | 706 | 707 | @IBAction func panGesture(_ gestureRecognizer: UIPanGestureRecognizer) { 708 | let velocity = gestureRecognizer.velocity(in: self) 709 | let translation = gestureRecognizer.translation(in: self) 710 | 711 | switch gestureRecognizer.state { 712 | case .began,.changed: 713 | let directionValue = velocity.y < 1.0 ? -1 : 1 714 | 715 | switch directionValue { 716 | case PanDirection.up.rawValue: //Swipe up 717 | gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x, y: gestureRecognizer.view!.center.y + translation.y) 718 | notificationBar.notificationView.center = CGPoint(x: notificationBar.notificationView.center.x, y: gestureRecognizer.view!.center.y + translation.y) 719 | break 720 | case PanDirection.down.rawValue: //Swipe Down 721 | if showNotificationInDetail { 722 | gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x, y: gestureRecognizer.view!.center.y + translation.y) 723 | 724 | notificationBar.notificationView.center = CGPoint(x: notificationBar.notificationView.center.x, y: gestureRecognizer.view!.center.y + translation.y) 725 | } 726 | break 727 | default: 728 | break 729 | } 730 | 731 | 732 | gestureRecognizer.setTranslation(CGPoint(x: 0,y: 0), in: self) 733 | 734 | if (gestureRecognizer.view?.frame.origin.y)! > (gestureRecognizer.view?.frame.size.height)! { 735 | self.removeFromSuperview() 736 | setUpDetailedNotificationBar(header.text, body: body.text, action: []) 737 | return 738 | } 739 | 740 | break 741 | case .ended: 742 | 743 | if (gestureRecognizer.view?.frame.origin.y)! < -(self.visualEffectView.frame.origin.y) { 744 | APP_DELEGATE.keyWindow?.windowLevel = UIWindow.Level(rawValue: 0.0) 745 | actionArray = [GLNotifyAction]() //Clear cached action before leaving 746 | self.removeFromSuperview() 747 | return 748 | } 749 | 750 | UIView.animate(withDuration: 0.5, animations: { 751 | gestureRecognizer.view?.frame.origin = CGPoint(x: gestureRecognizer.view!.frame.origin.x, y: 10) 752 | }) 753 | 754 | break 755 | default: 756 | break 757 | } 758 | 759 | } 760 | 761 | @objc func handleDetailedPanGesture(_ panGesture: UIPanGestureRecognizer) { 762 | 763 | var isLandScape = false 764 | let translation = panGesture.translation(in: self) 765 | let velocity = panGesture.velocity(in: self) 766 | var panVelocity:CGFloat! 767 | 768 | panGesture.setTranslation(CGPoint(x: 0,y: 0), in: self) 769 | 770 | switch panGesture.state { 771 | case .changed, .began: 772 | let orientation = APP_DELEGATE.statusBarOrientation 773 | 774 | switch orientation { 775 | case .portrait: 776 | mainView.center = CGPoint(x: mainView.center.x, y: mainView.center.y + (translation.y / 5)) 777 | panVelocity = velocity.y 778 | break 779 | case .landscapeLeft: 780 | mainView.center = CGPoint(x: mainView.center.x, y: mainView.center.y + (translation.x / 5)) 781 | panVelocity = velocity.x 782 | isLandScape = true 783 | break 784 | case .landscapeRight: 785 | mainView.center = CGPoint(x: mainView.center.x, y: mainView.center.y + (-translation.x / 5)) 786 | panVelocity = -velocity.x 787 | isLandScape = true 788 | break 789 | default: 790 | break 791 | } 792 | 793 | let directionValue = panVelocity < 1.0 ? -1 : 1 794 | 795 | switch directionValue { 796 | case PanDirection.up.rawValue: //Swipe up 797 | if dismissLabel.alpha > 0.0 { 798 | dismissLabelAlpha -= isLandScape ? 0.05 : 0.02 799 | }else if dismissLabel.alpha <= 1.0 && dismissLimitReached{ 800 | dismissLimitReached = false 801 | } 802 | if panVelocity > -1500{ 803 | dismissLimitReached = false 804 | dismissLabel.alpha = 0.0 805 | } 806 | break 807 | case PanDirection.down.rawValue: //Swipe down 808 | if dismissLabel.alpha < 1.0 { 809 | dismissLabelAlpha += isLandScape ? 0.05 : 0.02 810 | }else if dismissLabel.alpha >= 1.0 && !dismissLimitReached{ 811 | dismissLimitReached = true 812 | dismissLabel.transform = CGAffineTransform.identity.scaledBy(x: 0.0, y: 0.0) 813 | UIView.animate(withDuration: 0.3/1.5, delay: 0.0, options: UIView.AnimationOptions(), animations: { 814 | self.dismissLabel.transform = CGAffineTransform.identity.scaledBy(x: 1.3, y: 1.3) 815 | }) { (bool) in 816 | UIView.animate(withDuration: 0.3/2, delay: 0.0, options: .curveEaseIn, animations: { 817 | self.dismissLabel.transform = CGAffineTransform.identity 818 | },completion:nil) 819 | } 820 | } 821 | if panVelocity > 2000{ 822 | dismissLimitReached = true 823 | dismissLabelAlpha = 1.0 824 | } 825 | break 826 | default: 827 | break 828 | } 829 | dismissLabel.alpha = dismissLabelAlpha 830 | 831 | break 832 | 833 | case .ended: 834 | 835 | 836 | if dismissLimitReached { 837 | closeMessage(nil) 838 | return 839 | } 840 | 841 | UIView.animate(withDuration: 0.5, animations: { 842 | self.mainView.frame.origin = CGPoint(x: 0, y: 0) 843 | }) 844 | 845 | dismissLimitReached = false 846 | dismissLabel.alpha = 0.0 847 | dismissLabelAlpha = 0.0 848 | 849 | break 850 | default: 851 | break 852 | } 853 | } 854 | 855 | 856 | 857 | //MARK: Support: 858 | func sortActionArray() { 859 | var tempContainer = [GLNotifyAction]() 860 | var index = 0 861 | var isCancelTypeFound = false 862 | for action in actionArray { 863 | 864 | let style:GLNotificationActionType = action.actionStyle 865 | switch style{ 866 | case .cancel: 867 | actionArray.remove(at: index) 868 | index = index - 1 869 | if !isCancelTypeFound { 870 | isCancelTypeFound = true 871 | tempContainer.append(action) 872 | } 873 | break 874 | case .onlyTextInput: 875 | setUpTextField(action, senderTag: index) 876 | continue 877 | default: 878 | break 879 | } 880 | index = index + 1 881 | } 882 | if tempContainer.count != 0 { 883 | actionArray.append(tempContainer[0]) 884 | // print("\n\n#WARNING: Only one .Cancel type can be added to GLNotifyAction.Others will be not taken into account \n") 885 | } 886 | } 887 | 888 | func imageWithColor(_ color:UIColor) -> UIImage { 889 | let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0) 890 | UIGraphicsBeginImageContext(rect.size); 891 | let context = UIGraphicsGetCurrentContext() 892 | context?.setFillColor(color.cgColor) 893 | context?.fill(rect) 894 | 895 | let image = UIGraphicsGetImageFromCurrentImageContext() 896 | UIGraphicsEndImageContext() 897 | 898 | return image! 899 | } 900 | 901 | 902 | 903 | func setUpTextField(_ action:GLNotifyAction, senderTag:Int) { 904 | 905 | UIView.animate(withDuration: 1.0, animations: { 906 | self.notificationActionView.isHidden = true 907 | }, completion: { (bool) in 908 | self.notificationActionView.removeFromSuperview() 909 | }) 910 | 911 | textField.translatesAutoresizingMaskIntoConstraints = false 912 | // 15: Padding, 30: send button 913 | textField.frame.size.width = (self.view?.frame.size.width)! - (15 + 30) 914 | textField.placeholder = action.actionTitle 915 | textField.font = UIFont.systemFont(ofSize: 14) 916 | textField.borderStyle = UITextField.BorderStyle.roundedRect 917 | 918 | let button = UIButton() 919 | button.translatesAutoresizingMaskIntoConstraints = false 920 | button.setTitle("Send", for: UIControl.State()) 921 | button.tag = senderTag 922 | button.setTitleColor(UIColor.init(netHex: 0x095FFE), for: UIControl.State()) 923 | button.titleLabel?.font = UIFont.systemFont(ofSize: 15) 924 | button.addTarget(self, action: #selector(CustomView.sendButtonPressed(_:)), for: .touchUpInside) 925 | 926 | 927 | let barButtonItemOne = UIBarButtonItem(customView: textField) 928 | barButtonItemOne.width = frameWidth - 75 929 | let barButtonItemtwo = UIBarButtonItem(customView: button) 930 | barButtonItemtwo.width = 50 931 | 932 | let fixedWidth = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: self, action: nil) 933 | fixedWidth.width = 5 934 | 935 | toolBar.isHidden = false 936 | toolBar.items = [fixedWidth,barButtonItemOne,fixedWidth,barButtonItemtwo,fixedWidth] 937 | 938 | 939 | // var constraints = [NSLayoutConstraint]() 940 | // let dic = ["textField":textField,"button":button,"Main":toolBar]; 941 | // 942 | // let horizontalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "H:|-[textField][button(60)]|", options: [], metrics: nil, views: dic) 943 | // constraints += horizontalConstraint 944 | // 945 | // let verticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-[textField(30)]-|", options: [], metrics: nil, views: dic) 946 | // constraints += verticalConstraint 947 | // 948 | // let verticalConstraint1 = NSLayoutConstraint.constraints(withVisualFormat: "V:|-[button]-|", options: [], metrics: nil, views: dic) 949 | // constraints += verticalConstraint1 950 | // 951 | //// let toolBarTopConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[toolBar]-20-[MainView]", options: [], metrics: nil, views: ["toolBar":toolBar,"MainView":mainView]) 952 | //// constraints += toolBarTopConstraint 953 | // 954 | // NSLayoutConstraint.activate(constraints) 955 | 956 | 957 | toolBarBottomConstraint = NSLayoutConstraint(item: toolBar, attribute: .bottom, relatedBy: .equal, toItem: backgroudView, attribute: .bottom, multiplier: 1, constant: 0) 958 | backgroudView.addConstraint(toolBarBottomConstraint!) 959 | 960 | let leading = NSLayoutConstraint(item: toolBar, attribute: .leading, relatedBy: .equal, toItem: backgroudView, attribute: .leading, multiplier: 1, constant: 0) 961 | backgroudView.addConstraint(leading) 962 | 963 | let trailing = NSLayoutConstraint(item: toolBar, attribute: .trailing, relatedBy: .equal, toItem: backgroudView, attribute: .trailing, multiplier: 1, constant: 0) 964 | backgroudView.addConstraint(trailing) 965 | 966 | let time = DispatchTime.now() + Double(Int64(1.0 * Double(NSEC_PER_SEC) )) / Double(NSEC_PER_SEC) 967 | DispatchQueue.main.asyncAfter(deadline: time) { 968 | self.textField.becomeFirstResponder() 969 | } 970 | 971 | } 972 | 973 | 974 | 975 | @IBAction func sendButtonPressed(_ sender:UIButton) { 976 | let action:GLNotifyAction = actionArray[sender.tag] 977 | guard let didselectHandler = action.didSelectAction else{ 978 | closeMessage(sender) 979 | return 980 | } 981 | action.textResponse = textField.text 982 | didselectHandler(action) 983 | closeMessage(sender) 984 | } 985 | 986 | 987 | @IBAction func closeMessage(_ sender: UIButton?) { 988 | actionArray = [GLNotifyAction]() //Clear cached action before leaving 989 | textField.resignFirstResponder() 990 | APP_DELEGATE.keyWindow?.windowLevel = UIWindow.Level(rawValue: 0.0) 991 | 992 | UIView.animate(withDuration: 0.5, animations: { 993 | self.mainView.frame.origin = CGPoint(x: 0, y: (APP_DELEGATE.keyWindow?.frame.size.height)!) 994 | }, completion: { (ok) in 995 | UIView.animate(withDuration: 2.0, delay: 0.5, options: [], animations: { 996 | self.backgroudView.removeFromSuperview() 997 | }, completion: nil) 998 | }) 999 | } 1000 | 1001 | 1002 | //MARK: Notification center: 1003 | @objc func keyboardWillShown(_ notification: Notification) { 1004 | let info = notification.userInfo! 1005 | let keyboardFrame: CGRect = (info[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 1006 | 1007 | UIView.animate(withDuration: 0.1, animations: { () -> Void in 1008 | if self.toolBarBottomConstraint != nil { 1009 | self.toolBarBottomConstraint!.constant = -(keyboardFrame.size.height) 1010 | self.backgroudView.layoutIfNeeded() 1011 | } 1012 | 1013 | }) 1014 | } 1015 | 1016 | @objc func keyboardWillHide(_ notification: Notification) { 1017 | let info = notification.userInfo! 1018 | let keyboardFrame: CGRect = (info[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 1019 | 1020 | UIView.animate(withDuration: 0.1, animations: { () -> Void in 1021 | if self.toolBarBottomConstraint != nil { 1022 | self.toolBarBottomConstraint!.constant = keyboardFrame.size.height 1023 | self.backgroudView.layoutIfNeeded() 1024 | } 1025 | 1026 | }) 1027 | } 1028 | 1029 | } 1030 | 1031 | //MARK: Extensions: 1032 | extension CustomView: UIGestureRecognizerDelegate{ 1033 | func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 1034 | if touch.view!.isDescendant(of: notificationActionView) { 1035 | return false 1036 | } 1037 | return true 1038 | } 1039 | } 1040 | 1041 | extension CustomView : UITableViewDataSource,UITableViewDelegate{ 1042 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 1043 | return actionArray.count 1044 | } 1045 | 1046 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 1047 | let cell = UITableViewCell(style: .default, reuseIdentifier: "GL") 1048 | cell.backgroundColor = UIColor.clear 1049 | cell.drawSeparatorLine() 1050 | let action = actionArray[indexPath.row] 1051 | let style:GLNotificationActionType = action.actionStyle 1052 | switch style{ 1053 | case .cancel: 1054 | cell.textLabel?.font = UIFont.boldSystemFont(ofSize: 20) 1055 | break 1056 | case .destructive: 1057 | cell.textLabel?.textColor = UIColor.red 1058 | break 1059 | default: 1060 | break 1061 | } 1062 | cell.textLabel?.text = actionArray[indexPath.row].actionTitle 1063 | cell.textLabel?.textAlignment = NSTextAlignment.center 1064 | return cell 1065 | } 1066 | 1067 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 1068 | let action = actionArray[indexPath.row] 1069 | let style:GLNotificationActionType = action.actionStyle 1070 | switch style{ 1071 | case .cancel,.destructive,.default: 1072 | let action:GLNotifyAction = actionArray[indexPath.row] 1073 | guard let didselectHandler = action.didSelectAction else{ 1074 | closeMessage(nil) 1075 | return 1076 | } 1077 | didselectHandler(action) 1078 | closeMessage(nil) 1079 | break 1080 | case .textInput: 1081 | self.setUpTextField(action,senderTag:indexPath.row) 1082 | break 1083 | default: 1084 | break 1085 | } 1086 | } 1087 | 1088 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 1089 | return 50 1090 | } 1091 | } 1092 | 1093 | extension UITableViewCell{ 1094 | func drawSeparatorLine() { 1095 | let border = CALayer() 1096 | border.borderColor = UIColor.gray.cgColor 1097 | border.frame = CGRect(x: 0, y: 49, 1098 | width: 0, height: 2) 1099 | border.frame.size.width = ((APP_DELEGATE.keyWindow?.frame.size.height)! > (APP_DELEGATE.keyWindow?.frame.size.width)! ? APP_DELEGATE.keyWindow?.frame.size.height : APP_DELEGATE.keyWindow?.frame.size.width)! 1100 | 1101 | border.borderWidth = 0.75 1102 | self.layer.addSublayer(border) 1103 | self.layer.masksToBounds = true 1104 | } 1105 | } 1106 | 1107 | extension UIColor { 1108 | convenience init(red: Int, green: Int, blue: Int) { 1109 | assert(red >= 0 && red <= 255, "Invalid red component") 1110 | assert(green >= 0 && green <= 255, "Invalid green component") 1111 | assert(blue >= 0 && blue <= 255, "Invalid blue component") 1112 | 1113 | self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0) 1114 | } 1115 | 1116 | convenience init(netHex:Int) { 1117 | self.init(red:(netHex >> 16) & 0xff, green:(netHex >> 8) & 0xff, blue:netHex & 0xff) 1118 | } 1119 | } 1120 | 1121 | extension UILabel { 1122 | func heightToFit(_ string:String,width:CGFloat) -> CGFloat{ 1123 | let attributes = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 14)] 1124 | numberOfLines = 0 1125 | lineBreakMode = NSLineBreakMode.byWordWrapping 1126 | let rect = string.boundingRect(with: CGSize(width: width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: attributes, context: nil) 1127 | return rect.height 1128 | // self.frame.size.height = rect.height 1129 | } 1130 | 1131 | func resizeHeightToFit() { 1132 | let attributes = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 14)] 1133 | numberOfLines = 0 1134 | lineBreakMode = NSLineBreakMode.byWordWrapping 1135 | let rect = text!.boundingRect(with: CGSize(width: frame.size.width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: attributes, context: nil) 1136 | self.frame.size.height = rect.height 1137 | } 1138 | } 1139 | 1140 | -------------------------------------------------------------------------------- /GLNotificationBar/Classes/GLNotificationBar.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 gokul 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GLNotificationBar 2 | 3 | [![CI Status](https://api.travis-ci.org/gokulgovind/GLNotificationBar.png?branch=master)](https://travis-ci.org/gokulgovind/GLNotificationBar) 4 | [![Version](https://img.shields.io/cocoapods/v/GLNotificationBar.svg?style=flat)](http://cocoapods.org/pods/GLNotificationBar) 5 | [![License](https://img.shields.io/cocoapods/l/GLNotificationBar.svg?style=flat)](http://cocoapods.org/pods/GLNotificationBar) 6 | [![Platform](https://img.shields.io/cocoapods/p/GLNotificationBar.svg?style=flat)](http://cocoapods.org/pods/GLNotificationBar) 7 | 8 | **FYI:** Updated with **XCode 9.0** & **swift 4.0**. 9 | 10 | ![overView](ScreenShots/Demo.png) 11 | 12 | ## Note 13 | 14 | `GLNotificationBar` is a library that allows you to easily create banner notifications that appear on top of screen, used to handle push notification in active state.Made with `xcode 8.3.1` and `swift 3` 15 | 16 | ## Example 17 | 18 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 19 | 20 | 21 | ## Requirements 22 | `GLNotificationBar` requires iOS 8.0+. 23 | 24 | ## Installation 25 | 26 | ### CocoaPods 27 | 28 | GLNotificationBar is available through [CocoaPods](http://cocoapods.org). To install 29 | it, simply add the following line to your Podfile: 30 | 31 | `pod 'GLNotificationBar'` 32 | 33 | ### Manual 34 | Copy the file `GLNotificationBar.swift` & `GLNotificationBar.xib` from ~/GLNotificationBar/GLNotificationBar/Classes to your project. 35 | 36 | ## User Guide 37 | 38 | ### Swift: 39 | ``` 40 | let notificationBar = GLNotificationBar(title: "Today Quote", message: "Yesterday is today's memory, and tomorrow is today's dream.", preferredStyle: .DetailedBanner, handler: nil) 41 | notificationBar.addAction(GLNotifyAction(title: "Like", style: .Default, handler: { (action) in 42 | print("I Like this quote") 43 | })) 44 | notificationBar.addAction(GLNotifyAction(title: "Cancel", style: .Cancel, handler: nil)) 45 | ``` 46 | ### Objective C: 47 | - Run pod install. `pod 'GLNotificationBar'` 48 | - Then add ```@import GLNotificationBar;``` at top of your viewcontroller class. 49 | - Now add following code wherever you want. 50 | ``` 51 | GLNotificationBar * notificationBar = [[GLNotificationBar alloc]initWithTitle:@"Today Quote" message:@"Yesterday is today's memory, and tomorrow is today's dream." preferredStyle:0 handler:nil]; 52 | [notificationBar addAction:[[GLNotifyAction alloc]initWithTitle:@"Like" style:0 handler:^(GLNotifyAction * action) { 53 | NSLog(@"I Like this quote"); 54 | //NSLog(@"Text reply %@",action.textResponse); 55 | }]]; 56 | [notificationBar addAction:[[GLNotifyAction alloc]initWithTitle:@"Cancel" style:4 handler:nil]]; 57 | ``` 58 | 59 | 60 | ### Diving In Depth 61 | - `GLNotificationBar` is simple to use,implementation is similar to `UIAlertController`. 62 | 63 | ``` 64 | let notificationBar = GLNotificationBar(title: "hallowean", message: "😎Hi there! We've missed you. Enjoy the new hallowean sticker,borders,bgs on your app.😈🎅🏻", preferredStyle: .DetailedBanner, handler: nil) 65 | 66 | ``` 67 | 68 | This simply presents GLNotificationBar with given title and message,handler can be used to catch tap gesture on notification bar. The default behavior of notification bar is, dismissed automatically when tapped on it. 69 | 70 | There are two types of `GLNotificationBar` style and Five type of `GLNotifyAction` types. 71 | 72 | - .DetailedBanner 73 | * *.DetailedBanner* style is similar to ios10 style notification bar, swiping down this type of notification open's in detail, which may include `GLNotifyAction's` 74 | `GLNotifyAction` can be added to `GLNotificationBar` as follows 75 | 76 | ``` 77 | let cancelButton = GLNotifyAction(title: "Cancel", style: .Cancel) { (result) in 78 | print(result.actionTitle) 79 | } 80 | notificationBar.addAction(cancelButton) 81 | ``` 82 | 83 | **OR** 84 | ``` 85 | notificationBar.addAction(GLNotifyAction(title: "Cancel", style: .Cancel) { (result) in 86 | print(result.actionTitle) 87 | }) 88 | ``` 89 | * *GLNotifyAction* also has four different types each performs their respective action. 90 | 91 | ``` 92 | public enum GLNotificationActionType { 93 | case Default // Apply the default style to the action’s button. 94 | case Destructive //Apply a style that indicates the action might change or delete data. 95 | case TextInput //Apply a style that indicates the action opens an textinput field helps to respond notification as string. 96 | case OnlyTextInput //Apply a style which removes all other action added and simply adds text field as input to respond notification. 97 | case Cancel //Apply a style that indicates the action cancels the operation and leaves things unchanged. 98 | } 99 | ``` 100 | 101 | ![detailedBanner](ScreenShots/DetailedBanner.gif) 102 | 103 | - .SimpleBanner 104 | * *.SimpleBanner* is similar to *.DetailedBanner* in appearance, but it's options are restricted. It can't be swiped down to open in detail form. 105 | * `GLNotifyAction` added to this type of notification bar will not be taken into account. 106 | 107 | ![simpleBanner](ScreenShots/SimpleBanner.gif) 108 | 109 | - `GLNotifyAction`'s *.OnlyTextInput* 110 | ``` 111 | notificationBar.addAction(GLNotifyAction(title: "Reply", style: .OnlyTextInput) { (result) in 112 | print(result.textResponse) 113 | }) 114 | ``` 115 | * *.OnlyTextInput* is some what different from other action types. 116 | * Adding this action removes all other action added and stight away presents textfield as option for user input without any user interaction. 117 | * This helps user to repond to a notification with text. 118 | 119 | ![textInput_ActionType](ScreenShots/TextInput_ActionType.gif) 120 | 121 | - `notificationBar.showTime` 122 | ``` 123 | notificationBar.showTime(3.0) 124 | ``` 125 | * This method helps to set time interval for notification bar to hide. 126 | * The default value is 5.0 seconds. 127 | * And 0.0 can used to turn off auto hide of notification bar. 128 | 129 | 130 | - `notificationBar.notificationSound` 131 | ``` 132 | notificationBar.notificationSound("Your sound name", ofType: ".mp3", vibrate: true) 133 | ``` 134 | * By default `GLNotificationBar` does't play any sound, to play notification sound add this method. 135 | * This method helps to play notification sound when it is displayed. 136 | * If mentioned sound file is not found means system default sound will be played. 137 | 138 | - Adding Shadow & Visual Effect Style 139 | * Add dropdown shadow effect to notification bar by using below function 140 | `notificationBar.setShadow(true)` 141 | * Change Visual effect view style using 142 | `notificationBar.setColorStyle(.extraLight)` 143 | 144 | ## Author 145 | 146 | gokul, gokulece26@gmail.com 147 | 148 | ## Contributors 149 | CavalcanteLeo, https://github.com/CavalcanteLeo 150 | 151 | jameshays, https://github.com/jameshays 152 | 153 | ## Social 154 | 155 | * [Facebook](https://www.facebook.com/gokul.rockzz.1) 156 | * [Twitter](https://twitter.com/gokulgovind_) 157 | * [StackOverflow](http://stackoverflow.com/users/5582022/gokul?tab=profile) 158 | * [Linkedin](https://www.linkedin.com/in/gokul-govind-1b0232105?trk=nav_responsive_tab_profile) 159 | 160 | ## License 161 | 162 | GLNotificationBar is available under the MIT license. See the LICENSE file for more info. 163 | -------------------------------------------------------------------------------- /ScreenShots/Demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/ScreenShots/Demo.png -------------------------------------------------------------------------------- /ScreenShots/DetailedBanner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/ScreenShots/DetailedBanner.gif -------------------------------------------------------------------------------- /ScreenShots/SimpleBanner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/ScreenShots/SimpleBanner.gif -------------------------------------------------------------------------------- /ScreenShots/TextInput_ActionType.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gokulgovind/GLNotificationBar/abdc8dc3b4ae95c786b990fa6676ff18c7a12873/ScreenShots/TextInput_ActionType.gif -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------