├── .gitignore ├── .travis.yml ├── AMShimmer.framework.zip ├── AMShimmer.podspec ├── AMShimmer ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ └── AMShimmer.swift ├── Example ├── AMShimmer.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── AMShimmer.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── AMShimmer │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── me.imageset │ │ │ ├── Contents.json │ │ │ └── me.png │ ├── Info.plist │ ├── NormalViewsExampleViewController.swift │ └── TableViewExampleViewController.swift ├── Podfile ├── Podfile.lock └── Pods │ ├── Local Podspecs │ └── AMShimmer.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── AMShimmer.xcscheme │ └── Target Support Files │ ├── AMShimmer │ ├── AMShimmer-Info.plist │ ├── AMShimmer-dummy.m │ ├── AMShimmer-prefix.pch │ ├── AMShimmer-umbrella.h │ ├── AMShimmer.modulemap │ ├── AMShimmer.xcconfig │ └── Info.plist │ └── Pods-AMShimmer_Example │ ├── Info.plist │ ├── Pods-AMShimmer_Example-Info.plist │ ├── Pods-AMShimmer_Example-acknowledgements.markdown │ ├── Pods-AMShimmer_Example-acknowledgements.plist │ ├── Pods-AMShimmer_Example-dummy.m │ ├── Pods-AMShimmer_Example-frameworks.sh │ ├── Pods-AMShimmer_Example-resources.sh │ ├── Pods-AMShimmer_Example-umbrella.h │ ├── Pods-AMShimmer_Example.debug.xcconfig │ ├── Pods-AMShimmer_Example.modulemap │ └── Pods-AMShimmer_Example.release.xcconfig ├── LICENSE ├── README.md ├── _Pods.xcodeproj ├── logo.png └── screenshot.gif /.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 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 26 | # Carthage/Checkouts 27 | 28 | Carthage/Build 29 | 30 | # We recommend against adding the Pods directory to your .gitignore. However 31 | # you should judge for yourself, the pros and cons are mentioned at: 32 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 33 | # 34 | # Note: if you ignore the Pods directory, make sure to uncomment 35 | # `pod install` in .travis.yml 36 | # 37 | # Pods/ 38 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * https://www.objc.io/issues/6-build-tools/travis-ci/ 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/AMShimmer.xcworkspace -scheme AMShimmer-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /AMShimmer.framework.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/AMShimmer/1d91004401f0d9460178549d74a1b8fd53add46e/AMShimmer.framework.zip -------------------------------------------------------------------------------- /AMShimmer.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint AMShimmer.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 https://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'AMShimmer' 11 | s.version = '1.0.6' 12 | s.summary = 'AMShimmer help you to add a shimmering effect.' 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 | Shimmer help you to add a shimmering effect to any view or table view in your app in very easy way. 22 | DESC 23 | 24 | s.homepage = 'https://github.com/Abedalkareem/AMShimmer' 25 | # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 26 | s.license = { :type => 'MIT', :file => 'LICENSE' } 27 | s.author = { 'Abedalkareem' => 'abedalkareem.omreyh@yahoo.com' } 28 | s.source = { :git => 'https://github.com/Abedalkareem/AMShimmer.git', :tag => s.version.to_s } 29 | s.social_media_url = 'https://twitter.com/AbedalkareemOmr' 30 | s.swift_version = '5.0' 31 | 32 | s.ios.deployment_target = '9.0' 33 | 34 | s.source_files = 'AMShimmer/Classes/**/*' 35 | 36 | # s.resource_bundles = { 37 | # 'AMShimmer' => ['AMShimmer/Assets/*.png'] 38 | # } 39 | 40 | # s.public_header_files = 'Pod/Classes/**/*.h' 41 | # s.frameworks = 'UIKit', 'MapKit' 42 | # s.dependency 'AFNetworking', '~> 2.3' 43 | end 44 | -------------------------------------------------------------------------------- /AMShimmer/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/AMShimmer/1d91004401f0d9460178549d74a1b8fd53add46e/AMShimmer/Assets/.gitkeep -------------------------------------------------------------------------------- /AMShimmer/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/AMShimmer/1d91004401f0d9460178549d74a1b8fd53add46e/AMShimmer/Classes/.gitkeep -------------------------------------------------------------------------------- /AMShimmer/Classes/AMShimmer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AMShimmer.swift 3 | // 4 | // Created by abedalkareem omreyh on 5/13/18. 5 | // Copyright © 2018 abedalkareem omreyh. All rights reserved. 6 | // GitHub : https://github.com/Abedalkareem/AMShimmer 7 | // 8 | // The MIT License (MIT) 9 | // 10 | // Copyright (c) 2017 Abedalkareem Omreyh 11 | // 12 | // Permission is hereby granted, free of charge, to any person obtaining a copy 13 | // of this software and associated documentation files (the "Software"), to deal 14 | // in the Software without restriction, including without limitation the rights 15 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 16 | // copies of the Software, and to permit persons to whom the Software is 17 | // furnished to do so, subject to the following conditions: 18 | // 19 | // The above copyright notice and this permission notice shall be included in all 20 | // copies or substantial portions of the Software. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 28 | // SOFTWARE. 29 | // 30 | 31 | import UIKit 32 | 33 | @objc 34 | public class AMShimmer : NSObject { 35 | 36 | 37 | // MARK: - Properties 38 | 39 | /// The object that hold the `AMShimmer` settings, like duration, colors and repeatCount. 40 | public static let settings = AMShimmerSettings() 41 | 42 | private static let layerName = "shimmerEffect" 43 | 44 | // MARK: - Start / Stop methods 45 | 46 | /// Start the shimmer effect for the sent `view`, this method will go through all 47 | /// `subviews` and add the shimmer effect for it. 48 | /// 49 | /// if you sent `view` that don't contain subviews, the shimmer effect will run 50 | /// directly in the view itself. 51 | /// 52 | /// - parameter view: The view that you want to run the shimmer effect for it. 53 | /// - parameter views: The `subviews` that you don't want it to have shimmer effect. 54 | /// - parameter isToLastView: The value determines if you want it to have shimmer effect in 55 | /// all deepest subviews in your view hierarchy, or the direct subviews. 56 | /// 57 | @objc 58 | public class func start(for view: UIView, except views: [UIView] = [], isToLastView: Bool = false) { 59 | 60 | guard view.subviews.count != 0 else { 61 | startFor(view) 62 | return 63 | } 64 | 65 | guard !isToLastView else { 66 | search(view: view, except: views, isToLastView: isToLastView) 67 | return 68 | } 69 | 70 | view.subviews.forEach { if !views.contains($0) { startFor($0) } } 71 | 72 | } 73 | 74 | /// Start the shimmer effect for the sent `tableView`, this method will go through all 75 | /// `visibleCells` and it will search for `views` without `subviews` and add the shimmer effect for it. 76 | /// 77 | /// - parameter tableView: The tableView that you want to run the shimmer effect for it's cells. 78 | /// 79 | @objc 80 | public class func start(for tableView: UITableView) { 81 | tableView.visibleCells.forEach { search(view: $0) } 82 | tableView.isUserInteractionEnabled = false 83 | } 84 | 85 | private class func search(view: UIView, except views: [UIView] = [], isToLastView: Bool = false) { 86 | 87 | guard !views.contains(view) else { 88 | return 89 | } 90 | 91 | if view.subviews.count > 0 { 92 | view.subviews.forEach { search(view: $0, except: views, isToLastView: isToLastView)} 93 | } else { 94 | start(for: view) 95 | } 96 | } 97 | 98 | /// Stop the shimmer effect for the sent `view`. 99 | /// 100 | /// - parameter view: The view that you want to stop the shimmer effect that run on it. 101 | /// 102 | @objc 103 | public class func stop(for view: UIView) { 104 | 105 | guard view.subviews.count != 0 else { 106 | removeShimmerLayer(for: view) 107 | return 108 | } 109 | 110 | if let tableView = view as? UITableView { 111 | tableView.isUserInteractionEnabled = true 112 | } 113 | 114 | view.subviews.forEach { subview in 115 | if subview is UIControl { 116 | removeShimmerLayer(for: subview) 117 | } else if subview.subviews.count > 0 { 118 | subview.subviews.forEach { stop(for: $0) } 119 | } else { 120 | removeShimmerLayer(for: subview) 121 | } 122 | } 123 | } 124 | 125 | private class func removeShimmerLayer(for view: UIView) { 126 | 127 | view.layer.sublayers?.forEach { 128 | if $0.name == layerName { 129 | $0.removeFromSuperlayer() 130 | } 131 | } 132 | } 133 | 134 | private class func startFor(_ view: UIView) { 135 | 136 | let gradientLayer = CAGradientLayer() 137 | gradientLayer.frame = view.bounds 138 | gradientLayer.locations = [0.0,0.1,0.3] 139 | gradientLayer.colors = [settings.lightColor, settings.darkColor, settings.lightColor] 140 | gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5) 141 | gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5) 142 | gradientLayer.name = layerName 143 | view.layer.addSublayer(gradientLayer) 144 | 145 | animate(layer: gradientLayer) 146 | } 147 | 148 | // MARK: - Animation 149 | 150 | private class func animate(layer: CAGradientLayer) { 151 | 152 | let animation = CABasicAnimation(keyPath: "locations") 153 | animation.duration = settings.duration 154 | animation.toValue = [0.6, 1.2, 1.5] 155 | animation.isRemovedOnCompletion = false 156 | animation.repeatCount = settings.repeatCount 157 | layer.add(animation, forKey: "shimmerEffectAnimation") 158 | } 159 | 160 | } 161 | 162 | /// The class that hold the `AMShimmer` settings, like duration, colors and repeatCount. 163 | public class AMShimmerSettings { 164 | /// The duration of the moving line animation. The defualt `duration` is `0.5` 165 | public var duration = 0.5 166 | /// The dark color that move through the view. The defualt color is (red: 0.9333333333, green: 0.9333333333, blue: 0.9333333333, alpha: 1) 167 | public var darkColor = #colorLiteral(red: 0.9568627451, green: 0.9568627451, blue: 0.9568627451, alpha: 1).cgColor 168 | /// The light color arowned the dark color. The defualt color is (red: 0.968627451, green: 0.968627451, blue: 0.968627451, alpha: 1) 169 | public var lightColor = #colorLiteral(red: 0.968627451, green: 0.968627451, blue: 0.968627451, alpha: 1).cgColor 170 | /// The repeat count for the animation, The defualt is `HUGE`. 171 | public var repeatCount = HUGE 172 | } 173 | 174 | -------------------------------------------------------------------------------- /Example/AMShimmer.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2B693F510630E1A0D8829413 /* Pods_AMShimmer_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 674FA5A53FA97EAE3D60D392 /* Pods_AMShimmer_Example.framework */; }; 11 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 12 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 13 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 14 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 15 | C6E7A3D8211DA17B006642B0 /* NormalViewsExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6E7A3D6211DA17A006642B0 /* NormalViewsExampleViewController.swift */; }; 16 | C6E7A3D9211DA17B006642B0 /* TableViewExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6E7A3D7211DA17A006642B0 /* TableViewExampleViewController.swift */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 1078F2AD89879273E661E045 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 21 | 26E917D5A2420D5748EF158D /* Pods-AMShimmer_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AMShimmer_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AMShimmer_Tests/Pods-AMShimmer_Tests.debug.xcconfig"; sourceTree = ""; }; 22 | 3700E2FD3444C4A45DD124B6 /* Pods_AMShimmer_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AMShimmer_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 23 | 543AD6E3D9D4F7DF1604B5C0 /* Pods-AMShimmer_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AMShimmer_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example.release.xcconfig"; sourceTree = ""; }; 24 | 607FACD01AFB9204008FA782 /* AMShimmer_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AMShimmer_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 26 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 27 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 28 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 29 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 30 | 674FA5A53FA97EAE3D60D392 /* Pods_AMShimmer_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AMShimmer_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | 92F661095C28048117FD0B7B /* AMShimmer.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = AMShimmer.podspec; path = ../AMShimmer.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 32 | 9FFD09ACF822121F33A19902 /* Pods-AMShimmer_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AMShimmer_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AMShimmer_Tests/Pods-AMShimmer_Tests.release.xcconfig"; sourceTree = ""; }; 33 | C6E7A3D6211DA17A006642B0 /* NormalViewsExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NormalViewsExampleViewController.swift; sourceTree = ""; }; 34 | C6E7A3D7211DA17A006642B0 /* TableViewExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewExampleViewController.swift; sourceTree = ""; }; 35 | CD82BCFFB2B33A396E8938F4 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 36 | D3E42C360DA832B01F071F17 /* Pods-AMShimmer_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AMShimmer_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example.debug.xcconfig"; sourceTree = ""; }; 37 | /* End PBXFileReference section */ 38 | 39 | /* Begin PBXFrameworksBuildPhase section */ 40 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 41 | isa = PBXFrameworksBuildPhase; 42 | buildActionMask = 2147483647; 43 | files = ( 44 | 2B693F510630E1A0D8829413 /* Pods_AMShimmer_Example.framework in Frameworks */, 45 | ); 46 | runOnlyForDeploymentPostprocessing = 0; 47 | }; 48 | /* End PBXFrameworksBuildPhase section */ 49 | 50 | /* Begin PBXGroup section */ 51 | 5C399C9AFAAEFF57082B6147 /* Pods */ = { 52 | isa = PBXGroup; 53 | children = ( 54 | D3E42C360DA832B01F071F17 /* Pods-AMShimmer_Example.debug.xcconfig */, 55 | 543AD6E3D9D4F7DF1604B5C0 /* Pods-AMShimmer_Example.release.xcconfig */, 56 | 26E917D5A2420D5748EF158D /* Pods-AMShimmer_Tests.debug.xcconfig */, 57 | 9FFD09ACF822121F33A19902 /* Pods-AMShimmer_Tests.release.xcconfig */, 58 | ); 59 | name = Pods; 60 | sourceTree = ""; 61 | }; 62 | 607FACC71AFB9204008FA782 = { 63 | isa = PBXGroup; 64 | children = ( 65 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 66 | 607FACD21AFB9204008FA782 /* Example for AMShimmer */, 67 | 607FACD11AFB9204008FA782 /* Products */, 68 | 5C399C9AFAAEFF57082B6147 /* Pods */, 69 | E27858177352B6E4D686357E /* Frameworks */, 70 | ); 71 | sourceTree = ""; 72 | }; 73 | 607FACD11AFB9204008FA782 /* Products */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | 607FACD01AFB9204008FA782 /* AMShimmer_Example.app */, 77 | ); 78 | name = Products; 79 | sourceTree = ""; 80 | }; 81 | 607FACD21AFB9204008FA782 /* Example for AMShimmer */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 85 | C6E7A3D5211DA140006642B0 /* ViewControllers */, 86 | 607FACD31AFB9204008FA782 /* Supporting Files */, 87 | ); 88 | name = "Example for AMShimmer"; 89 | path = AMShimmer; 90 | sourceTree = ""; 91 | }; 92 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 93 | isa = PBXGroup; 94 | children = ( 95 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 96 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 97 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 98 | 607FACD41AFB9204008FA782 /* Info.plist */, 99 | ); 100 | name = "Supporting Files"; 101 | sourceTree = ""; 102 | }; 103 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 92F661095C28048117FD0B7B /* AMShimmer.podspec */, 107 | CD82BCFFB2B33A396E8938F4 /* README.md */, 108 | 1078F2AD89879273E661E045 /* LICENSE */, 109 | ); 110 | name = "Podspec Metadata"; 111 | sourceTree = ""; 112 | }; 113 | C6E7A3D5211DA140006642B0 /* ViewControllers */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | C6E7A3D6211DA17A006642B0 /* NormalViewsExampleViewController.swift */, 117 | C6E7A3D7211DA17A006642B0 /* TableViewExampleViewController.swift */, 118 | ); 119 | name = ViewControllers; 120 | sourceTree = ""; 121 | }; 122 | E27858177352B6E4D686357E /* Frameworks */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 674FA5A53FA97EAE3D60D392 /* Pods_AMShimmer_Example.framework */, 126 | 3700E2FD3444C4A45DD124B6 /* Pods_AMShimmer_Tests.framework */, 127 | ); 128 | name = Frameworks; 129 | sourceTree = ""; 130 | }; 131 | /* End PBXGroup section */ 132 | 133 | /* Begin PBXNativeTarget section */ 134 | 607FACCF1AFB9204008FA782 /* AMShimmer_Example */ = { 135 | isa = PBXNativeTarget; 136 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AMShimmer_Example" */; 137 | buildPhases = ( 138 | E70537CF92D8F0D8954B3C3A /* [CP] Check Pods Manifest.lock */, 139 | 607FACCC1AFB9204008FA782 /* Sources */, 140 | 607FACCD1AFB9204008FA782 /* Frameworks */, 141 | 607FACCE1AFB9204008FA782 /* Resources */, 142 | 81E1D99EBE3C040BA4F69354 /* [CP] Embed Pods Frameworks */, 143 | ); 144 | buildRules = ( 145 | ); 146 | dependencies = ( 147 | ); 148 | name = AMShimmer_Example; 149 | productName = AMShimmer; 150 | productReference = 607FACD01AFB9204008FA782 /* AMShimmer_Example.app */; 151 | productType = "com.apple.product-type.application"; 152 | }; 153 | /* End PBXNativeTarget section */ 154 | 155 | /* Begin PBXProject section */ 156 | 607FACC81AFB9204008FA782 /* Project object */ = { 157 | isa = PBXProject; 158 | attributes = { 159 | LastSwiftUpdateCheck = 0830; 160 | LastUpgradeCheck = 1020; 161 | ORGANIZATIONNAME = CocoaPods; 162 | TargetAttributes = { 163 | 607FACCF1AFB9204008FA782 = { 164 | CreatedOnToolsVersion = 6.3.1; 165 | LastSwiftMigration = 1020; 166 | }; 167 | }; 168 | }; 169 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AMShimmer" */; 170 | compatibilityVersion = "Xcode 3.2"; 171 | developmentRegion = en; 172 | hasScannedForEncodings = 0; 173 | knownRegions = ( 174 | en, 175 | Base, 176 | ); 177 | mainGroup = 607FACC71AFB9204008FA782; 178 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 179 | projectDirPath = ""; 180 | projectRoot = ""; 181 | targets = ( 182 | 607FACCF1AFB9204008FA782 /* AMShimmer_Example */, 183 | ); 184 | }; 185 | /* End PBXProject section */ 186 | 187 | /* Begin PBXResourcesBuildPhase section */ 188 | 607FACCE1AFB9204008FA782 /* Resources */ = { 189 | isa = PBXResourcesBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 193 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 194 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | }; 198 | /* End PBXResourcesBuildPhase section */ 199 | 200 | /* Begin PBXShellScriptBuildPhase section */ 201 | 81E1D99EBE3C040BA4F69354 /* [CP] Embed Pods Frameworks */ = { 202 | isa = PBXShellScriptBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | ); 206 | inputPaths = ( 207 | "${PODS_ROOT}/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example-frameworks.sh", 208 | "${BUILT_PRODUCTS_DIR}/AMShimmer/AMShimmer.framework", 209 | ); 210 | name = "[CP] Embed Pods Frameworks"; 211 | outputPaths = ( 212 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AMShimmer.framework", 213 | ); 214 | runOnlyForDeploymentPostprocessing = 0; 215 | shellPath = /bin/sh; 216 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example-frameworks.sh\"\n"; 217 | showEnvVarsInLog = 0; 218 | }; 219 | E70537CF92D8F0D8954B3C3A /* [CP] Check Pods Manifest.lock */ = { 220 | isa = PBXShellScriptBuildPhase; 221 | buildActionMask = 2147483647; 222 | files = ( 223 | ); 224 | inputPaths = ( 225 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 226 | "${PODS_ROOT}/Manifest.lock", 227 | ); 228 | name = "[CP] Check Pods Manifest.lock"; 229 | outputPaths = ( 230 | "$(DERIVED_FILE_DIR)/Pods-AMShimmer_Example-checkManifestLockResult.txt", 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | shellPath = /bin/sh; 234 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 235 | showEnvVarsInLog = 0; 236 | }; 237 | /* End PBXShellScriptBuildPhase section */ 238 | 239 | /* Begin PBXSourcesBuildPhase section */ 240 | 607FACCC1AFB9204008FA782 /* Sources */ = { 241 | isa = PBXSourcesBuildPhase; 242 | buildActionMask = 2147483647; 243 | files = ( 244 | C6E7A3D9211DA17B006642B0 /* TableViewExampleViewController.swift in Sources */, 245 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 246 | C6E7A3D8211DA17B006642B0 /* NormalViewsExampleViewController.swift in Sources */, 247 | ); 248 | runOnlyForDeploymentPostprocessing = 0; 249 | }; 250 | /* End PBXSourcesBuildPhase section */ 251 | 252 | /* Begin PBXVariantGroup section */ 253 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 254 | isa = PBXVariantGroup; 255 | children = ( 256 | 607FACDA1AFB9204008FA782 /* Base */, 257 | ); 258 | name = Main.storyboard; 259 | sourceTree = ""; 260 | }; 261 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 262 | isa = PBXVariantGroup; 263 | children = ( 264 | 607FACDF1AFB9204008FA782 /* Base */, 265 | ); 266 | name = LaunchScreen.xib; 267 | sourceTree = ""; 268 | }; 269 | /* End PBXVariantGroup section */ 270 | 271 | /* Begin XCBuildConfiguration section */ 272 | 607FACED1AFB9204008FA782 /* Debug */ = { 273 | isa = XCBuildConfiguration; 274 | buildSettings = { 275 | ALWAYS_SEARCH_USER_PATHS = NO; 276 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 277 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 278 | CLANG_CXX_LIBRARY = "libc++"; 279 | CLANG_ENABLE_MODULES = YES; 280 | CLANG_ENABLE_OBJC_ARC = YES; 281 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 282 | CLANG_WARN_BOOL_CONVERSION = YES; 283 | CLANG_WARN_COMMA = YES; 284 | CLANG_WARN_CONSTANT_CONVERSION = YES; 285 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 286 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 287 | CLANG_WARN_EMPTY_BODY = YES; 288 | CLANG_WARN_ENUM_CONVERSION = YES; 289 | CLANG_WARN_INFINITE_RECURSION = YES; 290 | CLANG_WARN_INT_CONVERSION = YES; 291 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 292 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 293 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 294 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 295 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 296 | CLANG_WARN_STRICT_PROTOTYPES = YES; 297 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 298 | CLANG_WARN_UNREACHABLE_CODE = YES; 299 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 300 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 301 | COPY_PHASE_STRIP = NO; 302 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 303 | ENABLE_STRICT_OBJC_MSGSEND = YES; 304 | ENABLE_TESTABILITY = YES; 305 | GCC_C_LANGUAGE_STANDARD = gnu99; 306 | GCC_DYNAMIC_NO_PIC = NO; 307 | GCC_NO_COMMON_BLOCKS = YES; 308 | GCC_OPTIMIZATION_LEVEL = 0; 309 | GCC_PREPROCESSOR_DEFINITIONS = ( 310 | "DEBUG=1", 311 | "$(inherited)", 312 | ); 313 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 314 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 315 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 316 | GCC_WARN_UNDECLARED_SELECTOR = YES; 317 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 318 | GCC_WARN_UNUSED_FUNCTION = YES; 319 | GCC_WARN_UNUSED_VARIABLE = YES; 320 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 321 | MTL_ENABLE_DEBUG_INFO = YES; 322 | ONLY_ACTIVE_ARCH = YES; 323 | SDKROOT = iphoneos; 324 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 325 | }; 326 | name = Debug; 327 | }; 328 | 607FACEE1AFB9204008FA782 /* Release */ = { 329 | isa = XCBuildConfiguration; 330 | buildSettings = { 331 | ALWAYS_SEARCH_USER_PATHS = NO; 332 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 333 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 334 | CLANG_CXX_LIBRARY = "libc++"; 335 | CLANG_ENABLE_MODULES = YES; 336 | CLANG_ENABLE_OBJC_ARC = YES; 337 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 338 | CLANG_WARN_BOOL_CONVERSION = YES; 339 | CLANG_WARN_COMMA = YES; 340 | CLANG_WARN_CONSTANT_CONVERSION = YES; 341 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 342 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 343 | CLANG_WARN_EMPTY_BODY = YES; 344 | CLANG_WARN_ENUM_CONVERSION = YES; 345 | CLANG_WARN_INFINITE_RECURSION = YES; 346 | CLANG_WARN_INT_CONVERSION = YES; 347 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 348 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 349 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 350 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 351 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 352 | CLANG_WARN_STRICT_PROTOTYPES = YES; 353 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 354 | CLANG_WARN_UNREACHABLE_CODE = YES; 355 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 356 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 357 | COPY_PHASE_STRIP = NO; 358 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 359 | ENABLE_NS_ASSERTIONS = NO; 360 | ENABLE_STRICT_OBJC_MSGSEND = YES; 361 | GCC_C_LANGUAGE_STANDARD = gnu99; 362 | GCC_NO_COMMON_BLOCKS = YES; 363 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 364 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 365 | GCC_WARN_UNDECLARED_SELECTOR = YES; 366 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 367 | GCC_WARN_UNUSED_FUNCTION = YES; 368 | GCC_WARN_UNUSED_VARIABLE = YES; 369 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 370 | MTL_ENABLE_DEBUG_INFO = NO; 371 | SDKROOT = iphoneos; 372 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 373 | VALIDATE_PRODUCT = YES; 374 | }; 375 | name = Release; 376 | }; 377 | 607FACF01AFB9204008FA782 /* Debug */ = { 378 | isa = XCBuildConfiguration; 379 | baseConfigurationReference = D3E42C360DA832B01F071F17 /* Pods-AMShimmer_Example.debug.xcconfig */; 380 | buildSettings = { 381 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 382 | INFOPLIST_FILE = AMShimmer/Info.plist; 383 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 384 | MODULE_NAME = ExampleApp; 385 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 386 | PRODUCT_NAME = "$(TARGET_NAME)"; 387 | SWIFT_VERSION = 5.0; 388 | }; 389 | name = Debug; 390 | }; 391 | 607FACF11AFB9204008FA782 /* Release */ = { 392 | isa = XCBuildConfiguration; 393 | baseConfigurationReference = 543AD6E3D9D4F7DF1604B5C0 /* Pods-AMShimmer_Example.release.xcconfig */; 394 | buildSettings = { 395 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 396 | INFOPLIST_FILE = AMShimmer/Info.plist; 397 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 398 | MODULE_NAME = ExampleApp; 399 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 400 | PRODUCT_NAME = "$(TARGET_NAME)"; 401 | SWIFT_VERSION = 5.0; 402 | }; 403 | name = Release; 404 | }; 405 | /* End XCBuildConfiguration section */ 406 | 407 | /* Begin XCConfigurationList section */ 408 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AMShimmer" */ = { 409 | isa = XCConfigurationList; 410 | buildConfigurations = ( 411 | 607FACED1AFB9204008FA782 /* Debug */, 412 | 607FACEE1AFB9204008FA782 /* Release */, 413 | ); 414 | defaultConfigurationIsVisible = 0; 415 | defaultConfigurationName = Release; 416 | }; 417 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AMShimmer_Example" */ = { 418 | isa = XCConfigurationList; 419 | buildConfigurations = ( 420 | 607FACF01AFB9204008FA782 /* Debug */, 421 | 607FACF11AFB9204008FA782 /* Release */, 422 | ); 423 | defaultConfigurationIsVisible = 0; 424 | defaultConfigurationName = Release; 425 | }; 426 | /* End XCConfigurationList section */ 427 | }; 428 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 429 | } 430 | -------------------------------------------------------------------------------- /Example/AMShimmer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/AMShimmer.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/AMShimmer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/AMShimmer/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // AMShimmer 4 | // 5 | // Created by Abedalkareem on 08/10/2018. 6 | // Copyright (c) 2018 Abedalkareem. 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 | return true 19 | } 20 | 21 | func applicationWillResignActive(_ application: UIApplication) { } 22 | 23 | func applicationDidEnterBackground(_ application: UIApplication) { } 24 | 25 | func applicationWillEnterForeground(_ application: UIApplication) { } 26 | 27 | func applicationDidBecomeActive(_ application: UIApplication) { } 28 | 29 | func applicationWillTerminate(_ application: UIApplication) { } 30 | 31 | 32 | } 33 | 34 | -------------------------------------------------------------------------------- /Example/AMShimmer/Base.lproj/LaunchScreen.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 | -------------------------------------------------------------------------------- /Example/AMShimmer/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 38 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 69 | 75 | 81 | 95 | 109 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 200 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 242 | 251 | 257 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | -------------------------------------------------------------------------------- /Example/AMShimmer/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/AMShimmer/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/AMShimmer/Images.xcassets/me.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "me.png", 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/AMShimmer/Images.xcassets/me.imageset/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/AMShimmer/1d91004401f0d9460178549d74a1b8fd53add46e/Example/AMShimmer/Images.xcassets/me.imageset/me.png -------------------------------------------------------------------------------- /Example/AMShimmer/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/AMShimmer/NormalViewsExampleViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NormalViewsExampleViewController.swift 3 | // TryShimmerEffect 4 | // 5 | // Created by abedalkareem omreyh on 5/13/18. 6 | // Copyright © 2018 abedalkareem omreyh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AMShimmer 11 | 12 | class NormalViewsExampleViewController: UIViewController { 13 | 14 | @IBOutlet weak var startLoadingButton: UIButton! 15 | @IBOutlet weak var stopLoadingButton: UIButton! 16 | @IBOutlet weak var tableViewExampleButton: UIButton! 17 | 18 | override func viewDidLoad() { 19 | super.viewDidLoad() 20 | 21 | } 22 | 23 | @IBAction func startLoading(_ sender: Any) { 24 | AMShimmer.start(for: view, except: [startLoadingButton, stopLoadingButton, tableViewExampleButton]) 25 | } 26 | 27 | @IBAction func stopLoading(_ sender: Any) { 28 | AMShimmer.stop(for: view) 29 | } 30 | 31 | } 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Example/AMShimmer/TableViewExampleViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TableViewExampleViewController.swift 3 | // TryShimmerEffect 4 | // 5 | // Created by abedalkareem omreyh on 5/14/18. 6 | // Copyright © 2018 abedalkareem omreyh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AMShimmer 11 | 12 | class TableViewExampleViewController: UIViewController { 13 | 14 | @IBOutlet weak var startLoadingButton: UIButton! 15 | @IBOutlet weak var stopLoadingButton: UIButton! 16 | @IBOutlet weak var tableView: UITableView! 17 | 18 | override func viewDidLoad() { 19 | super.viewDidLoad() 20 | 21 | } 22 | 23 | @IBAction func startLoading(_ sender: Any) { 24 | AMShimmer.start(for: tableView) 25 | } 26 | 27 | @IBAction func stopLoading(_ sender: Any) { 28 | AMShimmer.stop(for: tableView) 29 | } 30 | 31 | } 32 | 33 | extension TableViewExampleViewController: UITableViewDelegate, UITableViewDataSource { 34 | 35 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 36 | return 5 37 | } 38 | 39 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 40 | return tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'AMShimmer_Example' do 4 | pod 'AMShimmer', :path => '../' 5 | 6 | end 7 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AMShimmer (1.0.5) 3 | 4 | DEPENDENCIES: 5 | - AMShimmer (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | AMShimmer: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | AMShimmer: fe55da5c0daa053e7c1643eedd9aaf78015ecacc 13 | 14 | PODFILE CHECKSUM: 129c566d89cd9fe26c6d567d931ffa08472976c6 15 | 16 | COCOAPODS: 1.7.4 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/AMShimmer.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AMShimmer", 3 | "version": "1.0.5", 4 | "summary": "AMShimmer help you to add a shimmering effect.", 5 | "description": "Shimmer help you to add a shimmering effect to any view or table view in your app in very easy way.", 6 | "homepage": "https://github.com/Abedalkareem/AMShimmer", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Abedalkareem": "abedalkareem.omreyh@yahoo.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/Abedalkareem/AMShimmer.git", 16 | "tag": "1.0.5" 17 | }, 18 | "social_media_url": "https://twitter.com/AbedalkareemOmr", 19 | "swift_versions": "5.0", 20 | "platforms": { 21 | "ios": "9.0" 22 | }, 23 | "source_files": "AMShimmer/Classes/**/*", 24 | "swift_version": "5.0" 25 | } 26 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AMShimmer (1.0.5) 3 | 4 | DEPENDENCIES: 5 | - AMShimmer (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | AMShimmer: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | AMShimmer: fe55da5c0daa053e7c1643eedd9aaf78015ecacc 13 | 14 | PODFILE CHECKSUM: 129c566d89cd9fe26c6d567d931ffa08472976c6 15 | 16 | COCOAPODS: 1.7.4 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 | 252A4CC4EDED4D9C1A9DFF304DDD15DF /* Pods-AMShimmer_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D66241D7F84021F9FCB0917827D91C76 /* Pods-AMShimmer_Example-dummy.m */; }; 11 | 7DB8A775D3486A5D73954A0F6A5CE9A0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 12 | 9A5AC5568979E332CAB26F244ECD3C97 /* AMShimmer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7CDD8F3F2E2F36FCD622E53F478AABA /* AMShimmer.swift */; }; 13 | 9DB3882DE96021D15BB4121D90E71D43 /* AMShimmer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D4701EF80EA6EF76A410060E6784B83 /* AMShimmer-dummy.m */; }; 14 | D96CBC653268EB6AF652A3C535384C0A /* AMShimmer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D79379CD8D07C8A4C58FECD2F6B5D0AE /* AMShimmer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | F24442F19F9DEAABE59E29BC0F6F2C7D /* Pods-AMShimmer_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 723F537D22DD5F06ACC094F5A5F8CA4D /* Pods-AMShimmer_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | FAB199FC43AA4ACA542B87F6EDC323CC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXContainerItemProxy section */ 20 | 41F424D53A3D3EEE0EB7F2DF3D17C32F /* PBXContainerItemProxy */ = { 21 | isa = PBXContainerItemProxy; 22 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 23 | proxyType = 1; 24 | remoteGlobalIDString = 29B4191F255865446093230A061A9805; 25 | remoteInfo = AMShimmer; 26 | }; 27 | /* End PBXContainerItemProxy section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 1496D518DA4FF9BB3CBAE15FE056B0F4 /* Pods-AMShimmer_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AMShimmer_Example.debug.xcconfig"; sourceTree = ""; }; 31 | 1E0871AFB35BF2E647E55CDDC19E1C9A /* Pods-AMShimmer_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AMShimmer_Example-Info.plist"; sourceTree = ""; }; 32 | 2BE2CC35161885E1B47B26495F338385 /* Pods-AMShimmer_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AMShimmer_Example.modulemap"; sourceTree = ""; }; 33 | 313F199268031CC6B972378A85D640E3 /* AMShimmer.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = AMShimmer.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 34 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 35 | 32287687D0323944B4BC34762515AE2C /* Pods_AMShimmer_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AMShimmer_Example.framework; path = "Pods-AMShimmer_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 35B2EE38E1E6FC670D11BE1673A08E21 /* Pods-AMShimmer_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AMShimmer_Example-acknowledgements.markdown"; sourceTree = ""; }; 37 | 3BEDA902A0F3BD7E7C1CD37E38B73A02 /* AMShimmer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AMShimmer-Info.plist"; sourceTree = ""; }; 38 | 50AC5F834BD680CD2144EE8D7C015994 /* AMShimmer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AMShimmer-prefix.pch"; sourceTree = ""; }; 39 | 723F537D22DD5F06ACC094F5A5F8CA4D /* Pods-AMShimmer_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AMShimmer_Example-umbrella.h"; sourceTree = ""; }; 40 | 808EB57820153228B1C92D0A5B8D29EB /* AMShimmer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AMShimmer.modulemap; sourceTree = ""; }; 41 | 8D4701EF80EA6EF76A410060E6784B83 /* AMShimmer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AMShimmer-dummy.m"; sourceTree = ""; }; 42 | 8EB8805D67159F34F7F7CCCF36ABD737 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 43 | 9BDC9789C7074FC2AFC3134F7233F609 /* Pods-AMShimmer_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AMShimmer_Example-frameworks.sh"; sourceTree = ""; }; 44 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 45 | A5151DBF8772EF970F1A73FD2144CE8C /* AMShimmer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AMShimmer.framework; path = AMShimmer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | BD9FDC5893CB7D91B3377761C7CD5894 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 47 | C7CDD8F3F2E2F36FCD622E53F478AABA /* AMShimmer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AMShimmer.swift; path = AMShimmer/Classes/AMShimmer.swift; sourceTree = ""; }; 48 | CA27FC9C254238964E06F12079C0609B /* AMShimmer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMShimmer.xcconfig; sourceTree = ""; }; 49 | D66241D7F84021F9FCB0917827D91C76 /* Pods-AMShimmer_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AMShimmer_Example-dummy.m"; sourceTree = ""; }; 50 | D79379CD8D07C8A4C58FECD2F6B5D0AE /* AMShimmer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AMShimmer-umbrella.h"; sourceTree = ""; }; 51 | E101F510A6A47166694DAE1F65F5E275 /* Pods-AMShimmer_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AMShimmer_Example-acknowledgements.plist"; sourceTree = ""; }; 52 | FFCBF6FE0D60EFB7CA56A1187C375633 /* Pods-AMShimmer_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AMShimmer_Example.release.xcconfig"; sourceTree = ""; }; 53 | /* End PBXFileReference section */ 54 | 55 | /* Begin PBXFrameworksBuildPhase section */ 56 | 89CD9F174ED9B0C19C9AAAB526B06077 /* Frameworks */ = { 57 | isa = PBXFrameworksBuildPhase; 58 | buildActionMask = 2147483647; 59 | files = ( 60 | 7DB8A775D3486A5D73954A0F6A5CE9A0 /* Foundation.framework in Frameworks */, 61 | ); 62 | runOnlyForDeploymentPostprocessing = 0; 63 | }; 64 | 8CCD39B53BDEA314B0DCC72C18369E20 /* Frameworks */ = { 65 | isa = PBXFrameworksBuildPhase; 66 | buildActionMask = 2147483647; 67 | files = ( 68 | FAB199FC43AA4ACA542B87F6EDC323CC /* Foundation.framework in Frameworks */, 69 | ); 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | /* End PBXFrameworksBuildPhase section */ 73 | 74 | /* Begin PBXGroup section */ 75 | 36AB079C303579AC7CAC9EF268E217C6 /* Support Files */ = { 76 | isa = PBXGroup; 77 | children = ( 78 | 808EB57820153228B1C92D0A5B8D29EB /* AMShimmer.modulemap */, 79 | CA27FC9C254238964E06F12079C0609B /* AMShimmer.xcconfig */, 80 | 8D4701EF80EA6EF76A410060E6784B83 /* AMShimmer-dummy.m */, 81 | 3BEDA902A0F3BD7E7C1CD37E38B73A02 /* AMShimmer-Info.plist */, 82 | 50AC5F834BD680CD2144EE8D7C015994 /* AMShimmer-prefix.pch */, 83 | D79379CD8D07C8A4C58FECD2F6B5D0AE /* AMShimmer-umbrella.h */, 84 | ); 85 | name = "Support Files"; 86 | path = "Example/Pods/Target Support Files/AMShimmer"; 87 | sourceTree = ""; 88 | }; 89 | 50CCB729426E77219B8831F26BF865DE /* AMShimmer */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | C7CDD8F3F2E2F36FCD622E53F478AABA /* AMShimmer.swift */, 93 | CDB8D490BCEB135D5257A96AE972DC4E /* Pod */, 94 | 36AB079C303579AC7CAC9EF268E217C6 /* Support Files */, 95 | ); 96 | name = AMShimmer; 97 | path = ../..; 98 | sourceTree = ""; 99 | }; 100 | 5D5B7692CBB22AEB9DE9A36DCC6EBCF8 /* Products */ = { 101 | isa = PBXGroup; 102 | children = ( 103 | A5151DBF8772EF970F1A73FD2144CE8C /* AMShimmer.framework */, 104 | 32287687D0323944B4BC34762515AE2C /* Pods_AMShimmer_Example.framework */, 105 | ); 106 | name = Products; 107 | sourceTree = ""; 108 | }; 109 | A63505D16B2E87EB3522EED1057488FE /* Development Pods */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 50CCB729426E77219B8831F26BF865DE /* AMShimmer */, 113 | ); 114 | name = "Development Pods"; 115 | sourceTree = ""; 116 | }; 117 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, 121 | ); 122 | name = iOS; 123 | sourceTree = ""; 124 | }; 125 | CDB8D490BCEB135D5257A96AE972DC4E /* Pod */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | 313F199268031CC6B972378A85D640E3 /* AMShimmer.podspec */, 129 | 8EB8805D67159F34F7F7CCCF36ABD737 /* LICENSE */, 130 | BD9FDC5893CB7D91B3377761C7CD5894 /* README.md */, 131 | ); 132 | name = Pod; 133 | sourceTree = ""; 134 | }; 135 | CF1408CF629C7361332E53B88F7BD30C = { 136 | isa = PBXGroup; 137 | children = ( 138 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 139 | A63505D16B2E87EB3522EED1057488FE /* Development Pods */, 140 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 141 | 5D5B7692CBB22AEB9DE9A36DCC6EBCF8 /* Products */, 142 | D67879DC1A991EBB22C7FF734F7A99BB /* Targets Support Files */, 143 | ); 144 | sourceTree = ""; 145 | }; 146 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | C0834CEBB1379A84116EF29F93051C60 /* iOS */, 150 | ); 151 | name = Frameworks; 152 | sourceTree = ""; 153 | }; 154 | D67879DC1A991EBB22C7FF734F7A99BB /* Targets Support Files */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | DDAEC95FD154F524CC1A534B569367E3 /* Pods-AMShimmer_Example */, 158 | ); 159 | name = "Targets Support Files"; 160 | sourceTree = ""; 161 | }; 162 | DDAEC95FD154F524CC1A534B569367E3 /* Pods-AMShimmer_Example */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | 2BE2CC35161885E1B47B26495F338385 /* Pods-AMShimmer_Example.modulemap */, 166 | 35B2EE38E1E6FC670D11BE1673A08E21 /* Pods-AMShimmer_Example-acknowledgements.markdown */, 167 | E101F510A6A47166694DAE1F65F5E275 /* Pods-AMShimmer_Example-acknowledgements.plist */, 168 | D66241D7F84021F9FCB0917827D91C76 /* Pods-AMShimmer_Example-dummy.m */, 169 | 9BDC9789C7074FC2AFC3134F7233F609 /* Pods-AMShimmer_Example-frameworks.sh */, 170 | 1E0871AFB35BF2E647E55CDDC19E1C9A /* Pods-AMShimmer_Example-Info.plist */, 171 | 723F537D22DD5F06ACC094F5A5F8CA4D /* Pods-AMShimmer_Example-umbrella.h */, 172 | 1496D518DA4FF9BB3CBAE15FE056B0F4 /* Pods-AMShimmer_Example.debug.xcconfig */, 173 | FFCBF6FE0D60EFB7CA56A1187C375633 /* Pods-AMShimmer_Example.release.xcconfig */, 174 | ); 175 | name = "Pods-AMShimmer_Example"; 176 | path = "Target Support Files/Pods-AMShimmer_Example"; 177 | sourceTree = ""; 178 | }; 179 | /* End PBXGroup section */ 180 | 181 | /* Begin PBXHeadersBuildPhase section */ 182 | 2B63705C836E51AD5ABC2F4CFDC4E605 /* Headers */ = { 183 | isa = PBXHeadersBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | F24442F19F9DEAABE59E29BC0F6F2C7D /* Pods-AMShimmer_Example-umbrella.h in Headers */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | 5A1D93D5CAC5DBC3D0AD77C2984A944F /* Headers */ = { 191 | isa = PBXHeadersBuildPhase; 192 | buildActionMask = 2147483647; 193 | files = ( 194 | D96CBC653268EB6AF652A3C535384C0A /* AMShimmer-umbrella.h in Headers */, 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | }; 198 | /* End PBXHeadersBuildPhase section */ 199 | 200 | /* Begin PBXNativeTarget section */ 201 | 29B4191F255865446093230A061A9805 /* AMShimmer */ = { 202 | isa = PBXNativeTarget; 203 | buildConfigurationList = 9D28EF621C10DD089277CC9E26A80D6B /* Build configuration list for PBXNativeTarget "AMShimmer" */; 204 | buildPhases = ( 205 | 5A1D93D5CAC5DBC3D0AD77C2984A944F /* Headers */, 206 | 46A7CDDF29F5D227DB39983651E0F17E /* Sources */, 207 | 89CD9F174ED9B0C19C9AAAB526B06077 /* Frameworks */, 208 | 4F47E171C0FEF83158BA64C74E0ED842 /* Resources */, 209 | ); 210 | buildRules = ( 211 | ); 212 | dependencies = ( 213 | ); 214 | name = AMShimmer; 215 | productName = AMShimmer; 216 | productReference = A5151DBF8772EF970F1A73FD2144CE8C /* AMShimmer.framework */; 217 | productType = "com.apple.product-type.framework"; 218 | }; 219 | 9F907897A6E43CC97FFEC4923130C688 /* Pods-AMShimmer_Example */ = { 220 | isa = PBXNativeTarget; 221 | buildConfigurationList = B6B50B70112E509E93A7BF982F514B41 /* Build configuration list for PBXNativeTarget "Pods-AMShimmer_Example" */; 222 | buildPhases = ( 223 | 2B63705C836E51AD5ABC2F4CFDC4E605 /* Headers */, 224 | 63E2FA41DD68ACD8D4B1952C37440866 /* Sources */, 225 | 8CCD39B53BDEA314B0DCC72C18369E20 /* Frameworks */, 226 | 85C87BAEC4A17358D1EE23C6FC0A037A /* Resources */, 227 | ); 228 | buildRules = ( 229 | ); 230 | dependencies = ( 231 | 189DF09B56C482459F929FE37A44339A /* PBXTargetDependency */, 232 | ); 233 | name = "Pods-AMShimmer_Example"; 234 | productName = "Pods-AMShimmer_Example"; 235 | productReference = 32287687D0323944B4BC34762515AE2C /* Pods_AMShimmer_Example.framework */; 236 | productType = "com.apple.product-type.framework"; 237 | }; 238 | /* End PBXNativeTarget section */ 239 | 240 | /* Begin PBXProject section */ 241 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 242 | isa = PBXProject; 243 | attributes = { 244 | LastSwiftUpdateCheck = 1100; 245 | LastUpgradeCheck = 1100; 246 | }; 247 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 248 | compatibilityVersion = "Xcode 3.2"; 249 | developmentRegion = en; 250 | hasScannedForEncodings = 0; 251 | knownRegions = ( 252 | en, 253 | ); 254 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 255 | productRefGroup = 5D5B7692CBB22AEB9DE9A36DCC6EBCF8 /* Products */; 256 | projectDirPath = ""; 257 | projectRoot = ""; 258 | targets = ( 259 | 29B4191F255865446093230A061A9805 /* AMShimmer */, 260 | 9F907897A6E43CC97FFEC4923130C688 /* Pods-AMShimmer_Example */, 261 | ); 262 | }; 263 | /* End PBXProject section */ 264 | 265 | /* Begin PBXResourcesBuildPhase section */ 266 | 4F47E171C0FEF83158BA64C74E0ED842 /* Resources */ = { 267 | isa = PBXResourcesBuildPhase; 268 | buildActionMask = 2147483647; 269 | files = ( 270 | ); 271 | runOnlyForDeploymentPostprocessing = 0; 272 | }; 273 | 85C87BAEC4A17358D1EE23C6FC0A037A /* Resources */ = { 274 | isa = PBXResourcesBuildPhase; 275 | buildActionMask = 2147483647; 276 | files = ( 277 | ); 278 | runOnlyForDeploymentPostprocessing = 0; 279 | }; 280 | /* End PBXResourcesBuildPhase section */ 281 | 282 | /* Begin PBXSourcesBuildPhase section */ 283 | 46A7CDDF29F5D227DB39983651E0F17E /* Sources */ = { 284 | isa = PBXSourcesBuildPhase; 285 | buildActionMask = 2147483647; 286 | files = ( 287 | 9DB3882DE96021D15BB4121D90E71D43 /* AMShimmer-dummy.m in Sources */, 288 | 9A5AC5568979E332CAB26F244ECD3C97 /* AMShimmer.swift in Sources */, 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | }; 292 | 63E2FA41DD68ACD8D4B1952C37440866 /* Sources */ = { 293 | isa = PBXSourcesBuildPhase; 294 | buildActionMask = 2147483647; 295 | files = ( 296 | 252A4CC4EDED4D9C1A9DFF304DDD15DF /* Pods-AMShimmer_Example-dummy.m in Sources */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | /* End PBXSourcesBuildPhase section */ 301 | 302 | /* Begin PBXTargetDependency section */ 303 | 189DF09B56C482459F929FE37A44339A /* PBXTargetDependency */ = { 304 | isa = PBXTargetDependency; 305 | name = AMShimmer; 306 | target = 29B4191F255865446093230A061A9805 /* AMShimmer */; 307 | targetProxy = 41F424D53A3D3EEE0EB7F2DF3D17C32F /* PBXContainerItemProxy */; 308 | }; 309 | /* End PBXTargetDependency section */ 310 | 311 | /* Begin XCBuildConfiguration section */ 312 | 2FE879A0B6521307AC33CEDE6DA048D7 /* Debug */ = { 313 | isa = XCBuildConfiguration; 314 | baseConfigurationReference = CA27FC9C254238964E06F12079C0609B /* AMShimmer.xcconfig */; 315 | buildSettings = { 316 | CODE_SIGN_IDENTITY = ""; 317 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 318 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 319 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 320 | CURRENT_PROJECT_VERSION = 1; 321 | DEFINES_MODULE = YES; 322 | DYLIB_COMPATIBILITY_VERSION = 1; 323 | DYLIB_CURRENT_VERSION = 1; 324 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 325 | GCC_PREFIX_HEADER = "Target Support Files/AMShimmer/AMShimmer-prefix.pch"; 326 | INFOPLIST_FILE = "Target Support Files/AMShimmer/AMShimmer-Info.plist"; 327 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 328 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 329 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 330 | MODULEMAP_FILE = "Target Support Files/AMShimmer/AMShimmer.modulemap"; 331 | PRODUCT_MODULE_NAME = AMShimmer; 332 | PRODUCT_NAME = AMShimmer; 333 | SDKROOT = iphoneos; 334 | SKIP_INSTALL = YES; 335 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 336 | SWIFT_VERSION = 5.0; 337 | TARGETED_DEVICE_FAMILY = "1,2"; 338 | VERSIONING_SYSTEM = "apple-generic"; 339 | VERSION_INFO_PREFIX = ""; 340 | }; 341 | name = Debug; 342 | }; 343 | 675FACBFE34CEADE4784C5DDAC34FF7A /* Release */ = { 344 | isa = XCBuildConfiguration; 345 | baseConfigurationReference = FFCBF6FE0D60EFB7CA56A1187C375633 /* Pods-AMShimmer_Example.release.xcconfig */; 346 | buildSettings = { 347 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 348 | CODE_SIGN_IDENTITY = ""; 349 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 350 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 351 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 352 | CURRENT_PROJECT_VERSION = 1; 353 | DEFINES_MODULE = YES; 354 | DYLIB_COMPATIBILITY_VERSION = 1; 355 | DYLIB_CURRENT_VERSION = 1; 356 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 357 | INFOPLIST_FILE = "Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example-Info.plist"; 358 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 359 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 360 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 361 | MACH_O_TYPE = staticlib; 362 | MODULEMAP_FILE = "Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example.modulemap"; 363 | OTHER_LDFLAGS = ""; 364 | OTHER_LIBTOOLFLAGS = ""; 365 | PODS_ROOT = "$(SRCROOT)"; 366 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 367 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 368 | SDKROOT = iphoneos; 369 | SKIP_INSTALL = YES; 370 | TARGETED_DEVICE_FAMILY = "1,2"; 371 | VALIDATE_PRODUCT = YES; 372 | VERSIONING_SYSTEM = "apple-generic"; 373 | VERSION_INFO_PREFIX = ""; 374 | }; 375 | name = Release; 376 | }; 377 | 67CB6972E1F009D4DA8869ABA39517DD /* Debug */ = { 378 | isa = XCBuildConfiguration; 379 | baseConfigurationReference = 1496D518DA4FF9BB3CBAE15FE056B0F4 /* Pods-AMShimmer_Example.debug.xcconfig */; 380 | buildSettings = { 381 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 382 | CODE_SIGN_IDENTITY = ""; 383 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 384 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 385 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 386 | CURRENT_PROJECT_VERSION = 1; 387 | DEFINES_MODULE = YES; 388 | DYLIB_COMPATIBILITY_VERSION = 1; 389 | DYLIB_CURRENT_VERSION = 1; 390 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 391 | INFOPLIST_FILE = "Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example-Info.plist"; 392 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 393 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 394 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 395 | MACH_O_TYPE = staticlib; 396 | MODULEMAP_FILE = "Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example.modulemap"; 397 | OTHER_LDFLAGS = ""; 398 | OTHER_LIBTOOLFLAGS = ""; 399 | PODS_ROOT = "$(SRCROOT)"; 400 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 401 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 402 | SDKROOT = iphoneos; 403 | SKIP_INSTALL = YES; 404 | TARGETED_DEVICE_FAMILY = "1,2"; 405 | VERSIONING_SYSTEM = "apple-generic"; 406 | VERSION_INFO_PREFIX = ""; 407 | }; 408 | name = Debug; 409 | }; 410 | 7EBF949DDC3CA0810C3077609DE731C4 /* Release */ = { 411 | isa = XCBuildConfiguration; 412 | baseConfigurationReference = CA27FC9C254238964E06F12079C0609B /* AMShimmer.xcconfig */; 413 | buildSettings = { 414 | CODE_SIGN_IDENTITY = ""; 415 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 416 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 417 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 418 | CURRENT_PROJECT_VERSION = 1; 419 | DEFINES_MODULE = YES; 420 | DYLIB_COMPATIBILITY_VERSION = 1; 421 | DYLIB_CURRENT_VERSION = 1; 422 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 423 | GCC_PREFIX_HEADER = "Target Support Files/AMShimmer/AMShimmer-prefix.pch"; 424 | INFOPLIST_FILE = "Target Support Files/AMShimmer/AMShimmer-Info.plist"; 425 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 426 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 427 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 428 | MODULEMAP_FILE = "Target Support Files/AMShimmer/AMShimmer.modulemap"; 429 | PRODUCT_MODULE_NAME = AMShimmer; 430 | PRODUCT_NAME = AMShimmer; 431 | SDKROOT = iphoneos; 432 | SKIP_INSTALL = YES; 433 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 434 | SWIFT_VERSION = 5.0; 435 | TARGETED_DEVICE_FAMILY = "1,2"; 436 | VALIDATE_PRODUCT = YES; 437 | VERSIONING_SYSTEM = "apple-generic"; 438 | VERSION_INFO_PREFIX = ""; 439 | }; 440 | name = Release; 441 | }; 442 | B0087CB4594321EF41619F3181FE120E /* Release */ = { 443 | isa = XCBuildConfiguration; 444 | buildSettings = { 445 | ALWAYS_SEARCH_USER_PATHS = NO; 446 | CLANG_ANALYZER_NONNULL = YES; 447 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 448 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 449 | CLANG_CXX_LIBRARY = "libc++"; 450 | CLANG_ENABLE_MODULES = YES; 451 | CLANG_ENABLE_OBJC_ARC = YES; 452 | CLANG_ENABLE_OBJC_WEAK = YES; 453 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 454 | CLANG_WARN_BOOL_CONVERSION = YES; 455 | CLANG_WARN_COMMA = YES; 456 | CLANG_WARN_CONSTANT_CONVERSION = YES; 457 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 458 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 459 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 460 | CLANG_WARN_EMPTY_BODY = YES; 461 | CLANG_WARN_ENUM_CONVERSION = YES; 462 | CLANG_WARN_INFINITE_RECURSION = YES; 463 | CLANG_WARN_INT_CONVERSION = YES; 464 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 465 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 466 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 467 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 468 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 469 | CLANG_WARN_STRICT_PROTOTYPES = YES; 470 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 471 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 472 | CLANG_WARN_UNREACHABLE_CODE = YES; 473 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 474 | COPY_PHASE_STRIP = NO; 475 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 476 | ENABLE_NS_ASSERTIONS = NO; 477 | ENABLE_STRICT_OBJC_MSGSEND = YES; 478 | GCC_C_LANGUAGE_STANDARD = gnu11; 479 | GCC_NO_COMMON_BLOCKS = YES; 480 | GCC_PREPROCESSOR_DEFINITIONS = ( 481 | "POD_CONFIGURATION_RELEASE=1", 482 | "$(inherited)", 483 | ); 484 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 485 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 486 | GCC_WARN_UNDECLARED_SELECTOR = YES; 487 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 488 | GCC_WARN_UNUSED_FUNCTION = YES; 489 | GCC_WARN_UNUSED_VARIABLE = YES; 490 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 491 | MTL_ENABLE_DEBUG_INFO = NO; 492 | MTL_FAST_MATH = YES; 493 | PRODUCT_NAME = "$(TARGET_NAME)"; 494 | STRIP_INSTALLED_PRODUCT = NO; 495 | SWIFT_COMPILATION_MODE = wholemodule; 496 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 497 | SWIFT_VERSION = 5.0; 498 | SYMROOT = "${SRCROOT}/../build"; 499 | }; 500 | name = Release; 501 | }; 502 | B8BCBD0110C2658BB5DAADB9B7D97B92 /* Debug */ = { 503 | isa = XCBuildConfiguration; 504 | buildSettings = { 505 | ALWAYS_SEARCH_USER_PATHS = NO; 506 | CLANG_ANALYZER_NONNULL = YES; 507 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 508 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 509 | CLANG_CXX_LIBRARY = "libc++"; 510 | CLANG_ENABLE_MODULES = YES; 511 | CLANG_ENABLE_OBJC_ARC = YES; 512 | CLANG_ENABLE_OBJC_WEAK = YES; 513 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 514 | CLANG_WARN_BOOL_CONVERSION = YES; 515 | CLANG_WARN_COMMA = YES; 516 | CLANG_WARN_CONSTANT_CONVERSION = YES; 517 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 518 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 519 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 520 | CLANG_WARN_EMPTY_BODY = YES; 521 | CLANG_WARN_ENUM_CONVERSION = YES; 522 | CLANG_WARN_INFINITE_RECURSION = YES; 523 | CLANG_WARN_INT_CONVERSION = YES; 524 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 525 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 526 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 527 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 528 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 529 | CLANG_WARN_STRICT_PROTOTYPES = YES; 530 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 531 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 532 | CLANG_WARN_UNREACHABLE_CODE = YES; 533 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 534 | COPY_PHASE_STRIP = NO; 535 | DEBUG_INFORMATION_FORMAT = dwarf; 536 | ENABLE_STRICT_OBJC_MSGSEND = YES; 537 | ENABLE_TESTABILITY = YES; 538 | GCC_C_LANGUAGE_STANDARD = gnu11; 539 | GCC_DYNAMIC_NO_PIC = NO; 540 | GCC_NO_COMMON_BLOCKS = YES; 541 | GCC_OPTIMIZATION_LEVEL = 0; 542 | GCC_PREPROCESSOR_DEFINITIONS = ( 543 | "POD_CONFIGURATION_DEBUG=1", 544 | "DEBUG=1", 545 | "$(inherited)", 546 | ); 547 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 548 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 549 | GCC_WARN_UNDECLARED_SELECTOR = YES; 550 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 551 | GCC_WARN_UNUSED_FUNCTION = YES; 552 | GCC_WARN_UNUSED_VARIABLE = YES; 553 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 554 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 555 | MTL_FAST_MATH = YES; 556 | ONLY_ACTIVE_ARCH = YES; 557 | PRODUCT_NAME = "$(TARGET_NAME)"; 558 | STRIP_INSTALLED_PRODUCT = NO; 559 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 560 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 561 | SWIFT_VERSION = 5.0; 562 | SYMROOT = "${SRCROOT}/../build"; 563 | }; 564 | name = Debug; 565 | }; 566 | /* End XCBuildConfiguration section */ 567 | 568 | /* Begin XCConfigurationList section */ 569 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 570 | isa = XCConfigurationList; 571 | buildConfigurations = ( 572 | B8BCBD0110C2658BB5DAADB9B7D97B92 /* Debug */, 573 | B0087CB4594321EF41619F3181FE120E /* Release */, 574 | ); 575 | defaultConfigurationIsVisible = 0; 576 | defaultConfigurationName = Release; 577 | }; 578 | 9D28EF621C10DD089277CC9E26A80D6B /* Build configuration list for PBXNativeTarget "AMShimmer" */ = { 579 | isa = XCConfigurationList; 580 | buildConfigurations = ( 581 | 2FE879A0B6521307AC33CEDE6DA048D7 /* Debug */, 582 | 7EBF949DDC3CA0810C3077609DE731C4 /* Release */, 583 | ); 584 | defaultConfigurationIsVisible = 0; 585 | defaultConfigurationName = Release; 586 | }; 587 | B6B50B70112E509E93A7BF982F514B41 /* Build configuration list for PBXNativeTarget "Pods-AMShimmer_Example" */ = { 588 | isa = XCConfigurationList; 589 | buildConfigurations = ( 590 | 67CB6972E1F009D4DA8869ABA39517DD /* Debug */, 591 | 675FACBFE34CEADE4784C5DDAC34FF7A /* Release */, 592 | ); 593 | defaultConfigurationIsVisible = 0; 594 | defaultConfigurationName = Release; 595 | }; 596 | /* End XCConfigurationList section */ 597 | }; 598 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 599 | } 600 | -------------------------------------------------------------------------------- /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/Pods.xcodeproj/xcshareddata/xcschemes/AMShimmer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AMShimmer/AMShimmer-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.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AMShimmer/AMShimmer-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_AMShimmer : NSObject 3 | @end 4 | @implementation PodsDummy_AMShimmer 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AMShimmer/AMShimmer-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/AMShimmer/AMShimmer-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 AMShimmerVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AMShimmerVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AMShimmer/AMShimmer.modulemap: -------------------------------------------------------------------------------- 1 | framework module AMShimmer { 2 | umbrella header "AMShimmer-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AMShimmer/AMShimmer.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AMShimmer 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AMShimmer/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-AMShimmer_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-AMShimmer_Example/Pods-AMShimmer_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-AMShimmer_Example/Pods-AMShimmer_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## AMShimmer 5 | 6 | Copyright (c) 2018 Abedalkareem 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-AMShimmer_Example/Pods-AMShimmer_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) 2018 Abedalkareem <abedalkareem.omreyh@yahoo.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 | AMShimmer 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-AMShimmer_Example/Pods-AMShimmer_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_AMShimmer_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_AMShimmer_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | if [ -r "$source" ]; then 88 | # Copy the dSYM into a the targets temp dir. 89 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 90 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 91 | 92 | local basename 93 | basename="$(basename -s .framework.dSYM "$source")" 94 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 95 | 96 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 97 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then 98 | strip_invalid_archs "$binary" 99 | fi 100 | 101 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 102 | # Move the stripped file into its final destination. 103 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 104 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 105 | else 106 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 107 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 108 | fi 109 | fi 110 | } 111 | 112 | # Copies the bcsymbolmap files of a vendored framework 113 | install_bcsymbolmap() { 114 | local bcsymbolmap_path="$1" 115 | local destination="${BUILT_PRODUCTS_DIR}" 116 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" 117 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" 118 | } 119 | 120 | # Signs a framework with the provided identity 121 | code_sign_if_enabled() { 122 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 123 | # Use the current code_sign_identity 124 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 125 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 126 | 127 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 128 | code_sign_cmd="$code_sign_cmd &" 129 | fi 130 | echo "$code_sign_cmd" 131 | eval "$code_sign_cmd" 132 | fi 133 | } 134 | 135 | # Strip invalid architectures 136 | strip_invalid_archs() { 137 | binary="$1" 138 | # Get architectures for current target binary 139 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 140 | # Intersect them with the architectures we are building for 141 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 142 | # If there are no archs supported by this binary then warn the user 143 | if [[ -z "$intersected_archs" ]]; then 144 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 145 | STRIP_BINARY_RETVAL=0 146 | return 147 | fi 148 | stripped="" 149 | for arch in $binary_archs; do 150 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 151 | # Strip non-valid architectures in-place 152 | lipo -remove "$arch" -output "$binary" "$binary" 153 | stripped="$stripped $arch" 154 | fi 155 | done 156 | if [[ "$stripped" ]]; then 157 | echo "Stripped $binary of architectures:$stripped" 158 | fi 159 | STRIP_BINARY_RETVAL=1 160 | } 161 | 162 | 163 | if [[ "$CONFIGURATION" == "Debug" ]]; then 164 | install_framework "${BUILT_PRODUCTS_DIR}/AMShimmer/AMShimmer.framework" 165 | fi 166 | if [[ "$CONFIGURATION" == "Release" ]]; then 167 | install_framework "${BUILT_PRODUCTS_DIR}/AMShimmer/AMShimmer.framework" 168 | fi 169 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 170 | wait 171 | fi 172 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | 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}" || true 60 | 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} 61 | ;; 62 | *.xib) 63 | 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}" || true 64 | 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} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | 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}" 115 | else 116 | 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}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_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_AMShimmer_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_AMShimmer_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AMShimmer" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AMShimmer/AMShimmer.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AMShimmer" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_AMShimmer_Example { 2 | umbrella header "Pods-AMShimmer_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AMShimmer_Example/Pods-AMShimmer_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AMShimmer" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AMShimmer/AMShimmer.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AMShimmer" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Abedalkareem 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 |

2 | 3 |

4 |
5 | 6 | 7 | [![CI Status](https://img.shields.io/travis/Abedalkareem/AMShimmer.svg?style=flat)](https://travis-ci.org/Abedalkareem/AMShimmer) 8 | [![Version](https://img.shields.io/cocoapods/v/AMShimmer.svg?style=flat)](https://cocoapods.org/pods/AMShimmer) 9 | [![License](https://img.shields.io/cocoapods/l/AMShimmer.svg?style=flat)](https://cocoapods.org/pods/AMShimmer) 10 | [![Platform](https://img.shields.io/cocoapods/p/AMShimmer.svg?style=flat)](https://cocoapods.org/pods/AMShimmer) 11 | 12 | ## Screenshot 13 | 14 |

15 | 16 |

17 | 18 | 19 | ## Example 20 | 21 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 22 | 23 | ## Usage 24 | 25 | ```swift 26 | 27 | class ExampleViewController: UIViewController { 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | 32 | } 33 | 34 | @IBAction func startLoading(_ sender: Any) { 35 | // To start the shimmering 36 | AMShimmer.start(for: view) 37 | } 38 | 39 | @IBAction func stopLoading(_ sender: Any) { 40 | // To stop it 41 | AMShimmer.stop(for: view) 42 | } 43 | } 44 | 45 | 46 | ``` 47 | 48 | ## Customization 49 | 50 | To change the duration you can use: 51 | ``` 52 | AMShimmer.settings.duration = 1 // The defualt is 0.5 53 | ``` 54 | To change the repeat count: 55 | ``` 56 | AMShimmer.settings.repeatCount = 5 // The defualt is HUGE 57 | ``` 58 | To change the colors: 59 | ``` 60 | AMShimmer.settings.darkColor = UIColor.red.cgColor 61 | AMShimmer.settings.lightColor = UIColor.white.cgColor 62 | ``` 63 | 64 | 65 | ## Installation 66 | 67 | AMShimmer is available through [CocoaPods](https://cocoapods.org). To install 68 | it, simply add the following line to your Podfile: 69 | 70 | ```ruby 71 | pod 'AMShimmer' 72 | ``` 73 | 74 | Or you can use [Carthage](https://github.com/Carthage/Carthage). 75 | 76 | ``` 77 | github "Abedalkareem/AMShimmer" 78 | ``` 79 | 80 | ## Author 81 | 82 | Abedalkareem, abedalkareem.omreyh@yahoo.com 83 | 84 | ## License 85 | 86 | ``` 87 | The MIT License (MIT) 88 | 89 | Copyright (c) 2017 Abedalkareem Omreyh 90 | 91 | Permission is hereby granted, free of charge, to any person obtaining a copy 92 | of this software and associated documentation files (the "Software"), to deal 93 | in the Software without restriction, including without limitation the rights 94 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 95 | copies of the Software, and to permit persons to whom the Software is 96 | furnished to do so, subject to the following conditions: 97 | 98 | The above copyright notice and this permission notice shall be included in all 99 | copies or substantial portions of the Software. 100 | 101 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 102 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 103 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 104 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 105 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 106 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 107 | SOFTWARE. 108 | 109 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/AMShimmer/1d91004401f0d9460178549d74a1b8fd53add46e/logo.png -------------------------------------------------------------------------------- /screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/AMShimmer/1d91004401f0d9460178549d74a1b8fd53add46e/screenshot.gif --------------------------------------------------------------------------------