├── .gitignore ├── .travis.yml ├── Example ├── LazyImage.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── LazyImage-Example.xcscheme ├── LazyImage.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── LazyImageExampleApp │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ ├── Info.plist │ └── ViewController.swift ├── LazyImageExampleAppTests │ ├── Info.plist │ └── LazyImageExampleAppTests.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── LazyImage.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Target Support Files │ │ ├── LazyImage │ │ ├── Info.plist │ │ ├── LazyImage-Info.plist │ │ ├── LazyImage-dummy.m │ │ ├── LazyImage-prefix.pch │ │ ├── LazyImage-umbrella.h │ │ ├── LazyImage.modulemap │ │ └── LazyImage.xcconfig │ │ ├── Pods-LazyImageExampleApp │ │ ├── Info.plist │ │ ├── Pods-LazyImageExampleApp-Info.plist │ │ ├── Pods-LazyImageExampleApp-acknowledgements.markdown │ │ ├── Pods-LazyImageExampleApp-acknowledgements.plist │ │ ├── Pods-LazyImageExampleApp-dummy.m │ │ ├── Pods-LazyImageExampleApp-frameworks.sh │ │ ├── Pods-LazyImageExampleApp-resources.sh │ │ ├── Pods-LazyImageExampleApp-umbrella.h │ │ ├── Pods-LazyImageExampleApp.debug.xcconfig │ │ ├── Pods-LazyImageExampleApp.modulemap │ │ └── Pods-LazyImageExampleApp.release.xcconfig │ │ └── Pods-LazyImageExampleAppTests │ │ ├── Info.plist │ │ ├── Pods-LazyImageExampleAppTests-Info.plist │ │ ├── Pods-LazyImageExampleAppTests-acknowledgements.markdown │ │ ├── Pods-LazyImageExampleAppTests-acknowledgements.plist │ │ ├── Pods-LazyImageExampleAppTests-dummy.m │ │ ├── Pods-LazyImageExampleAppTests-frameworks.sh │ │ ├── Pods-LazyImageExampleAppTests-resources.sh │ │ ├── Pods-LazyImageExampleAppTests-umbrella.h │ │ ├── Pods-LazyImageExampleAppTests.debug.xcconfig │ │ ├── Pods-LazyImageExampleAppTests.modulemap │ │ └── Pods-LazyImageExampleAppTests.release.xcconfig └── build │ └── Pods.build │ └── Debug-iphoneos │ ├── LazyImage.build │ ├── DerivedSources │ │ └── LazyImage_vers.c │ ├── LazyImage-all-non-framework-target-headers.hmap │ ├── LazyImage-all-target-headers.hmap │ ├── LazyImage-generated-files.hmap │ ├── LazyImage-own-target-headers.hmap │ ├── LazyImage-project-headers.hmap │ ├── LazyImage.hmap │ ├── Objects-normal │ │ ├── arm64 │ │ │ ├── LazyImage-OutputFileMap.json │ │ │ └── LazyImage.LinkFileList │ │ └── armv7 │ │ │ ├── LazyImage-OutputFileMap.json │ │ │ └── LazyImage.LinkFileList │ ├── dgph │ ├── module.modulemap │ ├── swift-overrides.hmap │ ├── unextended-module-overlay.yaml │ └── unextended-module.modulemap │ └── Pods-LazyImage_Tests.build │ ├── DerivedSources │ └── Pods_LazyImage_Tests_vers.c │ ├── Objects-normal │ ├── arm64 │ │ └── Pods_LazyImage_Tests.LinkFileList │ └── armv7 │ │ └── Pods_LazyImage_Tests.LinkFileList │ ├── Pods_LazyImage_Tests-all-non-framework-target-headers.hmap │ ├── Pods_LazyImage_Tests-all-target-headers.hmap │ ├── Pods_LazyImage_Tests-generated-files.hmap │ ├── Pods_LazyImage_Tests-own-target-headers.hmap │ ├── Pods_LazyImage_Tests-project-headers.hmap │ ├── Pods_LazyImage_Tests.hmap │ ├── dgph │ └── module.modulemap ├── LICENSE ├── LazyImage.podspec ├── LazyImage ├── Assets │ └── .gitkeep └── Classes │ └── .gitkeep ├── LazyImageLogo.png ├── Library ├── LazyImage+Error.swift ├── LazyImage+Loader.swift ├── LazyImage+Network.swift ├── LazyImage+Resizing.swift ├── LazyImage+Storage.swift ├── LazyImage.swift └── LazyImageView.swift ├── README.md └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | *.xcuserdatad 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * https://www.objc.io/issues/6-build-tools/travis-ci/ 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | language: objective-c 6 | osx_image: xcode10.2 7 | xcode_workspace: Example/LazyImage.xcworkspace 8 | xcode_scheme: LazyImage-Example 9 | xcode_destination: platform=iOS Simulator,OS=12.2,name=iPhone Xs 10 | before_install: 11 | - pod repo update 12 | - cd Example 13 | - pod install 14 | - cd ../ 15 | -------------------------------------------------------------------------------- /Example/LazyImage.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 053EC53021DBF3380042CA9A /* LazyImageExampleAppTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053EC52C21DBF2F60042CA9A /* LazyImageExampleAppTests.swift */; }; 11 | 057868C821DAA04A001148A7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 057868C721DAA04A001148A7 /* AppDelegate.swift */; }; 12 | 057868CA21DAA04A001148A7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 057868C921DAA04A001148A7 /* ViewController.swift */; }; 13 | 057868CF21DAA04B001148A7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 057868CE21DAA04B001148A7 /* Assets.xcassets */; }; 14 | 057868D221DAA04B001148A7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 057868D021DAA04B001148A7 /* LaunchScreen.storyboard */; }; 15 | 087AF3AFCB76E75B0230C696 /* Pods_LazyImageExampleApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7550AE81A7906FEFE240AA60 /* Pods_LazyImageExampleApp.framework */; }; 16 | 35D767CBB3156970EB3C9D68 /* Pods_LazyImageExampleAppTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB18CE3320046967C3904BBB /* Pods_LazyImageExampleAppTests.framework */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXContainerItemProxy section */ 20 | 053EC52621DBF2620042CA9A /* PBXContainerItemProxy */ = { 21 | isa = PBXContainerItemProxy; 22 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 23 | proxyType = 1; 24 | remoteGlobalIDString = 057868C421DAA04A001148A7; 25 | remoteInfo = LazyImageExampleApp; 26 | }; 27 | /* End PBXContainerItemProxy section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 053EC52121DBF2620042CA9A /* LazyImageExampleAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LazyImageExampleAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | 053EC52C21DBF2F60042CA9A /* LazyImageExampleAppTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LazyImageExampleAppTests.swift; sourceTree = ""; }; 32 | 053EC52D21DBF2F60042CA9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 33 | 057868C521DAA04A001148A7 /* LazyImageExampleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LazyImageExampleApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | 057868C721DAA04A001148A7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 35 | 057868C921DAA04A001148A7 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 36 | 057868CE21DAA04B001148A7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 37 | 057868D121DAA04B001148A7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 38 | 057868D321DAA04B001148A7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 39 | 0F3415CABEC4DA547DB09DF8 /* Pods-LazyImageExampleApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LazyImageExampleApp.release.xcconfig"; path = "Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp.release.xcconfig"; sourceTree = ""; }; 40 | 5FA1499929F602461A34EB07 /* LazyImage.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LazyImage.podspec; path = ../LazyImage.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 41 | 7550AE81A7906FEFE240AA60 /* Pods_LazyImageExampleApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LazyImageExampleApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 7ACDEF3FB32477B2AEF64D32 /* Pods-LazyImage_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LazyImage_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-LazyImage_Tests/Pods-LazyImage_Tests.release.xcconfig"; sourceTree = ""; }; 43 | 8C9785F860A3CD6CC3C3A9D0 /* Pods-LazyImageExampleAppTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LazyImageExampleAppTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests.debug.xcconfig"; sourceTree = ""; }; 44 | A3237A7D248867DAA57C16AA /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 45 | B72D9301D659945EEA509569 /* Pods-LazyImageExampleAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LazyImageExampleAppTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests.release.xcconfig"; sourceTree = ""; }; 46 | CB18CE3320046967C3904BBB /* Pods_LazyImageExampleAppTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LazyImageExampleAppTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | CC4F4874B1F60039EE0B3D26 /* Pods-LazyImage_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LazyImage_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-LazyImage_Tests/Pods-LazyImage_Tests.debug.xcconfig"; sourceTree = ""; }; 48 | DDA2C4993EC117EA285DEA63 /* Pods-LazyImageExampleApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LazyImageExampleApp.debug.xcconfig"; path = "Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp.debug.xcconfig"; sourceTree = ""; }; 49 | F67D90AF1E46DB2EB9BFC8B5 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | 053EC51E21DBF2620042CA9A /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | 35D767CBB3156970EB3C9D68 /* Pods_LazyImageExampleAppTests.framework in Frameworks */, 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | 057868C221DAA04A001148A7 /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 087AF3AFCB76E75B0230C696 /* Pods_LazyImageExampleApp.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | 053EC52B21DBF2F60042CA9A /* LazyImageExampleAppTests */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | 053EC52C21DBF2F60042CA9A /* LazyImageExampleAppTests.swift */, 76 | 053EC52D21DBF2F60042CA9A /* Info.plist */, 77 | ); 78 | path = LazyImageExampleAppTests; 79 | sourceTree = ""; 80 | }; 81 | 057868C621DAA04A001148A7 /* LazyImageExampleApp */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | 057868C721DAA04A001148A7 /* AppDelegate.swift */, 85 | 057868C921DAA04A001148A7 /* ViewController.swift */, 86 | 057868CE21DAA04B001148A7 /* Assets.xcassets */, 87 | 057868D021DAA04B001148A7 /* LaunchScreen.storyboard */, 88 | 057868D321DAA04B001148A7 /* Info.plist */, 89 | ); 90 | path = LazyImageExampleApp; 91 | sourceTree = ""; 92 | }; 93 | 607FACC71AFB9204008FA782 = { 94 | isa = PBXGroup; 95 | children = ( 96 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 97 | 057868C621DAA04A001148A7 /* LazyImageExampleApp */, 98 | 053EC52B21DBF2F60042CA9A /* LazyImageExampleAppTests */, 99 | 607FACD11AFB9204008FA782 /* Products */, 100 | C1D92E315D7C759AC6CDB8FC /* Pods */, 101 | C01ABEFAA208B0B2511209BB /* Frameworks */, 102 | ); 103 | sourceTree = ""; 104 | }; 105 | 607FACD11AFB9204008FA782 /* Products */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 057868C521DAA04A001148A7 /* LazyImageExampleApp.app */, 109 | 053EC52121DBF2620042CA9A /* LazyImageExampleAppTests.xctest */, 110 | ); 111 | name = Products; 112 | sourceTree = ""; 113 | }; 114 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | 5FA1499929F602461A34EB07 /* LazyImage.podspec */, 118 | A3237A7D248867DAA57C16AA /* README.md */, 119 | F67D90AF1E46DB2EB9BFC8B5 /* LICENSE */, 120 | ); 121 | name = "Podspec Metadata"; 122 | sourceTree = ""; 123 | }; 124 | C01ABEFAA208B0B2511209BB /* Frameworks */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 7550AE81A7906FEFE240AA60 /* Pods_LazyImageExampleApp.framework */, 128 | CB18CE3320046967C3904BBB /* Pods_LazyImageExampleAppTests.framework */, 129 | ); 130 | name = Frameworks; 131 | sourceTree = ""; 132 | }; 133 | C1D92E315D7C759AC6CDB8FC /* Pods */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | CC4F4874B1F60039EE0B3D26 /* Pods-LazyImage_Tests.debug.xcconfig */, 137 | 7ACDEF3FB32477B2AEF64D32 /* Pods-LazyImage_Tests.release.xcconfig */, 138 | DDA2C4993EC117EA285DEA63 /* Pods-LazyImageExampleApp.debug.xcconfig */, 139 | 0F3415CABEC4DA547DB09DF8 /* Pods-LazyImageExampleApp.release.xcconfig */, 140 | 8C9785F860A3CD6CC3C3A9D0 /* Pods-LazyImageExampleAppTests.debug.xcconfig */, 141 | B72D9301D659945EEA509569 /* Pods-LazyImageExampleAppTests.release.xcconfig */, 142 | ); 143 | name = Pods; 144 | sourceTree = ""; 145 | }; 146 | /* End PBXGroup section */ 147 | 148 | /* Begin PBXNativeTarget section */ 149 | 053EC52021DBF2620042CA9A /* LazyImageExampleAppTests */ = { 150 | isa = PBXNativeTarget; 151 | buildConfigurationList = 053EC52821DBF2620042CA9A /* Build configuration list for PBXNativeTarget "LazyImageExampleAppTests" */; 152 | buildPhases = ( 153 | 3232273AB34F43E02D750DC8 /* [CP] Check Pods Manifest.lock */, 154 | 053EC51D21DBF2620042CA9A /* Sources */, 155 | 053EC51E21DBF2620042CA9A /* Frameworks */, 156 | 053EC51F21DBF2620042CA9A /* Resources */, 157 | ); 158 | buildRules = ( 159 | ); 160 | dependencies = ( 161 | 053EC52721DBF2620042CA9A /* PBXTargetDependency */, 162 | ); 163 | name = LazyImageExampleAppTests; 164 | productName = LazyImageExampleAppTests; 165 | productReference = 053EC52121DBF2620042CA9A /* LazyImageExampleAppTests.xctest */; 166 | productType = "com.apple.product-type.bundle.unit-test"; 167 | }; 168 | 057868C421DAA04A001148A7 /* LazyImageExampleApp */ = { 169 | isa = PBXNativeTarget; 170 | buildConfigurationList = 057868E321DAA04C001148A7 /* Build configuration list for PBXNativeTarget "LazyImageExampleApp" */; 171 | buildPhases = ( 172 | 762DDC83F0E3C9B6B1ACEAA5 /* [CP] Check Pods Manifest.lock */, 173 | 057868C121DAA04A001148A7 /* Sources */, 174 | 057868C221DAA04A001148A7 /* Frameworks */, 175 | 057868C321DAA04A001148A7 /* Resources */, 176 | 10A3B11D36C286AA559EF991 /* [CP] Embed Pods Frameworks */, 177 | ); 178 | buildRules = ( 179 | ); 180 | dependencies = ( 181 | ); 182 | name = LazyImageExampleApp; 183 | productName = LazyImageExampleApp; 184 | productReference = 057868C521DAA04A001148A7 /* LazyImageExampleApp.app */; 185 | productType = "com.apple.product-type.application"; 186 | }; 187 | /* End PBXNativeTarget section */ 188 | 189 | /* Begin PBXProject section */ 190 | 607FACC81AFB9204008FA782 /* Project object */ = { 191 | isa = PBXProject; 192 | attributes = { 193 | LastSwiftUpdateCheck = 1010; 194 | LastUpgradeCheck = 1010; 195 | ORGANIZATIONNAME = CocoaPods; 196 | TargetAttributes = { 197 | 053EC52021DBF2620042CA9A = { 198 | CreatedOnToolsVersion = 10.1; 199 | DevelopmentTeam = DSUPJVUE4V; 200 | LastSwiftMigration = 1020; 201 | ProvisioningStyle = Automatic; 202 | TestTargetID = 057868C421DAA04A001148A7; 203 | }; 204 | 057868C421DAA04A001148A7 = { 205 | CreatedOnToolsVersion = 10.1; 206 | DevelopmentTeam = DSUPJVUE4V; 207 | LastSwiftMigration = 1020; 208 | ProvisioningStyle = Automatic; 209 | }; 210 | }; 211 | }; 212 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "LazyImage" */; 213 | compatibilityVersion = "Xcode 3.2"; 214 | developmentRegion = en; 215 | hasScannedForEncodings = 0; 216 | knownRegions = ( 217 | en, 218 | Base, 219 | ); 220 | mainGroup = 607FACC71AFB9204008FA782; 221 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 222 | projectDirPath = ""; 223 | projectRoot = ""; 224 | targets = ( 225 | 057868C421DAA04A001148A7 /* LazyImageExampleApp */, 226 | 053EC52021DBF2620042CA9A /* LazyImageExampleAppTests */, 227 | ); 228 | }; 229 | /* End PBXProject section */ 230 | 231 | /* Begin PBXResourcesBuildPhase section */ 232 | 053EC51F21DBF2620042CA9A /* Resources */ = { 233 | isa = PBXResourcesBuildPhase; 234 | buildActionMask = 2147483647; 235 | files = ( 236 | ); 237 | runOnlyForDeploymentPostprocessing = 0; 238 | }; 239 | 057868C321DAA04A001148A7 /* Resources */ = { 240 | isa = PBXResourcesBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | 057868D221DAA04B001148A7 /* LaunchScreen.storyboard in Resources */, 244 | 057868CF21DAA04B001148A7 /* Assets.xcassets in Resources */, 245 | ); 246 | runOnlyForDeploymentPostprocessing = 0; 247 | }; 248 | /* End PBXResourcesBuildPhase section */ 249 | 250 | /* Begin PBXShellScriptBuildPhase section */ 251 | 10A3B11D36C286AA559EF991 /* [CP] Embed Pods Frameworks */ = { 252 | isa = PBXShellScriptBuildPhase; 253 | buildActionMask = 2147483647; 254 | files = ( 255 | ); 256 | inputFileListPaths = ( 257 | ); 258 | inputPaths = ( 259 | "${PODS_ROOT}/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-frameworks.sh", 260 | "${BUILT_PRODUCTS_DIR}/LazyImage/LazyImage.framework", 261 | ); 262 | name = "[CP] Embed Pods Frameworks"; 263 | outputFileListPaths = ( 264 | ); 265 | outputPaths = ( 266 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LazyImage.framework", 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | shellPath = /bin/sh; 270 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-frameworks.sh\"\n"; 271 | showEnvVarsInLog = 0; 272 | }; 273 | 3232273AB34F43E02D750DC8 /* [CP] Check Pods Manifest.lock */ = { 274 | isa = PBXShellScriptBuildPhase; 275 | buildActionMask = 2147483647; 276 | files = ( 277 | ); 278 | inputFileListPaths = ( 279 | ); 280 | inputPaths = ( 281 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 282 | "${PODS_ROOT}/Manifest.lock", 283 | ); 284 | name = "[CP] Check Pods Manifest.lock"; 285 | outputFileListPaths = ( 286 | ); 287 | outputPaths = ( 288 | "$(DERIVED_FILE_DIR)/Pods-LazyImageExampleAppTests-checkManifestLockResult.txt", 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | shellPath = /bin/sh; 292 | 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"; 293 | showEnvVarsInLog = 0; 294 | }; 295 | 762DDC83F0E3C9B6B1ACEAA5 /* [CP] Check Pods Manifest.lock */ = { 296 | isa = PBXShellScriptBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | ); 300 | inputFileListPaths = ( 301 | ); 302 | inputPaths = ( 303 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 304 | "${PODS_ROOT}/Manifest.lock", 305 | ); 306 | name = "[CP] Check Pods Manifest.lock"; 307 | outputFileListPaths = ( 308 | ); 309 | outputPaths = ( 310 | "$(DERIVED_FILE_DIR)/Pods-LazyImageExampleApp-checkManifestLockResult.txt", 311 | ); 312 | runOnlyForDeploymentPostprocessing = 0; 313 | shellPath = /bin/sh; 314 | 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"; 315 | showEnvVarsInLog = 0; 316 | }; 317 | /* End PBXShellScriptBuildPhase section */ 318 | 319 | /* Begin PBXSourcesBuildPhase section */ 320 | 053EC51D21DBF2620042CA9A /* Sources */ = { 321 | isa = PBXSourcesBuildPhase; 322 | buildActionMask = 2147483647; 323 | files = ( 324 | 053EC53021DBF3380042CA9A /* LazyImageExampleAppTests.swift in Sources */, 325 | ); 326 | runOnlyForDeploymentPostprocessing = 0; 327 | }; 328 | 057868C121DAA04A001148A7 /* Sources */ = { 329 | isa = PBXSourcesBuildPhase; 330 | buildActionMask = 2147483647; 331 | files = ( 332 | 057868CA21DAA04A001148A7 /* ViewController.swift in Sources */, 333 | 057868C821DAA04A001148A7 /* AppDelegate.swift in Sources */, 334 | ); 335 | runOnlyForDeploymentPostprocessing = 0; 336 | }; 337 | /* End PBXSourcesBuildPhase section */ 338 | 339 | /* Begin PBXTargetDependency section */ 340 | 053EC52721DBF2620042CA9A /* PBXTargetDependency */ = { 341 | isa = PBXTargetDependency; 342 | target = 057868C421DAA04A001148A7 /* LazyImageExampleApp */; 343 | targetProxy = 053EC52621DBF2620042CA9A /* PBXContainerItemProxy */; 344 | }; 345 | /* End PBXTargetDependency section */ 346 | 347 | /* Begin PBXVariantGroup section */ 348 | 057868D021DAA04B001148A7 /* LaunchScreen.storyboard */ = { 349 | isa = PBXVariantGroup; 350 | children = ( 351 | 057868D121DAA04B001148A7 /* Base */, 352 | ); 353 | name = LaunchScreen.storyboard; 354 | sourceTree = ""; 355 | }; 356 | /* End PBXVariantGroup section */ 357 | 358 | /* Begin XCBuildConfiguration section */ 359 | 053EC52921DBF2620042CA9A /* Debug */ = { 360 | isa = XCBuildConfiguration; 361 | baseConfigurationReference = 8C9785F860A3CD6CC3C3A9D0 /* Pods-LazyImageExampleAppTests.debug.xcconfig */; 362 | buildSettings = { 363 | BUNDLE_LOADER = "$(TEST_HOST)"; 364 | CLANG_ANALYZER_NONNULL = YES; 365 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 366 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 367 | CLANG_ENABLE_OBJC_WEAK = YES; 368 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 369 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 370 | CODE_SIGN_IDENTITY = "iPhone Developer"; 371 | CODE_SIGN_STYLE = Automatic; 372 | DEBUG_INFORMATION_FORMAT = dwarf; 373 | DEVELOPMENT_TEAM = DSUPJVUE4V; 374 | GCC_C_LANGUAGE_STANDARD = gnu11; 375 | INFOPLIST_FILE = LazyImageExampleAppTests/Info.plist; 376 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 377 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 378 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 379 | MTL_FAST_MATH = YES; 380 | PRODUCT_BUNDLE_IDENTIFIER = com.github.lazyimage.LazyImageExampleAppTests; 381 | PRODUCT_NAME = "$(TARGET_NAME)"; 382 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 383 | SWIFT_VERSION = 5.0; 384 | TARGETED_DEVICE_FAMILY = "1,2"; 385 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LazyImageExampleApp.app/LazyImageExampleApp"; 386 | }; 387 | name = Debug; 388 | }; 389 | 053EC52A21DBF2620042CA9A /* Release */ = { 390 | isa = XCBuildConfiguration; 391 | baseConfigurationReference = B72D9301D659945EEA509569 /* Pods-LazyImageExampleAppTests.release.xcconfig */; 392 | buildSettings = { 393 | BUNDLE_LOADER = "$(TEST_HOST)"; 394 | CLANG_ANALYZER_NONNULL = YES; 395 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 396 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 397 | CLANG_ENABLE_OBJC_WEAK = YES; 398 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 399 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 400 | CODE_SIGN_IDENTITY = "iPhone Developer"; 401 | CODE_SIGN_STYLE = Automatic; 402 | DEVELOPMENT_TEAM = DSUPJVUE4V; 403 | GCC_C_LANGUAGE_STANDARD = gnu11; 404 | INFOPLIST_FILE = LazyImageExampleAppTests/Info.plist; 405 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 406 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 407 | MTL_FAST_MATH = YES; 408 | PRODUCT_BUNDLE_IDENTIFIER = com.github.lazyimage.LazyImageExampleAppTests; 409 | PRODUCT_NAME = "$(TARGET_NAME)"; 410 | SWIFT_VERSION = 5.0; 411 | TARGETED_DEVICE_FAMILY = "1,2"; 412 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LazyImageExampleApp.app/LazyImageExampleApp"; 413 | }; 414 | name = Release; 415 | }; 416 | 057868DF21DAA04C001148A7 /* Debug */ = { 417 | isa = XCBuildConfiguration; 418 | baseConfigurationReference = DDA2C4993EC117EA285DEA63 /* Pods-LazyImageExampleApp.debug.xcconfig */; 419 | buildSettings = { 420 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 421 | CLANG_ANALYZER_NONNULL = YES; 422 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 423 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 424 | CLANG_ENABLE_OBJC_WEAK = YES; 425 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 426 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 427 | CODE_SIGN_IDENTITY = "iPhone Developer"; 428 | CODE_SIGN_STYLE = Automatic; 429 | DEBUG_INFORMATION_FORMAT = dwarf; 430 | DEVELOPMENT_TEAM = DSUPJVUE4V; 431 | GCC_C_LANGUAGE_STANDARD = gnu11; 432 | INFOPLIST_FILE = LazyImageExampleApp/Info.plist; 433 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 434 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 435 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 436 | MTL_FAST_MATH = YES; 437 | PRODUCT_BUNDLE_IDENTIFIER = com.github.lazyimage.LazyImageExampleApp; 438 | PRODUCT_NAME = "$(TARGET_NAME)"; 439 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 440 | SWIFT_VERSION = 5.0; 441 | TARGETED_DEVICE_FAMILY = "1,2"; 442 | }; 443 | name = Debug; 444 | }; 445 | 057868E021DAA04C001148A7 /* Release */ = { 446 | isa = XCBuildConfiguration; 447 | baseConfigurationReference = 0F3415CABEC4DA547DB09DF8 /* Pods-LazyImageExampleApp.release.xcconfig */; 448 | buildSettings = { 449 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 450 | CLANG_ANALYZER_NONNULL = YES; 451 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 452 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 453 | CLANG_ENABLE_OBJC_WEAK = YES; 454 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 455 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 456 | CODE_SIGN_IDENTITY = "iPhone Developer"; 457 | CODE_SIGN_STYLE = Automatic; 458 | DEVELOPMENT_TEAM = DSUPJVUE4V; 459 | GCC_C_LANGUAGE_STANDARD = gnu11; 460 | INFOPLIST_FILE = LazyImageExampleApp/Info.plist; 461 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 462 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 463 | MTL_FAST_MATH = YES; 464 | PRODUCT_BUNDLE_IDENTIFIER = com.github.lazyimage.LazyImageExampleApp; 465 | PRODUCT_NAME = "$(TARGET_NAME)"; 466 | SWIFT_VERSION = 5.0; 467 | TARGETED_DEVICE_FAMILY = "1,2"; 468 | }; 469 | name = Release; 470 | }; 471 | 607FACED1AFB9204008FA782 /* Debug */ = { 472 | isa = XCBuildConfiguration; 473 | buildSettings = { 474 | ALWAYS_SEARCH_USER_PATHS = NO; 475 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 476 | CLANG_CXX_LIBRARY = "libc++"; 477 | CLANG_ENABLE_MODULES = YES; 478 | CLANG_ENABLE_OBJC_ARC = YES; 479 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 480 | CLANG_WARN_BOOL_CONVERSION = YES; 481 | CLANG_WARN_COMMA = YES; 482 | CLANG_WARN_CONSTANT_CONVERSION = YES; 483 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 484 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 485 | CLANG_WARN_EMPTY_BODY = YES; 486 | CLANG_WARN_ENUM_CONVERSION = YES; 487 | CLANG_WARN_INFINITE_RECURSION = YES; 488 | CLANG_WARN_INT_CONVERSION = YES; 489 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 490 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 491 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 492 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 493 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 494 | CLANG_WARN_STRICT_PROTOTYPES = YES; 495 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 496 | CLANG_WARN_UNREACHABLE_CODE = YES; 497 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 498 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 499 | COPY_PHASE_STRIP = NO; 500 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 501 | ENABLE_STRICT_OBJC_MSGSEND = YES; 502 | ENABLE_TESTABILITY = YES; 503 | GCC_C_LANGUAGE_STANDARD = gnu99; 504 | GCC_DYNAMIC_NO_PIC = NO; 505 | GCC_NO_COMMON_BLOCKS = YES; 506 | GCC_OPTIMIZATION_LEVEL = 0; 507 | GCC_PREPROCESSOR_DEFINITIONS = ( 508 | "DEBUG=1", 509 | "$(inherited)", 510 | ); 511 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 512 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 513 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 514 | GCC_WARN_UNDECLARED_SELECTOR = YES; 515 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 516 | GCC_WARN_UNUSED_FUNCTION = YES; 517 | GCC_WARN_UNUSED_VARIABLE = YES; 518 | IPHONEOS_DEPLOYMENT_TARGET = 10.1; 519 | MTL_ENABLE_DEBUG_INFO = YES; 520 | ONLY_ACTIVE_ARCH = YES; 521 | SDKROOT = iphoneos; 522 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 523 | }; 524 | name = Debug; 525 | }; 526 | 607FACEE1AFB9204008FA782 /* Release */ = { 527 | isa = XCBuildConfiguration; 528 | buildSettings = { 529 | ALWAYS_SEARCH_USER_PATHS = NO; 530 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 531 | CLANG_CXX_LIBRARY = "libc++"; 532 | CLANG_ENABLE_MODULES = YES; 533 | CLANG_ENABLE_OBJC_ARC = YES; 534 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 535 | CLANG_WARN_BOOL_CONVERSION = YES; 536 | CLANG_WARN_COMMA = YES; 537 | CLANG_WARN_CONSTANT_CONVERSION = YES; 538 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 539 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 540 | CLANG_WARN_EMPTY_BODY = YES; 541 | CLANG_WARN_ENUM_CONVERSION = YES; 542 | CLANG_WARN_INFINITE_RECURSION = YES; 543 | CLANG_WARN_INT_CONVERSION = YES; 544 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 545 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 546 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 547 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 548 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 549 | CLANG_WARN_STRICT_PROTOTYPES = YES; 550 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 551 | CLANG_WARN_UNREACHABLE_CODE = YES; 552 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 553 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 554 | COPY_PHASE_STRIP = NO; 555 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 556 | ENABLE_NS_ASSERTIONS = NO; 557 | ENABLE_STRICT_OBJC_MSGSEND = YES; 558 | GCC_C_LANGUAGE_STANDARD = gnu99; 559 | GCC_NO_COMMON_BLOCKS = YES; 560 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 561 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 562 | GCC_WARN_UNDECLARED_SELECTOR = YES; 563 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 564 | GCC_WARN_UNUSED_FUNCTION = YES; 565 | GCC_WARN_UNUSED_VARIABLE = YES; 566 | IPHONEOS_DEPLOYMENT_TARGET = 10.1; 567 | MTL_ENABLE_DEBUG_INFO = NO; 568 | SDKROOT = iphoneos; 569 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 570 | VALIDATE_PRODUCT = YES; 571 | }; 572 | name = Release; 573 | }; 574 | /* End XCBuildConfiguration section */ 575 | 576 | /* Begin XCConfigurationList section */ 577 | 053EC52821DBF2620042CA9A /* Build configuration list for PBXNativeTarget "LazyImageExampleAppTests" */ = { 578 | isa = XCConfigurationList; 579 | buildConfigurations = ( 580 | 053EC52921DBF2620042CA9A /* Debug */, 581 | 053EC52A21DBF2620042CA9A /* Release */, 582 | ); 583 | defaultConfigurationIsVisible = 0; 584 | defaultConfigurationName = Release; 585 | }; 586 | 057868E321DAA04C001148A7 /* Build configuration list for PBXNativeTarget "LazyImageExampleApp" */ = { 587 | isa = XCConfigurationList; 588 | buildConfigurations = ( 589 | 057868DF21DAA04C001148A7 /* Debug */, 590 | 057868E021DAA04C001148A7 /* Release */, 591 | ); 592 | defaultConfigurationIsVisible = 0; 593 | defaultConfigurationName = Release; 594 | }; 595 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "LazyImage" */ = { 596 | isa = XCConfigurationList; 597 | buildConfigurations = ( 598 | 607FACED1AFB9204008FA782 /* Debug */, 599 | 607FACEE1AFB9204008FA782 /* Release */, 600 | ); 601 | defaultConfigurationIsVisible = 0; 602 | defaultConfigurationName = Release; 603 | }; 604 | /* End XCConfigurationList section */ 605 | }; 606 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 607 | } 608 | -------------------------------------------------------------------------------- /Example/LazyImage.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/LazyImage.xcodeproj/xcshareddata/xcschemes/LazyImage-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 14 | 15 | 17 | 23 | 24 | 25 | 26 | 27 | 33 | 34 | 35 | 36 | 37 | 38 | 48 | 50 | 56 | 57 | 58 | 59 | 60 | 61 | 67 | 69 | 75 | 76 | 77 | 78 | 80 | 81 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /Example/LazyImage.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/LazyImage.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/LazyImageExampleApp/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // LazyImageExampleApp 4 | // 5 | // Created by Lampros Giampouras on 31/12/2018. 6 | // Copyright © 2018 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | window = UIWindow(frame: UIScreen.main.bounds) 20 | let homeViewController = ViewController() 21 | window!.rootViewController = homeViewController 22 | window!.makeKeyAndVisible() 23 | return true 24 | } 25 | 26 | func applicationWillResignActive(_ application: UIApplication) { 27 | // 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. 28 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 29 | } 30 | 31 | func applicationDidEnterBackground(_ application: UIApplication) { 32 | // 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. 33 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 34 | } 35 | 36 | func applicationWillEnterForeground(_ application: UIApplication) { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | func applicationDidBecomeActive(_ application: UIApplication) { 41 | // 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. 42 | } 43 | 44 | func applicationWillTerminate(_ application: UIApplication) { 45 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 46 | } 47 | 48 | 49 | } 50 | 51 | -------------------------------------------------------------------------------- /Example/LazyImageExampleApp/Assets.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 | } -------------------------------------------------------------------------------- /Example/LazyImageExampleApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/LazyImageExampleApp/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 | -------------------------------------------------------------------------------- /Example/LazyImageExampleApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Example/LazyImageExampleApp/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // LazyImageExampleApp 4 | // 5 | // Created by Lampros Giampouras on 31/12/2018. 6 | // Copyright © 2018 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import LazyImage 11 | 12 | class ViewController: UIViewController { 13 | 14 | lazy var lazyImage = LazyImage() 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | self.view.backgroundColor = .white 19 | 20 | let imageView:UIImageView = self.addAnImageview() 21 | 22 | //Test image URL. Change with a valid one. 23 | let imageURL = "https://images.unsplash.com/photo-1506145953600-ed38ef5a186d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80" 24 | 25 | //Clear the cache to test download again 26 | self.lazyImage.clearCacheForURLs(urls: [imageURL]) 27 | 28 | //Downlod the image 29 | self.lazyImage.showWithSpinner(imageView: imageView, url: imageURL) { 30 | (error:LazyImageError?) in 31 | 32 | //Image loaded. Do something.. 33 | } 34 | } 35 | 36 | //MARK: - Helper methods 37 | 38 | private func addAnImageview() -> UIImageView { 39 | let imageView:UIImageView = UIImageView() 40 | imageView.contentMode = .scaleAspectFill 41 | imageView.translatesAutoresizingMaskIntoConstraints = false 42 | self.view.addSubview(imageView) 43 | self.pinEdges(for: imageView, to: self.view) 44 | return imageView 45 | } 46 | 47 | private func pinEdges(for current: UIView, to other: UIView) { 48 | current.leadingAnchor.constraint(equalTo: other.leadingAnchor).isActive = true 49 | current.trailingAnchor.constraint(equalTo: other.trailingAnchor).isActive = true 50 | current.topAnchor.constraint(equalTo: other.topAnchor).isActive = true 51 | current.bottomAnchor.constraint(equalTo: other.bottomAnchor).isActive = true 52 | } 53 | } 54 | 55 | -------------------------------------------------------------------------------- /Example/LazyImageExampleAppTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/LazyImageExampleAppTests/LazyImageExampleAppTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImageExampleAppTests.swift 3 | // LazyImageExampleAppTests 4 | // 5 | // Created by Lampros Giampouras on 01/01/2019. 6 | // Copyright © 2019 CocoaPods. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class LazyImageExampleAppTests: XCTestCase { 12 | 13 | override func setUp() { 14 | // Put setup code here. This method is called before the invocation of each test method in the class. 15 | } 16 | 17 | override func tearDown() { 18 | // Put teardown code here. This method is called after the invocation of each test method in the class. 19 | } 20 | 21 | func testExample() { 22 | // This is an example of a functional test case. 23 | // Use XCTAssert and related functions to verify your tests produce the correct results. 24 | } 25 | 26 | func testPerformanceExample() { 27 | // This is an example of a performance test case. 28 | self.measure { 29 | // Put the code you want to measure the time of here. 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'LazyImageExampleApp' do 4 | pod 'LazyImage', :path => '../' 5 | end 6 | 7 | target 'LazyImageExampleAppTests' do 8 | end 9 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - LazyImage (7.0.1) 3 | 4 | DEPENDENCIES: 5 | - LazyImage (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | LazyImage: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | LazyImage: 4db5288d8660b28e64e60c57f5b5d414af922160 13 | 14 | PODFILE CHECKSUM: 1b525437542b575f59c00ecf81225df115a61515 15 | 16 | COCOAPODS: 1.6.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/LazyImage.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LazyImage", 3 | "version": "7.0.1", 4 | "summary": "Simple and efficient image lazy loading for iOS written in Swift", 5 | "description": "Simple and efficient image lazy loading functionality for the iOS written in Swift. LazyImage offers ease of use and complete control over your images.\n\nFeatures\nAsynchronous image downloader on a background thread. Main thread is never blocked.\nInstance based for better unit testing your code.\nTemporary caching of the downloaded images with automatic OS clean up.\nOffers the possibility to set a local project image as a placeholder until the actual image is available\nOffers the possibility to add a spinner at the center of the imageView until the image is fetched.\nIf the imageView's size is 0, it sets dimensions to 40x40 prior to the request. This applies to the default UITableViewCells due to the fact when no initial image is present the imageView is hidden.\n\nComplete control over your image data\nGuarantees that the same image url will not be downloaded again but will be fetched from the cache.\nOption for force downloading the same image overriding the cache.\nOption for clearing images from the cache which correspond to specific URLs so they can be re-downloaded once, instead of force downloading them continuously.\nNotifies the caller when the operation is complete providing descreptive error if any.\nImage can be scaled to your specific view dimensions for best performance and reduced memory allocation.\nOption for setting the cache image size ratio for saving images to you **needed dimensions for fast display.", 6 | "homepage": "https://github.com/lamprosg/LazyImage", 7 | "license": { 8 | "type": "Apache Licence, Version 2.0", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Lampros Giampouras": "lamprosgiamp@gmail.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/lamprosg/LazyImage.git", 16 | "tag": "7.0.1" 17 | }, 18 | "social_media_url": "https://twitter.com/lamprosg", 19 | "swift_version": "5.0", 20 | "platforms": { 21 | "ios": "10.0" 22 | }, 23 | "source_files": "Library/*" 24 | } 25 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - LazyImage (7.0.1) 3 | 4 | DEPENDENCIES: 5 | - LazyImage (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | LazyImage: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | LazyImage: 4db5288d8660b28e64e60c57f5b5d414af922160 13 | 14 | PODFILE CHECKSUM: 1b525437542b575f59c00ecf81225df115a61515 15 | 16 | COCOAPODS: 1.6.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 01EF17FA0C39134E228855E96F313931 /* LazyImage+Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3004E970C29D6534F2F9FF10348E22 /* LazyImage+Network.swift */; }; 11 | 0BD39030FA67FBC1DDA56B70FE8DF93D /* LazyImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1632F44A66A8F17E9581213EBB4C5AAD /* LazyImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 264ADC4A2C712FE227F889C54D42232B /* LazyImage+Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3423F95B4E37FD60422EBAFDD55B79 /* LazyImage+Error.swift */; }; 13 | 2BD1EA9A5CF7F726CADCE09DBA3EC1DC /* LazyImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5868F0B7DCF5742E617C3C027CFAA930 /* LazyImageView.swift */; }; 14 | 3AE7B13A2713A12C37A2024DA8243F62 /* LazyImage+Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0C60A5C77CF7FC0032D607FE6A43A9A /* LazyImage+Loader.swift */; }; 15 | 3F97089662DFABB0A1F10395F1C98FB9 /* LazyImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 106B9C4E2F58CC3F95C1898F7B131A5A /* LazyImage.swift */; }; 16 | 4084C5C055D375AE5CBA77F6C76DC647 /* Pods-LazyImageExampleApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC420102BB70111F50FD16DA88616EF /* Pods-LazyImageExampleApp-dummy.m */; }; 17 | 430B054592CF8A278C5D072C92890114 /* LazyImage+Resizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FDE0D1FE41A396EAB7E5F01BAE9144 /* LazyImage+Resizing.swift */; }; 18 | 569BA588D7DCA4AA7EA62719328C3A6C /* Pods-LazyImageExampleAppTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ADC6830E1E53C7498446BC59C9AF58A /* Pods-LazyImageExampleAppTests-dummy.m */; }; 19 | 9D658AFCFCD15D4E3EBBC6DBFB10D034 /* Pods-LazyImageExampleAppTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 04373062610F0EDB48FE68A36F604541 /* Pods-LazyImageExampleAppTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20 | A11ECFFEEADBE846D5221F18B35DD3C8 /* Pods-LazyImageExampleApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FEAD1DE454B67872F29F588070A5CABA /* Pods-LazyImageExampleApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | B9400DD0952D2206B528E8375089BD56 /* LazyImage+Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C7FDDC5484F1D6F7439151E9F0D220D /* LazyImage+Storage.swift */; }; 22 | C7ADE30D62BDA64D67D117336EC343C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; 23 | CCB496346028F60644CE599F3BEE01A0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; 24 | CE6F3D2479AA77E7E28B8779763C560C /* LazyImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 118AA5883388E8C5A3CCD598DF817BF9 /* LazyImage-dummy.m */; }; 25 | ECFE30E855D5D5B6A967FFC1BB2FEB01 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 4598D919FA226D893E2717690A2C2BE6 /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 9A40407559B56A48A7ED979FDF05B67A; 34 | remoteInfo = LazyImage; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXFileReference section */ 39 | 00BEF29566BF62688FDCE3C3509D44D6 /* Pods-LazyImageExampleApp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LazyImageExampleApp-acknowledgements.markdown"; sourceTree = ""; }; 40 | 04373062610F0EDB48FE68A36F604541 /* Pods-LazyImageExampleAppTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LazyImageExampleAppTests-umbrella.h"; sourceTree = ""; }; 41 | 0C7FDDC5484F1D6F7439151E9F0D220D /* LazyImage+Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "LazyImage+Storage.swift"; path = "Library/LazyImage+Storage.swift"; sourceTree = ""; }; 42 | 106B9C4E2F58CC3F95C1898F7B131A5A /* LazyImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LazyImage.swift; path = Library/LazyImage.swift; sourceTree = ""; }; 43 | 118AA5883388E8C5A3CCD598DF817BF9 /* LazyImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LazyImage-dummy.m"; sourceTree = ""; }; 44 | 1632F44A66A8F17E9581213EBB4C5AAD /* LazyImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LazyImage-umbrella.h"; sourceTree = ""; }; 45 | 1D42A72590BAB33C93FB89C5EBF47215 /* Pods-LazyImageExampleApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LazyImageExampleApp.debug.xcconfig"; sourceTree = ""; }; 46 | 304CC530021D4A851FBAE1338617A2CC /* Pods-LazyImageExampleApp-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-LazyImageExampleApp-frameworks.sh"; sourceTree = ""; }; 47 | 458CCA02986CE83F876402D2CB2CED28 /* LazyImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LazyImage.xcconfig; sourceTree = ""; }; 48 | 469DE4EEAEE8A20AA42BBD6D1C3CC051 /* Pods-LazyImageExampleAppTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LazyImageExampleAppTests-Info.plist"; sourceTree = ""; }; 49 | 49FDE0D1FE41A396EAB7E5F01BAE9144 /* LazyImage+Resizing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "LazyImage+Resizing.swift"; path = "Library/LazyImage+Resizing.swift"; sourceTree = ""; }; 50 | 55A4D20712A7146A016D47BF60DE8046 /* LazyImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LazyImage-Info.plist"; sourceTree = ""; }; 51 | 5868F0B7DCF5742E617C3C027CFAA930 /* LazyImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LazyImageView.swift; path = Library/LazyImageView.swift; sourceTree = ""; }; 52 | 5ADC6830E1E53C7498446BC59C9AF58A /* Pods-LazyImageExampleAppTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LazyImageExampleAppTests-dummy.m"; sourceTree = ""; }; 53 | 5E79E225433EC6D71F391D5D4A6FE8EB /* Pods-LazyImageExampleAppTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LazyImageExampleAppTests.debug.xcconfig"; sourceTree = ""; }; 54 | 64C4DC793231CDBCD8B8E9350DF42F8A /* Pods-LazyImageExampleApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LazyImageExampleApp.release.xcconfig"; sourceTree = ""; }; 55 | 662C6AA39838212769A3A7BAEDCC0041 /* Pods-LazyImageExampleAppTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LazyImageExampleAppTests-acknowledgements.plist"; sourceTree = ""; }; 56 | 7493AC6D96FA4EDCAE8707826B1F1555 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 57 | 7784D60BD9E28171AB253D95B657812B /* Pods-LazyImageExampleAppTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-LazyImageExampleAppTests.modulemap"; sourceTree = ""; }; 58 | 79CB680BE48C012BD83FBF7AB8CC7608 /* Pods-LazyImageExampleApp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LazyImageExampleApp-acknowledgements.plist"; sourceTree = ""; }; 59 | 85314667AB0C798829F6562B57A1302C /* Pods_LazyImageExampleApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_LazyImageExampleApp.framework; path = "Pods-LazyImageExampleApp.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 8AC420102BB70111F50FD16DA88616EF /* Pods-LazyImageExampleApp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LazyImageExampleApp-dummy.m"; sourceTree = ""; }; 61 | 979708496E3447A6B4456F17335DD8C5 /* Pods-LazyImageExampleApp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LazyImageExampleApp-Info.plist"; sourceTree = ""; }; 62 | 9A3423F95B4E37FD60422EBAFDD55B79 /* LazyImage+Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "LazyImage+Error.swift"; path = "Library/LazyImage+Error.swift"; sourceTree = ""; }; 63 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 64 | A3BCD6E0BD4AAAC6D49A7D9DB2484749 /* LazyImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LazyImage.modulemap; sourceTree = ""; }; 65 | BA1F9065965582A557A3E27B5DFE1839 /* Pods_LazyImageExampleAppTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_LazyImageExampleAppTests.framework; path = "Pods-LazyImageExampleAppTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 66 | C37F813C42C3FB9F9C8EC6065DEC2BD0 /* Pods-LazyImageExampleAppTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LazyImageExampleAppTests-acknowledgements.markdown"; sourceTree = ""; }; 67 | C638B69F106A890C4C04C40AD7C5C95C /* LazyImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = LazyImage.framework; path = LazyImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | CA3004E970C29D6534F2F9FF10348E22 /* LazyImage+Network.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "LazyImage+Network.swift"; path = "Library/LazyImage+Network.swift"; sourceTree = ""; }; 69 | CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 70 | D340CF75F27DD3DE10F4C658DC410EE5 /* LazyImage.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = LazyImage.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 71 | DB8D0DDDCDC13C0AAA77700EBAF99074 /* LazyImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LazyImage-prefix.pch"; sourceTree = ""; }; 72 | DBD2071DD9789FD8EE21E5127E701913 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 73 | DF5FFAAB82F9D3ED19D1A2E4B99DD320 /* Pods-LazyImageExampleAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LazyImageExampleAppTests.release.xcconfig"; sourceTree = ""; }; 74 | EC771B2ACA961F9C427F79243BA8FF05 /* Pods-LazyImageExampleApp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-LazyImageExampleApp.modulemap"; sourceTree = ""; }; 75 | F0C60A5C77CF7FC0032D607FE6A43A9A /* LazyImage+Loader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "LazyImage+Loader.swift"; path = "Library/LazyImage+Loader.swift"; sourceTree = ""; }; 76 | FEAD1DE454B67872F29F588070A5CABA /* Pods-LazyImageExampleApp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LazyImageExampleApp-umbrella.h"; sourceTree = ""; }; 77 | /* End PBXFileReference section */ 78 | 79 | /* Begin PBXFrameworksBuildPhase section */ 80 | 5916653884B9BE664035AF31E6E44770 /* Frameworks */ = { 81 | isa = PBXFrameworksBuildPhase; 82 | buildActionMask = 2147483647; 83 | files = ( 84 | CCB496346028F60644CE599F3BEE01A0 /* Foundation.framework in Frameworks */, 85 | ); 86 | runOnlyForDeploymentPostprocessing = 0; 87 | }; 88 | 808D85B8BE36E2DE293E4EBF5F1FD845 /* Frameworks */ = { 89 | isa = PBXFrameworksBuildPhase; 90 | buildActionMask = 2147483647; 91 | files = ( 92 | C7ADE30D62BDA64D67D117336EC343C6 /* Foundation.framework in Frameworks */, 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | 9C46FD86B76127522B33D6EAC2144DEC /* Frameworks */ = { 97 | isa = PBXFrameworksBuildPhase; 98 | buildActionMask = 2147483647; 99 | files = ( 100 | ECFE30E855D5D5B6A967FFC1BB2FEB01 /* Foundation.framework in Frameworks */, 101 | ); 102 | runOnlyForDeploymentPostprocessing = 0; 103 | }; 104 | /* End PBXFrameworksBuildPhase section */ 105 | 106 | /* Begin PBXGroup section */ 107 | 130E3442E2AD0DE46F26B360CAACAAAD /* Support Files */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | A3BCD6E0BD4AAAC6D49A7D9DB2484749 /* LazyImage.modulemap */, 111 | 458CCA02986CE83F876402D2CB2CED28 /* LazyImage.xcconfig */, 112 | 118AA5883388E8C5A3CCD598DF817BF9 /* LazyImage-dummy.m */, 113 | 55A4D20712A7146A016D47BF60DE8046 /* LazyImage-Info.plist */, 114 | DB8D0DDDCDC13C0AAA77700EBAF99074 /* LazyImage-prefix.pch */, 115 | 1632F44A66A8F17E9581213EBB4C5AAD /* LazyImage-umbrella.h */, 116 | ); 117 | name = "Support Files"; 118 | path = "Example/Pods/Target Support Files/LazyImage"; 119 | sourceTree = ""; 120 | }; 121 | 5676EA99A7F9B864253070DDBD98038E /* Pods-LazyImageExampleAppTests */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 7784D60BD9E28171AB253D95B657812B /* Pods-LazyImageExampleAppTests.modulemap */, 125 | C37F813C42C3FB9F9C8EC6065DEC2BD0 /* Pods-LazyImageExampleAppTests-acknowledgements.markdown */, 126 | 662C6AA39838212769A3A7BAEDCC0041 /* Pods-LazyImageExampleAppTests-acknowledgements.plist */, 127 | 5ADC6830E1E53C7498446BC59C9AF58A /* Pods-LazyImageExampleAppTests-dummy.m */, 128 | 469DE4EEAEE8A20AA42BBD6D1C3CC051 /* Pods-LazyImageExampleAppTests-Info.plist */, 129 | 04373062610F0EDB48FE68A36F604541 /* Pods-LazyImageExampleAppTests-umbrella.h */, 130 | 5E79E225433EC6D71F391D5D4A6FE8EB /* Pods-LazyImageExampleAppTests.debug.xcconfig */, 131 | DF5FFAAB82F9D3ED19D1A2E4B99DD320 /* Pods-LazyImageExampleAppTests.release.xcconfig */, 132 | ); 133 | name = "Pods-LazyImageExampleAppTests"; 134 | path = "Target Support Files/Pods-LazyImageExampleAppTests"; 135 | sourceTree = ""; 136 | }; 137 | 802ED4B3C36DC70CDF468838CC25801E /* LazyImage */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 106B9C4E2F58CC3F95C1898F7B131A5A /* LazyImage.swift */, 141 | 9A3423F95B4E37FD60422EBAFDD55B79 /* LazyImage+Error.swift */, 142 | F0C60A5C77CF7FC0032D607FE6A43A9A /* LazyImage+Loader.swift */, 143 | CA3004E970C29D6534F2F9FF10348E22 /* LazyImage+Network.swift */, 144 | 49FDE0D1FE41A396EAB7E5F01BAE9144 /* LazyImage+Resizing.swift */, 145 | 0C7FDDC5484F1D6F7439151E9F0D220D /* LazyImage+Storage.swift */, 146 | 5868F0B7DCF5742E617C3C027CFAA930 /* LazyImageView.swift */, 147 | A3E8FB3D12E1ED196044670FABAC3592 /* Pod */, 148 | 130E3442E2AD0DE46F26B360CAACAAAD /* Support Files */, 149 | ); 150 | name = LazyImage; 151 | path = ../..; 152 | sourceTree = ""; 153 | }; 154 | 8DC1AC5C351C30493ECB8732E6ECEC8C /* Development Pods */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 802ED4B3C36DC70CDF468838CC25801E /* LazyImage */, 158 | ); 159 | name = "Development Pods"; 160 | sourceTree = ""; 161 | }; 162 | 9B055D0CFEA43187E72B03DED11F5662 /* iOS */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */, 166 | ); 167 | name = iOS; 168 | sourceTree = ""; 169 | }; 170 | A3E8FB3D12E1ED196044670FABAC3592 /* Pod */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | D340CF75F27DD3DE10F4C658DC410EE5 /* LazyImage.podspec */, 174 | DBD2071DD9789FD8EE21E5127E701913 /* LICENSE */, 175 | 7493AC6D96FA4EDCAE8707826B1F1555 /* README.md */, 176 | ); 177 | name = Pod; 178 | sourceTree = ""; 179 | }; 180 | CF1408CF629C7361332E53B88F7BD30C = { 181 | isa = PBXGroup; 182 | children = ( 183 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 184 | 8DC1AC5C351C30493ECB8732E6ECEC8C /* Development Pods */, 185 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 186 | EE6CA204630FD3376CCFE627172AD575 /* Products */, 187 | E4BA513709006454DE2F259078BBF444 /* Targets Support Files */, 188 | ); 189 | sourceTree = ""; 190 | }; 191 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 192 | isa = PBXGroup; 193 | children = ( 194 | 9B055D0CFEA43187E72B03DED11F5662 /* iOS */, 195 | ); 196 | name = Frameworks; 197 | sourceTree = ""; 198 | }; 199 | E2410954FE937ABF6F7CB26C75A877AC /* Pods-LazyImageExampleApp */ = { 200 | isa = PBXGroup; 201 | children = ( 202 | EC771B2ACA961F9C427F79243BA8FF05 /* Pods-LazyImageExampleApp.modulemap */, 203 | 00BEF29566BF62688FDCE3C3509D44D6 /* Pods-LazyImageExampleApp-acknowledgements.markdown */, 204 | 79CB680BE48C012BD83FBF7AB8CC7608 /* Pods-LazyImageExampleApp-acknowledgements.plist */, 205 | 8AC420102BB70111F50FD16DA88616EF /* Pods-LazyImageExampleApp-dummy.m */, 206 | 304CC530021D4A851FBAE1338617A2CC /* Pods-LazyImageExampleApp-frameworks.sh */, 207 | 979708496E3447A6B4456F17335DD8C5 /* Pods-LazyImageExampleApp-Info.plist */, 208 | FEAD1DE454B67872F29F588070A5CABA /* Pods-LazyImageExampleApp-umbrella.h */, 209 | 1D42A72590BAB33C93FB89C5EBF47215 /* Pods-LazyImageExampleApp.debug.xcconfig */, 210 | 64C4DC793231CDBCD8B8E9350DF42F8A /* Pods-LazyImageExampleApp.release.xcconfig */, 211 | ); 212 | name = "Pods-LazyImageExampleApp"; 213 | path = "Target Support Files/Pods-LazyImageExampleApp"; 214 | sourceTree = ""; 215 | }; 216 | E4BA513709006454DE2F259078BBF444 /* Targets Support Files */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | E2410954FE937ABF6F7CB26C75A877AC /* Pods-LazyImageExampleApp */, 220 | 5676EA99A7F9B864253070DDBD98038E /* Pods-LazyImageExampleAppTests */, 221 | ); 222 | name = "Targets Support Files"; 223 | sourceTree = ""; 224 | }; 225 | EE6CA204630FD3376CCFE627172AD575 /* Products */ = { 226 | isa = PBXGroup; 227 | children = ( 228 | C638B69F106A890C4C04C40AD7C5C95C /* LazyImage.framework */, 229 | 85314667AB0C798829F6562B57A1302C /* Pods_LazyImageExampleApp.framework */, 230 | BA1F9065965582A557A3E27B5DFE1839 /* Pods_LazyImageExampleAppTests.framework */, 231 | ); 232 | name = Products; 233 | sourceTree = ""; 234 | }; 235 | /* End PBXGroup section */ 236 | 237 | /* Begin PBXHeadersBuildPhase section */ 238 | 418611FA2BB44DE95ECA2FC97CA10AF4 /* Headers */ = { 239 | isa = PBXHeadersBuildPhase; 240 | buildActionMask = 2147483647; 241 | files = ( 242 | A11ECFFEEADBE846D5221F18B35DD3C8 /* Pods-LazyImageExampleApp-umbrella.h in Headers */, 243 | ); 244 | runOnlyForDeploymentPostprocessing = 0; 245 | }; 246 | A922921F2F4263D7EBB9DC478B280621 /* Headers */ = { 247 | isa = PBXHeadersBuildPhase; 248 | buildActionMask = 2147483647; 249 | files = ( 250 | 9D658AFCFCD15D4E3EBBC6DBFB10D034 /* Pods-LazyImageExampleAppTests-umbrella.h in Headers */, 251 | ); 252 | runOnlyForDeploymentPostprocessing = 0; 253 | }; 254 | C8DAD7FB2A83DD76A71E16610D23B80A /* Headers */ = { 255 | isa = PBXHeadersBuildPhase; 256 | buildActionMask = 2147483647; 257 | files = ( 258 | 0BD39030FA67FBC1DDA56B70FE8DF93D /* LazyImage-umbrella.h in Headers */, 259 | ); 260 | runOnlyForDeploymentPostprocessing = 0; 261 | }; 262 | /* End PBXHeadersBuildPhase section */ 263 | 264 | /* Begin PBXNativeTarget section */ 265 | 9A40407559B56A48A7ED979FDF05B67A /* LazyImage */ = { 266 | isa = PBXNativeTarget; 267 | buildConfigurationList = 39E9013B7A7024049A0AC490ECCDD6D7 /* Build configuration list for PBXNativeTarget "LazyImage" */; 268 | buildPhases = ( 269 | C8DAD7FB2A83DD76A71E16610D23B80A /* Headers */, 270 | 5E75105B79CE2E71BA797989181A5CFE /* Sources */, 271 | 5916653884B9BE664035AF31E6E44770 /* Frameworks */, 272 | 9613A6E2DA78630BEF138B8177E1C793 /* Resources */, 273 | ); 274 | buildRules = ( 275 | ); 276 | dependencies = ( 277 | ); 278 | name = LazyImage; 279 | productName = LazyImage; 280 | productReference = C638B69F106A890C4C04C40AD7C5C95C /* LazyImage.framework */; 281 | productType = "com.apple.product-type.framework"; 282 | }; 283 | 9EDACCBE0DDD9C7BBEC62A36EC4C6CAE /* Pods-LazyImageExampleApp */ = { 284 | isa = PBXNativeTarget; 285 | buildConfigurationList = 71401F4B1DE29BAC149CDF01E0EE7BB5 /* Build configuration list for PBXNativeTarget "Pods-LazyImageExampleApp" */; 286 | buildPhases = ( 287 | 418611FA2BB44DE95ECA2FC97CA10AF4 /* Headers */, 288 | C886EE89ED86411B9686FFE44F860DB5 /* Sources */, 289 | 9C46FD86B76127522B33D6EAC2144DEC /* Frameworks */, 290 | 68AE02F5B91AC6F8AFABD95C19C9247A /* Resources */, 291 | ); 292 | buildRules = ( 293 | ); 294 | dependencies = ( 295 | 2A15607E346FE4335B63DE443803CC88 /* PBXTargetDependency */, 296 | ); 297 | name = "Pods-LazyImageExampleApp"; 298 | productName = "Pods-LazyImageExampleApp"; 299 | productReference = 85314667AB0C798829F6562B57A1302C /* Pods_LazyImageExampleApp.framework */; 300 | productType = "com.apple.product-type.framework"; 301 | }; 302 | D3E520EF55304812A8421EAAB1BF5A59 /* Pods-LazyImageExampleAppTests */ = { 303 | isa = PBXNativeTarget; 304 | buildConfigurationList = 379948F2CCB9527F092F8578412E9C89 /* Build configuration list for PBXNativeTarget "Pods-LazyImageExampleAppTests" */; 305 | buildPhases = ( 306 | A922921F2F4263D7EBB9DC478B280621 /* Headers */, 307 | D98D80BA9455B071D0CA3CCFB08CE64E /* Sources */, 308 | 808D85B8BE36E2DE293E4EBF5F1FD845 /* Frameworks */, 309 | 82C4F13713AFB522F2F1ECC4AB0A1820 /* Resources */, 310 | ); 311 | buildRules = ( 312 | ); 313 | dependencies = ( 314 | ); 315 | name = "Pods-LazyImageExampleAppTests"; 316 | productName = "Pods-LazyImageExampleAppTests"; 317 | productReference = BA1F9065965582A557A3E27B5DFE1839 /* Pods_LazyImageExampleAppTests.framework */; 318 | productType = "com.apple.product-type.framework"; 319 | }; 320 | /* End PBXNativeTarget section */ 321 | 322 | /* Begin PBXProject section */ 323 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 324 | isa = PBXProject; 325 | attributes = { 326 | LastSwiftUpdateCheck = 0930; 327 | LastUpgradeCheck = 0930; 328 | }; 329 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 330 | compatibilityVersion = "Xcode 3.2"; 331 | developmentRegion = English; 332 | hasScannedForEncodings = 0; 333 | knownRegions = ( 334 | en, 335 | ); 336 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 337 | productRefGroup = EE6CA204630FD3376CCFE627172AD575 /* Products */; 338 | projectDirPath = ""; 339 | projectRoot = ""; 340 | targets = ( 341 | 9A40407559B56A48A7ED979FDF05B67A /* LazyImage */, 342 | 9EDACCBE0DDD9C7BBEC62A36EC4C6CAE /* Pods-LazyImageExampleApp */, 343 | D3E520EF55304812A8421EAAB1BF5A59 /* Pods-LazyImageExampleAppTests */, 344 | ); 345 | }; 346 | /* End PBXProject section */ 347 | 348 | /* Begin PBXResourcesBuildPhase section */ 349 | 68AE02F5B91AC6F8AFABD95C19C9247A /* Resources */ = { 350 | isa = PBXResourcesBuildPhase; 351 | buildActionMask = 2147483647; 352 | files = ( 353 | ); 354 | runOnlyForDeploymentPostprocessing = 0; 355 | }; 356 | 82C4F13713AFB522F2F1ECC4AB0A1820 /* Resources */ = { 357 | isa = PBXResourcesBuildPhase; 358 | buildActionMask = 2147483647; 359 | files = ( 360 | ); 361 | runOnlyForDeploymentPostprocessing = 0; 362 | }; 363 | 9613A6E2DA78630BEF138B8177E1C793 /* Resources */ = { 364 | isa = PBXResourcesBuildPhase; 365 | buildActionMask = 2147483647; 366 | files = ( 367 | ); 368 | runOnlyForDeploymentPostprocessing = 0; 369 | }; 370 | /* End PBXResourcesBuildPhase section */ 371 | 372 | /* Begin PBXSourcesBuildPhase section */ 373 | 5E75105B79CE2E71BA797989181A5CFE /* Sources */ = { 374 | isa = PBXSourcesBuildPhase; 375 | buildActionMask = 2147483647; 376 | files = ( 377 | 264ADC4A2C712FE227F889C54D42232B /* LazyImage+Error.swift in Sources */, 378 | 3AE7B13A2713A12C37A2024DA8243F62 /* LazyImage+Loader.swift in Sources */, 379 | 01EF17FA0C39134E228855E96F313931 /* LazyImage+Network.swift in Sources */, 380 | 430B054592CF8A278C5D072C92890114 /* LazyImage+Resizing.swift in Sources */, 381 | B9400DD0952D2206B528E8375089BD56 /* LazyImage+Storage.swift in Sources */, 382 | CE6F3D2479AA77E7E28B8779763C560C /* LazyImage-dummy.m in Sources */, 383 | 3F97089662DFABB0A1F10395F1C98FB9 /* LazyImage.swift in Sources */, 384 | 2BD1EA9A5CF7F726CADCE09DBA3EC1DC /* LazyImageView.swift in Sources */, 385 | ); 386 | runOnlyForDeploymentPostprocessing = 0; 387 | }; 388 | C886EE89ED86411B9686FFE44F860DB5 /* Sources */ = { 389 | isa = PBXSourcesBuildPhase; 390 | buildActionMask = 2147483647; 391 | files = ( 392 | 4084C5C055D375AE5CBA77F6C76DC647 /* Pods-LazyImageExampleApp-dummy.m in Sources */, 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | D98D80BA9455B071D0CA3CCFB08CE64E /* Sources */ = { 397 | isa = PBXSourcesBuildPhase; 398 | buildActionMask = 2147483647; 399 | files = ( 400 | 569BA588D7DCA4AA7EA62719328C3A6C /* Pods-LazyImageExampleAppTests-dummy.m in Sources */, 401 | ); 402 | runOnlyForDeploymentPostprocessing = 0; 403 | }; 404 | /* End PBXSourcesBuildPhase section */ 405 | 406 | /* Begin PBXTargetDependency section */ 407 | 2A15607E346FE4335B63DE443803CC88 /* PBXTargetDependency */ = { 408 | isa = PBXTargetDependency; 409 | name = LazyImage; 410 | target = 9A40407559B56A48A7ED979FDF05B67A /* LazyImage */; 411 | targetProxy = 4598D919FA226D893E2717690A2C2BE6 /* PBXContainerItemProxy */; 412 | }; 413 | /* End PBXTargetDependency section */ 414 | 415 | /* Begin XCBuildConfiguration section */ 416 | 16DFB4F157F2ECC2D0CD4BE9C1B3AEC1 /* Debug */ = { 417 | isa = XCBuildConfiguration; 418 | baseConfigurationReference = 1D42A72590BAB33C93FB89C5EBF47215 /* Pods-LazyImageExampleApp.debug.xcconfig */; 419 | buildSettings = { 420 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 421 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 422 | CLANG_ENABLE_OBJC_WEAK = NO; 423 | CODE_SIGN_IDENTITY = ""; 424 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 425 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 426 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 427 | CURRENT_PROJECT_VERSION = 1; 428 | DEFINES_MODULE = YES; 429 | DYLIB_COMPATIBILITY_VERSION = 1; 430 | DYLIB_CURRENT_VERSION = 1; 431 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 432 | INFOPLIST_FILE = "Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-Info.plist"; 433 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 434 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 435 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 436 | MACH_O_TYPE = staticlib; 437 | MODULEMAP_FILE = "Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp.modulemap"; 438 | OTHER_LDFLAGS = ""; 439 | OTHER_LIBTOOLFLAGS = ""; 440 | PODS_ROOT = "$(SRCROOT)"; 441 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 442 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 443 | SDKROOT = iphoneos; 444 | SKIP_INSTALL = YES; 445 | TARGETED_DEVICE_FAMILY = "1,2"; 446 | VERSIONING_SYSTEM = "apple-generic"; 447 | VERSION_INFO_PREFIX = ""; 448 | }; 449 | name = Debug; 450 | }; 451 | 233A9EB56CDC34C130B31877C3AB39B3 /* Release */ = { 452 | isa = XCBuildConfiguration; 453 | baseConfigurationReference = 458CCA02986CE83F876402D2CB2CED28 /* LazyImage.xcconfig */; 454 | buildSettings = { 455 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 456 | CLANG_ENABLE_OBJC_WEAK = NO; 457 | CODE_SIGN_IDENTITY = ""; 458 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 459 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 460 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 461 | CURRENT_PROJECT_VERSION = 1; 462 | DEFINES_MODULE = YES; 463 | DYLIB_COMPATIBILITY_VERSION = 1; 464 | DYLIB_CURRENT_VERSION = 1; 465 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 466 | GCC_PREFIX_HEADER = "Target Support Files/LazyImage/LazyImage-prefix.pch"; 467 | INFOPLIST_FILE = "Target Support Files/LazyImage/LazyImage-Info.plist"; 468 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 469 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 470 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 471 | MODULEMAP_FILE = "Target Support Files/LazyImage/LazyImage.modulemap"; 472 | PRODUCT_MODULE_NAME = LazyImage; 473 | PRODUCT_NAME = LazyImage; 474 | SDKROOT = iphoneos; 475 | SKIP_INSTALL = YES; 476 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 477 | SWIFT_VERSION = 5.0; 478 | TARGETED_DEVICE_FAMILY = "1,2"; 479 | VALIDATE_PRODUCT = YES; 480 | VERSIONING_SYSTEM = "apple-generic"; 481 | VERSION_INFO_PREFIX = ""; 482 | }; 483 | name = Release; 484 | }; 485 | 2D7ECF2315682B11E1E98870B18CEBF0 /* Debug */ = { 486 | isa = XCBuildConfiguration; 487 | baseConfigurationReference = 5E79E225433EC6D71F391D5D4A6FE8EB /* Pods-LazyImageExampleAppTests.debug.xcconfig */; 488 | buildSettings = { 489 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 490 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 491 | CLANG_ENABLE_OBJC_WEAK = NO; 492 | CODE_SIGN_IDENTITY = ""; 493 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 494 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 495 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 496 | CURRENT_PROJECT_VERSION = 1; 497 | DEFINES_MODULE = YES; 498 | DYLIB_COMPATIBILITY_VERSION = 1; 499 | DYLIB_CURRENT_VERSION = 1; 500 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 501 | INFOPLIST_FILE = "Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-Info.plist"; 502 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 503 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 504 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 505 | MACH_O_TYPE = staticlib; 506 | MODULEMAP_FILE = "Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests.modulemap"; 507 | OTHER_LDFLAGS = ""; 508 | OTHER_LIBTOOLFLAGS = ""; 509 | PODS_ROOT = "$(SRCROOT)"; 510 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 511 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 512 | SDKROOT = iphoneos; 513 | SKIP_INSTALL = YES; 514 | TARGETED_DEVICE_FAMILY = "1,2"; 515 | VERSIONING_SYSTEM = "apple-generic"; 516 | VERSION_INFO_PREFIX = ""; 517 | }; 518 | name = Debug; 519 | }; 520 | 89E8776DB6F7B4BEF0EC85B62CF2CF9E /* Release */ = { 521 | isa = XCBuildConfiguration; 522 | baseConfigurationReference = 64C4DC793231CDBCD8B8E9350DF42F8A /* Pods-LazyImageExampleApp.release.xcconfig */; 523 | buildSettings = { 524 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 525 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 526 | CLANG_ENABLE_OBJC_WEAK = NO; 527 | CODE_SIGN_IDENTITY = ""; 528 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 529 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 530 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 531 | CURRENT_PROJECT_VERSION = 1; 532 | DEFINES_MODULE = YES; 533 | DYLIB_COMPATIBILITY_VERSION = 1; 534 | DYLIB_CURRENT_VERSION = 1; 535 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 536 | INFOPLIST_FILE = "Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-Info.plist"; 537 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 538 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 539 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 540 | MACH_O_TYPE = staticlib; 541 | MODULEMAP_FILE = "Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp.modulemap"; 542 | OTHER_LDFLAGS = ""; 543 | OTHER_LIBTOOLFLAGS = ""; 544 | PODS_ROOT = "$(SRCROOT)"; 545 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 546 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 547 | SDKROOT = iphoneos; 548 | SKIP_INSTALL = YES; 549 | TARGETED_DEVICE_FAMILY = "1,2"; 550 | VALIDATE_PRODUCT = YES; 551 | VERSIONING_SYSTEM = "apple-generic"; 552 | VERSION_INFO_PREFIX = ""; 553 | }; 554 | name = Release; 555 | }; 556 | 8FFB80B8E41FB7B3FA55CFD11A44C9C1 /* Debug */ = { 557 | isa = XCBuildConfiguration; 558 | baseConfigurationReference = 458CCA02986CE83F876402D2CB2CED28 /* LazyImage.xcconfig */; 559 | buildSettings = { 560 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 561 | CLANG_ENABLE_OBJC_WEAK = NO; 562 | CODE_SIGN_IDENTITY = ""; 563 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 564 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 565 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 566 | CURRENT_PROJECT_VERSION = 1; 567 | DEFINES_MODULE = YES; 568 | DYLIB_COMPATIBILITY_VERSION = 1; 569 | DYLIB_CURRENT_VERSION = 1; 570 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 571 | GCC_PREFIX_HEADER = "Target Support Files/LazyImage/LazyImage-prefix.pch"; 572 | INFOPLIST_FILE = "Target Support Files/LazyImage/LazyImage-Info.plist"; 573 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 574 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 575 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 576 | MODULEMAP_FILE = "Target Support Files/LazyImage/LazyImage.modulemap"; 577 | PRODUCT_MODULE_NAME = LazyImage; 578 | PRODUCT_NAME = LazyImage; 579 | SDKROOT = iphoneos; 580 | SKIP_INSTALL = YES; 581 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 582 | SWIFT_VERSION = 5.0; 583 | TARGETED_DEVICE_FAMILY = "1,2"; 584 | VERSIONING_SYSTEM = "apple-generic"; 585 | VERSION_INFO_PREFIX = ""; 586 | }; 587 | name = Debug; 588 | }; 589 | 9CF98432D44E81CDC7D99873EF8E3E8A /* Release */ = { 590 | isa = XCBuildConfiguration; 591 | baseConfigurationReference = DF5FFAAB82F9D3ED19D1A2E4B99DD320 /* Pods-LazyImageExampleAppTests.release.xcconfig */; 592 | buildSettings = { 593 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 594 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 595 | CLANG_ENABLE_OBJC_WEAK = NO; 596 | CODE_SIGN_IDENTITY = ""; 597 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 598 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 599 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 600 | CURRENT_PROJECT_VERSION = 1; 601 | DEFINES_MODULE = YES; 602 | DYLIB_COMPATIBILITY_VERSION = 1; 603 | DYLIB_CURRENT_VERSION = 1; 604 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 605 | INFOPLIST_FILE = "Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-Info.plist"; 606 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 607 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 608 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 609 | MACH_O_TYPE = staticlib; 610 | MODULEMAP_FILE = "Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests.modulemap"; 611 | OTHER_LDFLAGS = ""; 612 | OTHER_LIBTOOLFLAGS = ""; 613 | PODS_ROOT = "$(SRCROOT)"; 614 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 615 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 616 | SDKROOT = iphoneos; 617 | SKIP_INSTALL = YES; 618 | TARGETED_DEVICE_FAMILY = "1,2"; 619 | VALIDATE_PRODUCT = YES; 620 | VERSIONING_SYSTEM = "apple-generic"; 621 | VERSION_INFO_PREFIX = ""; 622 | }; 623 | name = Release; 624 | }; 625 | A105C1752A0A49B30ED621B71E226CDB /* Release */ = { 626 | isa = XCBuildConfiguration; 627 | buildSettings = { 628 | ALWAYS_SEARCH_USER_PATHS = NO; 629 | CLANG_ANALYZER_NONNULL = YES; 630 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 631 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 632 | CLANG_CXX_LIBRARY = "libc++"; 633 | CLANG_ENABLE_MODULES = YES; 634 | CLANG_ENABLE_OBJC_ARC = YES; 635 | CLANG_ENABLE_OBJC_WEAK = YES; 636 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 637 | CLANG_WARN_BOOL_CONVERSION = YES; 638 | CLANG_WARN_COMMA = YES; 639 | CLANG_WARN_CONSTANT_CONVERSION = YES; 640 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 641 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 642 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 643 | CLANG_WARN_EMPTY_BODY = YES; 644 | CLANG_WARN_ENUM_CONVERSION = YES; 645 | CLANG_WARN_INFINITE_RECURSION = YES; 646 | CLANG_WARN_INT_CONVERSION = YES; 647 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 648 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 649 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 650 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 651 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 652 | CLANG_WARN_STRICT_PROTOTYPES = YES; 653 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 654 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 655 | CLANG_WARN_UNREACHABLE_CODE = YES; 656 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 657 | COPY_PHASE_STRIP = NO; 658 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 659 | ENABLE_NS_ASSERTIONS = NO; 660 | ENABLE_STRICT_OBJC_MSGSEND = YES; 661 | GCC_C_LANGUAGE_STANDARD = gnu11; 662 | GCC_NO_COMMON_BLOCKS = YES; 663 | GCC_PREPROCESSOR_DEFINITIONS = ( 664 | "POD_CONFIGURATION_RELEASE=1", 665 | "$(inherited)", 666 | ); 667 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 668 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 669 | GCC_WARN_UNDECLARED_SELECTOR = YES; 670 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 671 | GCC_WARN_UNUSED_FUNCTION = YES; 672 | GCC_WARN_UNUSED_VARIABLE = YES; 673 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 674 | MTL_ENABLE_DEBUG_INFO = NO; 675 | MTL_FAST_MATH = YES; 676 | PRODUCT_NAME = "$(TARGET_NAME)"; 677 | STRIP_INSTALLED_PRODUCT = NO; 678 | SWIFT_COMPILATION_MODE = wholemodule; 679 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 680 | SWIFT_VERSION = 4.2; 681 | SYMROOT = "${SRCROOT}/../build"; 682 | }; 683 | name = Release; 684 | }; 685 | C1391485F05B41BD35738A433056B7FA /* Debug */ = { 686 | isa = XCBuildConfiguration; 687 | buildSettings = { 688 | ALWAYS_SEARCH_USER_PATHS = NO; 689 | CLANG_ANALYZER_NONNULL = YES; 690 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 691 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 692 | CLANG_CXX_LIBRARY = "libc++"; 693 | CLANG_ENABLE_MODULES = YES; 694 | CLANG_ENABLE_OBJC_ARC = YES; 695 | CLANG_ENABLE_OBJC_WEAK = YES; 696 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 697 | CLANG_WARN_BOOL_CONVERSION = YES; 698 | CLANG_WARN_COMMA = YES; 699 | CLANG_WARN_CONSTANT_CONVERSION = YES; 700 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 701 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 702 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 703 | CLANG_WARN_EMPTY_BODY = YES; 704 | CLANG_WARN_ENUM_CONVERSION = YES; 705 | CLANG_WARN_INFINITE_RECURSION = YES; 706 | CLANG_WARN_INT_CONVERSION = YES; 707 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 708 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 709 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 710 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 711 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 712 | CLANG_WARN_STRICT_PROTOTYPES = YES; 713 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 714 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 715 | CLANG_WARN_UNREACHABLE_CODE = YES; 716 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 717 | COPY_PHASE_STRIP = NO; 718 | DEBUG_INFORMATION_FORMAT = dwarf; 719 | ENABLE_STRICT_OBJC_MSGSEND = YES; 720 | ENABLE_TESTABILITY = YES; 721 | GCC_C_LANGUAGE_STANDARD = gnu11; 722 | GCC_DYNAMIC_NO_PIC = NO; 723 | GCC_NO_COMMON_BLOCKS = YES; 724 | GCC_OPTIMIZATION_LEVEL = 0; 725 | GCC_PREPROCESSOR_DEFINITIONS = ( 726 | "POD_CONFIGURATION_DEBUG=1", 727 | "DEBUG=1", 728 | "$(inherited)", 729 | ); 730 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 731 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 732 | GCC_WARN_UNDECLARED_SELECTOR = YES; 733 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 734 | GCC_WARN_UNUSED_FUNCTION = YES; 735 | GCC_WARN_UNUSED_VARIABLE = YES; 736 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 737 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 738 | MTL_FAST_MATH = YES; 739 | ONLY_ACTIVE_ARCH = YES; 740 | PRODUCT_NAME = "$(TARGET_NAME)"; 741 | STRIP_INSTALLED_PRODUCT = NO; 742 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 743 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 744 | SWIFT_VERSION = 4.2; 745 | SYMROOT = "${SRCROOT}/../build"; 746 | }; 747 | name = Debug; 748 | }; 749 | /* End XCBuildConfiguration section */ 750 | 751 | /* Begin XCConfigurationList section */ 752 | 379948F2CCB9527F092F8578412E9C89 /* Build configuration list for PBXNativeTarget "Pods-LazyImageExampleAppTests" */ = { 753 | isa = XCConfigurationList; 754 | buildConfigurations = ( 755 | 2D7ECF2315682B11E1E98870B18CEBF0 /* Debug */, 756 | 9CF98432D44E81CDC7D99873EF8E3E8A /* Release */, 757 | ); 758 | defaultConfigurationIsVisible = 0; 759 | defaultConfigurationName = Release; 760 | }; 761 | 39E9013B7A7024049A0AC490ECCDD6D7 /* Build configuration list for PBXNativeTarget "LazyImage" */ = { 762 | isa = XCConfigurationList; 763 | buildConfigurations = ( 764 | 8FFB80B8E41FB7B3FA55CFD11A44C9C1 /* Debug */, 765 | 233A9EB56CDC34C130B31877C3AB39B3 /* Release */, 766 | ); 767 | defaultConfigurationIsVisible = 0; 768 | defaultConfigurationName = Release; 769 | }; 770 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 771 | isa = XCConfigurationList; 772 | buildConfigurations = ( 773 | C1391485F05B41BD35738A433056B7FA /* Debug */, 774 | A105C1752A0A49B30ED621B71E226CDB /* Release */, 775 | ); 776 | defaultConfigurationIsVisible = 0; 777 | defaultConfigurationName = Release; 778 | }; 779 | 71401F4B1DE29BAC149CDF01E0EE7BB5 /* Build configuration list for PBXNativeTarget "Pods-LazyImageExampleApp" */ = { 780 | isa = XCConfigurationList; 781 | buildConfigurations = ( 782 | 16DFB4F157F2ECC2D0CD4BE9C1B3AEC1 /* Debug */, 783 | 89E8776DB6F7B4BEF0EC85B62CF2CF9E /* Release */, 784 | ); 785 | defaultConfigurationIsVisible = 0; 786 | defaultConfigurationName = Release; 787 | }; 788 | /* End XCConfigurationList section */ 789 | }; 790 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 791 | } 792 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/LazyImage/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 | 6.8.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/LazyImage/LazyImage-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 | 7.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/LazyImage/LazyImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_LazyImage : NSObject 3 | @end 4 | @implementation PodsDummy_LazyImage 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/LazyImage/LazyImage-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/LazyImage/LazyImage-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 LazyImageVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char LazyImageVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/LazyImage/LazyImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module LazyImage { 2 | umbrella header "LazyImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/LazyImage/LazyImage.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/LazyImage 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/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-LazyImageExampleApp/Pods-LazyImageExampleApp-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-LazyImageExampleApp/Pods-LazyImageExampleApp-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## LazyImage 5 | 6 | Copyright (c) 2018 Lampros Giampouras 7 | 8 | Licensed under the Apache License, Version 2.0 (the "License"); 9 | you may not use this file except in compliance with the License. 10 | You may obtain a copy of the License at 11 | 12 | http://www.apache.org/licenses/LICENSE-2.0 13 | 14 | Unless required by applicable law or agreed to in writing, software 15 | distributed under the License is distributed on an "AS IS" BASIS, 16 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | See the License for the specific language governing permissions and 18 | limitations under the License. 19 | 20 | Generated by CocoaPods - https://cocoapods.org 21 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2018 Lampros Giampouras <lamprosgiamp@gmail.com> 18 | 19 | Licensed under the Apache License, Version 2.0 (the "License"); 20 | you may not use this file except in compliance with the License. 21 | You may obtain a copy of the License at 22 | 23 | http://www.apache.org/licenses/LICENSE-2.0 24 | 25 | Unless required by applicable law or agreed to in writing, software 26 | distributed under the License is distributed on an "AS IS" BASIS, 27 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 28 | See the License for the specific language governing permissions and 29 | limitations under the License. 30 | 31 | License 32 | Apache Licence, Version 2.0 33 | Title 34 | LazyImage 35 | Type 36 | PSGroupSpecifier 37 | 38 | 39 | FooterText 40 | Generated by CocoaPods - https://cocoapods.org 41 | Title 42 | 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | StringsTable 48 | Acknowledgements 49 | Title 50 | Acknowledgements 51 | 52 | 53 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_LazyImageExampleApp : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_LazyImageExampleApp 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-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 | # Signs a framework with the provided identity 113 | code_sign_if_enabled() { 114 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 115 | # Use the current code_sign_identity 116 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 117 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 118 | 119 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 120 | code_sign_cmd="$code_sign_cmd &" 121 | fi 122 | echo "$code_sign_cmd" 123 | eval "$code_sign_cmd" 124 | fi 125 | } 126 | 127 | # Strip invalid architectures 128 | strip_invalid_archs() { 129 | binary="$1" 130 | # Get architectures for current target binary 131 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 132 | # Intersect them with the architectures we are building for 133 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 134 | # If there are no archs supported by this binary then warn the user 135 | if [[ -z "$intersected_archs" ]]; then 136 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 137 | STRIP_BINARY_RETVAL=0 138 | return 139 | fi 140 | stripped="" 141 | for arch in $binary_archs; do 142 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 143 | # Strip non-valid architectures in-place 144 | lipo -remove "$arch" -output "$binary" "$binary" 145 | stripped="$stripped $arch" 146 | fi 147 | done 148 | if [[ "$stripped" ]]; then 149 | echo "Stripped $binary of architectures:$stripped" 150 | fi 151 | STRIP_BINARY_RETVAL=1 152 | } 153 | 154 | 155 | if [[ "$CONFIGURATION" == "Debug" ]]; then 156 | install_framework "${BUILT_PRODUCTS_DIR}/LazyImage/LazyImage.framework" 157 | fi 158 | if [[ "$CONFIGURATION" == "Release" ]]; then 159 | install_framework "${BUILT_PRODUCTS_DIR}/LazyImage/LazyImage.framework" 160 | fi 161 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 162 | wait 163 | fi 164 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp-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_LazyImageExampleAppVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_LazyImageExampleAppVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LazyImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LazyImage/LazyImage.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "LazyImage" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_LazyImageExampleApp { 2 | umbrella header "Pods-LazyImageExampleApp-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleApp/Pods-LazyImageExampleApp.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LazyImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LazyImage/LazyImage.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "LazyImage" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/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-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-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-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_LazyImageExampleAppTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_LazyImageExampleAppTests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | 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}\"" 80 | 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}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | 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}\"" 94 | 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}" 95 | else 96 | # 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. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests-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_LazyImageExampleAppTestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_LazyImageExampleAppTestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_LazyImageExampleAppTests { 2 | umbrella header "Pods-LazyImageExampleAppTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-LazyImageExampleAppTests/Pods-LazyImageExampleAppTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/DerivedSources/LazyImage_vers.c: -------------------------------------------------------------------------------- 1 | extern const unsigned char LazyImageVersionString[]; 2 | extern const double LazyImageVersionNumber; 3 | 4 | const unsigned char LazyImageVersionString[] __attribute__ ((used)) = "@(#)PROGRAM:LazyImage PROJECT:Pods-1" "\n"; 5 | const double LazyImageVersionNumber __attribute__ ((used)) = (double)1.; 6 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-all-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-all-target-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-generated-files.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-generated-files.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-own-target-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-project-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage-project-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/LazyImage.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/arm64/LazyImage-OutputFileMap.json: -------------------------------------------------------------------------------- 1 | {"":{"swift-dependencies":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/arm64\/LazyImage-master.swiftdeps"},"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Library\/LazyImage.swift":{"swiftmodule":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/arm64\/LazyImage~partial.swiftmodule","object":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/arm64\/LazyImage.o","llvm-bc":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/arm64\/LazyImage.bc","diagnostics":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/arm64\/LazyImage.dia","dependencies":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/arm64\/LazyImage.d","swift-dependencies":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/arm64\/LazyImage.swiftdeps"}} -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/arm64/LazyImage.LinkFileList: -------------------------------------------------------------------------------- 1 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/arm64/LazyImage-dummy.o 2 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/arm64/LazyImage.o 3 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/arm64/LazyImage_vers.o 4 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/armv7/LazyImage-OutputFileMap.json: -------------------------------------------------------------------------------- 1 | {"":{"swift-dependencies":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/armv7\/LazyImage-master.swiftdeps"},"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Library\/LazyImage.swift":{"swiftmodule":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/armv7\/LazyImage~partial.swiftmodule","object":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/armv7\/LazyImage.o","llvm-bc":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/armv7\/LazyImage.bc","diagnostics":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/armv7\/LazyImage.dia","dependencies":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/armv7\/LazyImage.d","swift-dependencies":"\/Users\/lamprosg\/Desktop\/LazyImageLibrary\/LazyImage\/Example\/build\/Pods.build\/Debug-iphoneos\/LazyImage.build\/Objects-normal\/armv7\/LazyImage.swiftdeps"}} -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/armv7/LazyImage.LinkFileList: -------------------------------------------------------------------------------- 1 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/armv7/LazyImage-dummy.o 2 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/armv7/LazyImage.o 3 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/Objects-normal/armv7/LazyImage_vers.o 4 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/dgph: -------------------------------------------------------------------------------- 1 | DGPH1.04 Mar 19 201819:04:11/UserslamprosgDesktopLazyImageLibrary LazyImageExamplePods -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module LazyImage { 2 | umbrella header "LazyImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module LazyImage.Swift { 9 | header "LazyImage-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/swift-overrides.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/swift-overrides.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/unextended-module-overlay.yaml: -------------------------------------------------------------------------------- 1 | { 2 | 'version': 0, 3 | 'case-sensitive': 'false', 4 | 'roots': [{ 5 | 'type': 'directory', 6 | 'name': '/Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Debug-iphoneos/LazyImage/LazyImage.framework/Modules' 7 | 'contents': [{ 8 | 'type': 'file', 9 | 'name': 'module.modulemap', 10 | 'external-contents': '/Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/LazyImage.build/unextended-module.modulemap', 11 | }] 12 | }] 13 | } 14 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/LazyImage.build/unextended-module.modulemap: -------------------------------------------------------------------------------- 1 | framework module LazyImage { 2 | umbrella header "LazyImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module LazyImage.__Swift { 9 | exclude header "LazyImage-Swift.h" 10 | } 11 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/DerivedSources/Pods_LazyImage_Tests_vers.c: -------------------------------------------------------------------------------- 1 | extern const unsigned char Pods_LazyImage_TestsVersionString[]; 2 | extern const double Pods_LazyImage_TestsVersionNumber; 3 | 4 | const unsigned char Pods_LazyImage_TestsVersionString[] __attribute__ ((used)) = "@(#)PROGRAM:Pods_LazyImage_Tests PROJECT:Pods-1" "\n"; 5 | const double Pods_LazyImage_TestsVersionNumber __attribute__ ((used)) = (double)1.; 6 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Objects-normal/arm64/Pods_LazyImage_Tests.LinkFileList: -------------------------------------------------------------------------------- 1 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Objects-normal/arm64/Pods-LazyImage_Tests-dummy.o 2 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Objects-normal/arm64/Pods_LazyImage_Tests_vers.o 3 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Objects-normal/armv7/Pods_LazyImage_Tests.LinkFileList: -------------------------------------------------------------------------------- 1 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Objects-normal/armv7/Pods-LazyImage_Tests-dummy.o 2 | /Users/lamprosg/Desktop/LazyImageLibrary/LazyImage/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Objects-normal/armv7/Pods_LazyImage_Tests_vers.o 3 | -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-all-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-all-target-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-generated-files.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-generated-files.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-own-target-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-project-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests-project-headers.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/Pods_LazyImage_Tests.hmap -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/dgph: -------------------------------------------------------------------------------- 1 | DGPH1.04 Mar 19 201819:04:11/UserslamprosgDesktopLazyImageLibrary LazyImageExamplePods -------------------------------------------------------------------------------- /Example/build/Pods.build/Debug-iphoneos/Pods-LazyImage_Tests.build/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_LazyImage_Tests { 2 | umbrella header "Pods-LazyImage_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Lampros Giampouras 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /LazyImage.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint LazyImage.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'LazyImage' 11 | s.version = '7.0.1' 12 | s.summary = 'Simple and efficient image lazy loading for iOS written in Swift' 13 | 14 | # This description is used to generate tags and improve search results. 15 | # * Think: What does it do? Why did you write it? What is the focus? 16 | # * Try to keep it short, snappy and to the point. 17 | # * Write the description between the DESC delimiters below. 18 | # * Finally, don't worry about the indent, CocoaPods strips it! 19 | 20 | s.description = <<-DESC 21 | Simple and efficient image lazy loading functionality for the iOS written in Swift. LazyImage offers ease of use and complete control over your images. 22 | 23 | Features 24 | Asynchronous image downloader on a background thread. Main thread is never blocked. 25 | Instance based for better unit testing your code. 26 | Temporary caching of the downloaded images with automatic OS clean up. 27 | Offers the possibility to set a local project image as a placeholder until the actual image is available 28 | Offers the possibility to add a spinner at the center of the imageView until the image is fetched. 29 | If the imageView's size is 0, it sets dimensions to 40x40 prior to the request. This applies to the default UITableViewCells due to the fact when no initial image is present the imageView is hidden. 30 | 31 | Complete control over your image data 32 | Guarantees that the same image url will not be downloaded again but will be fetched from the cache. 33 | Option for force downloading the same image overriding the cache. 34 | Option for clearing images from the cache which correspond to specific URLs so they can be re-downloaded once, instead of force downloading them continuously. 35 | Notifies the caller when the operation is complete providing descreptive error if any. 36 | Image can be scaled to your specific view dimensions for best performance and reduced memory allocation. 37 | Option for setting the cache image size ratio for saving images to you **needed dimensions for fast display. 38 | DESC 39 | 40 | s.homepage = 'https://github.com/lamprosg/LazyImage' 41 | # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 42 | s.license = { :type => 'Apache Licence, Version 2.0', :file => 'LICENSE' } 43 | s.author = { 'Lampros Giampouras' => 'lamprosgiamp@gmail.com' } 44 | s.source = { :git => 'https://github.com/lamprosg/LazyImage.git', :tag => s.version.to_s } 45 | s.social_media_url = 'https://twitter.com/lamprosg' 46 | s.swift_version = '5.0' 47 | 48 | s.ios.deployment_target = '10.0' 49 | 50 | s.source_files = 'Library/*' 51 | 52 | # s.resource_bundles = { 53 | # 'LazyImage' => ['LazyImage/Assets/*.png'] 54 | # } 55 | 56 | # s.public_header_files = 'Pod/Classes/**/*.h' 57 | # s.frameworks = 'UIKit', 'MapKit' 58 | # s.dependency 'AFNetworking', '~> 2.3' 59 | end 60 | -------------------------------------------------------------------------------- /LazyImage/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/LazyImage/Assets/.gitkeep -------------------------------------------------------------------------------- /LazyImage/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/LazyImage/Classes/.gitkeep -------------------------------------------------------------------------------- /LazyImageLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lamprosg/LazyImage/412307cfd3090e9f402485bd5d4b40ef86119da3/LazyImageLogo.png -------------------------------------------------------------------------------- /Library/LazyImage+Error.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImage+Error.swift 3 | // Pods 4 | // 5 | // Created by Lampros Giampouras on 02/01/2019. 6 | // 7 | 8 | /// LazyImage error object 9 | /// 10 | /// - CallFailed: The download request did not succeed. 11 | /// - noDataAvailable: The download request returned nil response. 12 | /// - CorruptedData: The downloaded data are corrupted and can not be read. 13 | public enum LazyImageError: Error { 14 | case CallFailed 15 | case noDataAvailable 16 | case CorruptedData 17 | } 18 | 19 | extension LazyImageError: LocalizedError { 20 | 21 | public var errorDescription: String? { 22 | switch self { 23 | case .CallFailed: 24 | return NSLocalizedString("The download request did not succeed.", comment: "Error") 25 | 26 | case .noDataAvailable: 27 | return NSLocalizedString("The download request returned nil response.", comment: "Error") 28 | 29 | case .CorruptedData: 30 | return NSLocalizedString("The downloaded data are corrupted and can not be read.", comment: "Error") 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Library/LazyImage+Loader.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImage+Loader.swift 3 | // LazyImage 4 | // 5 | // Created by Lampros Giampouras on 02/01/2019. 6 | // 7 | 8 | extension LazyImage { 9 | 10 | //MARK: - Show Image 11 | 12 | func load(imageView:UIImageView, url:String?, defaultImage:String?, completion: @escaping (_ error:LazyImageError?) -> Void) -> Void { 13 | 14 | self.setupImageBeforeLoading(imageView: imageView, defaultImage: defaultImage) 15 | 16 | if url == nil || url!.isEmpty { 17 | let error: LazyImageError = LazyImageError.CallFailed 18 | completion(error) 19 | return //URL is null, don't proceed 20 | } 21 | 22 | //Clip subviews for image view 23 | imageView.clipsToBounds = true; 24 | 25 | //Force download image if required 26 | if self.forceDownload == true { 27 | 28 | //Lazy load image (Asychronous call) 29 | self.lazyLoad(imageView: imageView, url: url) { 30 | (error:LazyImageError?) in 31 | 32 | //Completion block reference 33 | completion(error) 34 | } 35 | return 36 | } 37 | 38 | //Check if image exists 39 | let imagePath:String? = self.checkIfImageExists(url: url!) 40 | 41 | if let imagePath = imagePath { 42 | 43 | self.setUpZeroFramedImageIfNeeded(imageView: imageView) 44 | 45 | //Go to the background thread to read the image 46 | DispatchQueue.global(qos: .userInteractive).async { 47 | //Try to read the image 48 | self.readImage(imagePath: imagePath) { 49 | [weak self] (image:UIImage?) in 50 | 51 | if let image = image { 52 | //Image read successfully 53 | 54 | self?.updateImageView(imageView:imageView, fetchedImage:image) { 55 | 56 | //Completion block 57 | //Data available with no errors 58 | completion(nil) 59 | return 60 | } 61 | } 62 | else { 63 | //Image exists but corrupted. Load it again 64 | 65 | //Lazy load image (Asychronous call) 66 | self?.lazyLoad(imageView: imageView, url: url) { 67 | (error:LazyImageError?) in 68 | 69 | //Call completion block 70 | completion(error) 71 | } 72 | } 73 | } 74 | } 75 | } 76 | else 77 | { 78 | //Image does not exist. Load it 79 | 80 | //Lazy load image (Asychronous call) 81 | self.lazyLoad(imageView: imageView, url: url) { 82 | (error:LazyImageError?) in 83 | 84 | //Completion block reference 85 | completion(error) 86 | } 87 | 88 | } 89 | } 90 | 91 | func lazyLoad(imageView:UIImageView, url:String?, completion: @escaping (_ error:LazyImageError?) -> Void) -> Void { 92 | 93 | if url == nil || url!.isEmpty { 94 | let error: LazyImageError = LazyImageError.CallFailed 95 | completion(error) 96 | return //URL is null, don't proceed 97 | } 98 | 99 | //Show spinner 100 | if self.showSpinner { 101 | self.showActivityIndicatory(view:imageView) 102 | } 103 | 104 | //Make the call 105 | self.fetchImage(url: url) { 106 | 107 | [weak self] (image:UIImage?, error:LazyImageError?) in 108 | 109 | var finalError = error 110 | if finalError == nil { 111 | 112 | if let img = image { 113 | 114 | let imgName:String? = self?.stripURL(url: url!) 115 | 116 | //Image path 117 | let imagePath:String? = self?.storagePathforImageName(name: imgName!) 118 | 119 | //Save the image 120 | self?.saveImage(image: img, imagePath: imagePath!) 121 | } 122 | else { 123 | //Completion block 124 | //Data available but corrupted 125 | finalError = LazyImageError.CorruptedData 126 | } 127 | } 128 | 129 | //Update the UI 130 | self?.updateImageView(imageView:imageView, fetchedImage:image) { 131 | 132 | //Completion block 133 | //Data available with no errors 134 | completion(finalError) 135 | } 136 | } 137 | } 138 | 139 | //MARK: Update the image 140 | 141 | func updateImageView(imageView:UIImageView, fetchedImage:UIImage?, 142 | completion: @escaping () -> Void) -> Void { 143 | 144 | //Check if we have a new size 145 | var image:UIImage? = fetchedImage 146 | 147 | if let _ = image, 148 | let newSize = self.desiredImageSize, 149 | let fetchedImageSize = fetchedImage?.size, 150 | !fetchedImageSize.equalTo(newSize) { 151 | image = self.resize(image: image!, targetSize: newSize) 152 | } 153 | 154 | //Go to main thread and update the UI 155 | DispatchQueue.main.async(execute: { [weak self] () -> Void in 156 | 157 | //Hide spinner 158 | if let _ = self?.showSpinner { 159 | self?.removeActivityIndicator() 160 | self?.showSpinner = false 161 | } 162 | 163 | //Set the image 164 | imageView.image = image; 165 | 166 | //Completion block 167 | completion() 168 | }) 169 | } 170 | 171 | /****************************************************/ 172 | //MARK: - Show activity indicator 173 | 174 | private func showActivityIndicatory(view: UIView) { 175 | 176 | self.removeActivityIndicator() 177 | self.spinner = UIActivityIndicatorView() 178 | self.spinner!.frame = view.bounds 179 | self.spinner!.hidesWhenStopped = true 180 | self.spinner!.style = UIActivityIndicatorView.Style.gray 181 | view.addSubview(self.spinner!) 182 | self.spinner!.startAnimating() 183 | } 184 | 185 | private func removeActivityIndicator() { 186 | 187 | if let spinner = self.spinner { 188 | 189 | spinner.stopAnimating() 190 | spinner.removeFromSuperview() 191 | } 192 | //Reset 193 | self.spinner = nil 194 | } 195 | 196 | /****************************************************/ 197 | //MARK: - Preload setup image 198 | 199 | /// Sets up the image before loading with a default image 200 | private func setupImageBeforeLoading(imageView:UIImageView, defaultImage:String?) -> Void { 201 | 202 | if let defaultImg = defaultImage { 203 | imageView.image = UIImage(named:defaultImg) 204 | } 205 | } 206 | 207 | //MARK: - Setup 0 framed image 208 | 209 | private func setUpZeroFramedImageIfNeeded(imageView:UIImageView) -> Void { 210 | 211 | //Check if imageview size is 0 212 | let width:CGFloat = imageView.bounds.size.width; 213 | let height:CGFloat = imageView.bounds.size.height; 214 | 215 | //In case of default cell images (Dimensions are 0 when not present) 216 | if height == 0 && width == 0 { 217 | 218 | var frame:CGRect = imageView.frame 219 | frame.size.width = 40 220 | frame.size.height = 40 221 | imageView.frame = frame 222 | } 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /Library/LazyImage+Network.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImage+Network.swift 3 | // LazyImage 4 | // 5 | // Created by Lampros Giampouras on 02/01/2019. 6 | // 7 | 8 | extension LazyImage { 9 | 10 | //MARK: - Call 11 | 12 | /// Method for fetching the image for a specific URL. 13 | /// 14 | /// - Parameters: 15 | /// - url: The corresponding URL of the image 16 | /// - completion: Closure with the image or error if any 17 | public func fetchImage(url:String?, completion: @escaping (_ image:UIImage?, _ error:LazyImageError?) -> Void) -> Void { 18 | 19 | guard let url = url else { 20 | 21 | //Call did not succeed 22 | let error: LazyImageError = LazyImageError.CallFailed 23 | completion(nil, error) 24 | return 25 | } 26 | 27 | //Lazy load image (Asychronous call) 28 | let urlObject:URL = URL(string:url)! 29 | let urlRequest:URLRequest = URLRequest(url: urlObject) 30 | 31 | let backgroundQueue = DispatchQueue(label:"imageBackgroundQue", 32 | qos: .background, 33 | target: nil) 34 | 35 | backgroundQueue.async(execute: { 36 | 37 | self.session = URLSession(configuration: URLSessionConfiguration.default) 38 | let task = self.session?.dataTask(with: urlRequest, completionHandler: { (data, response, error) in 39 | 40 | if response != nil { 41 | let httpResponse:HTTPURLResponse = response as! HTTPURLResponse 42 | 43 | if httpResponse.statusCode != 200 { 44 | Swift.debugPrint("LazyImage status code : \(httpResponse.statusCode)") 45 | 46 | //Completion block 47 | //Call did not succeed 48 | let error: LazyImageError = LazyImageError.CallFailed 49 | completion(nil, error) 50 | return 51 | } 52 | } 53 | 54 | if data == nil { 55 | if error != nil { 56 | Swift.debugPrint("Error : \(error!.localizedDescription)") 57 | } 58 | Swift.debugPrint("LazyImage: No image data available") 59 | 60 | //No data available 61 | let error: LazyImageError = LazyImageError.noDataAvailable 62 | completion(nil, error) 63 | return 64 | } 65 | 66 | completion(UIImage(data:data!), nil) 67 | return 68 | }) 69 | task?.resume() 70 | }) 71 | } 72 | 73 | //MARK: - Cancel session 74 | 75 | /// Cancels the image request. 76 | /// 77 | /// - Returns: true if there is a valid session 78 | public func cancel() -> Bool { 79 | 80 | guard let _ = self.session else { 81 | return false 82 | } 83 | 84 | self.showSpinner = false 85 | self.forceDownload = false 86 | self.spinner = nil 87 | self.desiredImageSize = nil 88 | 89 | self.session?.invalidateAndCancel() 90 | self.session = nil 91 | return true 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /Library/LazyImage+Resizing.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImage+Resizing.swift 3 | // LazyImage 4 | // 5 | // Created by Lampros Giampouras on 02/01/2019. 6 | // 7 | //Image resizing techniques 8 | //https://nshipster.com/image-resizing/ 9 | //Optimizing images 10 | //https://www.swiftjectivec.com/optimizing-images/ 11 | 12 | extension LazyImage { 13 | 14 | //MARK: - Resize image 15 | 16 | func resize(image: UIImage, targetSize: CGSize) -> UIImage { 17 | 18 | let horizontalRatio:CGFloat = targetSize.width / image.size.width 19 | let verticalRatio:CGFloat = targetSize.height / image.size.height 20 | 21 | let ratio = max(horizontalRatio, verticalRatio) 22 | let newSize = CGSize(width: image.size.width * ratio, height: image.size.height * ratio) 23 | UIGraphicsBeginImageContextWithOptions(newSize, true, 0) 24 | image.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize)) 25 | let newImage = UIGraphicsGetImageFromCurrentImageContext() 26 | UIGraphicsEndImageContext() 27 | return newImage! 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Library/LazyImage+Storage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImage+Storage.swift 3 | // Pods 4 | // 5 | // Created by Lampros Giampouras on 02/01/2019. 6 | // 7 | 8 | extension LazyImage { 9 | 10 | //MARK: - URL string stripping 11 | 12 | //TODO: Change this to hash the url 13 | func stripURL(url:String) -> String { 14 | return url.replacingOccurrences(of: "/", with: "", options: NSString.CompareOptions.literal, range: nil) 15 | } 16 | 17 | /* 18 | private func SHA256(url:String) -> String { 19 | 20 | let data = url(using: String.Encoding.utf8) 21 | let res = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH)) 22 | CC_SHA256(((data! as NSData)).bytes, CC_LONG(data!.count), res?.mutableBytes.assumingMemoryBound(to: UInt8.self)) 23 | let hashedString = "\(res!)".replacingOccurrences(of: "", with: "").replacingOccurrences(of: " ", with: "") 24 | let badchar: CharacterSet = CharacterSet(charactersIn: "\"<\",\">\"") 25 | let cleanedstring: String = (hashedString.components(separatedBy: badchar) as NSArray).componentsJoined(by: "") 26 | return cleanedstring 27 | 28 | } 29 | */ 30 | 31 | //MARK: - Image storage 32 | 33 | /// The storage path for a given image unique name 34 | /// 35 | /// - Parameter name: The unique name of the image 36 | /// - Returns: Returns the storage path 37 | func storagePathforImageName(name:String) -> String { 38 | 39 | var path = String(format:"%@/%@", NSTemporaryDirectory(), name) 40 | 41 | if let cacheSize = self.cacheSize { 42 | path = path + "\(cacheSize.width)" + "x" + "\(cacheSize.height)" 43 | } 44 | return path 45 | } 46 | 47 | /// Saves an image to a given storage path 48 | /// 49 | /// - Parameters: 50 | /// - image: The image to be saved 51 | /// - imagePath: The image path where the image will be saved 52 | func saveImage(image:UIImage, imagePath:String) { 53 | 54 | //Store image to the temporary folder for later use 55 | var error: Error? 56 | 57 | do { 58 | var imageToBeSaved:UIImage = image 59 | 60 | if let cacheSize = self.cacheSize, 61 | !image.size.equalTo(cacheSize) { 62 | imageToBeSaved = self.resize(image: image, targetSize: cacheSize) 63 | } 64 | try imageToBeSaved.pngData()!.write(to: URL(fileURLWithPath: imagePath), options: []) 65 | } catch let error1 { 66 | error = error1 67 | if let actualError = error { 68 | Swift.debugPrint("Image not saved. \(actualError)") 69 | } 70 | } 71 | } 72 | 73 | func readImage(imagePath:String, completion: @escaping (_ error:UIImage?) -> Void) -> Void { 74 | var image:UIImage? 75 | if let imageData = try? Data(contentsOf: URL(fileURLWithPath: imagePath)) { 76 | //Image exists 77 | let dat:Data = imageData 78 | 79 | image = UIImage(data:dat) 80 | } 81 | completion(image) 82 | } 83 | 84 | //MARK: - Clear cache for specific URLs 85 | 86 | /// Clear the storage for specific URLs if they are already downloaded 87 | /// 88 | /// - Parameter urls: The urls array for which the storage will be cleared 89 | public func clearCacheForURLs(urls:Array) -> Void { 90 | 91 | for i in stride(from: 0, to: urls.count, by: 1) { 92 | 93 | let imgName:String = self.stripURL(url: urls[i]) 94 | 95 | //Image path 96 | let imagePath:String = self.storagePathforImageName(name: imgName) 97 | 98 | //Check if image exists 99 | let imageExists:Bool = FileManager.default.fileExists(atPath: imagePath) 100 | 101 | if imageExists { 102 | var error: Error? 103 | 104 | do { 105 | try FileManager.default.removeItem(atPath: imagePath) 106 | } catch let error1 { 107 | error = error1 108 | if let actualError = error { 109 | Swift.debugPrint("Image not saved. \(actualError)") 110 | } 111 | } 112 | } 113 | } 114 | } 115 | 116 | //MARK - Check image existence 117 | 118 | /// Checks if image exists in storage 119 | /// 120 | /// - Parameter url: The image URL 121 | /// - Returns: returns the image path or nil if image does not exists 122 | func checkIfImageExists(url:String) -> String? { 123 | 124 | let imgName:String = self.stripURL(url: url) 125 | 126 | //Image path 127 | var imagePath:String? = self.storagePathforImageName(name: imgName) 128 | 129 | //Check if image exists 130 | let imageExists:Bool = FileManager.default.fileExists(atPath: imagePath!) 131 | 132 | if !imageExists { 133 | imagePath = nil 134 | } 135 | 136 | return imagePath 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /Library/LazyImage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImage.swift 3 | // LazyImage 4 | // 5 | // Created by Lampros Giampouras on 5/4/15. 6 | // Copyright (c) 2015 Lampros Giampouras. All rights reserved. 7 | // https://github.com/lamprosg/LazyImage 8 | 9 | // Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | 12 | import Foundation 13 | import UIKit 14 | 15 | open class LazyImage: NSObject { 16 | 17 | var backgroundView:UIView? 18 | var oldFrame:CGRect = CGRect() 19 | var imageAlreadyZoomed:Bool = false // Flag to track whether there is currently a zoomed image 20 | var showSpinner:Bool = false // Flag to track wether to show spinner 21 | var forceDownload:Bool = false // Flag to force download an image even if it is cached on the disk 22 | var spinner:UIActivityIndicatorView? // Actual spinner 23 | var desiredImageSize:CGSize? // Image size requested for resizing for a specific fetch operation. 24 | var cacheSize:CGSize? // Default image size. Images will be stored in cache according to this size 25 | 26 | /// The URL session request 27 | var session:URLSession? 28 | 29 | //MARK: - Image lazy loading 30 | 31 | //MARK: - Image lazy loading without completion 32 | 33 | /// Downloads and shows an image URL to the specified image view 34 | /// 35 | /// - Parameters: 36 | /// - imageView: The image view reference to show the image 37 | /// - url: The URL of the image to be downloaded 38 | public func show(imageView:UIImageView, url:String?) -> Void { 39 | self.showSpinner = false 40 | self.forceDownload = false 41 | self.desiredImageSize = nil 42 | self.load(imageView: imageView, url: url, defaultImage: nil) {_ in} 43 | } 44 | 45 | /// Downloads and shows an image URL to the specified image view presenting a spinner until the data are fully downloaded 46 | /// 47 | /// - Parameters: 48 | /// - imageView: The image view reference to show the image 49 | /// - url: The URL of the image to be downloaded 50 | public func showWithSpinner(imageView:UIImageView, url:String?) -> Void { 51 | self.showSpinner = true 52 | self.forceDownload = false 53 | self.desiredImageSize = nil 54 | self.load(imageView: imageView, url: url, defaultImage: nil) {_ in} 55 | } 56 | 57 | /// Downloads and shows an image URL to the specified image view presenting a default image until the data are fully downloaded 58 | /// 59 | /// - Parameters: 60 | /// - imageView: The image view reference to show the image 61 | /// - url: The URL of the image to be downloaded 62 | /// - defaultImage: The default image to be shown until the image data are fully downloaded 63 | public func show(imageView:UIImageView, url:String?, defaultImage:String?) -> Void { 64 | self.showSpinner = false 65 | self.forceDownload = false 66 | self.desiredImageSize = nil 67 | self.load(imageView: imageView, url: url, defaultImage: defaultImage) {_ in} 68 | } 69 | 70 | /// Downloads and shows an image URL to the specified image view presenting both a default image and a spinner until the data are fully downloaded 71 | /// 72 | /// - Parameters: 73 | /// - imageView: The image view reference to show the image 74 | /// - url: The URL of the image to be downloaded 75 | /// - defaultImage: The default image to be shown until the image data are fully downloaded 76 | public func showWithSpinner(imageView:UIImageView, url:String?, defaultImage:String?) -> Void { 77 | self.showSpinner = true 78 | self.forceDownload = false 79 | self.desiredImageSize = nil 80 | self.load(imageView: imageView, url: url, defaultImage: defaultImage) {_ in} 81 | } 82 | 83 | //MARK: - Image lazy loading with completion 84 | 85 | /// Downloads and shows an image URL to the specified image view presenting a spinner until the data are fully downloaded 86 | /// 87 | /// - Parameters: 88 | /// - imageView: The image view reference to show the image 89 | /// - url: The URL of the image to be downloaded 90 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 91 | public func showWithSpinner(imageView:UIImageView, url:String?, completion: @escaping (_ error:LazyImageError?) -> Void) -> Void { 92 | self.showSpinner = true 93 | self.forceDownload = false 94 | self.desiredImageSize = nil 95 | self.load(imageView: imageView, url: url, defaultImage: nil) { 96 | (error:LazyImageError?) in 97 | 98 | //Call completion block 99 | completion(error) 100 | } 101 | } 102 | 103 | /// Downloads and shows an image URL to the specified image view 104 | /// 105 | /// - Parameters: 106 | /// - imageView: The image view reference to show the image 107 | /// - url: The URL of the image to be downloaded 108 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 109 | public func show(imageView:UIImageView, url:String?, completion: @escaping ( _ error:LazyImageError?) -> Void) -> Void { 110 | self.showSpinner = true 111 | self.forceDownload = false 112 | self.desiredImageSize = nil 113 | self.load(imageView: imageView, url: url, defaultImage: nil) { 114 | (error:LazyImageError?) in 115 | 116 | //Call completion block 117 | completion(error) 118 | } 119 | } 120 | 121 | //MARK: - Image lazy loading with completion and image resizing 122 | 123 | /// Downloads and shows an image URL to the specified image view presenting a spinner until the data are fully downloaded. 124 | /// The image is rescaled according to the size provided for better rendering 125 | /// 126 | /// - Parameters: 127 | /// - imageView: The image view reference to show the image 128 | /// - url: The URL of the image to be downloaded 129 | /// - size: The new scaling size of the image. Size will be used to calculate the ratio of the new sized image. 130 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 131 | public func showWithSpinner(imageView:UIImageView, url:String?, size:CGSize, completion: @escaping (_ error:LazyImageError?) -> Void) -> Void { 132 | self.showSpinner = true 133 | self.forceDownload = false 134 | self.desiredImageSize = size 135 | self.load(imageView: imageView, url: url, defaultImage: nil) { 136 | (error:LazyImageError?) in 137 | 138 | //Call completion block 139 | completion(error) 140 | } 141 | } 142 | 143 | /// Downloads and shows an image URL to the specified image view. 144 | /// The image is rescaled according to the size provided for better rendering 145 | /// 146 | /// - Parameters: 147 | /// - imageView: The image view reference to show the image 148 | /// - url: The URL of the image to be downloaded 149 | /// - size: The new scaling size of the image. Size will be used to calculate the ratio of the new sized image. 150 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 151 | public func show(imageView:UIImageView, url:String?, size:CGSize, completion: @escaping (_ error:LazyImageError?) -> Void) -> Void { 152 | self.showSpinner = false 153 | self.forceDownload = false 154 | self.desiredImageSize = size 155 | self.load(imageView: imageView, url: url, defaultImage: nil) { 156 | (error:LazyImageError?) in 157 | 158 | //Call completion block 159 | completion(error) 160 | } 161 | } 162 | 163 | //MARK: - Image lazy loading with force download 164 | 165 | /// Force downloads, even if cached, and shows an image URL to the specified image view presenting a spinner. 166 | /// The image is rescaled according to the size provided for better rendering 167 | /// 168 | /// - Parameters: 169 | /// - imageView: The image view reference to show the image 170 | /// - url: The URL of the image to be downloaded 171 | /// - size: The new scaling size of the image. Size will be used to calculate the ratio of the new sized image. 172 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 173 | public func showOverrideWithSpinner(imageView:UIImageView, url:String?) -> Void { 174 | self.showSpinner = true 175 | self.forceDownload = true 176 | self.desiredImageSize = nil 177 | self.load(imageView: imageView, url: url, defaultImage: nil) {_ in} 178 | } 179 | 180 | /// Force downloads, even if cached, and shows an image URL to the specified image view. 181 | /// The image is rescaled according to the size provided for better rendering 182 | /// 183 | /// - Parameters: 184 | /// - imageView: The image view reference to show the image 185 | /// - url: The URL of the image to be downloaded 186 | /// - size: The new scaling size of the image. Size will be used to calculate the ratio of the new sized image. 187 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 188 | public func showOverride(imageView:UIImageView, url:String?) -> Void { 189 | self.showSpinner = false 190 | self.forceDownload = true 191 | self.desiredImageSize = nil 192 | self.load(imageView: imageView, url: url, defaultImage: nil) {_ in} 193 | } 194 | 195 | //MARK: - Image lazy loading with force download, with completion and image resizing 196 | 197 | /// Force downloads, even if cached, and shows an image URL to the specified image view presenting a spinner. 198 | /// The image is rescaled according to the size provided for better rendering 199 | /// 200 | /// - Parameters: 201 | /// - imageView: The image view reference to show the image 202 | /// - url: The URL of the image to be downloaded 203 | /// - size: The new scaling size of the image. Size will be used to calculate the ratio of the new sized image. 204 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 205 | public func showOverrideWithSpinner(imageView:UIImageView, url:String?, size:CGSize, completion: @escaping (_ error:LazyImageError?) -> Void) -> Void { 206 | self.showSpinner = true 207 | self.forceDownload = true 208 | self.desiredImageSize = size 209 | self.load(imageView: imageView, url: url, defaultImage: nil) { 210 | (error:LazyImageError?) in 211 | 212 | //Call completion block 213 | completion(error) 214 | } 215 | } 216 | 217 | /// Force downloads, even if cached, and shows an image URL to the specified image view. 218 | /// The image is rescaled according to the size provided for better rendering 219 | /// 220 | /// - Parameters: 221 | /// - imageView: The image view reference to show the image 222 | /// - url: The URL of the image to be downloaded 223 | /// - size: The new scaling size of the image. Size will be used to calculate the ratio of the new sized image. 224 | /// - completion: The completion closure when the data are fully downloaded and presented on the image view 225 | public func showOverride(imageView:UIImageView, url:String?, size:CGSize, completion: @escaping (_ error:LazyImageError?) -> Void) -> Void { 226 | self.showSpinner = false 227 | self.forceDownload = true 228 | self.desiredImageSize = size 229 | self.load(imageView: imageView, url: url, defaultImage: nil) { 230 | (error:LazyImageError?) in 231 | 232 | //Call completion block 233 | completion(error) 234 | } 235 | } 236 | 237 | //MARK: - Prefetch image 238 | 239 | /// Prefetched an image and saves it in cache ready for display. 240 | /// 241 | /// - Parameter url: The url to be fetched 242 | public func prefetchImage(url: String?) -> Void { 243 | 244 | self.fetchImage(url: url) { [weak self] (image:UIImage?, error:LazyImageError?) in 245 | guard let fetchedImage = image else { 246 | return 247 | } 248 | 249 | if error == nil { 250 | let imgName:String? = self?.stripURL(url: url!) 251 | let imagePath:String? = self?.storagePathforImageName(name: imgName!) 252 | 253 | //Save the image 254 | self?.saveImage(image: fetchedImage, imagePath: imagePath!) 255 | } 256 | } 257 | } 258 | 259 | //MARK: - Default cache image size 260 | 261 | /// The new default scaling size of the image. This size will be used to calculate the ratio of the new image. The new sized image will be stored in cache instead of the original one. Use this method to store specific size ration images in cache for faster display. 262 | /// 263 | /// - Parameter size: The new default scaling size of the image 264 | public func setCacheSize(_ size:CGSize?) -> Void { 265 | self.cacheSize = size 266 | } 267 | } 268 | -------------------------------------------------------------------------------- /Library/LazyImageView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LazyImageView.swift 3 | // LazyImage 4 | // 5 | // Created by Lampros Giampouras on 01/12/2018. 6 | // 7 | 8 | import UIKit 9 | 10 | @objc public protocol LazyImageViewDelegate: class { 11 | 12 | //Error downloading image 13 | @objc optional func errorDownloadingImage(url:String) -> Void 14 | } 15 | 16 | open class LazyImageView: UIImageView { 17 | 18 | /// The delegate 19 | open weak var delegate: LazyImageViewDelegate? 20 | 21 | /// The image url 22 | open var imageURL:String? { 23 | didSet { 24 | self.loaded = false 25 | self.setNeedsLayout() 26 | self.layoutIfNeeded() 27 | } 28 | } 29 | 30 | ///The LazyImage object 31 | lazy var lazyImage:LazyImage = LazyImage() 32 | 33 | private var loaded:Bool = false 34 | 35 | override open func layoutSubviews() { 36 | super.layoutSubviews() 37 | 38 | if (self.frame.size != CGSize.zero) && !self.loaded { 39 | self.loaded = true 40 | 41 | if let imageURL = self.imageURL { 42 | 43 | //Reset 44 | self.image = UIImage() 45 | 46 | let newSize = CGSize(width: self.frame.size.width, height: self.frame.size.height) 47 | 48 | //Set default image size ratio 49 | self.lazyImage.setCacheSize(newSize) 50 | 51 | self.lazyImage.showWithSpinner(imageView:self, url:imageURL) { 52 | 53 | [weak self] (error:LazyImageError?) in 54 | 55 | if let _ = error { 56 | self?.delegate?.errorDownloadingImage?(url: imageURL) 57 | } 58 | } 59 | } 60 | } 61 | } 62 | 63 | //MARK: - Cancel the request 64 | 65 | /// Cancels the image request. 66 | /// 67 | /// - Returns: true if there is a valid session 68 | public func cancelRequest() -> Bool { 69 | return self.lazyImage.cancel() 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 | 5 | 6 |

7 | 8 | 9 | 10 | [![Version](https://img.shields.io/cocoapods/v/LazyImage.svg?style=flat&logo=Swift)](https://cocoapods.org/pods/LazyImage) 11 | [![License](https://img.shields.io/cocoapods/l/LazyImage.svg?style=flat&logo=Swift)](https://cocoapods.org/pods/LazyImage) 12 | [![Platform](https://img.shields.io/cocoapods/p/LazyImage.svg?style=flat&logo=Swift)](https://cocoapods.org/pods/LazyImage) 13 | [![Build Status](https://travis-ci.org/lamprosg/LazyImage.svg?branch=master)](https://travis-ci.org/lamprosg/LazyImage) 14 | 15 | 16 | 17 | Simple and efficient image lazy loading functionality for the iOS written in Swift. 18 | 19 | **LazyImage** offers ease of use and complete control over your images by integrating a very light, need-to-have only, code. 20 | 21 | 22 | 23 | 24 | 25 | ## Features 26 | 27 | * Asynchronous image downloader on a background thread. ****Main thread is never blocked****. 28 | 29 | * ****Instance based**** for better unit testing your code. 30 | 31 | * ****Temporary caching**** of the downloaded images with automatic OS clean up. 32 | 33 | * Set a local project image as a ****placeholder**** or a ****spinner**** until the actual image is available 34 | 35 | * If the imageView's size is 0, it sets dimensions to 40x40 prior to the request. This applies to the default UITableViewCells due to the fact when no initial image is present the imageView is hidden. 36 | 37 | 38 | 39 | ## Complete control over your image data 40 | 41 | * Guarantees that the same image url will not be downloaded again but will be ****fetched from the cache****. 42 | 43 | * ****Option for force downloading**** the same image overriding the cache. 44 | 45 | * Option for ****clearing images from the cache**** which correspond to ****specific URLs**** so they can be re-downloaded once, 46 | 47 | instead of force downloading them continuously. 48 | 49 | * Notifies the caller when the operation is complete providing ****descriptive error if any****. 50 | 51 | * Image can be ****scaled automatically**** to your specific view dimensions for best performance and ****reduced memory allocation****. 52 | 53 | * Set the ****cache image size**** ratio for saving images. Display them ****super fast**** 🚀. 54 | 55 | 56 | 57 | 58 | 59 | ## Installation - Cocoapods 60 | 61 | > pod 'LazyImage' 62 | 63 | 64 | ## Usage 65 | 66 | 67 | 68 | ### LazyImageView 69 | 70 | The simplest way to show an image on an image view is by setting the type to LazyImageView and setting the imageURL property. 71 | 72 | The downloaded image will be cached to your image view size for best performance. 73 | 74 | 75 | 76 | Example: 77 | 78 | ```swift 79 | 80 | @IBOutlet weak var imageView: LazyImageView! 81 | 82 | //Normal image 83 | 84 | imageview.image = UIImage(named:"someAsset") 85 | 86 | //Network image 87 | 88 | imageView.imageURL = "https://domain.com/thepathtotheimage.png" 89 | 90 | //Option to cancel the request 91 | 92 | let canceled = imageView.cancelRequest() 93 | ``` 94 | 95 | In case you want to know if the image fails to be retrieved. 96 | 97 | Use the ***LazyImageViewDelegate***. 98 | 99 | 100 | 101 | ```swift 102 | 103 | @IBOutlet weak var imageView: LazyImageView! 104 | 105 | imageView.delegate = 106 | 107 | //Set the image URL 108 | 109 | imageView.imageURL = "https://domain.com/thepathtotheimage.png" 110 | 111 | 112 | //If an error occurs this will be called 113 | 114 | //url is the image URL failed to be fetched. 115 | 116 | func errorDownloadingImage(url:String) -> Void { 117 | } 118 | ``` 119 | 120 | 121 | ## LazyImage 122 | 123 | 124 | 125 | **For complete control you can use the LazyImage object on any UIImageview.** 126 | 127 | Below are some exampes of loading images 128 | 129 | 130 | 131 | - **Show an image on an imageView** 132 | 133 | 134 | 135 | Create a lazy image object that will hold the instance. 136 | 137 | 138 | 139 | It is best that you create one instance per object responsible for the image 140 | 141 | ```swift 142 | 143 | lazy var lazyImage:LazyImage = LazyImage() 144 | 145 | ``` 146 | 147 | 148 | 149 | Without completion closure 150 | 151 | ```swift 152 | 153 | self.lazyImage.show(imageView:self.imageView, url:"http://something.com/someimage.png") 154 | 155 | ``` 156 | 157 | 158 | 159 | With spinner 160 | 161 | ```swift 162 | 163 | self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png") 164 | 165 | ``` 166 | 167 | 168 | 169 | With completion closure 170 | 171 | ```swift 172 | 173 | self.lazyImage.show(imageView:self.imageView, url:"http://something.com/someimage.png") { 174 | 175 | (error:LazyImageError?) in 176 | 177 | //Image loaded. Do something.. 178 | } 179 | ``` 180 | 181 | ```swift 182 | 183 | self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png") { 184 | 185 | (error:LazyImageError?) in 186 | 187 | //Image loaded. Do something.. 188 | } 189 | ``` 190 | 191 | - **Show an image with a local image placeholder** 192 | 193 | 194 | 195 | With completion 196 | 197 | ```swift 198 | 199 | self.lazyImage.show(imageView:self.imageView, url:"http://something.com/someimage.png", defaultImage:"someLocalImageName") { 200 | 201 | (error:LazyImageError?) in 202 | 203 | //Image loaded. Do something.. 204 | } 205 | ``` 206 | 207 | - **Show an image with scaled size for better performance** 208 | 209 | 210 | 211 | With spinner and new scaled size. Image is resized for your desired size for maximum performance 212 | 213 | ```swift 214 | 215 | let newSize = CGSize(width: imageViewWidth height: imageViewHeight) 216 | 217 | self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) { 218 | 219 | (error:LazyImageError?) in 220 | 221 | //Image loaded. Do something.. 222 | } 223 | ``` 224 | 225 | - **Force download an image with scaled size even if it is stored in cache** 226 | 227 | 228 | 229 | Sometimes a specific URL can constantly change the corresponding image. 230 | 231 | 232 | 233 | With completion 234 | 235 | ```swift 236 | 237 | let newSize = CGSize(width: imageViewWidth height: imageViewHeight) 238 | 239 | self.lazyImage.showOverride(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) { 240 | 241 | (error:LazyImageError?) in 242 | 243 | //Image loaded. Do something.. 244 | } 245 | ``` 246 | 247 | 248 | 249 | With completion, spinner and new scaled size 250 | 251 | ```swift 252 | 253 | let newSize = CGSize(width: imageViewWidth height: imageViewHeight) 254 | 255 | self.lazyImage.showOverrideWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) { 256 | 257 | (error:LazyImageError?) in 258 | 259 | //Image loaded. Do something.. 260 | } 261 | ``` 262 | 263 | ## Dealing with the image size and the cache 264 | 265 | In general showing an image optimized for your view dimensions is the best approach for optimal memory handling . You can achieve this in 2 ways. 266 | 267 | 268 | 269 | * **Using the size parameter** as shown in the above examples. The size will be used to scale down the image for your specific size. This will happen on the fly, which means the original image is stored in the cache. Resizing will be performed upon load. Resizing/ image loading happens in a background thread, UI is never blocked. Main thread is for displaying only. 270 | 271 | 272 | 273 | ```swift 274 | 275 | let newSize = CGSize(width: imageViewWidth height: imageViewHeight) 276 | 277 | self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) { 278 | 279 | (error:LazyImageError?) in 280 | 281 | //Image loaded. Do something.. 282 | } 283 | ``` 284 | 285 | * ****Setting the cache size**** is the second option. Valid as long as your instance is alive, this will cause the images to be stored resized in the cache. Loading your fresh resized images for you specific dimensions will be super fast 🚀. 286 | 287 | 288 | 289 | ```swift 290 | 291 | let imageSize = CGSize(width: yourViewWidth, height: yourViewHeight) 292 | 293 | 294 | 295 | //Set default image size ratio 296 | 297 | self.lazyImage.setCacheSize(imageSize) 298 | 299 | 300 | 301 | self.lazyImage.showWithSpinner(imageView:self, url:imageURL) { 302 | 303 | (error:LazyImageError?) in 304 | 305 | } 306 | ``` 307 | 308 | ## Clearing the cache for specific image URLs 309 | 310 | 311 | 312 | Sometimes you just need to re-download a specific image with the exact same name once. 313 | 314 | 315 | 316 | If you have a cache size set, clearing the cache will clear images of the specific size ratio. 317 | 318 | 319 | 320 | Clearing the cache: 321 | 322 | ```swift 323 | 324 | let imageURLs:[String] = ["https://someimage.png", "https://someotherimage.png"] 325 | 326 | self.lazyImage.clearCacheForURLs(urls: urls) 327 | 328 | //And you're done 329 | ``` 330 | 331 | ## Prefetching 332 | 333 | 334 | 335 | You can prefetch an image and save it to be ready for fast displaying. 336 | 337 | 338 | 339 | ```swift 340 | 341 | self.lazyImage.prefetchImage(url: "https://someimage.png") 342 | 343 | ``` 344 | 345 | ## Forget UIImageviews. Just get the UIImage 346 | 347 | 348 | 349 | ```swift 350 | 351 | self.lazyImage.fetchImage(url: url) { 352 | 353 | (image:UIImage?, error:LazyImageError?) in 354 | 355 | //image has the UIImage 356 | 357 | } 358 | 359 | ``` 360 | 361 | ## Cancel the image fetching request 362 | 363 | 364 | 365 | ```swift 366 | 367 | self.lazyImage.cancel() 368 | 369 | ``` 370 | 371 | ## Contributing 372 | 373 | Contributions are welcomed. Fork the project and make it better, then create a pull request. The project comes with a very basic target app for testing your new features. You can find the library code under Pods/Development Pods/LazyImage. 374 | 375 | 376 | 377 | ## License 378 | 379 | Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 380 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------