├── .gitignore ├── Example ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── UICountingLabel.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── UICountingLabel.xcscheme │ └── Target Support Files │ │ ├── Pods-UICountingLabel_Example │ │ ├── Pods-UICountingLabel_Example-Info.plist │ │ ├── Pods-UICountingLabel_Example-acknowledgements.markdown │ │ ├── Pods-UICountingLabel_Example-acknowledgements.plist │ │ ├── Pods-UICountingLabel_Example-dummy.m │ │ ├── Pods-UICountingLabel_Example-frameworks.sh │ │ ├── Pods-UICountingLabel_Example-umbrella.h │ │ ├── Pods-UICountingLabel_Example.debug.xcconfig │ │ ├── Pods-UICountingLabel_Example.modulemap │ │ └── Pods-UICountingLabel_Example.release.xcconfig │ │ └── UICountingLabel │ │ ├── UICountingLabel-Info.plist │ │ ├── UICountingLabel-dummy.m │ │ ├── UICountingLabel-prefix.pch │ │ ├── UICountingLabel-umbrella.h │ │ ├── UICountingLabel.modulemap │ │ └── UICountingLabel.xcconfig ├── UICountingLabel.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── CountingTestProject.xcscheme └── UICountingLabel │ ├── Base.lproj │ ├── CTPViewController.xib │ └── LaunchScreen.storyboard │ ├── CTPAppDelegate.h │ ├── CTPAppDelegate.m │ ├── CTPViewController.h │ ├── CTPViewController.m │ ├── CountingTestProject-Info.plist │ ├── CountingTestProject-Prefix.pch │ ├── Images.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── en.lproj │ ├── CTPViewController.xib │ └── InfoPlist.strings │ └── main.m ├── LICENSE ├── README.md ├── UICountingLabel.podspec ├── UICountingLabel └── Classes │ ├── .gitkeep │ ├── UICountingLabel.h │ └── UICountingLabel.m ├── _Pods.xcodeproj └── demo.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 | *.xcworkspace 23 | !default.xcworkspace 24 | .idea/ 25 | 26 | # Bundler 27 | .bundle 28 | 29 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 30 | # Carthage/Checkouts 31 | 32 | Carthage/Build 33 | 34 | # We recommend against adding the Pods directory to your .gitignore. However 35 | # you should judge for yourself, the pros and cons are mentioned at: 36 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 37 | # 38 | # Note: if you ignore the Pods directory, make sure to uncomment 39 | # `pod install` in .travis.yml 40 | # 41 | # Pods/ 42 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | platform :ios, '8.0' 4 | 5 | target 'CountingTestProject' do 6 | pod 'UICountingLabel', :path => '../' 7 | end 8 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - UICountingLabel (1.4.1) 3 | 4 | DEPENDENCIES: 5 | - UICountingLabel (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | UICountingLabel: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | UICountingLabel: cefc8fb9e2934d968f975e5fcc7b4d01f5403a9b 13 | 14 | PODFILE CHECKSUM: ad599c616cd89d725d86940c1c215cb350031e6e 15 | 16 | COCOAPODS: 1.8.4 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/UICountingLabel.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "UICountingLabel", 3 | "version": "1.4.1", 4 | "summary": "Adds animated counting support to UILabel.", 5 | "homepage": "https://github.com/dataxpress/UICountingLabel", 6 | "license": { 7 | "type": "MIT", 8 | "file": "LICENSE" 9 | }, 10 | "authors": { 11 | "Tim Gostony": "dataxpress@gmail.com" 12 | }, 13 | "source": { 14 | "git": "https://github.com/dataxpress/UICountingLabel.git", 15 | "tag": "1.4.1" 16 | }, 17 | "platforms": { 18 | "ios": "7.0", 19 | "tvos": "9.0" 20 | }, 21 | "source_files": "UICountingLabel/Classes/**/*", 22 | "requires_arc": true 23 | } 24 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - UICountingLabel (1.4.1) 3 | 4 | DEPENDENCIES: 5 | - UICountingLabel (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | UICountingLabel: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | UICountingLabel: cefc8fb9e2934d968f975e5fcc7b4d01f5403a9b 13 | 14 | PODFILE CHECKSUM: ad599c616cd89d725d86940c1c215cb350031e6e 15 | 16 | COCOAPODS: 1.8.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 | 3D785A7B3AAD26F8FB37198601A75F17 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 11 | 465CC76A89BFA996CADE2D825C25C7FA /* Pods-UICountingLabel_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EEEBF2108F541445283BB995EF2E6B97 /* Pods-UICountingLabel_Example-dummy.m */; }; 12 | 4EAC1EC0C49FC62ED276553FF83616D1 /* UICountingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 729DA26828C87C88F6F9F186E76A21D6 /* UICountingLabel.m */; }; 13 | 60E0140639D0909C00847D97982C3B82 /* Pods-UICountingLabel_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 15416AC3081C43393EA703FA05C34F2D /* Pods-UICountingLabel_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 7F6C947232859047F48B5FE8F0A5A187 /* UICountingLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = BBDEC28620EDA12798C69D24D81DB7E3 /* UICountingLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | BF913BE31DFB4CC2C036C6EE48C625A2 /* UICountingLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 26B20894EB64BBDEDEB7F9EF46AE1B85 /* UICountingLabel-dummy.m */; }; 16 | C61006D211537041E458BB3751683793 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 17 | CF93A9270AF6C46524C3D201187DAEBE /* UICountingLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 40A88230CF9484EFC0BC52DE5266885F /* UICountingLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXContainerItemProxy section */ 21 | 01E8416AB2AB27811798843F0517C423 /* PBXContainerItemProxy */ = { 22 | isa = PBXContainerItemProxy; 23 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 24 | proxyType = 1; 25 | remoteGlobalIDString = E75AABC3B81AEF8EDBD1C8BAE95B565A; 26 | remoteInfo = UICountingLabel; 27 | }; 28 | /* End PBXContainerItemProxy section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | 08F87FBA18AC5515B164A59651868521 /* Pods-UICountingLabel_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-UICountingLabel_Example-Info.plist"; sourceTree = ""; }; 32 | 15416AC3081C43393EA703FA05C34F2D /* Pods-UICountingLabel_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-UICountingLabel_Example-umbrella.h"; sourceTree = ""; }; 33 | 196F2ED5083CC8C39B87DA76879C1012 /* UICountingLabel.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = UICountingLabel.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 34 | 1A9A2C883CEE12F733C70E6E10603D8B /* Pods-UICountingLabel_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-UICountingLabel_Example-frameworks.sh"; sourceTree = ""; }; 35 | 26B20894EB64BBDEDEB7F9EF46AE1B85 /* UICountingLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UICountingLabel-dummy.m"; sourceTree = ""; }; 36 | 271E781320FAC0F69AB948E821896ED8 /* UICountingLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICountingLabel-prefix.pch"; sourceTree = ""; }; 37 | 28217D0CFAEFFB5B2566BAD5082522DD /* Pods-UICountingLabel_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-UICountingLabel_Example.release.xcconfig"; sourceTree = ""; }; 38 | 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; }; 39 | 3EF18B865A6426D21605FA09BF784B5C /* Pods-UICountingLabel_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-UICountingLabel_Example-acknowledgements.plist"; sourceTree = ""; }; 40 | 4011E2F333A3DCA2FE3484C17B4081B0 /* Pods-UICountingLabel_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-UICountingLabel_Example-acknowledgements.markdown"; sourceTree = ""; }; 41 | 40A88230CF9484EFC0BC52DE5266885F /* UICountingLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICountingLabel-umbrella.h"; sourceTree = ""; }; 42 | 49B50750C2D4BB6D3BC49CB5BA0FB07D /* Pods_UICountingLabel_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_UICountingLabel_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 5D7452772693CDBA86AA81354D332D64 /* Pods-UICountingLabel_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-UICountingLabel_Example.debug.xcconfig"; sourceTree = ""; }; 44 | 5EC418481B955D794CCC58E068B66453 /* UICountingLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = UICountingLabel.modulemap; sourceTree = ""; }; 45 | 729DA26828C87C88F6F9F186E76A21D6 /* UICountingLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UICountingLabel.m; path = UICountingLabel/Classes/UICountingLabel.m; sourceTree = ""; }; 46 | 947DFAD98AC32386F2ED2508BE815D6A /* UICountingLabel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UICountingLabel.xcconfig; sourceTree = ""; }; 47 | 974F13143A21B67C81476536D0337ED2 /* UICountingLabel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "UICountingLabel-Info.plist"; sourceTree = ""; }; 48 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 49 | AD1F4230A014AFB5E5A101EB83CD7D45 /* Pods-UICountingLabel_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-UICountingLabel_Example.modulemap"; sourceTree = ""; }; 50 | BBDEC28620EDA12798C69D24D81DB7E3 /* UICountingLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UICountingLabel.h; path = UICountingLabel/Classes/UICountingLabel.h; sourceTree = ""; }; 51 | CE4AC95DC35D7AC764FD98B3C7B11A8E /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 52 | E48C0DC1CAF03125EE1F4CFA25F61B6B /* UICountingLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UICountingLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | E8B92A68B1F875DBBCBF60C749AE7248 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 54 | EEEBF2108F541445283BB995EF2E6B97 /* Pods-UICountingLabel_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-UICountingLabel_Example-dummy.m"; sourceTree = ""; }; 55 | /* End PBXFileReference section */ 56 | 57 | /* Begin PBXFrameworksBuildPhase section */ 58 | 2A6D9DF587891B54ECFBC3430A51BCCB /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | 3D785A7B3AAD26F8FB37198601A75F17 /* Foundation.framework in Frameworks */, 63 | ); 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | DBDD95E53EB10E2CA787B52186C6719A /* Frameworks */ = { 67 | isa = PBXFrameworksBuildPhase; 68 | buildActionMask = 2147483647; 69 | files = ( 70 | C61006D211537041E458BB3751683793 /* Foundation.framework in Frameworks */, 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | /* End PBXFrameworksBuildPhase section */ 75 | 76 | /* Begin PBXGroup section */ 77 | 4D4C5B537A04B2D0F0AE758FC410820F /* Targets Support Files */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | AC828A70BC7D50AA79404EF6740BBE02 /* Pods-UICountingLabel_Example */, 81 | ); 82 | name = "Targets Support Files"; 83 | sourceTree = ""; 84 | }; 85 | 57704A03D213BC25E0A8F8723DFCF90D /* Pod */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | E8B92A68B1F875DBBCBF60C749AE7248 /* LICENSE */, 89 | CE4AC95DC35D7AC764FD98B3C7B11A8E /* README.md */, 90 | 196F2ED5083CC8C39B87DA76879C1012 /* UICountingLabel.podspec */, 91 | ); 92 | name = Pod; 93 | sourceTree = ""; 94 | }; 95 | 587BD2C5E3B23D566FFA0515A208A279 /* Support Files */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 5EC418481B955D794CCC58E068B66453 /* UICountingLabel.modulemap */, 99 | 947DFAD98AC32386F2ED2508BE815D6A /* UICountingLabel.xcconfig */, 100 | 26B20894EB64BBDEDEB7F9EF46AE1B85 /* UICountingLabel-dummy.m */, 101 | 974F13143A21B67C81476536D0337ED2 /* UICountingLabel-Info.plist */, 102 | 271E781320FAC0F69AB948E821896ED8 /* UICountingLabel-prefix.pch */, 103 | 40A88230CF9484EFC0BC52DE5266885F /* UICountingLabel-umbrella.h */, 104 | ); 105 | name = "Support Files"; 106 | path = "Example/Pods/Target Support Files/UICountingLabel"; 107 | sourceTree = ""; 108 | }; 109 | 73A5D74F27770D851B86DA91CFFD5190 /* Development Pods */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 75B9F8E904ED4FBAD78FEB2EE09FB76C /* UICountingLabel */, 113 | ); 114 | name = "Development Pods"; 115 | sourceTree = ""; 116 | }; 117 | 75B9F8E904ED4FBAD78FEB2EE09FB76C /* UICountingLabel */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | BBDEC28620EDA12798C69D24D81DB7E3 /* UICountingLabel.h */, 121 | 729DA26828C87C88F6F9F186E76A21D6 /* UICountingLabel.m */, 122 | 57704A03D213BC25E0A8F8723DFCF90D /* Pod */, 123 | 587BD2C5E3B23D566FFA0515A208A279 /* Support Files */, 124 | ); 125 | name = UICountingLabel; 126 | path = ../..; 127 | sourceTree = ""; 128 | }; 129 | AC828A70BC7D50AA79404EF6740BBE02 /* Pods-UICountingLabel_Example */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | AD1F4230A014AFB5E5A101EB83CD7D45 /* Pods-UICountingLabel_Example.modulemap */, 133 | 4011E2F333A3DCA2FE3484C17B4081B0 /* Pods-UICountingLabel_Example-acknowledgements.markdown */, 134 | 3EF18B865A6426D21605FA09BF784B5C /* Pods-UICountingLabel_Example-acknowledgements.plist */, 135 | EEEBF2108F541445283BB995EF2E6B97 /* Pods-UICountingLabel_Example-dummy.m */, 136 | 1A9A2C883CEE12F733C70E6E10603D8B /* Pods-UICountingLabel_Example-frameworks.sh */, 137 | 08F87FBA18AC5515B164A59651868521 /* Pods-UICountingLabel_Example-Info.plist */, 138 | 15416AC3081C43393EA703FA05C34F2D /* Pods-UICountingLabel_Example-umbrella.h */, 139 | 5D7452772693CDBA86AA81354D332D64 /* Pods-UICountingLabel_Example.debug.xcconfig */, 140 | 28217D0CFAEFFB5B2566BAD5082522DD /* Pods-UICountingLabel_Example.release.xcconfig */, 141 | ); 142 | name = "Pods-UICountingLabel_Example"; 143 | path = "Target Support Files/Pods-UICountingLabel_Example"; 144 | sourceTree = ""; 145 | }; 146 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, 150 | ); 151 | name = iOS; 152 | sourceTree = ""; 153 | }; 154 | C1A4F016F3600E087223CC8B42B62C10 /* Products */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 49B50750C2D4BB6D3BC49CB5BA0FB07D /* Pods_UICountingLabel_Example.framework */, 158 | E48C0DC1CAF03125EE1F4CFA25F61B6B /* UICountingLabel.framework */, 159 | ); 160 | name = Products; 161 | sourceTree = ""; 162 | }; 163 | CF1408CF629C7361332E53B88F7BD30C = { 164 | isa = PBXGroup; 165 | children = ( 166 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 167 | 73A5D74F27770D851B86DA91CFFD5190 /* Development Pods */, 168 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 169 | C1A4F016F3600E087223CC8B42B62C10 /* Products */, 170 | 4D4C5B537A04B2D0F0AE758FC410820F /* Targets Support Files */, 171 | ); 172 | sourceTree = ""; 173 | }; 174 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 175 | isa = PBXGroup; 176 | children = ( 177 | C0834CEBB1379A84116EF29F93051C60 /* iOS */, 178 | ); 179 | name = Frameworks; 180 | sourceTree = ""; 181 | }; 182 | /* End PBXGroup section */ 183 | 184 | /* Begin PBXHeadersBuildPhase section */ 185 | 090473A89DB6E8332D12A03FDC7E0B13 /* Headers */ = { 186 | isa = PBXHeadersBuildPhase; 187 | buildActionMask = 2147483647; 188 | files = ( 189 | 60E0140639D0909C00847D97982C3B82 /* Pods-UICountingLabel_Example-umbrella.h in Headers */, 190 | ); 191 | runOnlyForDeploymentPostprocessing = 0; 192 | }; 193 | 3CF193A4A37D7A62036A2253F698AE38 /* Headers */ = { 194 | isa = PBXHeadersBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | CF93A9270AF6C46524C3D201187DAEBE /* UICountingLabel-umbrella.h in Headers */, 198 | 7F6C947232859047F48B5FE8F0A5A187 /* UICountingLabel.h in Headers */, 199 | ); 200 | runOnlyForDeploymentPostprocessing = 0; 201 | }; 202 | /* End PBXHeadersBuildPhase section */ 203 | 204 | /* Begin PBXNativeTarget section */ 205 | 4CB7B1F75BFF8833267F06501494FCED /* Pods-UICountingLabel_Example */ = { 206 | isa = PBXNativeTarget; 207 | buildConfigurationList = 051BD749C3A5331256CC53208191CD6A /* Build configuration list for PBXNativeTarget "Pods-UICountingLabel_Example" */; 208 | buildPhases = ( 209 | 090473A89DB6E8332D12A03FDC7E0B13 /* Headers */, 210 | F3CF800B5777E6871ABB2FB6EE4696E7 /* Sources */, 211 | 2A6D9DF587891B54ECFBC3430A51BCCB /* Frameworks */, 212 | 3DE536F41F79A54848966406A90C09DB /* Resources */, 213 | ); 214 | buildRules = ( 215 | ); 216 | dependencies = ( 217 | 4A3E67D74CE71838C4D4ECD7A7C5B94A /* PBXTargetDependency */, 218 | ); 219 | name = "Pods-UICountingLabel_Example"; 220 | productName = "Pods-UICountingLabel_Example"; 221 | productReference = 49B50750C2D4BB6D3BC49CB5BA0FB07D /* Pods_UICountingLabel_Example.framework */; 222 | productType = "com.apple.product-type.framework"; 223 | }; 224 | E75AABC3B81AEF8EDBD1C8BAE95B565A /* UICountingLabel */ = { 225 | isa = PBXNativeTarget; 226 | buildConfigurationList = 34BB0919F84117FDCF3B24CB5EBF79B2 /* Build configuration list for PBXNativeTarget "UICountingLabel" */; 227 | buildPhases = ( 228 | 3CF193A4A37D7A62036A2253F698AE38 /* Headers */, 229 | 15F5524651ECD262D63640155B2B0649 /* Sources */, 230 | DBDD95E53EB10E2CA787B52186C6719A /* Frameworks */, 231 | 3EC58766E659A918709487D85B7EB6D9 /* Resources */, 232 | ); 233 | buildRules = ( 234 | ); 235 | dependencies = ( 236 | ); 237 | name = UICountingLabel; 238 | productName = UICountingLabel; 239 | productReference = E48C0DC1CAF03125EE1F4CFA25F61B6B /* UICountingLabel.framework */; 240 | productType = "com.apple.product-type.framework"; 241 | }; 242 | /* End PBXNativeTarget section */ 243 | 244 | /* Begin PBXProject section */ 245 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 246 | isa = PBXProject; 247 | attributes = { 248 | LastSwiftUpdateCheck = 1100; 249 | LastUpgradeCheck = 1100; 250 | }; 251 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 252 | compatibilityVersion = "Xcode 3.2"; 253 | developmentRegion = en; 254 | hasScannedForEncodings = 0; 255 | knownRegions = ( 256 | en, 257 | ); 258 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 259 | productRefGroup = C1A4F016F3600E087223CC8B42B62C10 /* Products */; 260 | projectDirPath = ""; 261 | projectRoot = ""; 262 | targets = ( 263 | 4CB7B1F75BFF8833267F06501494FCED /* Pods-UICountingLabel_Example */, 264 | E75AABC3B81AEF8EDBD1C8BAE95B565A /* UICountingLabel */, 265 | ); 266 | }; 267 | /* End PBXProject section */ 268 | 269 | /* Begin PBXResourcesBuildPhase section */ 270 | 3DE536F41F79A54848966406A90C09DB /* Resources */ = { 271 | isa = PBXResourcesBuildPhase; 272 | buildActionMask = 2147483647; 273 | files = ( 274 | ); 275 | runOnlyForDeploymentPostprocessing = 0; 276 | }; 277 | 3EC58766E659A918709487D85B7EB6D9 /* Resources */ = { 278 | isa = PBXResourcesBuildPhase; 279 | buildActionMask = 2147483647; 280 | files = ( 281 | ); 282 | runOnlyForDeploymentPostprocessing = 0; 283 | }; 284 | /* End PBXResourcesBuildPhase section */ 285 | 286 | /* Begin PBXSourcesBuildPhase section */ 287 | 15F5524651ECD262D63640155B2B0649 /* Sources */ = { 288 | isa = PBXSourcesBuildPhase; 289 | buildActionMask = 2147483647; 290 | files = ( 291 | BF913BE31DFB4CC2C036C6EE48C625A2 /* UICountingLabel-dummy.m in Sources */, 292 | 4EAC1EC0C49FC62ED276553FF83616D1 /* UICountingLabel.m in Sources */, 293 | ); 294 | runOnlyForDeploymentPostprocessing = 0; 295 | }; 296 | F3CF800B5777E6871ABB2FB6EE4696E7 /* Sources */ = { 297 | isa = PBXSourcesBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | 465CC76A89BFA996CADE2D825C25C7FA /* Pods-UICountingLabel_Example-dummy.m in Sources */, 301 | ); 302 | runOnlyForDeploymentPostprocessing = 0; 303 | }; 304 | /* End PBXSourcesBuildPhase section */ 305 | 306 | /* Begin PBXTargetDependency section */ 307 | 4A3E67D74CE71838C4D4ECD7A7C5B94A /* PBXTargetDependency */ = { 308 | isa = PBXTargetDependency; 309 | name = UICountingLabel; 310 | target = E75AABC3B81AEF8EDBD1C8BAE95B565A /* UICountingLabel */; 311 | targetProxy = 01E8416AB2AB27811798843F0517C423 /* PBXContainerItemProxy */; 312 | }; 313 | /* End PBXTargetDependency section */ 314 | 315 | /* Begin XCBuildConfiguration section */ 316 | 3833A6A71798741397D0CFCC777412F5 /* Debug */ = { 317 | isa = XCBuildConfiguration; 318 | baseConfigurationReference = 947DFAD98AC32386F2ED2508BE815D6A /* UICountingLabel.xcconfig */; 319 | buildSettings = { 320 | CODE_SIGN_IDENTITY = ""; 321 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 322 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 323 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 324 | CURRENT_PROJECT_VERSION = 1; 325 | DEFINES_MODULE = YES; 326 | DYLIB_COMPATIBILITY_VERSION = 1; 327 | DYLIB_CURRENT_VERSION = 1; 328 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 329 | GCC_PREFIX_HEADER = "Target Support Files/UICountingLabel/UICountingLabel-prefix.pch"; 330 | INFOPLIST_FILE = "Target Support Files/UICountingLabel/UICountingLabel-Info.plist"; 331 | INSTALL_PATH = "\"$(LOCAL_LIBRARY_DIR)/Frameworks\""; 332 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 333 | MODULEMAP_FILE = "Target Support Files/UICountingLabel/UICountingLabel.modulemap"; 334 | PRODUCT_MODULE_NAME = UICountingLabel; 335 | PRODUCT_NAME = UICountingLabel; 336 | SDKROOT = iphoneos; 337 | SKIP_INSTALL = YES; 338 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 339 | SWIFT_VERSION = 4.0; 340 | TARGETED_DEVICE_FAMILY = "1,2,3"; 341 | VERSIONING_SYSTEM = "apple-generic"; 342 | VERSION_INFO_PREFIX = ""; 343 | }; 344 | name = Debug; 345 | }; 346 | 4B581EA0FC486986BA6DCB30B18ED1FE /* Release */ = { 347 | isa = XCBuildConfiguration; 348 | baseConfigurationReference = 947DFAD98AC32386F2ED2508BE815D6A /* UICountingLabel.xcconfig */; 349 | buildSettings = { 350 | CODE_SIGN_IDENTITY = ""; 351 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 352 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 353 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 354 | CURRENT_PROJECT_VERSION = 1; 355 | DEFINES_MODULE = YES; 356 | DYLIB_COMPATIBILITY_VERSION = 1; 357 | DYLIB_CURRENT_VERSION = 1; 358 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 359 | GCC_PREFIX_HEADER = "Target Support Files/UICountingLabel/UICountingLabel-prefix.pch"; 360 | INFOPLIST_FILE = "Target Support Files/UICountingLabel/UICountingLabel-Info.plist"; 361 | INSTALL_PATH = "\"$(LOCAL_LIBRARY_DIR)/Frameworks\""; 362 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 363 | MODULEMAP_FILE = "Target Support Files/UICountingLabel/UICountingLabel.modulemap"; 364 | PRODUCT_MODULE_NAME = UICountingLabel; 365 | PRODUCT_NAME = UICountingLabel; 366 | SDKROOT = iphoneos; 367 | SKIP_INSTALL = YES; 368 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 369 | SWIFT_VERSION = 4.0; 370 | TARGETED_DEVICE_FAMILY = "1,2,3"; 371 | VALIDATE_PRODUCT = YES; 372 | VERSIONING_SYSTEM = "apple-generic"; 373 | VERSION_INFO_PREFIX = ""; 374 | }; 375 | name = Release; 376 | }; 377 | 4BE66A09A74FD25164AAB3C2645B9B93 /* Release */ = { 378 | isa = XCBuildConfiguration; 379 | buildSettings = { 380 | ALWAYS_SEARCH_USER_PATHS = NO; 381 | CLANG_ANALYZER_NONNULL = YES; 382 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 383 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 384 | CLANG_CXX_LIBRARY = "libc++"; 385 | CLANG_ENABLE_MODULES = YES; 386 | CLANG_ENABLE_OBJC_ARC = YES; 387 | CLANG_ENABLE_OBJC_WEAK = YES; 388 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 389 | CLANG_WARN_BOOL_CONVERSION = YES; 390 | CLANG_WARN_COMMA = YES; 391 | CLANG_WARN_CONSTANT_CONVERSION = YES; 392 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 393 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 394 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 395 | CLANG_WARN_EMPTY_BODY = YES; 396 | CLANG_WARN_ENUM_CONVERSION = YES; 397 | CLANG_WARN_INFINITE_RECURSION = YES; 398 | CLANG_WARN_INT_CONVERSION = YES; 399 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 400 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 401 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 402 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 403 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 404 | CLANG_WARN_STRICT_PROTOTYPES = YES; 405 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 406 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 407 | CLANG_WARN_UNREACHABLE_CODE = YES; 408 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 409 | COPY_PHASE_STRIP = NO; 410 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 411 | ENABLE_NS_ASSERTIONS = NO; 412 | ENABLE_STRICT_OBJC_MSGSEND = YES; 413 | GCC_C_LANGUAGE_STANDARD = gnu11; 414 | GCC_NO_COMMON_BLOCKS = YES; 415 | GCC_PREPROCESSOR_DEFINITIONS = ( 416 | "POD_CONFIGURATION_RELEASE=1", 417 | "$(inherited)", 418 | ); 419 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 420 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 421 | GCC_WARN_UNDECLARED_SELECTOR = YES; 422 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 423 | GCC_WARN_UNUSED_FUNCTION = YES; 424 | GCC_WARN_UNUSED_VARIABLE = YES; 425 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 426 | MTL_ENABLE_DEBUG_INFO = NO; 427 | MTL_FAST_MATH = YES; 428 | PRODUCT_NAME = "$(TARGET_NAME)"; 429 | STRIP_INSTALLED_PRODUCT = NO; 430 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; 431 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 432 | SWIFT_VERSION = 5.0; 433 | TVOS_DEPLOYMENT_TARGET = 9.0; 434 | }; 435 | name = Release; 436 | }; 437 | 7EF7227D9B20A1D549000096ACCB23D7 /* Debug */ = { 438 | isa = XCBuildConfiguration; 439 | buildSettings = { 440 | ALWAYS_SEARCH_USER_PATHS = NO; 441 | CLANG_ANALYZER_NONNULL = YES; 442 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 443 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 444 | CLANG_CXX_LIBRARY = "libc++"; 445 | CLANG_ENABLE_MODULES = YES; 446 | CLANG_ENABLE_OBJC_ARC = YES; 447 | CLANG_ENABLE_OBJC_WEAK = YES; 448 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 449 | CLANG_WARN_BOOL_CONVERSION = YES; 450 | CLANG_WARN_COMMA = YES; 451 | CLANG_WARN_CONSTANT_CONVERSION = YES; 452 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 453 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 454 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 455 | CLANG_WARN_EMPTY_BODY = YES; 456 | CLANG_WARN_ENUM_CONVERSION = YES; 457 | CLANG_WARN_INFINITE_RECURSION = YES; 458 | CLANG_WARN_INT_CONVERSION = YES; 459 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 460 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 461 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 462 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 463 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 464 | CLANG_WARN_STRICT_PROTOTYPES = YES; 465 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 466 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 467 | CLANG_WARN_UNREACHABLE_CODE = YES; 468 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 469 | COPY_PHASE_STRIP = NO; 470 | DEBUG_INFORMATION_FORMAT = dwarf; 471 | ENABLE_STRICT_OBJC_MSGSEND = YES; 472 | ENABLE_TESTABILITY = YES; 473 | GCC_C_LANGUAGE_STANDARD = gnu11; 474 | GCC_DYNAMIC_NO_PIC = NO; 475 | GCC_NO_COMMON_BLOCKS = YES; 476 | GCC_OPTIMIZATION_LEVEL = 0; 477 | GCC_PREPROCESSOR_DEFINITIONS = ( 478 | "POD_CONFIGURATION_DEBUG=1", 479 | "DEBUG=1", 480 | "$(inherited)", 481 | ); 482 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 483 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 484 | GCC_WARN_UNDECLARED_SELECTOR = YES; 485 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 486 | GCC_WARN_UNUSED_FUNCTION = YES; 487 | GCC_WARN_UNUSED_VARIABLE = YES; 488 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 489 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 490 | MTL_FAST_MATH = YES; 491 | ONLY_ACTIVE_ARCH = YES; 492 | PRODUCT_NAME = "$(TARGET_NAME)"; 493 | STRIP_INSTALLED_PRODUCT = NO; 494 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; 495 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 496 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 497 | SWIFT_VERSION = 5.0; 498 | TVOS_DEPLOYMENT_TARGET = 9.0; 499 | }; 500 | name = Debug; 501 | }; 502 | A21367328881F4BB8D7B9610088D0AA8 /* Release */ = { 503 | isa = XCBuildConfiguration; 504 | baseConfigurationReference = 28217D0CFAEFFB5B2566BAD5082522DD /* Pods-UICountingLabel_Example.release.xcconfig */; 505 | buildSettings = { 506 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 507 | CODE_SIGN_IDENTITY = ""; 508 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 509 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 510 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 511 | CURRENT_PROJECT_VERSION = 1; 512 | DEFINES_MODULE = YES; 513 | DYLIB_COMPATIBILITY_VERSION = 1; 514 | DYLIB_CURRENT_VERSION = 1; 515 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 516 | INFOPLIST_FILE = "Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example-Info.plist"; 517 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 518 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 519 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 520 | MACH_O_TYPE = staticlib; 521 | MODULEMAP_FILE = "Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example.modulemap"; 522 | OTHER_LDFLAGS = ""; 523 | OTHER_LIBTOOLFLAGS = ""; 524 | PODS_ROOT = "$(SRCROOT)"; 525 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 526 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 527 | SDKROOT = iphoneos; 528 | SKIP_INSTALL = YES; 529 | TARGETED_DEVICE_FAMILY = "1,2"; 530 | VALIDATE_PRODUCT = YES; 531 | VERSIONING_SYSTEM = "apple-generic"; 532 | VERSION_INFO_PREFIX = ""; 533 | }; 534 | name = Release; 535 | }; 536 | E4E5DD79FD5CF57F89642774A2FBA18E /* Debug */ = { 537 | isa = XCBuildConfiguration; 538 | baseConfigurationReference = 5D7452772693CDBA86AA81354D332D64 /* Pods-UICountingLabel_Example.debug.xcconfig */; 539 | buildSettings = { 540 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 541 | CODE_SIGN_IDENTITY = ""; 542 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 543 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 544 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 545 | CURRENT_PROJECT_VERSION = 1; 546 | DEFINES_MODULE = YES; 547 | DYLIB_COMPATIBILITY_VERSION = 1; 548 | DYLIB_CURRENT_VERSION = 1; 549 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 550 | INFOPLIST_FILE = "Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example-Info.plist"; 551 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 552 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 553 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 554 | MACH_O_TYPE = staticlib; 555 | MODULEMAP_FILE = "Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example.modulemap"; 556 | OTHER_LDFLAGS = ""; 557 | OTHER_LIBTOOLFLAGS = ""; 558 | PODS_ROOT = "$(SRCROOT)"; 559 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 560 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 561 | SDKROOT = iphoneos; 562 | SKIP_INSTALL = YES; 563 | TARGETED_DEVICE_FAMILY = "1,2"; 564 | VERSIONING_SYSTEM = "apple-generic"; 565 | VERSION_INFO_PREFIX = ""; 566 | }; 567 | name = Debug; 568 | }; 569 | /* End XCBuildConfiguration section */ 570 | 571 | /* Begin XCConfigurationList section */ 572 | 051BD749C3A5331256CC53208191CD6A /* Build configuration list for PBXNativeTarget "Pods-UICountingLabel_Example" */ = { 573 | isa = XCConfigurationList; 574 | buildConfigurations = ( 575 | E4E5DD79FD5CF57F89642774A2FBA18E /* Debug */, 576 | A21367328881F4BB8D7B9610088D0AA8 /* Release */, 577 | ); 578 | defaultConfigurationIsVisible = 0; 579 | defaultConfigurationName = Release; 580 | }; 581 | 34BB0919F84117FDCF3B24CB5EBF79B2 /* Build configuration list for PBXNativeTarget "UICountingLabel" */ = { 582 | isa = XCConfigurationList; 583 | buildConfigurations = ( 584 | 3833A6A71798741397D0CFCC777412F5 /* Debug */, 585 | 4B581EA0FC486986BA6DCB30B18ED1FE /* Release */, 586 | ); 587 | defaultConfigurationIsVisible = 0; 588 | defaultConfigurationName = Release; 589 | }; 590 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 591 | isa = XCConfigurationList; 592 | buildConfigurations = ( 593 | 7EF7227D9B20A1D549000096ACCB23D7 /* Debug */, 594 | 4BE66A09A74FD25164AAB3C2645B9B93 /* Release */, 595 | ); 596 | defaultConfigurationIsVisible = 0; 597 | defaultConfigurationName = Release; 598 | }; 599 | /* End XCConfigurationList section */ 600 | }; 601 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 602 | } 603 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/UICountingLabel.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_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-UICountingLabel_Example/Pods-UICountingLabel_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## UICountingLabel 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2013 Tim Gostony 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in 18 | all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | THE SOFTWARE. 27 | Generated by CocoaPods - https://cocoapods.org 28 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_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 | The MIT License (MIT) 18 | 19 | Copyright (c) 2013 Tim Gostony 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in 29 | all copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 37 | THE SOFTWARE. 38 | License 39 | MIT 40 | Title 41 | UICountingLabel 42 | Type 43 | PSGroupSpecifier 44 | 45 | 46 | FooterText 47 | Generated by CocoaPods - https://cocoapods.org 48 | Title 49 | 50 | Type 51 | PSGroupSpecifier 52 | 53 | 54 | StringsTable 55 | Acknowledgements 56 | Title 57 | Acknowledgements 58 | 59 | 60 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_UICountingLabel_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_UICountingLabel_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_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}/UICountingLabel/UICountingLabel.framework" 165 | fi 166 | if [[ "$CONFIGURATION" == "Release" ]]; then 167 | install_framework "${BUILT_PRODUCTS_DIR}/UICountingLabel/UICountingLabel.framework" 168 | fi 169 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 170 | wait 171 | fi 172 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_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_UICountingLabel_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_UICountingLabel_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/UICountingLabel" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/UICountingLabel/UICountingLabel.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "UICountingLabel" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_UICountingLabel_Example { 2 | umbrella header "Pods-UICountingLabel_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/UICountingLabel" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/UICountingLabel/UICountingLabel.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "UICountingLabel" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UICountingLabel/UICountingLabel-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.4.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UICountingLabel/UICountingLabel-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_UICountingLabel : NSObject 3 | @end 4 | @implementation PodsDummy_UICountingLabel 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UICountingLabel/UICountingLabel-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/UICountingLabel/UICountingLabel-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 | #import "UICountingLabel.h" 14 | 15 | FOUNDATION_EXPORT double UICountingLabelVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char UICountingLabelVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UICountingLabel/UICountingLabel.modulemap: -------------------------------------------------------------------------------- 1 | framework module UICountingLabel { 2 | umbrella header "UICountingLabel-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UICountingLabel/UICountingLabel.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UICountingLabel 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Example/UICountingLabel.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 11 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; 12 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 13 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; }; 14 | 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; }; 15 | 6003F59E195388D20070C39A /* CTPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* CTPAppDelegate.m */; }; 16 | 6003F5A7195388D20070C39A /* CTPViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* CTPViewController.m */; }; 17 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; }; 18 | 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; }; 19 | A3D24D8EC4791AD88A86C40F /* Pods_UICountingLabel_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4669643EF156B007C4F1660A /* Pods_UICountingLabel_Example.framework */; }; 20 | F47BA6FF237C98C600CB6F4E /* CTPViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F47BA6FD237C98C600CB6F4E /* CTPViewController.xib */; }; 21 | F47BA702237C99C400CB6F4E /* CountingTestProject-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F47BA700237C99C300CB6F4E /* CountingTestProject-Info.plist */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXFileReference section */ 25 | 3D57F729AE06A3972A495748 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 26 | 4669643EF156B007C4F1660A /* Pods_UICountingLabel_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_UICountingLabel_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | 6003F58A195388D20070C39A /* CountingTestProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CountingTestProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 29 | 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 30 | 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 31 | 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 32 | 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 33 | 6003F59C195388D20070C39A /* CTPAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CTPAppDelegate.h; sourceTree = ""; }; 34 | 6003F59D195388D20070C39A /* CTPAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CTPAppDelegate.m; sourceTree = ""; }; 35 | 6003F5A5195388D20070C39A /* CTPViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CTPViewController.h; sourceTree = ""; }; 36 | 6003F5A6195388D20070C39A /* CTPViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CTPViewController.m; sourceTree = ""; }; 37 | 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 38 | 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 39 | 71719F9E1E33DC2100824A3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 40 | 96485710CFAC68A8EA465017 /* UICountingLabel.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = UICountingLabel.podspec; path = ../UICountingLabel.podspec; sourceTree = ""; }; 41 | A63FF0119F73B16C9CAEC795 /* Pods-UICountingLabel_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UICountingLabel_Example.debug.xcconfig"; path = "Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example.debug.xcconfig"; sourceTree = ""; }; 42 | AE30364559A85CA59497AF57 /* Pods-UICountingLabel_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UICountingLabel_Example.release.xcconfig"; path = "Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example.release.xcconfig"; sourceTree = ""; }; 43 | B4B65EA1164C4FB932A87DDE /* Pods-UICountingLabel_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UICountingLabel_Tests.debug.xcconfig"; path = "Target Support Files/Pods-UICountingLabel_Tests/Pods-UICountingLabel_Tests.debug.xcconfig"; sourceTree = ""; }; 44 | D02CBD8458F2AE25785553D2 /* Pods-UICountingLabel_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UICountingLabel_Tests.release.xcconfig"; path = "Target Support Files/Pods-UICountingLabel_Tests/Pods-UICountingLabel_Tests.release.xcconfig"; sourceTree = ""; }; 45 | D0EDFFDB6BEBDDFE62915151 /* Pods_UICountingLabel_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_UICountingLabel_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | E9CD6AE9AC8A8EAAAB911A0F /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 47 | F47BA700237C99C300CB6F4E /* CountingTestProject-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "CountingTestProject-Info.plist"; sourceTree = ""; }; 48 | F47BA701237C99C300CB6F4E /* CountingTestProject-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CountingTestProject-Prefix.pch"; sourceTree = ""; }; 49 | F47BA703237C9B3E00CB6F4E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CTPViewController.xib; sourceTree = ""; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | 6003F587195388D20070C39A /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, 58 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, 59 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, 60 | A3D24D8EC4791AD88A86C40F /* Pods_UICountingLabel_Example.framework in Frameworks */, 61 | ); 62 | runOnlyForDeploymentPostprocessing = 0; 63 | }; 64 | /* End PBXFrameworksBuildPhase section */ 65 | 66 | /* Begin PBXGroup section */ 67 | 51501E755F402A67F2104816 /* Pods */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | A63FF0119F73B16C9CAEC795 /* Pods-UICountingLabel_Example.debug.xcconfig */, 71 | AE30364559A85CA59497AF57 /* Pods-UICountingLabel_Example.release.xcconfig */, 72 | B4B65EA1164C4FB932A87DDE /* Pods-UICountingLabel_Tests.debug.xcconfig */, 73 | D02CBD8458F2AE25785553D2 /* Pods-UICountingLabel_Tests.release.xcconfig */, 74 | ); 75 | path = Pods; 76 | sourceTree = ""; 77 | }; 78 | 6003F581195388D10070C39A = { 79 | isa = PBXGroup; 80 | children = ( 81 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, 82 | 6003F593195388D20070C39A /* CountingTestProject */, 83 | 6003F58C195388D20070C39A /* Frameworks */, 84 | 6003F58B195388D20070C39A /* Products */, 85 | 51501E755F402A67F2104816 /* Pods */, 86 | ); 87 | sourceTree = ""; 88 | }; 89 | 6003F58B195388D20070C39A /* Products */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | 6003F58A195388D20070C39A /* CountingTestProject.app */, 93 | ); 94 | name = Products; 95 | sourceTree = ""; 96 | }; 97 | 6003F58C195388D20070C39A /* Frameworks */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | 6003F58D195388D20070C39A /* Foundation.framework */, 101 | 6003F58F195388D20070C39A /* CoreGraphics.framework */, 102 | 6003F591195388D20070C39A /* UIKit.framework */, 103 | 6003F5AF195388D20070C39A /* XCTest.framework */, 104 | 4669643EF156B007C4F1660A /* Pods_UICountingLabel_Example.framework */, 105 | D0EDFFDB6BEBDDFE62915151 /* Pods_UICountingLabel_Tests.framework */, 106 | ); 107 | name = Frameworks; 108 | sourceTree = ""; 109 | }; 110 | 6003F593195388D20070C39A /* CountingTestProject */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 6003F59C195388D20070C39A /* CTPAppDelegate.h */, 114 | 6003F59D195388D20070C39A /* CTPAppDelegate.m */, 115 | F47BA6FD237C98C600CB6F4E /* CTPViewController.xib */, 116 | 6003F5A5195388D20070C39A /* CTPViewController.h */, 117 | 6003F5A6195388D20070C39A /* CTPViewController.m */, 118 | 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */, 119 | 6003F5A8195388D20070C39A /* Images.xcassets */, 120 | 6003F594195388D20070C39A /* Supporting Files */, 121 | ); 122 | name = CountingTestProject; 123 | path = UICountingLabel; 124 | sourceTree = ""; 125 | }; 126 | 6003F594195388D20070C39A /* Supporting Files */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | F47BA700237C99C300CB6F4E /* CountingTestProject-Info.plist */, 130 | F47BA701237C99C300CB6F4E /* CountingTestProject-Prefix.pch */, 131 | 6003F596195388D20070C39A /* InfoPlist.strings */, 132 | 6003F599195388D20070C39A /* main.m */, 133 | ); 134 | name = "Supporting Files"; 135 | sourceTree = ""; 136 | }; 137 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 96485710CFAC68A8EA465017 /* UICountingLabel.podspec */, 141 | E9CD6AE9AC8A8EAAAB911A0F /* README.md */, 142 | 3D57F729AE06A3972A495748 /* LICENSE */, 143 | ); 144 | name = "Podspec Metadata"; 145 | sourceTree = ""; 146 | }; 147 | /* End PBXGroup section */ 148 | 149 | /* Begin PBXNativeTarget section */ 150 | 6003F589195388D20070C39A /* CountingTestProject */ = { 151 | isa = PBXNativeTarget; 152 | buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "CountingTestProject" */; 153 | buildPhases = ( 154 | B8C799C7FD490A6C559F0E16 /* [CP] Check Pods Manifest.lock */, 155 | 6003F586195388D20070C39A /* Sources */, 156 | 6003F587195388D20070C39A /* Frameworks */, 157 | 6003F588195388D20070C39A /* Resources */, 158 | FB13FC33CFB97F6F7D6E4BA4 /* [CP] Embed Pods Frameworks */, 159 | ); 160 | buildRules = ( 161 | ); 162 | dependencies = ( 163 | ); 164 | name = CountingTestProject; 165 | productName = UICountingLabel; 166 | productReference = 6003F58A195388D20070C39A /* CountingTestProject.app */; 167 | productType = "com.apple.product-type.application"; 168 | }; 169 | /* End PBXNativeTarget section */ 170 | 171 | /* Begin PBXProject section */ 172 | 6003F582195388D10070C39A /* Project object */ = { 173 | isa = PBXProject; 174 | attributes = { 175 | CLASSPREFIX = CTP; 176 | LastUpgradeCheck = 0720; 177 | ORGANIZATIONNAME = "Tim Gostony"; 178 | }; 179 | buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "UICountingLabel" */; 180 | compatibilityVersion = "Xcode 3.2"; 181 | developmentRegion = English; 182 | hasScannedForEncodings = 0; 183 | knownRegions = ( 184 | English, 185 | en, 186 | Base, 187 | ); 188 | mainGroup = 6003F581195388D10070C39A; 189 | productRefGroup = 6003F58B195388D20070C39A /* Products */; 190 | projectDirPath = ""; 191 | projectRoot = ""; 192 | targets = ( 193 | 6003F589195388D20070C39A /* CountingTestProject */, 194 | ); 195 | }; 196 | /* End PBXProject section */ 197 | 198 | /* Begin PBXResourcesBuildPhase section */ 199 | 6003F588195388D20070C39A /* Resources */ = { 200 | isa = PBXResourcesBuildPhase; 201 | buildActionMask = 2147483647; 202 | files = ( 203 | F47BA6FF237C98C600CB6F4E /* CTPViewController.xib in Resources */, 204 | F47BA702237C99C400CB6F4E /* CountingTestProject-Info.plist in Resources */, 205 | 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */, 206 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, 207 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, 208 | ); 209 | runOnlyForDeploymentPostprocessing = 0; 210 | }; 211 | /* End PBXResourcesBuildPhase section */ 212 | 213 | /* Begin PBXShellScriptBuildPhase section */ 214 | B8C799C7FD490A6C559F0E16 /* [CP] Check Pods Manifest.lock */ = { 215 | isa = PBXShellScriptBuildPhase; 216 | buildActionMask = 2147483647; 217 | files = ( 218 | ); 219 | inputFileListPaths = ( 220 | ); 221 | inputPaths = ( 222 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 223 | "${PODS_ROOT}/Manifest.lock", 224 | ); 225 | name = "[CP] Check Pods Manifest.lock"; 226 | outputFileListPaths = ( 227 | ); 228 | outputPaths = ( 229 | "$(DERIVED_FILE_DIR)/Pods-UICountingLabel_Example-checkManifestLockResult.txt", 230 | ); 231 | runOnlyForDeploymentPostprocessing = 0; 232 | shellPath = /bin/sh; 233 | 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"; 234 | showEnvVarsInLog = 0; 235 | }; 236 | FB13FC33CFB97F6F7D6E4BA4 /* [CP] Embed Pods Frameworks */ = { 237 | isa = PBXShellScriptBuildPhase; 238 | buildActionMask = 2147483647; 239 | files = ( 240 | ); 241 | inputPaths = ( 242 | "${PODS_ROOT}/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example-frameworks.sh", 243 | "${BUILT_PRODUCTS_DIR}/UICountingLabel/UICountingLabel.framework", 244 | ); 245 | name = "[CP] Embed Pods Frameworks"; 246 | outputPaths = ( 247 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UICountingLabel.framework", 248 | ); 249 | runOnlyForDeploymentPostprocessing = 0; 250 | shellPath = /bin/sh; 251 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-UICountingLabel_Example/Pods-UICountingLabel_Example-frameworks.sh\"\n"; 252 | showEnvVarsInLog = 0; 253 | }; 254 | /* End PBXShellScriptBuildPhase section */ 255 | 256 | /* Begin PBXSourcesBuildPhase section */ 257 | 6003F586195388D20070C39A /* Sources */ = { 258 | isa = PBXSourcesBuildPhase; 259 | buildActionMask = 2147483647; 260 | files = ( 261 | 6003F59E195388D20070C39A /* CTPAppDelegate.m in Sources */, 262 | 6003F5A7195388D20070C39A /* CTPViewController.m in Sources */, 263 | 6003F59A195388D20070C39A /* main.m in Sources */, 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | }; 267 | /* End PBXSourcesBuildPhase section */ 268 | 269 | /* Begin PBXVariantGroup section */ 270 | 6003F596195388D20070C39A /* InfoPlist.strings */ = { 271 | isa = PBXVariantGroup; 272 | children = ( 273 | 6003F597195388D20070C39A /* en */, 274 | ); 275 | name = InfoPlist.strings; 276 | sourceTree = ""; 277 | }; 278 | 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */ = { 279 | isa = PBXVariantGroup; 280 | children = ( 281 | 71719F9E1E33DC2100824A3D /* Base */, 282 | ); 283 | name = LaunchScreen.storyboard; 284 | sourceTree = ""; 285 | }; 286 | F47BA6FD237C98C600CB6F4E /* CTPViewController.xib */ = { 287 | isa = PBXVariantGroup; 288 | children = ( 289 | F47BA703237C9B3E00CB6F4E /* Base */, 290 | ); 291 | name = CTPViewController.xib; 292 | sourceTree = ""; 293 | }; 294 | /* End PBXVariantGroup section */ 295 | 296 | /* Begin XCBuildConfiguration section */ 297 | 6003F5BD195388D20070C39A /* Debug */ = { 298 | isa = XCBuildConfiguration; 299 | buildSettings = { 300 | ALWAYS_SEARCH_USER_PATHS = NO; 301 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 302 | CLANG_CXX_LIBRARY = "libc++"; 303 | CLANG_ENABLE_MODULES = YES; 304 | CLANG_ENABLE_OBJC_ARC = YES; 305 | CLANG_WARN_BOOL_CONVERSION = YES; 306 | CLANG_WARN_CONSTANT_CONVERSION = YES; 307 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 308 | CLANG_WARN_EMPTY_BODY = YES; 309 | CLANG_WARN_ENUM_CONVERSION = YES; 310 | CLANG_WARN_INT_CONVERSION = YES; 311 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 312 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 313 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 314 | COPY_PHASE_STRIP = NO; 315 | ENABLE_TESTABILITY = YES; 316 | GCC_C_LANGUAGE_STANDARD = gnu99; 317 | GCC_DYNAMIC_NO_PIC = NO; 318 | GCC_OPTIMIZATION_LEVEL = 0; 319 | GCC_PREPROCESSOR_DEFINITIONS = ( 320 | "DEBUG=1", 321 | "$(inherited)", 322 | ); 323 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 324 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 325 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 326 | GCC_WARN_UNDECLARED_SELECTOR = YES; 327 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 328 | GCC_WARN_UNUSED_FUNCTION = YES; 329 | GCC_WARN_UNUSED_VARIABLE = YES; 330 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 331 | ONLY_ACTIVE_ARCH = YES; 332 | SDKROOT = iphoneos; 333 | TARGETED_DEVICE_FAMILY = "1,2"; 334 | }; 335 | name = Debug; 336 | }; 337 | 6003F5BE195388D20070C39A /* Release */ = { 338 | isa = XCBuildConfiguration; 339 | buildSettings = { 340 | ALWAYS_SEARCH_USER_PATHS = NO; 341 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 342 | CLANG_CXX_LIBRARY = "libc++"; 343 | CLANG_ENABLE_MODULES = YES; 344 | CLANG_ENABLE_OBJC_ARC = YES; 345 | CLANG_WARN_BOOL_CONVERSION = YES; 346 | CLANG_WARN_CONSTANT_CONVERSION = YES; 347 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 348 | CLANG_WARN_EMPTY_BODY = YES; 349 | CLANG_WARN_ENUM_CONVERSION = YES; 350 | CLANG_WARN_INT_CONVERSION = YES; 351 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 352 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 353 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 354 | COPY_PHASE_STRIP = YES; 355 | ENABLE_NS_ASSERTIONS = NO; 356 | GCC_C_LANGUAGE_STANDARD = gnu99; 357 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 358 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 359 | GCC_WARN_UNDECLARED_SELECTOR = YES; 360 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 361 | GCC_WARN_UNUSED_FUNCTION = YES; 362 | GCC_WARN_UNUSED_VARIABLE = YES; 363 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 364 | SDKROOT = iphoneos; 365 | TARGETED_DEVICE_FAMILY = "1,2"; 366 | VALIDATE_PRODUCT = YES; 367 | }; 368 | name = Release; 369 | }; 370 | 6003F5C0195388D20070C39A /* Debug */ = { 371 | isa = XCBuildConfiguration; 372 | baseConfigurationReference = A63FF0119F73B16C9CAEC795 /* Pods-UICountingLabel_Example.debug.xcconfig */; 373 | buildSettings = { 374 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 375 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 376 | GCC_PREFIX_HEADER = "UICountingLabel/CountingTestProject-Prefix.pch"; 377 | INFOPLIST_FILE = "UICountingLabel/CountingTestProject-Info.plist"; 378 | MODULE_NAME = ExampleApp; 379 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 380 | PRODUCT_NAME = "$(TARGET_NAME)"; 381 | SWIFT_VERSION = 4.0; 382 | WRAPPER_EXTENSION = app; 383 | }; 384 | name = Debug; 385 | }; 386 | 6003F5C1195388D20070C39A /* Release */ = { 387 | isa = XCBuildConfiguration; 388 | baseConfigurationReference = AE30364559A85CA59497AF57 /* Pods-UICountingLabel_Example.release.xcconfig */; 389 | buildSettings = { 390 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 391 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 392 | GCC_PREFIX_HEADER = "UICountingLabel/CountingTestProject-Prefix.pch"; 393 | INFOPLIST_FILE = "UICountingLabel/CountingTestProject-Info.plist"; 394 | MODULE_NAME = ExampleApp; 395 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 396 | PRODUCT_NAME = "$(TARGET_NAME)"; 397 | SWIFT_VERSION = 4.0; 398 | WRAPPER_EXTENSION = app; 399 | }; 400 | name = Release; 401 | }; 402 | /* End XCBuildConfiguration section */ 403 | 404 | /* Begin XCConfigurationList section */ 405 | 6003F585195388D10070C39A /* Build configuration list for PBXProject "UICountingLabel" */ = { 406 | isa = XCConfigurationList; 407 | buildConfigurations = ( 408 | 6003F5BD195388D20070C39A /* Debug */, 409 | 6003F5BE195388D20070C39A /* Release */, 410 | ); 411 | defaultConfigurationIsVisible = 0; 412 | defaultConfigurationName = Release; 413 | }; 414 | 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "CountingTestProject" */ = { 415 | isa = XCConfigurationList; 416 | buildConfigurations = ( 417 | 6003F5C0195388D20070C39A /* Debug */, 418 | 6003F5C1195388D20070C39A /* Release */, 419 | ); 420 | defaultConfigurationIsVisible = 0; 421 | defaultConfigurationName = Release; 422 | }; 423 | /* End XCConfigurationList section */ 424 | }; 425 | rootObject = 6003F582195388D10070C39A /* Project object */; 426 | } 427 | -------------------------------------------------------------------------------- /Example/UICountingLabel.xcodeproj/xcshareddata/xcschemes/CountingTestProject.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 42 | 48 | 49 | 50 | 51 | 52 | 62 | 64 | 70 | 71 | 72 | 73 | 79 | 81 | 87 | 88 | 89 | 90 | 92 | 93 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /Example/UICountingLabel/Base.lproj/CTPViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Example/UICountingLabel/Base.lproj/LaunchScreen.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 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/UICountingLabel/CTPAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CTPAppDelegate.h 3 | // CountingTestProject 4 | // 5 | // Created by Tim Gostony on 2/8/13. 6 | // Copyright (c) 2013 Tim Gostony. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class CTPViewController; 12 | 13 | @interface CTPAppDelegate : UIResponder 14 | 15 | @property (strong, nonatomic) UIWindow *window; 16 | 17 | @property (strong, nonatomic) CTPViewController *viewController; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/UICountingLabel/CTPAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CTPAppDelegate.m 3 | // CountingTestProject 4 | // 5 | // Created by Tim Gostony on 2/8/13. 6 | // Copyright (c) 2013 Tim Gostony. All rights reserved. 7 | // 8 | 9 | #import "CTPAppDelegate.h" 10 | 11 | #import "CTPViewController.h" 12 | 13 | @implementation CTPAppDelegate 14 | 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 19 | // Override point for customization after application launch. 20 | self.viewController = [[CTPViewController alloc] initWithNibName:@"CTPViewController" bundle:nil]; 21 | self.window.rootViewController = self.viewController; 22 | [self.window makeKeyAndVisible]; 23 | return YES; 24 | } 25 | 26 | - (void)applicationWillResignActive:(UIApplication *)application 27 | { 28 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 29 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 30 | } 31 | 32 | - (void)applicationDidEnterBackground:(UIApplication *)application 33 | { 34 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 35 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 36 | } 37 | 38 | - (void)applicationWillEnterForeground:(UIApplication *)application 39 | { 40 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 41 | } 42 | 43 | - (void)applicationDidBecomeActive:(UIApplication *)application 44 | { 45 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 46 | } 47 | 48 | - (void)applicationWillTerminate:(UIApplication *)application 49 | { 50 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /Example/UICountingLabel/CTPViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CTPViewController.h 3 | // CountingTestProject 4 | // 5 | // Created by Tim Gostony on 2/8/13. 6 | // Copyright (c) 2013 Tim Gostony. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | @interface CTPViewController : UIViewController 14 | @property (strong, nonatomic) IBOutlet UICountingLabel *label; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/UICountingLabel/CTPViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CTPViewController.m 3 | // CountingTestProject 4 | // 5 | // Created by Tim Gostony on 2/8/13. 6 | // Copyright (c) 2013 Tim Gostony. All rights reserved. 7 | // 8 | 9 | #import "CTPViewController.h" 10 | 11 | 12 | @interface CTPViewController () 13 | 14 | @end 15 | 16 | @implementation CTPViewController 17 | 18 | - (void)viewDidLoad 19 | { 20 | [super viewDidLoad]; 21 | // Do any additional setup after loading the view, typically from a nib. 22 | 23 | // make one that counts up 24 | UICountingLabel* myLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(10, 30, 200, 40)]; 25 | myLabel.method = UILabelCountingMethodLinear; 26 | myLabel.format = @"%d"; 27 | [self.view addSubview:myLabel]; 28 | [myLabel countFrom:1 to:10 withDuration:3.0]; 29 | 30 | // make one that counts up from 5% to 10%, using ease in out (the default) 31 | UICountingLabel* countPercentageLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(10, 70, 200, 40)]; 32 | [self.view addSubview:countPercentageLabel]; 33 | countPercentageLabel.format = @"%.1f%%"; 34 | [countPercentageLabel countFrom:5 to:10]; 35 | 36 | 37 | 38 | // count up using a string that uses a number formatter 39 | UICountingLabel* scoreLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(10, 110, 200, 40)]; 40 | [self.view addSubview:scoreLabel]; 41 | NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 42 | formatter.numberStyle = kCFNumberFormatterDecimalStyle; 43 | scoreLabel.formatBlock = ^NSString* (CGFloat value) 44 | { 45 | NSString* formatted = [formatter stringFromNumber:@((int)value)]; 46 | return [NSString stringWithFormat:@"Score: %@",formatted]; 47 | }; 48 | scoreLabel.method = UILabelCountingMethodEaseOut; 49 | [scoreLabel countFrom:0 to:10000 withDuration:2.5]; 50 | 51 | // count up with attributed string 52 | NSInteger toValue = 100; 53 | UICountingLabel* attributedLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(10, 150, 200, 40)]; 54 | [self.view addSubview:attributedLabel]; 55 | attributedLabel.attributedFormatBlock = ^NSAttributedString* (CGFloat value) 56 | { 57 | NSDictionary* normal = @{ NSFontAttributeName: [UIFont fontWithName: @"HelveticaNeue-UltraLight" size: 20] }; 58 | NSDictionary* highlight = @{ NSFontAttributeName: [UIFont fontWithName: @"HelveticaNeue" size: 20] }; 59 | 60 | NSString* prefix = [NSString stringWithFormat:@"%d", (int)value]; 61 | NSString* postfix = [NSString stringWithFormat:@"/%d", (int)toValue]; 62 | 63 | NSMutableAttributedString* prefixAttr = [[NSMutableAttributedString alloc] initWithString: prefix 64 | attributes: highlight]; 65 | NSAttributedString* postfixAttr = [[NSAttributedString alloc] initWithString: postfix 66 | attributes: normal]; 67 | [prefixAttr appendAttributedString: postfixAttr]; 68 | 69 | return prefixAttr; 70 | }; 71 | [attributedLabel countFrom:0 to:toValue withDuration:2.5]; 72 | 73 | self.label.method = UILabelCountingMethodEaseInOut; 74 | self.label.format = @"%d%%"; 75 | __weak CTPViewController* blockSelf = self; 76 | self.label.completionBlock = ^{ 77 | blockSelf.label.textColor = [UIColor colorWithRed:0 green:0.5 blue:0 alpha:1]; 78 | }; 79 | [self.label countFrom:0 to:100]; 80 | 81 | 82 | 83 | } 84 | 85 | - (void)didReceiveMemoryWarning 86 | { 87 | [super didReceiveMemoryWarning]; 88 | // Dispose of any resources that can be recreated. 89 | } 90 | 91 | @end 92 | -------------------------------------------------------------------------------- /Example/UICountingLabel/CountingTestProject-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Example/UICountingLabel/CountingTestProject-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'CountingTestProject' target in the 'CountingTestProject' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_4_0 8 | #warning "This project uses features only available in iOS SDK 4.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Example/UICountingLabel/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" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /Example/UICountingLabel/en.lproj/CTPViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Example/UICountingLabel/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/UICountingLabel/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CountingTestProject 4 | // 5 | // Created by Tim Gostony on 2/8/13. 6 | // Copyright (c) 2013 Tim Gostony. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "CTPAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([CTPAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Tim Gostony 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UICountingLabel #### 2 | 3 | Adds animated counting support to `UILabel`. 4 | 5 | ![alt text](https://github.com/dataxpress/UICountingLabel/blob/master/demo.gif "demo") 6 | 7 | ## CocoaPods ###### 8 | UICountingLabel is available on CocoaPods. 9 | Add this to your Podfile: 10 | 11 | `pod 'UICountingLabel'` 12 | 13 | And then run: 14 | 15 | `$ pod install` 16 | 17 | ## Setup ###### 18 | Simply initialize a `UICountingLabel` the same way you set up a regular `UILabel`: 19 | 20 | UICountingLabel* myLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(10, 10, 100, 40)]; 21 | [self.view addSubview:myLabel]; 22 | 23 | You can also add it to your XIB file, just make sure you set the class type to `UICountingLabel` instead of `UILabel` and be sure to `#import "UICountingLabel.h"` in the header file. 24 | 25 | ## Use ##### 26 | 27 | Set the format of your label. This will be filled with a single int or float (depending on how you format it) when it updates: 28 | 29 | myLabel.format = @"%d"; 30 | 31 | Alternatively, you can provide a `UICountingLabelFormatBlock`, which permits greater control over how the text is formatted: 32 | 33 | myLabel.formatBlock = ^NSString* (CGFloat value) { 34 | NSInteger years = value / 12; 35 | NSInteger months = (NSInteger)value % 12; 36 | if (years == 0) { 37 | return [NSString stringWithFormat: @"%ld months", (long)months]; 38 | } 39 | else { 40 | return [NSString stringWithFormat: @"%ld years, %ld months", (long)years, (long)months]; 41 | } 42 | }; 43 | 44 | There is also a `UICountingLabelAttributedFormatBlock` to use an attributed string. If the `formatBlock` is specified, it takes precedence over the `format`. 45 | 46 | Optionally, set the mode. The default is `UILabelCountingMethodEaseInOut`, which will start slow, speed up, and then slow down as it reaches the end. Other options are described below in the Methods section. 47 | 48 | myLabel.method = UILabelCountingMethodLinear; 49 | 50 | When you want the label to start counting, just call: 51 | 52 | [myLabel countFrom:50 to:100]; 53 | 54 | You can also specify the duration. The default is 2.0 seconds. 55 | 56 | [myLabel countFrom:50 to:100 withDuration:5.0f]; 57 | 58 | Additionally, there is `animationDuration` property which you can use to override the default animation duration. 59 | 60 | myLabel.animationDuration = 1.0; 61 | 62 | You can use common convinient methods for counting, such as: 63 | 64 | [myLabel countFromCurrentValueTo:100]; 65 | [myLabel countFromZeroTo:100]; 66 | 67 | Behind the scenes, these convinient methods use one base method, which has the following full signature: 68 | 69 | [myLabel countFrom:(float)startValue 70 | to:(float)endValue 71 | withDuration:(NSTimeInterval)duration]; 72 | 73 | You can get current value of your label using `-currentValue` method (works correctly in the process of animation too): 74 | 75 | CGFloat currentValue = [myLabel currentValue]; 76 | 77 | Optionally, you can specify a `completionBlock` to perform an acton when the label has finished counting: 78 | 79 | myLabel.completionBlock = ^{ 80 | NSLog(@"finished counting"); 81 | }; 82 | 83 | ## Formats ##### 84 | 85 | When you set the `format` property, the label will look for the presence of `%(.*)d` or `%(.*)i`, and if found, will cast the value to `int` before formatting the string. Otherwise, it will format it using a `float`. 86 | 87 | If you're using a `float` value, it's recommended to limit the number of digits with a format string, such as `@"%.1f"` for one decimal place. 88 | 89 | Because it uses the standard `stringWithFormat:` method, you can also include arbitrary text in your format, such as `@"Points: %i"`. 90 | 91 | ## Modes ##### 92 | There are currently four modes of counting. 93 | 94 | ### `UILabelCountingMethodLinear` ##### 95 | Counts linearly from the start to the end. 96 | 97 | ### `UILabelCountingMethodEaseIn` ##### 98 | Ease In starts out slow and speeds up counting as it gets to the end, stopping suddenly at the final value. 99 | 100 | ### `UILabelCountingMethodEaseOut` ##### 101 | Ease Out starts out fast and slows down as it gets to the destination value. 102 | 103 | ### `UILabelCountingMethodEaseInOut` ##### 104 | Ease In/Out starts out slow, speeds up towards the middle, and then slows down as it approaches the destination. It is a nice, smooth curve that looks great, and is the default method. 105 | 106 | ---- 107 | # 以下是中文教程 108 | ----- 109 | 为 `UILabel` 添加计数动画支持. 110 | 111 | ![alt text](https://github.com/dataxpress/UICountingLabel/blob/master/demo.gif "demo") 112 | 113 | ## CocoaPods ###### 114 | UICountingLabel 可以使用cocoaPods导入, 115 | 添加以下代码到你的Podfile文件: 116 | 117 | `pod 'UICountingLabel'` 118 | 119 | 然后运行以下命令: 120 | 121 | `$ pod install` 122 | 123 | ## 设置 ###### 124 | 初始化 `UICountingLabel` 的方式和普通的 `UILabel`是一样的: 125 | 126 | UICountingLabel* myLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(10, 10, 100, 40)]; 127 | [self.view addSubview:myLabel]; 128 | 129 | 你也可以用在 XIB 文件中, 前提是你在头文件中引入了 `UICountingLabel`的头文件并且使用 `UICountingLabel`替换掉了原生的`UILabel`. 130 | 131 | ## 使用方式 ##### 132 | 133 | 设置标签格式. 设置标签格式后,标签会在更新数值的时候以你设置的方式填充,默认是显示float类型的数值,也可以设置成显示int类型的数值,比如下面的代码: 134 | 135 | myLabel.format = @"%d"; 136 | 137 | 另外,你也可以使用 `UICountingLabelFormatBlock`, 这个可以对显示的文本格式进行更加高度的自定义: 138 | 139 | // 举例:把显示的月份数变成几年零几个月的样式 140 | myLabel.formatBlock = ^NSString* (CGFloat value) { 141 | NSInteger years = value / 12; 142 | NSInteger months = (NSInteger)value % 12; 143 | if (years == 0) { 144 | return [NSString stringWithFormat: @"%ld months", (long)months]; 145 | } 146 | else { 147 | return [NSString stringWithFormat: @"%ld years, %ld months", (long)years, (long)months]; 148 | } 149 | }; 150 | 151 | 除此之外还有一个 `UICountingLabelAttributedFormatBlock` 用于设置属性字符串的格式,用法和上面的block类似. 如果指定了以上两个 `formatBlock`中的任意一个 , 它将会覆盖掉 `format`属性,因为block的优先级更高. 152 | 153 | 可选项, 设置动画样式. 默认的动画样式是 `UILabelCountingMethodEaseInOut`, 这个样式是开始时速度比较慢,然后加速,将要结束时减速. 以下将介绍其他动画样式及用法. 154 | 155 | myLabel.method = UILabelCountingMethodLinear; // 线性变化 156 | 157 | 需要计数时只需要使用以下方法即可: 158 | 159 | [myLabel countFrom:50 to:100]; 160 | 161 | 可以指定动画的时长,默认时长是2.0秒. 162 | 163 | [myLabel countFrom:50 to:100 withDuration:5.0f]; 164 | 165 | 另外也可以使用 `animationDuration` 属性去设置动画时长. 166 | 167 | myLabel.animationDuration = 1.0; 168 | 169 | 可以使用便利方法计数,例如: 170 | 171 | [myLabel countFromCurrentValueTo:100]; 172 | [myLabel countFromZeroTo:100]; 173 | 174 | 本质上,这些便利方法都是基于一个总方法封装的, 以下就是这个方法完整的声明: 175 | 176 | [myLabel countFrom:(float)startValue 177 | to:(float)endValue 178 | withDuration:(NSTimeInterval)duration]; 179 | 180 | 可以使用 `-currentValue` 方法获得当前数据, (即使在动画过程中也可以正常获得): 181 | 182 | CGFloat currentValue = [myLabel currentValue]; 183 | 184 | 可以使用 `completionBlock` 获得动画结束的事件: 185 | 186 | myLabel.completionBlock = ^{ 187 | NSLog(@"finished counting"); 188 | }; 189 | 190 | ## 格式 ##### 191 | 192 | 当设置`format`属性后, 标签会检测是否有`%(.*)d`或者`%(.*)i`格式, 如果能找到, 就会将内容以`int`类型展示. 否则, 将会使用默认的`float`类型展示. 193 | 194 | 假如你需要以`float`类型展示, 最好设置小数点位数限制, 例如使用`@"%.1f"`来限制只显示一位小数. 195 | 196 | 因为使用了标准的`stringWithFormat:`方法, 可以按照自己的意愿自定义格式,例如:`@"Points: %i"`. 197 | 198 | ## 动画类型 ##### 199 | 当前有四种技术动画样式. 200 | 201 | ### `UILabelCountingMethodLinear` ##### 202 | 匀速计数动画. 203 | 204 | ### `UILabelCountingMethodEaseIn` ##### 205 | 开始比较缓慢,快结束时加速,结束时突然停止. 206 | 207 | ### `UILabelCountingMethodEaseOut` ##### 208 | 开始速度很快,快结束时变得缓慢. 209 | 210 | ### `UILabelCountingMethodEaseInOut` ##### 211 | 开始时比较缓慢,中间加速,快结束时减速.动画速度是一个平滑的曲线,是默认采用的动画样式。 212 | -------------------------------------------------------------------------------- /UICountingLabel.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "UICountingLabel" 3 | s.version = "1.4.1" 4 | s.summary = "Adds animated counting support to UILabel." 5 | s.homepage = "https://github.com/dataxpress/UICountingLabel" 6 | s.license = { :type => 'MIT', :file => 'LICENSE' } 7 | s.author = { "Tim Gostony" => "dataxpress@gmail.com" } 8 | s.source = { :git => "https://github.com/dataxpress/UICountingLabel.git", :tag => s.version.to_s } 9 | s.ios.deployment_target = '7.0' 10 | s.tvos.deployment_target = '9.0' 11 | s.source_files = 'UICountingLabel/Classes/**/*' 12 | s.requires_arc = true 13 | end 14 | -------------------------------------------------------------------------------- /UICountingLabel/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataxpress/UICountingLabel/872a7b69feb8f77a1eb71cda95ec17f70ea60c5d/UICountingLabel/Classes/.gitkeep -------------------------------------------------------------------------------- /UICountingLabel/Classes/UICountingLabel.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | typedef NS_ENUM(NSInteger, UILabelCountingMethod) { 5 | UILabelCountingMethodEaseInOut, 6 | UILabelCountingMethodEaseIn, 7 | UILabelCountingMethodEaseOut, 8 | UILabelCountingMethodLinear, 9 | UILabelCountingMethodEaseInBounce, 10 | UILabelCountingMethodEaseOutBounce 11 | }; 12 | 13 | typedef NSString* (^UICountingLabelFormatBlock)(CGFloat value); 14 | typedef NSAttributedString* (^UICountingLabelAttributedFormatBlock)(CGFloat value); 15 | 16 | @interface UICountingLabel : UILabel 17 | 18 | @property (nonatomic, strong) NSString *format; 19 | @property (nonatomic, assign) UILabelCountingMethod method; 20 | @property (nonatomic, assign) NSTimeInterval animationDuration; 21 | 22 | @property (nonatomic, copy) UICountingLabelFormatBlock formatBlock; 23 | @property (nonatomic, copy) UICountingLabelAttributedFormatBlock attributedFormatBlock; 24 | @property (nonatomic, copy) void (^completionBlock)(void); 25 | 26 | -(void)countFrom:(CGFloat)startValue to:(CGFloat)endValue; 27 | -(void)countFrom:(CGFloat)startValue to:(CGFloat)endValue withDuration:(NSTimeInterval)duration; 28 | 29 | -(void)countFromCurrentValueTo:(CGFloat)endValue; 30 | -(void)countFromCurrentValueTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration; 31 | 32 | -(void)countFromZeroTo:(CGFloat)endValue; 33 | -(void)countFromZeroTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration; 34 | 35 | - (CGFloat)currentValue; 36 | 37 | @end 38 | 39 | -------------------------------------------------------------------------------- /UICountingLabel/Classes/UICountingLabel.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "UICountingLabel.h" 4 | 5 | #if !__has_feature(objc_arc) 6 | #error UICountingLabel is ARC only. Either turn on ARC for the project or use -fobjc-arc flag 7 | #endif 8 | 9 | #pragma mark - UILabelCounter 10 | 11 | #ifndef kUILabelCounterRate 12 | #define kUILabelCounterRate 3.0 13 | #endif 14 | 15 | @protocol UILabelCounter 16 | 17 | -(CGFloat)update:(CGFloat)t; 18 | 19 | @end 20 | 21 | @interface UILabelCounterLinear : NSObject 22 | 23 | @end 24 | 25 | @interface UILabelCounterEaseIn : NSObject 26 | 27 | @end 28 | 29 | @interface UILabelCounterEaseOut : NSObject 30 | 31 | @end 32 | 33 | @interface UILabelCounterEaseInOut : NSObject 34 | 35 | @end 36 | 37 | @interface UILabelCounterEaseInBounce : NSObject 38 | 39 | @end 40 | 41 | @interface UILabelCounterEaseOutBounce : NSObject 42 | 43 | @end 44 | 45 | @implementation UILabelCounterLinear 46 | 47 | -(CGFloat)update:(CGFloat)t 48 | { 49 | return t; 50 | } 51 | 52 | @end 53 | 54 | @implementation UILabelCounterEaseIn 55 | 56 | -(CGFloat)update:(CGFloat)t 57 | { 58 | return powf(t, kUILabelCounterRate); 59 | } 60 | 61 | @end 62 | 63 | @implementation UILabelCounterEaseOut 64 | 65 | -(CGFloat)update:(CGFloat)t{ 66 | return 1.0-powf((1.0-t), kUILabelCounterRate); 67 | } 68 | 69 | @end 70 | 71 | @implementation UILabelCounterEaseInOut 72 | 73 | -(CGFloat) update: (CGFloat) t 74 | { 75 | t *= 2; 76 | if (t < 1) 77 | return 0.5f * powf (t, kUILabelCounterRate); 78 | else 79 | return 0.5f * (2.0f - powf(2.0 - t, kUILabelCounterRate)); 80 | } 81 | 82 | @end 83 | 84 | @implementation UILabelCounterEaseInBounce 85 | 86 | -(CGFloat) update: (CGFloat) t { 87 | 88 | if (t < 4.0 / 11.0) { 89 | return 1.0 - (powf(11.0 / 4.0, 2) * powf(t, 2)) - t; 90 | } 91 | 92 | if (t < 8.0 / 11.0) { 93 | return 1.0 - (3.0 / 4.0 + powf(11.0 / 4.0, 2) * powf(t - 6.0 / 11.0, 2)) - t; 94 | } 95 | 96 | if (t < 10.0 / 11.0) { 97 | return 1.0 - (15.0 /16.0 + powf(11.0 / 4.0, 2) * powf(t - 9.0 / 11.0, 2)) - t; 98 | } 99 | 100 | return 1.0 - (63.0 / 64.0 + powf(11.0 / 4.0, 2) * powf(t - 21.0 / 22.0, 2)) - t; 101 | 102 | } 103 | 104 | @end 105 | 106 | @implementation UILabelCounterEaseOutBounce 107 | 108 | -(CGFloat) update: (CGFloat) t { 109 | 110 | if (t < 4.0 / 11.0) { 111 | return powf(11.0 / 4.0, 2) * powf(t, 2); 112 | } 113 | 114 | if (t < 8.0 / 11.0) { 115 | return 3.0 / 4.0 + powf(11.0 / 4.0, 2) * powf(t - 6.0 / 11.0, 2); 116 | } 117 | 118 | if (t < 10.0 / 11.0) { 119 | return 15.0 /16.0 + powf(11.0 / 4.0, 2) * powf(t - 9.0 / 11.0, 2); 120 | } 121 | 122 | return 63.0 / 64.0 + powf(11.0 / 4.0, 2) * powf(t - 21.0 / 22.0, 2); 123 | 124 | } 125 | 126 | @end 127 | 128 | #pragma mark - UICountingLabel 129 | 130 | @interface UICountingLabel () 131 | 132 | @property CGFloat startingValue; 133 | @property CGFloat destinationValue; 134 | @property NSTimeInterval progress; 135 | @property NSTimeInterval lastUpdate; 136 | @property NSTimeInterval totalTime; 137 | @property CGFloat easingRate; 138 | 139 | @property (nonatomic, strong) CADisplayLink *timer; 140 | @property (nonatomic, strong) id counter; 141 | 142 | @end 143 | 144 | @implementation UICountingLabel 145 | 146 | -(void)countFrom:(CGFloat)value to:(CGFloat)endValue { 147 | 148 | if (self.animationDuration == 0.0f) { 149 | self.animationDuration = 2.0f; 150 | } 151 | 152 | [self countFrom:value to:endValue withDuration:self.animationDuration]; 153 | } 154 | 155 | -(void)countFrom:(CGFloat)startValue to:(CGFloat)endValue withDuration:(NSTimeInterval)duration { 156 | 157 | self.startingValue = startValue; 158 | self.destinationValue = endValue; 159 | 160 | // remove any (possible) old timers 161 | [self.timer invalidate]; 162 | self.timer = nil; 163 | 164 | if(self.format == nil) { 165 | self.format = @"%f"; 166 | } 167 | if (duration == 0.0) { 168 | // No animation 169 | [self setTextValue:endValue]; 170 | [self runCompletionBlock]; 171 | return; 172 | } 173 | 174 | self.easingRate = 3.0f; 175 | self.progress = 0; 176 | self.totalTime = duration; 177 | self.lastUpdate = CACurrentMediaTime(); 178 | 179 | switch(self.method) 180 | { 181 | case UILabelCountingMethodLinear: 182 | self.counter = [[UILabelCounterLinear alloc] init]; 183 | break; 184 | case UILabelCountingMethodEaseIn: 185 | self.counter = [[UILabelCounterEaseIn alloc] init]; 186 | break; 187 | case UILabelCountingMethodEaseOut: 188 | self.counter = [[UILabelCounterEaseOut alloc] init]; 189 | break; 190 | case UILabelCountingMethodEaseInOut: 191 | self.counter = [[UILabelCounterEaseInOut alloc] init]; 192 | break; 193 | case UILabelCountingMethodEaseOutBounce: 194 | self.counter = [[UILabelCounterEaseOutBounce alloc] init]; 195 | break; 196 | case UILabelCountingMethodEaseInBounce: 197 | self.counter = [[UILabelCounterEaseInBounce alloc] init]; 198 | break; 199 | } 200 | 201 | CADisplayLink *timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateValue:)]; 202 | timer.frameInterval = 2; 203 | [timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; 204 | [timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode]; 205 | self.timer = timer; 206 | } 207 | 208 | - (void)countFromCurrentValueTo:(CGFloat)endValue { 209 | [self countFrom:[self currentValue] to:endValue]; 210 | } 211 | 212 | - (void)countFromCurrentValueTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration { 213 | [self countFrom:[self currentValue] to:endValue withDuration:duration]; 214 | } 215 | 216 | - (void)countFromZeroTo:(CGFloat)endValue { 217 | [self countFrom:0.0f to:endValue]; 218 | } 219 | 220 | - (void)countFromZeroTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration { 221 | [self countFrom:0.0f to:endValue withDuration:duration]; 222 | } 223 | 224 | - (void)updateValue:(NSTimer *)timer { 225 | 226 | // update progress 227 | NSTimeInterval now = CACurrentMediaTime(); 228 | self.progress += now - self.lastUpdate; 229 | self.lastUpdate = now; 230 | 231 | if (self.progress >= self.totalTime) { 232 | [self.timer invalidate]; 233 | self.timer = nil; 234 | self.progress = self.totalTime; 235 | } 236 | 237 | [self setTextValue:[self currentValue]]; 238 | 239 | if (self.progress == self.totalTime) { 240 | [self runCompletionBlock]; 241 | } 242 | } 243 | 244 | - (void)setTextValue:(CGFloat)value 245 | { 246 | if (self.attributedFormatBlock != nil) { 247 | self.attributedText = self.attributedFormatBlock(value); 248 | } 249 | else if(self.formatBlock != nil) 250 | { 251 | self.text = self.formatBlock(value); 252 | } 253 | else 254 | { 255 | // check if counting with ints - cast to int 256 | // regex based on IEEE printf specification: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html 257 | if([self.format rangeOfString:@"%[^fega]*[diouxc]" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch].location != NSNotFound) 258 | { 259 | self.text = [NSString stringWithFormat:self.format,(int)value]; 260 | } 261 | else 262 | { 263 | self.text = [NSString stringWithFormat:self.format,value]; 264 | } 265 | } 266 | } 267 | 268 | - (void)setFormat:(NSString *)format { 269 | _format = format; 270 | // update label with new format 271 | [self setTextValue:self.currentValue]; 272 | } 273 | 274 | - (void)runCompletionBlock { 275 | 276 | void (^block)(void) = self.completionBlock; 277 | if (block) { 278 | self.completionBlock = nil; 279 | block(); 280 | } 281 | } 282 | 283 | - (CGFloat)currentValue { 284 | 285 | if (self.progress >= self.totalTime) { 286 | return self.destinationValue; 287 | } 288 | 289 | CGFloat percent = self.progress / self.totalTime; 290 | CGFloat updateVal = [self.counter update:percent]; 291 | return self.startingValue + (updateVal * (self.destinationValue - self.startingValue)); 292 | } 293 | 294 | @end 295 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataxpress/UICountingLabel/872a7b69feb8f77a1eb71cda95ec17f70ea60c5d/demo.gif --------------------------------------------------------------------------------