diff --git a/KDCycleBannerView/KDCycleBannerView.h b/KDCycleBannerView/KDCycleBannerView.h index 991e1f9..1e80c0b 100644 --- a/KDCycleBannerView/KDCycleBannerView.h +++ b/KDCycleBannerView/KDCycleBannerView.h @@ -15,7 +15,11 @@ typedef void(^CompleteBlock)(void); @protocol KDCycleBannerViewDataSource @required -- (NSArray *)numberOfKDCycleBannerView:(KDCycleBannerView *)bannerView; +/** + @return Array of UIImage or NSString or NSURL objects with direct image data objects or URLs to images. + Heterogeneous array is also allowed, that is with different types of items. + */ +- (NSArray *)dataForCycleBannerView:(KDCycleBannerView *)bannerView; - (UIViewContentMode)contentModeForImageIndex:(NSUInteger)index; @optional @@ -38,6 +42,19 @@ typedef void(^CompleteBlock)(void); @property (weak, nonatomic) IBOutlet id datasource; @property (weak, nonatomic) IBOutlet id delegate; +/** + Show activity UIActivityIndicatorView. Default `NO`. + */ +@property (assign, nonatomic) BOOL showActivityIndicatorViewWhenDownloadingImages; + +/** + * set desired UIActivityIndicatorViewStyle + * + * @param style The style of the UIActivityIndicatorView + Default value `UIActivityIndicatorViewStyleWhiteLarge`. + */ +@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorStyle; + @property (assign, nonatomic, getter = isContinuous) BOOL continuous; // if YES, then bannerview will show like a carousel, default is NO @property (assign, nonatomic) NSUInteger autoPlayTimeInterval; // if autoPlayTimeInterval more than 0, the bannerView will autoplay with autoPlayTimeInterval value space, default is 0 diff --git a/KDCycleBannerView/KDCycleBannerView.m b/KDCycleBannerView/KDCycleBannerView.m index 53d2c12..9a39754 100644 --- a/KDCycleBannerView/KDCycleBannerView.m +++ b/KDCycleBannerView/KDCycleBannerView.m @@ -32,28 +32,27 @@ - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - // Initialization code - _scrollViewBounces = YES; + [self init_common]; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { - _scrollViewBounces = YES; + [self init_common]; } return self; } -- (void)awakeFromNib { - [super awakeFromNib]; +- (void)init_common { + _scrollViewBounces = YES; + _activityIndicatorStyle = UIActivityIndicatorViewStyleWhiteLarge; } +// MARK: - Override + - (void)layoutSubviews { [super layoutSubviews]; - - NSArray *subViews = self.subviews; - [subViews makeObjectsPerformSelector:@selector(removeFromSuperview)]; [self initialize]; @@ -79,6 +78,7 @@ - (void)initialize { } - (void)initializeScrollView { + [_scrollView removeFromSuperview]; _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame))]; _scrollView.delegate = self; _scrollView.pagingEnabled = YES; @@ -90,6 +90,7 @@ - (void)initializeScrollView { } - (void)initializePageControl { + [_pageControl removeFromSuperview]; CGRect pageControlFrame = CGRectMake(0, 0, CGRectGetWidth(_scrollView.frame), 30); _pageControl = [[UIPageControl alloc] initWithFrame:pageControlFrame]; _pageControl.center = CGPointMake(CGRectGetWidth(_scrollView.frame)*0.5, CGRectGetHeight(_scrollView.frame) - 12.); @@ -99,10 +100,9 @@ - (void)initializePageControl { - (void)loadData { NSAssert(_datasource != nil, @"datasource must not nil"); - _datasourceImages = [_datasource numberOfKDCycleBannerView:self]; + _datasourceImages = [_datasource dataForCycleBannerView:self]; if (_datasourceImages.count == 0) { - //显示默认页,无数据页面 if ([self.datasource respondsToSelector:@selector(placeHolderImageOfZeroBannerView)]) { UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(_scrollView.frame), CGRectGetHeight(_scrollView.frame))]; imageView.contentMode = UIViewContentModeScaleAspectFill; @@ -137,20 +137,16 @@ - (void)loadData { id imageSource = [_datasourceImages objectAtIndex:i]; if ([imageSource isKindOfClass:[UIImage class]]) { imageView.image = imageSource; - }else if ([imageSource isKindOfClass:[NSString class]] || [imageSource isKindOfClass:[NSURL class]]) { - UIActivityIndicatorView *activityIndicatorView = [UIActivityIndicatorView new]; - activityIndicatorView.center = CGPointMake(CGRectGetWidth(_scrollView.frame) * 0.5, CGRectGetHeight(_scrollView.frame) * 0.5); - activityIndicatorView.tag = 100; - activityIndicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; - [activityIndicatorView startAnimating]; - [imageView addSubview:activityIndicatorView]; - [imageView addObserver:self forKeyPath:@"image" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:kContentImageViewObservationContext]; + } else if ([imageSource isKindOfClass:[NSString class]] || [imageSource isKindOfClass:[NSURL class]]) { + [imageView setShowActivityIndicatorView:self.showActivityIndicatorViewWhenDownloadingImages]; + [imageView setIndicatorStyle:self.activityIndicatorStyle]; if ([self.datasource respondsToSelector:@selector(placeHolderImageOfBannerView:atIndex:)]) { UIImage *placeHolderImage = [self.datasource placeHolderImageOfBannerView:self atIndex:i]; NSAssert(placeHolderImage != nil, @"placeHolderImage must not be nil"); [imageView sd_setImageWithURL:[imageSource isKindOfClass:[NSString class]] ? [NSURL URLWithString:imageSource] : imageSource placeholderImage:placeHolderImage]; - }else { + + } else { [imageView sd_setImageWithURL:[imageSource isKindOfClass:[NSString class]] ? [NSURL URLWithString:imageSource] : imageSource]; } @@ -223,17 +219,6 @@ - (void)autoSwitchBannerView { [self performSelector:_cmd withObject:nil afterDelay:self.autoPlayTimeInterval]; } -#pragma mark - KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (context == kContentImageViewObservationContext) { - UIImageView *imageView = (UIImageView *)object; - UIActivityIndicatorView *activityIndicatorView = (UIActivityIndicatorView *)[imageView viewWithTag:100]; - [activityIndicatorView removeFromSuperview]; - [imageView removeObserver:self forKeyPath:@"image"]; - } -} - #pragma mark - UIScrollViewDelegate - (void)scrollViewDidScroll:(UIScrollView *)scrollView { diff --git a/KDCycleBannerViewDemo/KDCycleBannerViewDemo.xcodeproj/project.pbxproj b/KDCycleBannerViewDemo/KDCycleBannerViewDemo.xcodeproj/project.pbxproj index 1b30c58..0a4b121 100644 --- a/KDCycleBannerViewDemo/KDCycleBannerViewDemo.xcodeproj/project.pbxproj +++ b/KDCycleBannerViewDemo/KDCycleBannerViewDemo.xcodeproj/project.pbxproj @@ -1,1221 +1,575 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 0B26C7C5E0074E11A449FA37 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - 36C600280B0F4126866165B7 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Copy Pods Resources - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - "${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh" - - showEnvVarsInLog - 0 - - 62EFD89718F7DA09001A1D42 - - children - - 62EFD8A918F7DA0A001A1D42 - 62EFD8CB18F7DA0A001A1D42 - 62EFD8A218F7DA0A001A1D42 - 62EFD8A118F7DA0A001A1D42 - 9544A2D40F84105B81EE3EE2 - - isa - PBXGroup - sourceTree - <group> - - 62EFD89818F7DA09001A1D42 - - attributes - - LastUpgradeCheck - 0510 - ORGANIZATIONNAME - Kingiol - TargetAttributes - - 62EFD8C318F7DA0A001A1D42 - - TestTargetID - 62EFD89F18F7DA09001A1D42 - - - - buildConfigurationList - 62EFD89B18F7DA09001A1D42 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - Base - - mainGroup - 62EFD89718F7DA09001A1D42 - productRefGroup - 62EFD8A118F7DA0A001A1D42 - projectDirPath - - projectReferences - - projectRoot - - targets - - 62EFD89F18F7DA09001A1D42 - 62EFD8C318F7DA0A001A1D42 - - - 62EFD89B18F7DA09001A1D42 - - buildConfigurations - - 62EFD8D318F7DA0A001A1D42 - 62EFD8D418F7DA0A001A1D42 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 62EFD89C18F7DA09001A1D42 - - buildActionMask - 2147483647 - files - - 62EFD8BD18F7DA0A001A1D42 - 62EFD8B418F7DA0A001A1D42 - 62EFD8DE18F7DA57001A1D42 - 62EFD8B018F7DA0A001A1D42 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 62EFD89D18F7DA09001A1D42 - - buildActionMask - 2147483647 - files - - 62EFD8A618F7DA0A001A1D42 - 62EFD8A818F7DA0A001A1D42 - 62EFD8A418F7DA0A001A1D42 - 724F93B4669643D2BBDD401D - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 62EFD89E18F7DA09001A1D42 - - buildActionMask - 2147483647 - files - - 62EFD8BA18F7DA0A001A1D42 - 62FEACB818F909DD00868C45 - 62EFD8BF18F7DA0A001A1D42 - 62EFD8B718F7DA0A001A1D42 - 62EFD8AE18F7DA0A001A1D42 - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 62EFD89F18F7DA09001A1D42 - - buildConfigurationList - 62EFD8D518F7DA0A001A1D42 - buildPhases - - B8B95ED12BD746A4811BEEC9 - 62EFD89C18F7DA09001A1D42 - 62EFD89D18F7DA09001A1D42 - 62EFD89E18F7DA09001A1D42 - 36C600280B0F4126866165B7 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - KDCycleBannerViewDemo - productName - KDCycleBannerViewDemo - productReference - 62EFD8A018F7DA0A001A1D42 - productType - com.apple.product-type.application - - 62EFD8A018F7DA0A001A1D42 - - explicitFileType - wrapper.application - includeInIndex - 0 - isa - PBXFileReference - path - KDCycleBannerViewDemo.app - sourceTree - BUILT_PRODUCTS_DIR - - 62EFD8A118F7DA0A001A1D42 - - children - - 62EFD8A018F7DA0A001A1D42 - 62EFD8C418F7DA0A001A1D42 - - isa - PBXGroup - name - Products - sourceTree - <group> - - 62EFD8A218F7DA0A001A1D42 - - children - - 62EFD8A318F7DA0A001A1D42 - 62EFD8A518F7DA0A001A1D42 - 62EFD8A718F7DA0A001A1D42 - 62EFD8C518F7DA0A001A1D42 - 0B26C7C5E0074E11A449FA37 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 62EFD8A318F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - System/Library/Frameworks/Foundation.framework - sourceTree - SDKROOT - - 62EFD8A418F7DA0A001A1D42 - - fileRef - 62EFD8A318F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8A518F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - CoreGraphics.framework - path - System/Library/Frameworks/CoreGraphics.framework - sourceTree - SDKROOT - - 62EFD8A618F7DA0A001A1D42 - - fileRef - 62EFD8A518F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8A718F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - UIKit.framework - path - System/Library/Frameworks/UIKit.framework - sourceTree - SDKROOT - - 62EFD8A818F7DA0A001A1D42 - - fileRef - 62EFD8A718F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8A918F7DA0A001A1D42 - - children - - 62EFD8DB18F7DA38001A1D42 - 62EFD8B218F7DA0A001A1D42 - 62EFD8B318F7DA0A001A1D42 - 62EFD8B518F7DA0A001A1D42 - 62EFD8B818F7DA0A001A1D42 - 62EFD8BB18F7DA0A001A1D42 - 62EFD8BC18F7DA0A001A1D42 - 62FEACB718F909DD00868C45 - 62EFD8BE18F7DA0A001A1D42 - 62EFD8AA18F7DA0A001A1D42 - - isa - PBXGroup - path - KDCycleBannerViewDemo - sourceTree - <group> - - 62EFD8AA18F7DA0A001A1D42 - - children - - 62EFD8AB18F7DA0A001A1D42 - 62EFD8AC18F7DA0A001A1D42 - 62EFD8AF18F7DA0A001A1D42 - 62EFD8B118F7DA0A001A1D42 - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - 62EFD8AB18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - KDCycleBannerViewDemo-Info.plist - sourceTree - <group> - - 62EFD8AC18F7DA0A001A1D42 - - children - - 62EFD8AD18F7DA0A001A1D42 - - isa - PBXVariantGroup - name - InfoPlist.strings - sourceTree - <group> - - 62EFD8AD18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - text.plist.strings - name - en - path - en.lproj/InfoPlist.strings - sourceTree - <group> - - 62EFD8AE18F7DA0A001A1D42 - - fileRef - 62EFD8AC18F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8AF18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - main.m - sourceTree - <group> - - 62EFD8B018F7DA0A001A1D42 - - fileRef - 62EFD8AF18F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8B118F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - KDCycleBannerViewDemo-Prefix.pch - sourceTree - <group> - - 62EFD8B218F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - AppDelegate.h - sourceTree - <group> - - 62EFD8B318F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - AppDelegate.m - sourceTree - <group> - - 62EFD8B418F7DA0A001A1D42 - - fileRef - 62EFD8B318F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8B518F7DA0A001A1D42 - - children - - 62EFD8B618F7DA0A001A1D42 - - isa - PBXVariantGroup - name - Main_iPhone.storyboard - sourceTree - <group> - - 62EFD8B618F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - file.storyboard - name - Base - path - Base.lproj/Main_iPhone.storyboard - sourceTree - <group> - - 62EFD8B718F7DA0A001A1D42 - - fileRef - 62EFD8B518F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8B818F7DA0A001A1D42 - - children - - 62EFD8B918F7DA0A001A1D42 - - isa - PBXVariantGroup - name - Main_iPad.storyboard - sourceTree - <group> - - 62EFD8B918F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - file.storyboard - name - Base - path - Base.lproj/Main_iPad.storyboard - sourceTree - <group> - - 62EFD8BA18F7DA0A001A1D42 - - fileRef - 62EFD8B818F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8BB18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ViewController.h - sourceTree - <group> - - 62EFD8BC18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - ViewController.m - sourceTree - <group> - - 62EFD8BD18F7DA0A001A1D42 - - fileRef - 62EFD8BC18F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8BE18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - folder.assetcatalog - path - Images.xcassets - sourceTree - <group> - - 62EFD8BF18F7DA0A001A1D42 - - fileRef - 62EFD8BE18F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8C018F7DA0A001A1D42 - - buildActionMask - 2147483647 - files - - 62EFD8D218F7DA0A001A1D42 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 62EFD8C118F7DA0A001A1D42 - - buildActionMask - 2147483647 - files - - 62EFD8C618F7DA0A001A1D42 - 62EFD8C818F7DA0A001A1D42 - 62EFD8C718F7DA0A001A1D42 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 62EFD8C218F7DA0A001A1D42 - - buildActionMask - 2147483647 - files - - 62EFD8D018F7DA0A001A1D42 - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 62EFD8C318F7DA0A001A1D42 - - buildConfigurationList - 62EFD8D818F7DA0A001A1D42 - buildPhases - - 62EFD8C018F7DA0A001A1D42 - 62EFD8C118F7DA0A001A1D42 - 62EFD8C218F7DA0A001A1D42 - - buildRules - - dependencies - - 62EFD8CA18F7DA0A001A1D42 - - isa - PBXNativeTarget - name - KDCycleBannerViewDemoTests - productName - KDCycleBannerViewDemoTests - productReference - 62EFD8C418F7DA0A001A1D42 - productType - com.apple.product-type.bundle.unit-test - - 62EFD8C418F7DA0A001A1D42 - - explicitFileType - wrapper.cfbundle - includeInIndex - 0 - isa - PBXFileReference - path - KDCycleBannerViewDemoTests.xctest - sourceTree - BUILT_PRODUCTS_DIR - - 62EFD8C518F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - XCTest.framework - path - Library/Frameworks/XCTest.framework - sourceTree - DEVELOPER_DIR - - 62EFD8C618F7DA0A001A1D42 - - fileRef - 62EFD8C518F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8C718F7DA0A001A1D42 - - fileRef - 62EFD8A318F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8C818F7DA0A001A1D42 - - fileRef - 62EFD8A718F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8C918F7DA0A001A1D42 - - containerPortal - 62EFD89818F7DA09001A1D42 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 62EFD89F18F7DA09001A1D42 - remoteInfo - KDCycleBannerViewDemo - - 62EFD8CA18F7DA0A001A1D42 - - isa - PBXTargetDependency - target - 62EFD89F18F7DA09001A1D42 - targetProxy - 62EFD8C918F7DA0A001A1D42 - - 62EFD8CB18F7DA0A001A1D42 - - children - - 62EFD8D118F7DA0A001A1D42 - 62EFD8CC18F7DA0A001A1D42 - - isa - PBXGroup - path - KDCycleBannerViewDemoTests - sourceTree - <group> - - 62EFD8CC18F7DA0A001A1D42 - - children - - 62EFD8CD18F7DA0A001A1D42 - 62EFD8CE18F7DA0A001A1D42 - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - 62EFD8CD18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - KDCycleBannerViewDemoTests-Info.plist - sourceTree - <group> - - 62EFD8CE18F7DA0A001A1D42 - - children - - 62EFD8CF18F7DA0A001A1D42 - - isa - PBXVariantGroup - name - InfoPlist.strings - sourceTree - <group> - - 62EFD8CF18F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - text.plist.strings - name - en - path - en.lproj/InfoPlist.strings - sourceTree - <group> - - 62EFD8D018F7DA0A001A1D42 - - fileRef - 62EFD8CE18F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8D118F7DA0A001A1D42 - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - KDCycleBannerViewDemoTests.m - sourceTree - <group> - - 62EFD8D218F7DA0A001A1D42 - - fileRef - 62EFD8D118F7DA0A001A1D42 - isa - PBXBuildFile - - 62EFD8D318F7DA0A001A1D42 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - ONLY_ACTIVE_ARCH - YES - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - - isa - XCBuildConfiguration - name - Debug - - 62EFD8D418F7DA0A001A1D42 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - YES - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 62EFD8D518F7DA0A001A1D42 - - buildConfigurations - - 62EFD8D618F7DA0A001A1D42 - 62EFD8D718F7DA0A001A1D42 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 62EFD8D618F7DA0A001A1D42 - - baseConfigurationReference - D617CDDA59A5362C4FA9C2BD - buildSettings - - ASSETCATALOG_COMPILER_APPICON_NAME - AppIcon - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME - LaunchImage - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch - INFOPLIST_FILE - KDCycleBannerViewDemo/KDCycleBannerViewDemo-Info.plist - PRODUCT_NAME - $(TARGET_NAME) - WRAPPER_EXTENSION - app - - isa - XCBuildConfiguration - name - Debug - - 62EFD8D718F7DA0A001A1D42 - - baseConfigurationReference - 7F81D0CDAF2FDB1B94EF65F4 - buildSettings - - ASSETCATALOG_COMPILER_APPICON_NAME - AppIcon - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME - LaunchImage - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch - INFOPLIST_FILE - KDCycleBannerViewDemo/KDCycleBannerViewDemo-Info.plist - PRODUCT_NAME - $(TARGET_NAME) - WRAPPER_EXTENSION - app - - isa - XCBuildConfiguration - name - Release - - 62EFD8D818F7DA0A001A1D42 - - buildConfigurations - - 62EFD8D918F7DA0A001A1D42 - 62EFD8DA18F7DA0A001A1D42 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 62EFD8D918F7DA0A001A1D42 - - buildSettings - - BUNDLE_LOADER - $(BUILT_PRODUCTS_DIR)/KDCycleBannerViewDemo.app/KDCycleBannerViewDemo - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - $(DEVELOPER_FRAMEWORKS_DIR) - - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - INFOPLIST_FILE - KDCycleBannerViewDemoTests/KDCycleBannerViewDemoTests-Info.plist - PRODUCT_NAME - $(TARGET_NAME) - TEST_HOST - $(BUNDLE_LOADER) - WRAPPER_EXTENSION - xctest - - isa - XCBuildConfiguration - name - Debug - - 62EFD8DA18F7DA0A001A1D42 - - buildSettings - - BUNDLE_LOADER - $(BUILT_PRODUCTS_DIR)/KDCycleBannerViewDemo.app/KDCycleBannerViewDemo - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - $(DEVELOPER_FRAMEWORKS_DIR) - - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch - INFOPLIST_FILE - KDCycleBannerViewDemoTests/KDCycleBannerViewDemoTests-Info.plist - PRODUCT_NAME - $(TARGET_NAME) - TEST_HOST - $(BUNDLE_LOADER) - WRAPPER_EXTENSION - xctest - - isa - XCBuildConfiguration - name - Release - - 62EFD8DB18F7DA38001A1D42 - - children - - 62EFD8DC18F7DA57001A1D42 - 62EFD8DD18F7DA57001A1D42 - - isa - PBXGroup - name - KDCycleBannerView - path - ../../KDCycleBannerView - sourceTree - <group> - - 62EFD8DC18F7DA57001A1D42 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - KDCycleBannerView.h - sourceTree - <group> - - 62EFD8DD18F7DA57001A1D42 - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - KDCycleBannerView.m - sourceTree - <group> - - 62EFD8DE18F7DA57001A1D42 - - fileRef - 62EFD8DD18F7DA57001A1D42 - isa - PBXBuildFile - - 62FEACB718F909DD00868C45 - - isa - PBXFileReference - lastKnownFileType - image.png - path - image1.png - sourceTree - <group> - - 62FEACB818F909DD00868C45 - - fileRef - 62FEACB718F909DD00868C45 - isa - PBXBuildFile - - 724F93B4669643D2BBDD401D - - fileRef - 0B26C7C5E0074E11A449FA37 - isa - PBXBuildFile - - 7F81D0CDAF2FDB1B94EF65F4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods.release.xcconfig - path - Pods/Target Support Files/Pods/Pods.release.xcconfig - sourceTree - <group> - - 9544A2D40F84105B81EE3EE2 - - children - - D617CDDA59A5362C4FA9C2BD - 7F81D0CDAF2FDB1B94EF65F4 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - B8B95ED12BD746A4811BEEC9 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Check Pods Manifest.lock - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null -if [[ $? != 0 ]] ; then - cat << EOM -error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. -EOM - exit 1 -fi - - showEnvVarsInLog - 0 - - D617CDDA59A5362C4FA9C2BD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods.debug.xcconfig - path - Pods/Target Support Files/Pods/Pods.debug.xcconfig - sourceTree - <group> - - - rootObject - 62EFD89818F7DA09001A1D42 - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 62EFD8A418F7DA0A001A1D42 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62EFD8A318F7DA0A001A1D42 /* Foundation.framework */; }; + 62EFD8A618F7DA0A001A1D42 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62EFD8A518F7DA0A001A1D42 /* CoreGraphics.framework */; }; + 62EFD8A818F7DA0A001A1D42 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62EFD8A718F7DA0A001A1D42 /* UIKit.framework */; }; + 62EFD8AE18F7DA0A001A1D42 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 62EFD8AC18F7DA0A001A1D42 /* InfoPlist.strings */; }; + 62EFD8B018F7DA0A001A1D42 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EFD8AF18F7DA0A001A1D42 /* main.m */; }; + 62EFD8B418F7DA0A001A1D42 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EFD8B318F7DA0A001A1D42 /* AppDelegate.m */; }; + 62EFD8B718F7DA0A001A1D42 /* Main_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 62EFD8B518F7DA0A001A1D42 /* Main_iPhone.storyboard */; }; + 62EFD8BA18F7DA0A001A1D42 /* Main_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 62EFD8B818F7DA0A001A1D42 /* Main_iPad.storyboard */; }; + 62EFD8BD18F7DA0A001A1D42 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EFD8BC18F7DA0A001A1D42 /* ViewController.m */; }; + 62EFD8BF18F7DA0A001A1D42 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 62EFD8BE18F7DA0A001A1D42 /* Images.xcassets */; }; + 62EFD8C618F7DA0A001A1D42 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62EFD8C518F7DA0A001A1D42 /* XCTest.framework */; }; + 62EFD8C718F7DA0A001A1D42 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62EFD8A318F7DA0A001A1D42 /* Foundation.framework */; }; + 62EFD8C818F7DA0A001A1D42 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62EFD8A718F7DA0A001A1D42 /* UIKit.framework */; }; + 62EFD8D018F7DA0A001A1D42 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 62EFD8CE18F7DA0A001A1D42 /* InfoPlist.strings */; }; + 62EFD8D218F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EFD8D118F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.m */; }; + 62EFD8DE18F7DA57001A1D42 /* KDCycleBannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EFD8DD18F7DA57001A1D42 /* KDCycleBannerView.m */; }; + 62FEACB818F909DD00868C45 /* image1.png in Resources */ = {isa = PBXBuildFile; fileRef = 62FEACB718F909DD00868C45 /* image1.png */; }; + E080828774B76E355B8E8321 /* libPods-KDCycleBannerViewDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 21D57443FB20F27CC348AF33 /* libPods-KDCycleBannerViewDemo.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 62EFD8C918F7DA0A001A1D42 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 62EFD89818F7DA09001A1D42 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 62EFD89F18F7DA09001A1D42; + remoteInfo = KDCycleBannerViewDemo; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 21D57443FB20F27CC348AF33 /* libPods-KDCycleBannerViewDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-KDCycleBannerViewDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 337C66FFB920EB36131A704F /* Pods-KDCycleBannerViewDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KDCycleBannerViewDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.debug.xcconfig"; sourceTree = ""; }; + 62EFD8A018F7DA0A001A1D42 /* KDCycleBannerViewDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KDCycleBannerViewDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 62EFD8A318F7DA0A001A1D42 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 62EFD8A518F7DA0A001A1D42 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 62EFD8A718F7DA0A001A1D42 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 62EFD8AB18F7DA0A001A1D42 /* KDCycleBannerViewDemo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "KDCycleBannerViewDemo-Info.plist"; sourceTree = ""; }; + 62EFD8AD18F7DA0A001A1D42 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 62EFD8AF18F7DA0A001A1D42 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 62EFD8B118F7DA0A001A1D42 /* KDCycleBannerViewDemo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KDCycleBannerViewDemo-Prefix.pch"; sourceTree = ""; }; + 62EFD8B218F7DA0A001A1D42 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 62EFD8B318F7DA0A001A1D42 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 62EFD8B618F7DA0A001A1D42 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPhone.storyboard; sourceTree = ""; }; + 62EFD8B918F7DA0A001A1D42 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPad.storyboard; sourceTree = ""; }; + 62EFD8BB18F7DA0A001A1D42 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 62EFD8BC18F7DA0A001A1D42 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 62EFD8BE18F7DA0A001A1D42 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 62EFD8C418F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KDCycleBannerViewDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 62EFD8C518F7DA0A001A1D42 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 62EFD8CD18F7DA0A001A1D42 /* KDCycleBannerViewDemoTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "KDCycleBannerViewDemoTests-Info.plist"; sourceTree = ""; }; + 62EFD8CF18F7DA0A001A1D42 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 62EFD8D118F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KDCycleBannerViewDemoTests.m; sourceTree = ""; }; + 62EFD8DC18F7DA57001A1D42 /* KDCycleBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KDCycleBannerView.h; sourceTree = ""; }; + 62EFD8DD18F7DA57001A1D42 /* KDCycleBannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KDCycleBannerView.m; sourceTree = ""; }; + 62FEACB718F909DD00868C45 /* image1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image1.png; sourceTree = ""; }; + 91B5657AFA0BF7D6B0CF5DFF /* Pods-KDCycleBannerViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KDCycleBannerViewDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 62EFD89D18F7DA09001A1D42 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 62EFD8A618F7DA0A001A1D42 /* CoreGraphics.framework in Frameworks */, + 62EFD8A818F7DA0A001A1D42 /* UIKit.framework in Frameworks */, + 62EFD8A418F7DA0A001A1D42 /* Foundation.framework in Frameworks */, + E080828774B76E355B8E8321 /* libPods-KDCycleBannerViewDemo.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 62EFD8C118F7DA0A001A1D42 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 62EFD8C618F7DA0A001A1D42 /* XCTest.framework in Frameworks */, + 62EFD8C818F7DA0A001A1D42 /* UIKit.framework in Frameworks */, + 62EFD8C718F7DA0A001A1D42 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 62EFD89718F7DA09001A1D42 = { + isa = PBXGroup; + children = ( + 62EFD8A918F7DA0A001A1D42 /* KDCycleBannerViewDemo */, + 62EFD8CB18F7DA0A001A1D42 /* KDCycleBannerViewDemoTests */, + 62EFD8A218F7DA0A001A1D42 /* Frameworks */, + 62EFD8A118F7DA0A001A1D42 /* Products */, + BD05611508C09B5FEF4084AF /* Pods */, + ); + sourceTree = ""; + }; + 62EFD8A118F7DA0A001A1D42 /* Products */ = { + isa = PBXGroup; + children = ( + 62EFD8A018F7DA0A001A1D42 /* KDCycleBannerViewDemo.app */, + 62EFD8C418F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 62EFD8A218F7DA0A001A1D42 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 62EFD8A318F7DA0A001A1D42 /* Foundation.framework */, + 62EFD8A518F7DA0A001A1D42 /* CoreGraphics.framework */, + 62EFD8A718F7DA0A001A1D42 /* UIKit.framework */, + 62EFD8C518F7DA0A001A1D42 /* XCTest.framework */, + 21D57443FB20F27CC348AF33 /* libPods-KDCycleBannerViewDemo.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 62EFD8A918F7DA0A001A1D42 /* KDCycleBannerViewDemo */ = { + isa = PBXGroup; + children = ( + 62EFD8DB18F7DA38001A1D42 /* KDCycleBannerView */, + 62EFD8B218F7DA0A001A1D42 /* AppDelegate.h */, + 62EFD8B318F7DA0A001A1D42 /* AppDelegate.m */, + 62EFD8B518F7DA0A001A1D42 /* Main_iPhone.storyboard */, + 62EFD8B818F7DA0A001A1D42 /* Main_iPad.storyboard */, + 62EFD8BB18F7DA0A001A1D42 /* ViewController.h */, + 62EFD8BC18F7DA0A001A1D42 /* ViewController.m */, + 62FEACB718F909DD00868C45 /* image1.png */, + 62EFD8BE18F7DA0A001A1D42 /* Images.xcassets */, + 62EFD8AA18F7DA0A001A1D42 /* Supporting Files */, + ); + path = KDCycleBannerViewDemo; + sourceTree = ""; + }; + 62EFD8AA18F7DA0A001A1D42 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 62EFD8AB18F7DA0A001A1D42 /* KDCycleBannerViewDemo-Info.plist */, + 62EFD8AC18F7DA0A001A1D42 /* InfoPlist.strings */, + 62EFD8AF18F7DA0A001A1D42 /* main.m */, + 62EFD8B118F7DA0A001A1D42 /* KDCycleBannerViewDemo-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 62EFD8CB18F7DA0A001A1D42 /* KDCycleBannerViewDemoTests */ = { + isa = PBXGroup; + children = ( + 62EFD8D118F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.m */, + 62EFD8CC18F7DA0A001A1D42 /* Supporting Files */, + ); + path = KDCycleBannerViewDemoTests; + sourceTree = ""; + }; + 62EFD8CC18F7DA0A001A1D42 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 62EFD8CD18F7DA0A001A1D42 /* KDCycleBannerViewDemoTests-Info.plist */, + 62EFD8CE18F7DA0A001A1D42 /* InfoPlist.strings */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 62EFD8DB18F7DA38001A1D42 /* KDCycleBannerView */ = { + isa = PBXGroup; + children = ( + 62EFD8DC18F7DA57001A1D42 /* KDCycleBannerView.h */, + 62EFD8DD18F7DA57001A1D42 /* KDCycleBannerView.m */, + ); + name = KDCycleBannerView; + path = ../../KDCycleBannerView; + sourceTree = ""; + }; + BD05611508C09B5FEF4084AF /* Pods */ = { + isa = PBXGroup; + children = ( + 337C66FFB920EB36131A704F /* Pods-KDCycleBannerViewDemo.debug.xcconfig */, + 91B5657AFA0BF7D6B0CF5DFF /* Pods-KDCycleBannerViewDemo.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 62EFD89F18F7DA09001A1D42 /* KDCycleBannerViewDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 62EFD8D518F7DA0A001A1D42 /* Build configuration list for PBXNativeTarget "KDCycleBannerViewDemo" */; + buildPhases = ( + 01C22BA7DA3DC96E9BF22CA5 /* [CP] Check Pods Manifest.lock */, + 62EFD89C18F7DA09001A1D42 /* Sources */, + 62EFD89D18F7DA09001A1D42 /* Frameworks */, + 62EFD89E18F7DA09001A1D42 /* Resources */, + DE4EB9B065BEE14B30AFD96D /* [CP] Embed Pods Frameworks */, + 0A2BC26EC37006375825D677 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = KDCycleBannerViewDemo; + productName = KDCycleBannerViewDemo; + productReference = 62EFD8A018F7DA0A001A1D42 /* KDCycleBannerViewDemo.app */; + productType = "com.apple.product-type.application"; + }; + 62EFD8C318F7DA0A001A1D42 /* KDCycleBannerViewDemoTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 62EFD8D818F7DA0A001A1D42 /* Build configuration list for PBXNativeTarget "KDCycleBannerViewDemoTests" */; + buildPhases = ( + 62EFD8C018F7DA0A001A1D42 /* Sources */, + 62EFD8C118F7DA0A001A1D42 /* Frameworks */, + 62EFD8C218F7DA0A001A1D42 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 62EFD8CA18F7DA0A001A1D42 /* PBXTargetDependency */, + ); + name = KDCycleBannerViewDemoTests; + productName = KDCycleBannerViewDemoTests; + productReference = 62EFD8C418F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 62EFD89818F7DA09001A1D42 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + ORGANIZATIONNAME = Kingiol; + TargetAttributes = { + 62EFD8C318F7DA0A001A1D42 = { + TestTargetID = 62EFD89F18F7DA09001A1D42; + }; + }; + }; + buildConfigurationList = 62EFD89B18F7DA09001A1D42 /* Build configuration list for PBXProject "KDCycleBannerViewDemo" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 62EFD89718F7DA09001A1D42; + productRefGroup = 62EFD8A118F7DA0A001A1D42 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 62EFD89F18F7DA09001A1D42 /* KDCycleBannerViewDemo */, + 62EFD8C318F7DA0A001A1D42 /* KDCycleBannerViewDemoTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 62EFD89E18F7DA09001A1D42 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 62EFD8BA18F7DA0A001A1D42 /* Main_iPad.storyboard in Resources */, + 62FEACB818F909DD00868C45 /* image1.png in Resources */, + 62EFD8BF18F7DA0A001A1D42 /* Images.xcassets in Resources */, + 62EFD8B718F7DA0A001A1D42 /* Main_iPhone.storyboard in Resources */, + 62EFD8AE18F7DA0A001A1D42 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 62EFD8C218F7DA0A001A1D42 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 62EFD8D018F7DA0A001A1D42 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 01C22BA7DA3DC96E9BF22CA5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 0A2BC26EC37006375825D677 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + DE4EB9B065BEE14B30AFD96D /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 62EFD89C18F7DA09001A1D42 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 62EFD8BD18F7DA0A001A1D42 /* ViewController.m in Sources */, + 62EFD8B418F7DA0A001A1D42 /* AppDelegate.m in Sources */, + 62EFD8DE18F7DA57001A1D42 /* KDCycleBannerView.m in Sources */, + 62EFD8B018F7DA0A001A1D42 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 62EFD8C018F7DA0A001A1D42 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 62EFD8D218F7DA0A001A1D42 /* KDCycleBannerViewDemoTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 62EFD8CA18F7DA0A001A1D42 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 62EFD89F18F7DA09001A1D42 /* KDCycleBannerViewDemo */; + targetProxy = 62EFD8C918F7DA0A001A1D42 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 62EFD8AC18F7DA0A001A1D42 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 62EFD8AD18F7DA0A001A1D42 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 62EFD8B518F7DA0A001A1D42 /* Main_iPhone.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 62EFD8B618F7DA0A001A1D42 /* Base */, + ); + name = Main_iPhone.storyboard; + sourceTree = ""; + }; + 62EFD8B818F7DA0A001A1D42 /* Main_iPad.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 62EFD8B918F7DA0A001A1D42 /* Base */, + ); + name = Main_iPad.storyboard; + sourceTree = ""; + }; + 62EFD8CE18F7DA0A001A1D42 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 62EFD8CF18F7DA0A001A1D42 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 62EFD8D318F7DA0A001A1D42 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 62EFD8D418F7DA0A001A1D42 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 62EFD8D618F7DA0A001A1D42 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 337C66FFB920EB36131A704F /* Pods-KDCycleBannerViewDemo.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch"; + INFOPLIST_FILE = "KDCycleBannerViewDemo/KDCycleBannerViewDemo-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 62EFD8D718F7DA0A001A1D42 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 91B5657AFA0BF7D6B0CF5DFF /* Pods-KDCycleBannerViewDemo.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch"; + INFOPLIST_FILE = "KDCycleBannerViewDemo/KDCycleBannerViewDemo-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + 62EFD8D918F7DA0A001A1D42 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/KDCycleBannerViewDemo.app/KDCycleBannerViewDemo"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "KDCycleBannerViewDemoTests/KDCycleBannerViewDemoTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 62EFD8DA18F7DA0A001A1D42 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/KDCycleBannerViewDemo.app/KDCycleBannerViewDemo"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "KDCycleBannerViewDemo/KDCycleBannerViewDemo-Prefix.pch"; + INFOPLIST_FILE = "KDCycleBannerViewDemoTests/KDCycleBannerViewDemoTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 62EFD89B18F7DA09001A1D42 /* Build configuration list for PBXProject "KDCycleBannerViewDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 62EFD8D318F7DA0A001A1D42 /* Debug */, + 62EFD8D418F7DA0A001A1D42 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 62EFD8D518F7DA0A001A1D42 /* Build configuration list for PBXNativeTarget "KDCycleBannerViewDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 62EFD8D618F7DA0A001A1D42 /* Debug */, + 62EFD8D718F7DA0A001A1D42 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 62EFD8D818F7DA0A001A1D42 /* Build configuration list for PBXNativeTarget "KDCycleBannerViewDemoTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 62EFD8D918F7DA0A001A1D42 /* Debug */, + 62EFD8DA18F7DA0A001A1D42 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 62EFD89818F7DA09001A1D42 /* Project object */; +} diff --git a/KDCycleBannerViewDemo/KDCycleBannerViewDemo/ViewController.m b/KDCycleBannerViewDemo/KDCycleBannerViewDemo/ViewController.m index 4f0910d..438250d 100644 --- a/KDCycleBannerViewDemo/KDCycleBannerViewDemo/ViewController.m +++ b/KDCycleBannerViewDemo/KDCycleBannerViewDemo/ViewController.m @@ -45,7 +45,7 @@ - (void)didReceiveMemoryWarning #pragma mark - KDCycleBannerViewDataSource -- (NSArray *)numberOfKDCycleBannerView:(KDCycleBannerView *)bannerView { +- (NSArray *)dataForCycleBannerView:(KDCycleBannerView *)bannerView { return @[[UIImage imageNamed:@"image1"], @"http://d.hiphotos.baidu.com/image/w%3D2048/sign=ed59838948ed2e73fce9812cb339a08b/58ee3d6d55fbb2fb9835341f4d4a20a44623dca5.jpg", diff --git a/KDCycleBannerViewDemo/Podfile b/KDCycleBannerViewDemo/Podfile index 116d2ce..1c3881b 100644 --- a/KDCycleBannerViewDemo/Podfile +++ b/KDCycleBannerViewDemo/Podfile @@ -1,3 +1,5 @@ inhibit_all_warnings! -pod 'SDWebImage' \ No newline at end of file +target 'KDCycleBannerViewDemo' do + pod 'SDWebImage' +end \ No newline at end of file diff --git a/KDCycleBannerViewDemo/Podfile.lock b/KDCycleBannerViewDemo/Podfile.lock index 78c3462..55fd585 100644 --- a/KDCycleBannerViewDemo/Podfile.lock +++ b/KDCycleBannerViewDemo/Podfile.lock @@ -1,12 +1,14 @@ PODS: - - SDWebImage (3.7.1): - - SDWebImage/Core (= 3.7.1) - - SDWebImage/Core (3.7.1) + - SDWebImage (3.8.2): + - SDWebImage/Core (= 3.8.2) + - SDWebImage/Core (3.8.2) DEPENDENCIES: - SDWebImage SPEC CHECKSUMS: - SDWebImage: 116e88633b5b416ea0ca4b334a4ac59cf72dd38d + SDWebImage: 098e97e6176540799c27e804c96653ee0833d13c -COCOAPODS: 0.35.0 +PODFILE CHECKSUM: afe19f1044e940460bc6eeb8a09dd2fa4e648353 + +COCOAPODS: 1.1.1 diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/NSData+ImageContentType.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/NSData+ImageContentType.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDImageCache.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDImageCache.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDImageCache.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDImageCache.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageCompat.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageCompat.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageDecoder.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageDecoder.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageDownloader.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageDownloader.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageDownloaderOperation.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageDownloaderOperation.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageManager.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageManager.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageManager.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageManager.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageOperation.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImageOperation.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImagePrefetcher.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/SDWebImagePrefetcher.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIButton+WebCache.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIButton+WebCache.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImage+GIF.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImage+GIF.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImage+GIF.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImage+GIF.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImage+MultiFormat.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImage+MultiFormat.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImageView+HighlightedWebCache.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImageView+HighlightedWebCache.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImageView+WebCache.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIImageView+WebCache.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h diff --git a/KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIView+WebCacheOperation.h b/KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h similarity index 100% rename from KDCycleBannerViewDemo/Pods/Headers/Build/SDWebImage/UIView+WebCacheOperation.h rename to KDCycleBannerViewDemo/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h diff --git a/KDCycleBannerViewDemo/Pods/Manifest.lock b/KDCycleBannerViewDemo/Pods/Manifest.lock index 78c3462..55fd585 100644 --- a/KDCycleBannerViewDemo/Pods/Manifest.lock +++ b/KDCycleBannerViewDemo/Pods/Manifest.lock @@ -1,12 +1,14 @@ PODS: - - SDWebImage (3.7.1): - - SDWebImage/Core (= 3.7.1) - - SDWebImage/Core (3.7.1) + - SDWebImage (3.8.2): + - SDWebImage/Core (= 3.8.2) + - SDWebImage/Core (3.8.2) DEPENDENCIES: - SDWebImage SPEC CHECKSUMS: - SDWebImage: 116e88633b5b416ea0ca4b334a4ac59cf72dd38d + SDWebImage: 098e97e6176540799c27e804c96653ee0833d13c -COCOAPODS: 0.35.0 +PODFILE CHECKSUM: afe19f1044e940460bc6eeb8a09dd2fa4e648353 + +COCOAPODS: 1.1.1 diff --git a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/project.pbxproj b/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/project.pbxproj index c80b141..ff3d8ee 100644 --- a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/project.pbxproj +++ b/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/project.pbxproj @@ -1,1721 +1,590 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 01B16019E13E15F37C01D826 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SDWebImagePrefetcher.m - path - SDWebImage/SDWebImagePrefetcher.m - sourceTree - <group> - - 02603B857EBBDF190F940EE1 - - baseConfigurationReference - C585363BA149A83138E2F903 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 074AD953D166D884F8A496EE - - fileRef - 4CC246231371BB4684E89ED2 - isa - PBXBuildFile - - 084B0FFDC6D5D6671FD485E1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SDWebImageDownloaderOperation.m - path - SDWebImage/SDWebImageDownloaderOperation.m - sourceTree - <group> - - 0AB3339E91878ED3895A3561 - - children - - 7CA26FB94FB8A8F008A8B066 - E416DEBE82CB299497EE7659 - 37C23C6E973A32D82DA3036D - E599B78EB27B42967D03EC17 - B563EAE1F2D446FECD5F643F - DB571B953FDDB4E2C258E20B - 5B818D1210FAEE88E3B1B4EE - 5D222B40CC17B134B7514E53 - E3592DEEF74BDDDF0F683895 - B018ADBF378DB09F0A5AD9CB - D5DCA771F1120EA7F3F88097 - 084B0FFDC6D5D6671FD485E1 - F63C8585AEA226D72EDB6046 - 5E4360AD4B99AB02C8DCFBB5 - 9ECDF0D1DA8311FA29AFCBCC - 0D04DBFC13A16F21BB3DBCEC - 01B16019E13E15F37C01D826 - FF8FD20AE84A190D5CF0F624 - 64E1CD25818147C4766709BC - 7267A9AD5A28BF21861327DF - D6DE74BD8DC2C92CC671A7A9 - 47E14367C23F2958698BADB0 - 882EB5B76172097D3659F3C7 - 4CC246231371BB4684E89ED2 - 18E2FAE99DC11522336AED46 - D4AA35E601F3D933FE16E664 - 6683B66900C29A89D8F1351E - ED23F8E963FBF268CA8C30F9 - C1F65325152AA32F8AF6C64C - - isa - PBXGroup - name - Core - sourceTree - <group> - - 0BA87CD272CE278493683293 - - containerPortal - 32B3B3F63CF748E81D3022F2 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - E0E566795902AB4FC645F325 - remoteInfo - Pods-SDWebImage - - 0D04DBFC13A16F21BB3DBCEC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDWebImagePrefetcher.h - path - SDWebImage/SDWebImagePrefetcher.h - sourceTree - <group> - - 14F177F6413DDEECC544E230 - - fileRef - 47E14367C23F2958698BADB0 - isa - PBXBuildFile - - 18E2FAE99DC11522336AED46 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIImageView+HighlightedWebCache.m - path - SDWebImage/UIImageView+HighlightedWebCache.m - sourceTree - <group> - - 18E6B59C870C4291DE80C6B8 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 1A0C7E04A048B174C3336BCF - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-SDWebImage.a - sourceTree - BUILT_PRODUCTS_DIR - - 1AB7AA341EF4A7FE7C0CB538 - - children - - 3B5EC9CE0867F6CEDDF3415C - 1A0C7E04A048B174C3336BCF - - isa - PBXGroup - name - Products - sourceTree - <group> - - 1BEDDFC5F10CCC9FC04C6B1C - - children - - E2E76E8E89892FE6D879C0B8 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 1CBF1E3913F97770E1AE5C8D - - buildActionMask - 2147483647 - files - - F835A8EE6E680F62480FE628 - EC6A677627086C39A9D93B89 - 68FA812F8C5B46714EF9BE08 - 365E98635C9939302B47DF18 - 5AA57D64FCFE58E8DFE26543 - C01097CBFF1F4DE25B2ED4D0 - 4C9231C8F0BB9F71AAEEFF32 - 3819B4EF0A9B23E612EE9B24 - 9DC6514C7480116C160D1A89 - B72EBFC26EA5AA5F5D5B22AE - 2B98AD8F6EEF4ED4EE0CB058 - EE521AC2EC3A115BD3973886 - B46ACC731D7F5C251F5A1444 - 431DC371B238359809123983 - 5EF5A19E1C6FA892E38AD687 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 21A17D2EE12DD6F34FBF8D9D - - buildConfigurations - - 832405C2D36CC99521694DD2 - A05091C89A986CB9447B34BB - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 21B90C9ECE778B360ABD4249 - - fileRef - 37C23C6E973A32D82DA3036D - isa - PBXBuildFile - - 21F2692511B2AD7E76334873 - - children - - 684685DA6F7E3D528FC58085 - 1BEDDFC5F10CCC9FC04C6B1C - FE15D65CB165CE88792144CA - 1AB7AA341EF4A7FE7C0CB538 - 7825F86D9775FEA219E1A9BE - - isa - PBXGroup - sourceTree - <group> - - 2720F6E650571D4693EBCFB0 - - buildConfigurations - - 54AD489B46C242CD9C437471 - 18E6B59C870C4291DE80C6B8 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 27E95561B3E491536C0363CC - - fileRef - EA863AC55D93B9501969E43C - isa - PBXBuildFile - - 28CF9E3277078AA626489709 - - fileRef - B563EAE1F2D446FECD5F643F - isa - PBXBuildFile - - 29E0619A9D25FB53716F4204 - - fileRef - 5B818D1210FAEE88E3B1B4EE - isa - PBXBuildFile - - 2B98AD8F6EEF4ED4EE0CB058 - - fileRef - D6DE74BD8DC2C92CC671A7A9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 3190B3D8015AAFFE539F783D - - fileRef - 0D04DBFC13A16F21BB3DBCEC - isa - PBXBuildFile - - 32B3B3F63CF748E81D3022F2 - - attributes - - LastUpgradeCheck - 0510 - - buildConfigurationList - 2720F6E650571D4693EBCFB0 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - 21F2692511B2AD7E76334873 - productRefGroup - 1AB7AA341EF4A7FE7C0CB538 - projectDirPath - - projectReferences - - projectRoot - - targets - - 3E12C27C247FA85BF5FFB7F3 - E0E566795902AB4FC645F325 - - - 33D4A0C0E759DB186CD1553E - - fileRef - FF8FD20AE84A190D5CF0F624 - isa - PBXBuildFile - - 365E98635C9939302B47DF18 - - fileRef - DB571B953FDDB4E2C258E20B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 37C23C6E973A32D82DA3036D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDImageCache.h - path - SDWebImage/SDImageCache.h - sourceTree - <group> - - 3819B4EF0A9B23E612EE9B24 - - fileRef - 5E4360AD4B99AB02C8DCFBB5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 3B5EC9CE0867F6CEDDF3415C - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - 3C9969C3BA6DA7DCF5A98B78 - - fileRef - 8CB05C1B2B7C80A63A7DF433 - isa - PBXBuildFile - - 3C9E36C7F762497224BF4C70 - - buildActionMask - 2147483647 - files - - A3C7B9C461B1FED9FF0711D6 - 21B90C9ECE778B360ABD4249 - 28CF9E3277078AA626489709 - 29E0619A9D25FB53716F4204 - 65E42455C8215BA024E6CC5F - CCEE3BEBE9CBC2CB52395F32 - E21B5C388D3D01D9A94088EF - 57426923DB4664DB611DEFE7 - 3190B3D8015AAFFE539F783D - 33D4A0C0E759DB186CD1553E - F187DC2739E4AA2558F465A2 - 14F177F6413DDEECC544E230 - 074AD953D166D884F8A496EE - F050AE9BF45F19371162D8CB - 8F784160EC202D2AAC799377 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3E12C27C247FA85BF5FFB7F3 - - buildConfigurationList - 21A17D2EE12DD6F34FBF8D9D - buildPhases - - 90FEDC4E8AAB68DE967A9818 - 4CEFDAD456E2169AE2633219 - - buildRules - - dependencies - - F3146B9ED42DB3561B09A578 - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 3B5EC9CE0867F6CEDDF3415C - productType - com.apple.product-type.library.static - - 431DC371B238359809123983 - - fileRef - 6683B66900C29A89D8F1351E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 47E14367C23F2958698BADB0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIImage+MultiFormat.h - path - SDWebImage/UIImage+MultiFormat.h - sourceTree - <group> - - 4C9231C8F0BB9F71AAEEFF32 - - fileRef - 084B0FFDC6D5D6671FD485E1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 4C939682F502372BC2A77360 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.debug.xcconfig - sourceTree - <group> - - 4CC246231371BB4684E89ED2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIImageView+HighlightedWebCache.h - path - SDWebImage/UIImageView+HighlightedWebCache.h - sourceTree - <group> - - 4CEFDAD456E2169AE2633219 - - buildActionMask - 2147483647 - files - - 7B834650485F1179D519BB9C - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 4FB8FB5409DF331DF61F8EBB - - fileRef - 53293CF184B096938374BAE7 - isa - PBXBuildFile - - 53293CF184B096938374BAE7 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - 54AD489B46C242CD9C437471 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - - isa - XCBuildConfiguration - name - Debug - - 57426923DB4664DB611DEFE7 - - fileRef - 9ECDF0D1DA8311FA29AFCBCC - isa - PBXBuildFile - - 5A532708EB556BF97242D5AB - - baseConfigurationReference - C585363BA149A83138E2F903 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 5AA57D64FCFE58E8DFE26543 - - fileRef - 5D222B40CC17B134B7514E53 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 5B818D1210FAEE88E3B1B4EE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDWebImageDecoder.h - path - SDWebImage/SDWebImageDecoder.h - sourceTree - <group> - - 5CF7F80BD455F99D426061CE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-environment.h - sourceTree - <group> - - 5D222B40CC17B134B7514E53 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SDWebImageDecoder.m - path - SDWebImage/SDWebImageDecoder.m - sourceTree - <group> - - 5E4360AD4B99AB02C8DCFBB5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SDWebImageManager.m - path - SDWebImage/SDWebImageManager.m - sourceTree - <group> - - 5EF5A19E1C6FA892E38AD687 - - fileRef - C1F65325152AA32F8AF6C64C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 64E1CD25818147C4766709BC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIButton+WebCache.m - path - SDWebImage/UIButton+WebCache.m - sourceTree - <group> - - 65E42455C8215BA024E6CC5F - - fileRef - E3592DEEF74BDDDF0F683895 - isa - PBXBuildFile - - 6683B66900C29A89D8F1351E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIImageView+WebCache.m - path - SDWebImage/UIImageView+WebCache.m - sourceTree - <group> - - 684685DA6F7E3D528FC58085 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - name - Podfile - path - ../Podfile - sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby - - 68FA812F8C5B46714EF9BE08 - - fileRef - E599B78EB27B42967D03EC17 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 7267A9AD5A28BF21861327DF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIImage+GIF.h - path - SDWebImage/UIImage+GIF.h - sourceTree - <group> - - 73C3A38B5506F2F1B4B65449 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.release.xcconfig - sourceTree - <group> - - 7825F86D9775FEA219E1A9BE - - children - - B224A0C04A8275E2F9A08B0D - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - 7B834650485F1179D519BB9C - - fileRef - 53293CF184B096938374BAE7 - isa - PBXBuildFile - - 7CA26FB94FB8A8F008A8B066 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSData+ImageContentType.h - path - SDWebImage/NSData+ImageContentType.h - sourceTree - <group> - - 832405C2D36CC99521694DD2 - - baseConfigurationReference - 4C939682F502372BC2A77360 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 882EB5B76172097D3659F3C7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIImage+MultiFormat.m - path - SDWebImage/UIImage+MultiFormat.m - sourceTree - <group> - - 8CB05C1B2B7C80A63A7DF433 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - ImageIO.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/ImageIO.framework - sourceTree - DEVELOPER_DIR - - 8F784160EC202D2AAC799377 - - fileRef - ED23F8E963FBF268CA8C30F9 - isa - PBXBuildFile - - 90FEDC4E8AAB68DE967A9818 - - buildActionMask - 2147483647 - files - - 27E95561B3E491536C0363CC - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9DC6514C7480116C160D1A89 - - fileRef - 01B16019E13E15F37C01D826 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 9ECDF0D1DA8311FA29AFCBCC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDWebImageOperation.h - path - SDWebImage/SDWebImageOperation.h - sourceTree - <group> - - A05091C89A986CB9447B34BB - - baseConfigurationReference - 73C3A38B5506F2F1B4B65449 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - A3C7B9C461B1FED9FF0711D6 - - fileRef - 7CA26FB94FB8A8F008A8B066 - isa - PBXBuildFile - - B018ADBF378DB09F0A5AD9CB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SDWebImageDownloader.m - path - SDWebImage/SDWebImageDownloader.m - sourceTree - <group> - - B224A0C04A8275E2F9A08B0D - - children - - CE47E30A9A6969F4C14B5D81 - BC30C91498AB7CCDF806D68F - EA863AC55D93B9501969E43C - 5CF7F80BD455F99D426061CE - E8441BA4970C7F512487AD42 - 4C939682F502372BC2A77360 - 73C3A38B5506F2F1B4B65449 - - isa - PBXGroup - name - Pods - path - Target Support Files/Pods - sourceTree - <group> - - B46ACC731D7F5C251F5A1444 - - fileRef - 18E2FAE99DC11522336AED46 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - B563EAE1F2D446FECD5F643F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDWebImageCompat.h - path - SDWebImage/SDWebImageCompat.h - sourceTree - <group> - - B72EBFC26EA5AA5F5D5B22AE - - fileRef - 64E1CD25818147C4766709BC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - BC30C91498AB7CCDF806D68F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - C01097CBFF1F4DE25B2ED4D0 - - fileRef - B018ADBF378DB09F0A5AD9CB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - C15FB8126D414465642B462D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-SDWebImage.xcconfig - sourceTree - <group> - - C1F65325152AA32F8AF6C64C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIView+WebCacheOperation.m - path - SDWebImage/UIView+WebCacheOperation.m - sourceTree - <group> - - C585363BA149A83138E2F903 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-SDWebImage-Private.xcconfig - sourceTree - <group> - - CCEE3BEBE9CBC2CB52395F32 - - fileRef - D5DCA771F1120EA7F3F88097 - isa - PBXBuildFile - - CE47E30A9A6969F4C14B5D81 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - path - Pods-acknowledgements.markdown - sourceTree - <group> - - D3137F59F6A742D6E87E9D32 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-SDWebImage-dummy.m - sourceTree - <group> - - D4AA35E601F3D933FE16E664 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIImageView+WebCache.h - path - SDWebImage/UIImageView+WebCache.h - sourceTree - <group> - - D5DCA771F1120EA7F3F88097 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDWebImageDownloaderOperation.h - path - SDWebImage/SDWebImageDownloaderOperation.h - sourceTree - <group> - - D6DE74BD8DC2C92CC671A7A9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - UIImage+GIF.m - path - SDWebImage/UIImage+GIF.m - sourceTree - <group> - - DA222CB77F34F34A366EC24D - - buildActionMask - 2147483647 - files - - 4FB8FB5409DF331DF61F8EBB - 3C9969C3BA6DA7DCF5A98B78 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - DB571B953FDDB4E2C258E20B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SDWebImageCompat.m - path - SDWebImage/SDWebImageCompat.m - sourceTree - <group> - - DEFE0D727F4F547257BB2534 - - buildConfigurations - - 5A532708EB556BF97242D5AB - 02603B857EBBDF190F940EE1 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - E0E566795902AB4FC645F325 - - buildConfigurationList - DEFE0D727F4F547257BB2534 - buildPhases - - 1CBF1E3913F97770E1AE5C8D - DA222CB77F34F34A366EC24D - 3C9E36C7F762497224BF4C70 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-SDWebImage - productName - Pods-SDWebImage - productReference - 1A0C7E04A048B174C3336BCF - productType - com.apple.product-type.library.static - - E21B5C388D3D01D9A94088EF - - fileRef - F63C8585AEA226D72EDB6046 - isa - PBXBuildFile - - E2E76E8E89892FE6D879C0B8 - - children - - 53293CF184B096938374BAE7 - 8CB05C1B2B7C80A63A7DF433 - - isa - PBXGroup - name - iOS - sourceTree - <group> - - E3592DEEF74BDDDF0F683895 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDWebImageDownloader.h - path - SDWebImage/SDWebImageDownloader.h - sourceTree - <group> - - E416DEBE82CB299497EE7659 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSData+ImageContentType.m - path - SDWebImage/NSData+ImageContentType.m - sourceTree - <group> - - E599B78EB27B42967D03EC17 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - SDImageCache.m - path - SDWebImage/SDImageCache.m - sourceTree - <group> - - E5C9D70285D3BA597BBF6E8D - - children - - C15FB8126D414465642B462D - C585363BA149A83138E2F903 - D3137F59F6A742D6E87E9D32 - FC394DF5C30F5035FDA8E288 - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-SDWebImage - sourceTree - <group> - - E8441BA4970C7F512487AD42 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh - sourceTree - <group> - - E8773F9ACB6EA889D28F2C4E - - children - - 0AB3339E91878ED3895A3561 - E5C9D70285D3BA597BBF6E8D - - isa - PBXGroup - name - SDWebImage - path - SDWebImage - sourceTree - <group> - - EA863AC55D93B9501969E43C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - <group> - - EC6A677627086C39A9D93B89 - - fileRef - D3137F59F6A742D6E87E9D32 - isa - PBXBuildFile - - ED23F8E963FBF268CA8C30F9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIView+WebCacheOperation.h - path - SDWebImage/UIView+WebCacheOperation.h - sourceTree - <group> - - EE521AC2EC3A115BD3973886 - - fileRef - 882EB5B76172097D3659F3C7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - F050AE9BF45F19371162D8CB - - fileRef - D4AA35E601F3D933FE16E664 - isa - PBXBuildFile - - F187DC2739E4AA2558F465A2 - - fileRef - 7267A9AD5A28BF21861327DF - isa - PBXBuildFile - - F3146B9ED42DB3561B09A578 - - isa - PBXTargetDependency - name - Pods-SDWebImage - target - E0E566795902AB4FC645F325 - targetProxy - 0BA87CD272CE278493683293 - - F63C8585AEA226D72EDB6046 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - SDWebImageManager.h - path - SDWebImage/SDWebImageManager.h - sourceTree - <group> - - F835A8EE6E680F62480FE628 - - fileRef - E416DEBE82CB299497EE7659 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - FC394DF5C30F5035FDA8E288 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-SDWebImage-prefix.pch - sourceTree - <group> - - FE15D65CB165CE88792144CA - - children - - E8773F9ACB6EA889D28F2C4E - - isa - PBXGroup - name - Pods - sourceTree - <group> - - FF8FD20AE84A190D5CF0F624 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UIButton+WebCache.h - path - SDWebImage/UIButton+WebCache.h - sourceTree - <group> - - - rootObject - 32B3B3F63CF748E81D3022F2 - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 04374EEFD7C3776367F730CA15EFCC12 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 25C8E2BBF608ECE8671D2FEE5C4B4EDD /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B7FEC5C7CD89196DF63164F5D1764D2 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 57432B77DB4524A0940406E1574CAE23 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D21DFD0655AFB7F1C31EBD1A8192358 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CAA9CDF50B3B3D72A40DDD6992A3F1AB /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E9912EDEC14B51295BF165F96D39EBD /* Pods-KDCycleBannerViewDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B2E27D103385B6164847C15D935CB39 /* Pods-KDCycleBannerViewDemo-dummy.m */; }; + 20EFC315D70E146F87564E17B074DF47 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = ED05538C05B2A839D52553060101C23A /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E6603EC58FE2740DBD0884790D9DDEB /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C97050C5BB315CF8D59A03899BAFA13 /* ImageIO.framework */; }; + 3C09FDEC435813A5FD6C9D053132270D /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 01BED00DF80BB65461F0D28336FB6CE8 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3D395C986AC6EF103A29FA62A0F53339 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 250BAE81BE304B444F381CD6FD11B6EF /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41A7597E1F4B8F00A8830C2F7080DBF0 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFC6AD5E887F4EFC2676535FE8B5FD8 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 43EA4BC2B9369892082D4B0D599664DE /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 53C4EA1C4BFE3F13F74B288B217D2618 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44200669C54BFB9E8C24B6A454AE3F57 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FA165D45AFB745D2CC245D9F159DFBA0 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B5EE560197A23C271496D6212BAC90E /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 24D67060642F46499091E7CE62BD9F9A /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51D6E14112C2A00497921B9E98781A3B /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A0DE9BDB6F7807A6DC1E0C34EEB20708 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6ACDC3C856B0FD4B905F58B9003AC334 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D4B171E8C10A9B61871121F6B772057 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 709CDC66ECAA4D8128E0089C31D12A59 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 584D9094F3B8E893DD7988573497CE4F /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 82BA61CA04BCD484F36C7C57804EE10F /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FE14E49C11A08FA132ADB2667489C89 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95BBADFD5C913598E015AF9E1D74CC9F /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C3ACBC3A61BEEFDC8AAF89B9E9C78E3F /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97BAA663CAD0D86E509E703B08570584 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 24E0E5A3B8321A9A1884E99287933282 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 98E03E834C0568A5924F32C723E27D0E /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 25FACB0DA2CEDD1C574C3B3665B2B863 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6383414F658A6ED1EA705187B8438EE /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C9D46EB475239A56304616D49393AE1A /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC49A689C3CBB493AD35D2AAD633AF0 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EA762DD93A06FB43F745DCCCBC1D6249 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABFFA1E0B547B7F53D7A12BC815BEC86 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0EE6401B194E10ED17CEC135BF4343 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF47AAD9BAB72E148F7542EC4AF4A7CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9757679632F4D96FB95D495ADE43F19A /* Foundation.framework */; }; + B1E94C143AF5902831DFBD666BE5D02D /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = B109750998ADF20B8220311398DF64F6 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BAAF4E599B84FCAD45D60E1C597D3951 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 48A09FE35ADF900277C8B50749A7A443 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C0C064C3398C417E0A57D3077F8B9585 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = EEA3218C18FD309EA41E929AD5FA7618 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CB93EB68939127B476A747779C99B399 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B9DB2A002719436CEECAB3444646B64 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6D52BB5FA42E6B274A4CAE3703C516E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9757679632F4D96FB95D495ADE43F19A /* Foundation.framework */; }; + DC5F7FD412E5FAC25ADDA34F9621C5FC /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = B0D9773DD42372EC5C4F3E42FFBCD37F /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD160705327BD55342434F2BBD72B35D /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 053B5EB27371089DC3C748090DE33658 /* SDWebImage-dummy.m */; }; + E18CC1DA360C019D1125AD7EF3B18E1D /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F9903267CA68F30E00A0239345863A /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E30F265F6820DA9FF0F577C16528E745 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 22B28D982A589941872911F22349FD95 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC6FC0A62E8B057877D9ED3CC668D8EE /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = D99686ED60C3C01FEED8B35B779A456A /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EC882BE6DAF0ACE1B24506D15B456100 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ACAC3316F7B86AA1862BE94DFE5C4D0 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + D2580C3760F6786F0D8B95DF2B7C9A9B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 00C6ADA215F99E0A0362620CAB4D5F3A; + remoteInfo = SDWebImage; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 01BED00DF80BB65461F0D28336FB6CE8 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + 053B5EB27371089DC3C748090DE33658 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 0ACAC3316F7B86AA1862BE94DFE5C4D0 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 0B2E27D103385B6164847C15D935CB39 /* Pods-KDCycleBannerViewDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-KDCycleBannerViewDemo-dummy.m"; sourceTree = ""; }; + 11F9903267CA68F30E00A0239345863A /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + 22B28D982A589941872911F22349FD95 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 24D67060642F46499091E7CE62BD9F9A /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 24E0E5A3B8321A9A1884E99287933282 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 250BAE81BE304B444F381CD6FD11B6EF /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + 25C8E2BBF608ECE8671D2FEE5C4B4EDD /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 25FACB0DA2CEDD1C574C3B3665B2B863 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + 29D0A964F3A7B72DF36157D0EDA9672B /* Pods-KDCycleBannerViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KDCycleBannerViewDemo.release.xcconfig"; sourceTree = ""; }; + 3D4B171E8C10A9B61871121F6B772057 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 48A09FE35ADF900277C8B50749A7A443 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + 4FE14E49C11A08FA132ADB2667489C89 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + 53C4EA1C4BFE3F13F74B288B217D2618 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + 57432B77DB4524A0940406E1574CAE23 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + 584D9094F3B8E893DD7988573497CE4F /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + 5B9DB2A002719436CEECAB3444646B64 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 6C7439C6F9ADA9C01DA90E37EE8A7C88 /* libPods-KDCycleBannerViewDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-KDCycleBannerViewDemo.a"; path = "libPods-KDCycleBannerViewDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8506ABF05CCD75B603A14BEBE8C7000D /* Pods-KDCycleBannerViewDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-KDCycleBannerViewDemo-acknowledgements.markdown"; sourceTree = ""; }; + 8BFC6AD5E887F4EFC2676535FE8B5FD8 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 8C97050C5BB315CF8D59A03899BAFA13 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 953F85FB45CB8BFFE32FE81C92CCE092 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + 9757679632F4D96FB95D495ADE43F19A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 98CD83782F73287ECE4013F9234F1CE5 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + A0DE9BDB6F7807A6DC1E0C34EEB20708 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + B0D9773DD42372EC5C4F3E42FFBCD37F /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + B109750998ADF20B8220311398DF64F6 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + C3ACBC3A61BEEFDC8AAF89B9E9C78E3F /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + C589321111D72B5C0769AC85F6897921 /* Pods-KDCycleBannerViewDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-KDCycleBannerViewDemo.debug.xcconfig"; sourceTree = ""; }; + C73D9C08BE8D2A690D7FF99876E46B88 /* Pods-KDCycleBannerViewDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-KDCycleBannerViewDemo-acknowledgements.plist"; sourceTree = ""; }; + C9D46EB475239A56304616D49393AE1A /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + CAA9CDF50B3B3D72A40DDD6992A3F1AB /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + D3715A8644DB394768E1294F1F337C07 /* Pods-KDCycleBannerViewDemo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-KDCycleBannerViewDemo-resources.sh"; sourceTree = ""; }; + D99686ED60C3C01FEED8B35B779A456A /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + DD0EE6401B194E10ED17CEC135BF4343 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + E835B8DD7AE2D0E370E179E2D20E8902 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSDWebImage.a; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EA762DD93A06FB43F745DCCCBC1D6249 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + ED05538C05B2A839D52553060101C23A /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + EEA3218C18FD309EA41E929AD5FA7618 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + FA165D45AFB745D2CC245D9F159DFBA0 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + FD32906B322E7A3BDC358E44D6F0FA97 /* Pods-KDCycleBannerViewDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-KDCycleBannerViewDemo-frameworks.sh"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + B17C785073A4583B7BCDB71C4752E55F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D6D52BB5FA42E6B274A4CAE3703C516E /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C0DB3423D04039FF1F21A4EE34B29E2F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF47AAD9BAB72E148F7542EC4AF4A7CB /* Foundation.framework in Frameworks */, + 2E6603EC58FE2740DBD0884790D9DDEB /* ImageIO.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 346BA943460E210F9C106794330AAD24 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + BBF373CDC8BBB8B8058894DA73BB3139 /* Pods-KDCycleBannerViewDemo */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7D84E3C69AE5CBF48F1BFE903C509C33 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 465A2CEA0BE5A165BDD26F755CDC9516 /* Core */ = { + isa = PBXGroup; + children = ( + B109750998ADF20B8220311398DF64F6 /* NSData+ImageContentType.h */, + 01BED00DF80BB65461F0D28336FB6CE8 /* NSData+ImageContentType.m */, + 11F9903267CA68F30E00A0239345863A /* SDImageCache.h */, + 57432B77DB4524A0940406E1574CAE23 /* SDImageCache.m */, + 4FE14E49C11A08FA132ADB2667489C89 /* SDWebImageCompat.h */, + 48A09FE35ADF900277C8B50749A7A443 /* SDWebImageCompat.m */, + 22B28D982A589941872911F22349FD95 /* SDWebImageDecoder.h */, + 584D9094F3B8E893DD7988573497CE4F /* SDWebImageDecoder.m */, + 53C4EA1C4BFE3F13F74B288B217D2618 /* SDWebImageDownloader.h */, + D99686ED60C3C01FEED8B35B779A456A /* SDWebImageDownloader.m */, + 3D4B171E8C10A9B61871121F6B772057 /* SDWebImageDownloaderOperation.h */, + EA762DD93A06FB43F745DCCCBC1D6249 /* SDWebImageDownloaderOperation.m */, + CAA9CDF50B3B3D72A40DDD6992A3F1AB /* SDWebImageManager.h */, + FA165D45AFB745D2CC245D9F159DFBA0 /* SDWebImageManager.m */, + B0D9773DD42372EC5C4F3E42FFBCD37F /* SDWebImageOperation.h */, + DD0EE6401B194E10ED17CEC135BF4343 /* SDWebImagePrefetcher.h */, + C3ACBC3A61BEEFDC8AAF89B9E9C78E3F /* SDWebImagePrefetcher.m */, + 5B9DB2A002719436CEECAB3444646B64 /* UIButton+WebCache.h */, + 24D67060642F46499091E7CE62BD9F9A /* UIButton+WebCache.m */, + 25FACB0DA2CEDD1C574C3B3665B2B863 /* UIImage+GIF.h */, + 8BFC6AD5E887F4EFC2676535FE8B5FD8 /* UIImage+GIF.m */, + A0DE9BDB6F7807A6DC1E0C34EEB20708 /* UIImage+MultiFormat.h */, + EEA3218C18FD309EA41E929AD5FA7618 /* UIImage+MultiFormat.m */, + 0ACAC3316F7B86AA1862BE94DFE5C4D0 /* UIImageView+HighlightedWebCache.h */, + ED05538C05B2A839D52553060101C23A /* UIImageView+HighlightedWebCache.m */, + C9D46EB475239A56304616D49393AE1A /* UIImageView+WebCache.h */, + 250BAE81BE304B444F381CD6FD11B6EF /* UIImageView+WebCache.m */, + 25C8E2BBF608ECE8671D2FEE5C4B4EDD /* UIView+WebCacheOperation.h */, + 24E0E5A3B8321A9A1884E99287933282 /* UIView+WebCacheOperation.m */, + ); + name = Core; + sourceTree = ""; + }; + 7D84E3C69AE5CBF48F1BFE903C509C33 /* iOS */ = { + isa = PBXGroup; + children = ( + 9757679632F4D96FB95D495ADE43F19A /* Foundation.framework */, + 8C97050C5BB315CF8D59A03899BAFA13 /* ImageIO.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, + BF4B13718B20D23D5B220FA33C2583D8 /* Pods */, + B0C26C90C9832975734290C58EF4E81F /* Products */, + 346BA943460E210F9C106794330AAD24 /* Targets Support Files */, + ); + sourceTree = ""; + }; + B0C26C90C9832975734290C58EF4E81F /* Products */ = { + isa = PBXGroup; + children = ( + 6C7439C6F9ADA9C01DA90E37EE8A7C88 /* libPods-KDCycleBannerViewDemo.a */, + E835B8DD7AE2D0E370E179E2D20E8902 /* libSDWebImage.a */, + ); + name = Products; + sourceTree = ""; + }; + BBF373CDC8BBB8B8058894DA73BB3139 /* Pods-KDCycleBannerViewDemo */ = { + isa = PBXGroup; + children = ( + 8506ABF05CCD75B603A14BEBE8C7000D /* Pods-KDCycleBannerViewDemo-acknowledgements.markdown */, + C73D9C08BE8D2A690D7FF99876E46B88 /* Pods-KDCycleBannerViewDemo-acknowledgements.plist */, + 0B2E27D103385B6164847C15D935CB39 /* Pods-KDCycleBannerViewDemo-dummy.m */, + FD32906B322E7A3BDC358E44D6F0FA97 /* Pods-KDCycleBannerViewDemo-frameworks.sh */, + D3715A8644DB394768E1294F1F337C07 /* Pods-KDCycleBannerViewDemo-resources.sh */, + C589321111D72B5C0769AC85F6897921 /* Pods-KDCycleBannerViewDemo.debug.xcconfig */, + 29D0A964F3A7B72DF36157D0EDA9672B /* Pods-KDCycleBannerViewDemo.release.xcconfig */, + ); + name = "Pods-KDCycleBannerViewDemo"; + path = "Target Support Files/Pods-KDCycleBannerViewDemo"; + sourceTree = ""; + }; + BF4B13718B20D23D5B220FA33C2583D8 /* Pods */ = { + isa = PBXGroup; + children = ( + E91D80E105451EE1B94ED0C596D41B59 /* SDWebImage */, + ); + name = Pods; + sourceTree = ""; + }; + DD4F9FBA3D31CF3D331815B65E320DFF /* Support Files */ = { + isa = PBXGroup; + children = ( + 98CD83782F73287ECE4013F9234F1CE5 /* SDWebImage.xcconfig */, + 053B5EB27371089DC3C748090DE33658 /* SDWebImage-dummy.m */, + 953F85FB45CB8BFFE32FE81C92CCE092 /* SDWebImage-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; + sourceTree = ""; + }; + E91D80E105451EE1B94ED0C596D41B59 /* SDWebImage */ = { + isa = PBXGroup; + children = ( + 465A2CEA0BE5A165BDD26F755CDC9516 /* Core */, + DD4F9FBA3D31CF3D331815B65E320DFF /* Support Files */, + ); + name = SDWebImage; + path = SDWebImage; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 89C5856783AB32009E7FEDBDA83A54D6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B1E94C143AF5902831DFBD666BE5D02D /* NSData+ImageContentType.h in Headers */, + E18CC1DA360C019D1125AD7EF3B18E1D /* SDImageCache.h in Headers */, + 82BA61CA04BCD484F36C7C57804EE10F /* SDWebImageCompat.h in Headers */, + E30F265F6820DA9FF0F577C16528E745 /* SDWebImageDecoder.h in Headers */, + 43EA4BC2B9369892082D4B0D599664DE /* SDWebImageDownloader.h in Headers */, + 6ACDC3C856B0FD4B905F58B9003AC334 /* SDWebImageDownloaderOperation.h in Headers */, + 0D21DFD0655AFB7F1C31EBD1A8192358 /* SDWebImageManager.h in Headers */, + DC5F7FD412E5FAC25ADDA34F9621C5FC /* SDWebImageOperation.h in Headers */, + ABFFA1E0B547B7F53D7A12BC815BEC86 /* SDWebImagePrefetcher.h in Headers */, + CB93EB68939127B476A747779C99B399 /* UIButton+WebCache.h in Headers */, + 98E03E834C0568A5924F32C723E27D0E /* UIImage+GIF.h in Headers */, + 51D6E14112C2A00497921B9E98781A3B /* UIImage+MultiFormat.h in Headers */, + EC882BE6DAF0ACE1B24506D15B456100 /* UIImageView+HighlightedWebCache.h in Headers */, + A6383414F658A6ED1EA705187B8438EE /* UIImageView+WebCache.h in Headers */, + 04374EEFD7C3776367F730CA15EFCC12 /* UIView+WebCacheOperation.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 00C6ADA215F99E0A0362620CAB4D5F3A /* SDWebImage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7358E94A3CA3D1DEA240F48FE392B3AF /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildPhases = ( + AFEA2A4011665A8B4FCAB3BED3E36B0E /* Sources */, + C0DB3423D04039FF1F21A4EE34B29E2F /* Frameworks */, + 89C5856783AB32009E7FEDBDA83A54D6 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SDWebImage; + productName = SDWebImage; + productReference = E835B8DD7AE2D0E370E179E2D20E8902 /* libSDWebImage.a */; + productType = "com.apple.product-type.library.static"; + }; + AB2A52590FBBB324FA5CAAC1BC53A02D /* Pods-KDCycleBannerViewDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 91FD4BFA74229890BF195C491828A074 /* Build configuration list for PBXNativeTarget "Pods-KDCycleBannerViewDemo" */; + buildPhases = ( + 597626CAE2DE61B681468180796290FE /* Sources */, + B17C785073A4583B7BCDB71C4752E55F /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AE26E14FCF1993E30C6EA6F3F657D786 /* PBXTargetDependency */, + ); + name = "Pods-KDCycleBannerViewDemo"; + productName = "Pods-KDCycleBannerViewDemo"; + productReference = 6C7439C6F9ADA9C01DA90E37EE8A7C88 /* libPods-KDCycleBannerViewDemo.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = B0C26C90C9832975734290C58EF4E81F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AB2A52590FBBB324FA5CAAC1BC53A02D /* Pods-KDCycleBannerViewDemo */, + 00C6ADA215F99E0A0362620CAB4D5F3A /* SDWebImage */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 597626CAE2DE61B681468180796290FE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0E9912EDEC14B51295BF165F96D39EBD /* Pods-KDCycleBannerViewDemo-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEA2A4011665A8B4FCAB3BED3E36B0E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3C09FDEC435813A5FD6C9D053132270D /* NSData+ImageContentType.m in Sources */, + 0B7FEC5C7CD89196DF63164F5D1764D2 /* SDImageCache.m in Sources */, + DD160705327BD55342434F2BBD72B35D /* SDWebImage-dummy.m in Sources */, + BAAF4E599B84FCAD45D60E1C597D3951 /* SDWebImageCompat.m in Sources */, + 709CDC66ECAA4D8128E0089C31D12A59 /* SDWebImageDecoder.m in Sources */, + EC6FC0A62E8B057877D9ED3CC668D8EE /* SDWebImageDownloader.m in Sources */, + AAC49A689C3CBB493AD35D2AAD633AF0 /* SDWebImageDownloaderOperation.m in Sources */, + 44200669C54BFB9E8C24B6A454AE3F57 /* SDWebImageManager.m in Sources */, + 95BBADFD5C913598E015AF9E1D74CC9F /* SDWebImagePrefetcher.m in Sources */, + 4B5EE560197A23C271496D6212BAC90E /* UIButton+WebCache.m in Sources */, + 41A7597E1F4B8F00A8830C2F7080DBF0 /* UIImage+GIF.m in Sources */, + C0C064C3398C417E0A57D3077F8B9585 /* UIImage+MultiFormat.m in Sources */, + 20EFC315D70E146F87564E17B074DF47 /* UIImageView+HighlightedWebCache.m in Sources */, + 3D395C986AC6EF103A29FA62A0F53339 /* UIImageView+WebCache.m in Sources */, + 97BAA663CAD0D86E509E703B08570584 /* UIView+WebCacheOperation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AE26E14FCF1993E30C6EA6F3F657D786 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = 00C6ADA215F99E0A0362620CAB4D5F3A /* SDWebImage */; + targetProxy = D2580C3760F6786F0D8B95DF2B7C9A9B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 17F676592F0A5E626317A7CCD0F89540 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 98CD83782F73287ECE4013F9234F1CE5 /* SDWebImage.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 39FEA41B4C2B337FCB5E3EB6C1AC368A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 29D0A964F3A7B72DF36157D0EDA9672B /* Pods-KDCycleBannerViewDemo.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MACH_O_TYPE = staticlib; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 4215B5914E928692103374014F613582 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C589321111D72B5C0769AC85F6897921 /* Pods-KDCycleBannerViewDemo.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + MACH_O_TYPE = staticlib; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + D1DF5D16D790F11CEA13F239461602C5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + E5F542F13FC2FB854459DDBCC7681B9E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 98CD83782F73287ECE4013F9234F1CE5 /* SDWebImage.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + F9248D5D3503D3DE930856DB328D8ACD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D1DF5D16D790F11CEA13F239461602C5 /* Debug */, + F9248D5D3503D3DE930856DB328D8ACD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7358E94A3CA3D1DEA240F48FE392B3AF /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E5F542F13FC2FB854459DDBCC7681B9E /* Debug */, + 17F676592F0A5E626317A7CCD0F89540 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 91FD4BFA74229890BF195C491828A074 /* Build configuration list for PBXNativeTarget "Pods-KDCycleBannerViewDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4215B5914E928692103374014F613582 /* Debug */, + 39FEA41B4C2B337FCB5E3EB6C1AC368A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme b/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme deleted file mode 100644 index 0ec6f05..0000000 --- a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/Pods-SDWebImage.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/Pods.xcscheme b/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/Pods.xcscheme deleted file mode 100644 index 3ae8b08..0000000 --- a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/Pods.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/xcschememanagement.plist b/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index c034d74..0000000 --- a/KDCycleBannerViewDemo/Pods/Pods.xcodeproj/xcuserdata/kingiol.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - SchemeUserState - - Pods-SDWebImage.xcscheme - - isShown - - - Pods.xcscheme - - isShown - - - - SuppressBuildableAutocreation - - 3E12C27C247FA85BF5FFB7F3 - - primary - - - E0E566795902AB4FC645F325 - - primary - - - - - diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/LICENSE b/KDCycleBannerViewDemo/Pods/SDWebImage/LICENSE index ae783e1..810cf88 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/LICENSE +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 Olivier Poitrey +Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/README.md b/KDCycleBannerViewDemo/Pods/SDWebImage/README.md index 9bbcca5..81afa6a 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/README.md +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/README.md @@ -4,12 +4,15 @@ Web Image [![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) [![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) [![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html) +[![Dependency Status](https://www.versioneye.com/objective-c/sdwebimage/3.3/badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/3.3) +[![Reference Status](https://www.versioneye.com/objective-c/sdwebimage/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/references) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/rs/SDWebImage) This library provides a category for UIImageView with support for remote images coming from the web. It provides: -- An UIImageView category adding web image and cache management to the Cocoa Touch framework +- An `UIImageView` category adding web image and cache management to the Cocoa Touch framework - An asynchronous image downloader - An asynchronous memory + disk image caching with automatic cache expiration handling - Animated GIF support @@ -22,12 +25,12 @@ It provides: - Use GCD and ARC - Arm64 support -NOTE: The version 3.0 of SDWebImage isn't fully backward compatible with 2.0 and requires iOS 5.1.1 -minimum deployement version. If you need iOS < 5.0 support, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat). +NOTE: Version 3.8 of SDWebImage requires iOS 7 or later (because of NSURLSession). +Versions 3.7 to 3.0 requires iOS 5.1.1. If you need iOS < 5.0 support, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat). [How is SDWebImage better than X?](https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F) -Who Use It +Who Uses It ---------- Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list. @@ -35,11 +38,11 @@ Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SD How To Use ---------- -API documentation is available at [http://hackemist.com/SDWebImage/doc/](http://hackemist.com/SDWebImage/doc/) +API documentation is available at [CocoaDocs - SDWebImage](http://cocoadocs.org/docsets/SDWebImage/) ### Using UIImageView+WebCache category with UITableView -Just #import the UIImageView+WebCache.h header, and call the setImageWithURL:placeholderImage: +Just #import the UIImageView+WebCache.h header, and call the sd_setImageWithURL:placeholderImage: method from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be handled for you, from async downloads to caching management. @@ -48,21 +51,18 @@ handled for you, from async downloads to caching management. ... -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *MyIdentifier = @"MyIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; - - if (cell == nil) - { + if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; } - // Here we use the new provided setImageWithURL: method to load the web image - [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; + // Here we use the new provided sd_setImageWithURL: method to load the web image + [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] + placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; cell.textLabel.text = @"My Text"; return cell; @@ -71,14 +71,16 @@ handled for you, from async downloads to caching management. ### Using blocks -With blocks, you can be notified about the image download progress and whenever the image retrival +With blocks, you can be notified about the image download progress and whenever the image retrieval has completed with success or not: ```objective-c -// Here we use the new provided setImageWithURL: method to load the web image -[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder.png"] - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {... completion code here ...}]; +// Here we use the new provided sd_setImageWithURL: method to load the web image +[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] + placeholderImage:[UIImage imageNamed:@"placeholder.png"] + completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + ... completion code here ... + }]; ``` Note: neither your success nor failure block will be call if your image request is canceled before completion. @@ -93,19 +95,16 @@ Here is a simple example of how to use SDWebImageManager: ```objective-c SDWebImageManager *manager = [SDWebImageManager sharedManager]; -[manager downloadWithURL:imageURL - options:0 - progress:^(NSInteger receivedSize, NSInteger expectedSize) - { - // progression tracking code - } - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) - { - if (image) - { - // do something with image +[manager downloadImageWithURL:imageURL + options:0 + progress:^(NSInteger receivedSize, NSInteger expectedSize) { + // progression tracking code } - }]; + completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (image) { + // do something with image + } + }]; ``` ### Using Asynchronous Image Downloader Independently @@ -113,24 +112,22 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; It's also possible to use the async image downloader independently: ```objective-c -[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL - options:0 - progress:^(NSInteger receivedSize, NSInteger expectedSize) - { - // progression tracking code - } - completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) - { - if (image && finished) - { - // do something with image - } - }]; +SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader]; +[downloader downloadImageWithURL:imageURL + options:0 + progress:^(NSInteger receivedSize, NSInteger expectedSize) { + // progression tracking code + } + completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { + if (image && finished) { + // do something with image + } + }]; ``` ### Using Asynchronous Image Caching Independently -It is also possible to use the aync based image cache store independently. SDImageCache +It is also possible to use the async based image cache store independently. SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed asynchronous so it doesn't add unnecessary latency to the UI. @@ -144,8 +141,7 @@ the image. ```objective-c SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"]; -[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) -{ +[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) { // image is not nil if image was found }]; ``` @@ -173,11 +169,9 @@ The following example sets a filter in the application delegate that will remove the URL before to use it as a cache key: ```objective-c -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - SDWebImageManager.sharedManager.cacheKeyFilter:^(NSURL *url) - { - url = [[[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path] autorelease]; +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) { + url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; return [url absoluteString]; }; @@ -192,7 +186,7 @@ Common Problems ### Using dynamic image size with UITableViewCell -UITableView determins the size of the image by the first image set for a cell. If your remote images +UITableView determines the size of the image by the first image set for a cell. If your remote images don't have the same size as your placeholder image, you may experience strange anamorphic scaling issue. The following article gives a way to workaround this issue: @@ -206,9 +200,9 @@ SDWebImage does very aggressive caching by default. It ignores all kind of cachi If you don't control the image server you're using, you may not be able to change the URL when its content is updated. This is the case for Facebook avatar URLs for instance. In such case, you may use the `SDWebImageRefreshCached` flag. This will slightly degrade the performance but will respect the HTTP caching control headers: ``` objective-c -[imageView setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"] - placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"] - options:SDWebImageRefreshCached]; +[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"] + placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"] + options:SDWebImageRefreshCached]; ``` ### Add a progress indicator @@ -219,7 +213,7 @@ Installation ------------ There are three ways to use SDWebImage in your project: -- using Cocoapods +- using CocoaPods - copying all the files into your project - importing the project as a static library @@ -229,8 +223,60 @@ There are three ways to use SDWebImage in your project: #### Podfile ``` -platform :ios, '6.1' -pod 'SDWebImage', '~>3.6' +platform :ios, '7.0' +pod 'SDWebImage', '~>3.8' +``` + +If you are using Swift, be sure to add `use_frameworks!` and set your target to iOS 8+: +``` +platform :ios, '8.0' +use_frameworks! +``` + +#### Subspecs + +There are 3 subspecs available now: `Core`, `MapKit` and `WebP` (this means you can install only some of the SDWebImage modules. By default, you get just `Core`, so if you need `WebP`, you need to specify it). + +Podfile example: +``` +pod 'SDWebImage/WebP' +``` + +### Installation with Carthage (iOS 8+) + +[Carthage](https://github.com/Carthage/Carthage) is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods. + +To install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage) + +#### Cartfile +``` +github "rs/SDWebImage" +``` + +#### Usage +Swift + +If you installed using CocoaPods: +``` +import SDWebImage +``` + +If you installed manually: +``` +import WebImage +``` + +Objective-C + +``` +@import WebImage; +``` + +### Installation by cloning the repository + +In order to gain access to all the files from the repository, you should clone it. +``` +git clone --recursive https://github.com/rs/SDWebImage.git ``` ### Add the SDWebImage project to your project @@ -252,11 +298,19 @@ Open the "Build Settings" tab, in the "Linking" section, locate the "Other Linke ![Other Linker Flags](http://dl.dropbox.com/u/123346/SDWebImage/10_other_linker_flags.jpg) Alternatively, if this causes compilation problems with frameworks that extend optional libraries, such as Parse, RestKit or opencv2, instead of the -ObjC flag use: - ``` -force_load SDWebImage.framework/Versions/Current/SDWebImage ``` +If you're using Cocoa Pods and have any frameworks that extend optional libraries, such as Parsen RestKit or opencv2, instead of the -ObjC flag use: +``` +-force_load $(TARGET_BUILD_DIR)/libPods.a +``` +and this: +``` +$(inherited) +``` + ### Import headers in your source files In the source files where you need to use the library, import the header file: diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.h index bde9d5d..739bca8 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.h @@ -36,11 +36,32 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot */ @interface SDImageCache : NSObject +/** + * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory. + * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption. + */ +@property (assign, nonatomic) BOOL shouldDecompressImages; + +/** + * disable iCloud backup [defaults to YES] + */ +@property (assign, nonatomic) BOOL shouldDisableiCloud; + +/** + * use memory cache [defaults to YES] + */ +@property (assign, nonatomic) BOOL shouldCacheImagesInMemory; + /** * The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory. */ @property (assign, nonatomic) NSUInteger maxMemoryCost; +/** + * The maximum number of objects the cache should hold. + */ +@property (assign, nonatomic) NSUInteger maxMemoryCountLimit; + /** * The maximum length of time to keep an image in the cache, in seconds */ @@ -65,6 +86,16 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot */ - (id)initWithNamespace:(NSString *)ns; +/** + * Init a new cache store with a specific namespace and directory + * + * @param ns The namespace to use for this cache store + * @param directory Directory to cache disk images in + */ +- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory; + +-(NSString *)makeDiskCachePath:(NSString*)fullNamespace; + /** * Add a read-only cache path to search for images pre-cached by SDImageCache * Useful if you want to bundle pre-loaded images with your app @@ -103,6 +134,14 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot */ - (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk; +/** + * Store image NSData into disk cache at the given key. + * + * @param imageData The image data to store + * @param key The unique image cache key, usually it's image absolute URL + */ +- (void)storeImageDataToDisk:(NSData *)imageData forKey:(NSString *)key; + /** * Query the disk cache asynchronously. * @@ -125,7 +164,7 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot - (UIImage *)imageFromDiskCacheForKey:(NSString *)key; /** - * Remove the image from memory and disk cache synchronously + * Remove the image from memory and disk cache asynchronously * * @param key The unique image cache key */ @@ -133,15 +172,15 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot /** - * Remove the image from memory and disk cache synchronously + * Remove the image from memory and disk cache asynchronously * * @param key The unique image cache key - * @param completionBlock An block that should be executed after the image has been removed (optional) + * @param completion An block that should be executed after the image has been removed (optional) */ - (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion; /** - * Remove the image from memory and optionally disk cache synchronously + * Remove the image from memory and optionally disk cache asynchronously * * @param key The unique image cache key * @param fromDisk Also remove cache entry from disk if YES @@ -149,11 +188,11 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot - (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk; /** - * Remove the image from memory and optionally disk cache synchronously + * Remove the image from memory and optionally disk cache asynchronously * * @param key The unique image cache key * @param fromDisk Also remove cache entry from disk if YES - * @param completionBlock An block that should be executed after the image has been removed (optional) + * @param completion An block that should be executed after the image has been removed (optional) */ - (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion; @@ -164,7 +203,7 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot /** * Clear all disk cached images. Non-blocking method - returns immediately. - * @param completionBlock An block that should be executed after cache expiration completes (optional) + * @param completion An block that should be executed after cache expiration completes (optional) */ - (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion; @@ -223,7 +262,7 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot * Get the cache path for a certain key (needs the cache path root folder) * * @param key the key (can be obtained from url using cacheKeyForURL) - * @param path the cach path root folder + * @param path the cache path root folder * * @return the cache path */ diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.m index 59c3471..fe24482 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDImageCache.m @@ -11,6 +11,29 @@ #import "UIImage+MultiFormat.h" #import +// See https://github.com/rs/SDWebImage/pull/1141 for discussion +@interface AutoPurgeCache : NSCache +@end + +@implementation AutoPurgeCache + +- (id)init +{ + self = [super init]; + if (self) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; + +} + +@end + static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week // PNG signature bytes and data (below) static unsigned char kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; @@ -29,6 +52,10 @@ BOOL ImageDataHasPNGPreffix(NSData *data) { return NO; } +FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { + return image.size.height * image.size.width * image.scale * image.scale; +} + @interface SDImageCache () @property (strong, nonatomic) NSCache *memCache; @@ -48,7 +75,6 @@ + (SDImageCache *)sharedImageCache { static id instance; dispatch_once(&once, ^{ instance = [self new]; - kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8]; }); return instance; } @@ -58,9 +84,17 @@ - (id)init { } - (id)initWithNamespace:(NSString *)ns { + NSString *path = [self makeDiskCachePath:ns]; + return [self initWithNamespace:ns diskCacheDirectory:path]; +} + +- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory { if ((self = [super init])) { NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns]; + // initialise PNG signature data + kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8]; + // Create IO serial queue _ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL); @@ -68,18 +102,31 @@ - (id)initWithNamespace:(NSString *)ns { _maxCacheAge = kDefaultCacheMaxCacheAge; // Init the memory cache - _memCache = [[NSCache alloc] init]; + _memCache = [[AutoPurgeCache alloc] init]; _memCache.name = fullNamespace; // Init the disk cache - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - _diskCachePath = [paths[0] stringByAppendingPathComponent:fullNamespace]; + if (directory != nil) { + _diskCachePath = [directory stringByAppendingPathComponent:fullNamespace]; + } else { + NSString *path = [self makeDiskCachePath:ns]; + _diskCachePath = path; + } + + // Set decompression to YES + _shouldDecompressImages = YES; + + // memory cache enabled + _shouldCacheImagesInMemory = YES; + + // Disable iCloud + _shouldDisableiCloud = YES; dispatch_sync(_ioQueue, ^{ _fileManager = [NSFileManager new]; }); -#if TARGET_OS_IPHONE +#if TARGET_OS_IOS // Subscribe to app events [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(clearMemory) @@ -134,20 +181,30 @@ - (NSString *)cachedFileNameForKey:(NSString *)key { } unsigned char r[CC_MD5_DIGEST_LENGTH]; CC_MD5(str, (CC_LONG)strlen(str), r); - NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]]; + NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@", + r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], + r[11], r[12], r[13], r[14], r[15], [[key pathExtension] isEqualToString:@""] ? @"" : [NSString stringWithFormat:@".%@", [key pathExtension]]]; return filename; } #pragma mark ImageCache +// Init the disk cache +-(NSString *)makeDiskCachePath:(NSString*)fullNamespace{ + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); + return [paths[0] stringByAppendingPathComponent:fullNamespace]; +} + - (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk { if (!image || !key) { return; } - - [self.memCache setObject:image forKey:key cost:image.size.height * image.size.width * image.scale]; + // if memory cache is enabled + if (self.shouldCacheImagesInMemory) { + NSUInteger cost = SDCacheCostForImage(image); + [self.memCache setObject:image forKey:key cost:cost]; + } if (toDisk) { dispatch_async(self.ioQueue, ^{ @@ -160,9 +217,13 @@ - (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate image // The first eight bytes of a PNG file always contain the following (decimal) values: // 137 80 78 71 13 10 26 10 - // We assume the image is PNG, in case the imageData is nil (i.e. if trying to save a UIImage directly), - // we will consider it PNG to avoid loosing the transparency - BOOL imageIsPng = YES; + // If the imageData is nil (i.e. if trying to save a UIImage directly or the image was transformed on download) + // and the image has an alpha channel, we will consider it PNG to avoid losing the transparency + int alphaInfo = CGImageGetAlphaInfo(image.CGImage); + BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone || + alphaInfo == kCGImageAlphaNoneSkipFirst || + alphaInfo == kCGImageAlphaNoneSkipLast); + BOOL imageIsPng = hasAlpha; // But if we have an image data, we will look at the preffix if ([imageData length] >= [kPNGSignatureData length]) { @@ -180,13 +241,7 @@ - (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate image #endif } - if (data) { - if (![_fileManager fileExistsAtPath:_diskCachePath]) { - [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL]; - } - - [_fileManager createFileAtPath:[self defaultCachePathForKey:key] contents:data attributes:nil]; - } + [self storeImageDataToDisk:data forKey:key]; }); } } @@ -199,12 +254,41 @@ - (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk { [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:toDisk]; } +- (void)storeImageDataToDisk:(NSData *)imageData forKey:(NSString *)key { + + if (!imageData) { + return; + } + + if (![_fileManager fileExistsAtPath:_diskCachePath]) { + [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL]; + } + + // get cache Path for image key + NSString *cachePathForKey = [self defaultCachePathForKey:key]; + // transform to NSUrl + NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey]; + + [_fileManager createFileAtPath:cachePathForKey contents:imageData attributes:nil]; + + // disable iCloud backup + if (self.shouldDisableiCloud) { + [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil]; + } +} + - (BOOL)diskImageExistsWithKey:(NSString *)key { BOOL exists = NO; // this is an exception to access the filemanager on another queue than ioQueue, but we are using the shared instance // from apple docs on NSFileManager: The methods of the shared NSFileManager object can be called from multiple threads safely. exists = [[NSFileManager defaultManager] fileExistsAtPath:[self defaultCachePathForKey:key]]; + + // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name + // checking the key with and without the extension + if (!exists) { + exists = [[NSFileManager defaultManager] fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]]; + } return exists; } @@ -212,6 +296,13 @@ - (BOOL)diskImageExistsWithKey:(NSString *)key { - (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { dispatch_async(_ioQueue, ^{ BOOL exists = [_fileManager fileExistsAtPath:[self defaultCachePathForKey:key]]; + + // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name + // checking the key with and without the extension + if (!exists) { + exists = [_fileManager fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]]; + } + if (completionBlock) { dispatch_async(dispatch_get_main_queue(), ^{ completionBlock(exists); @@ -225,6 +316,7 @@ - (UIImage *)imageFromMemoryCacheForKey:(NSString *)key { } - (UIImage *)imageFromDiskCacheForKey:(NSString *)key { + // First check the in-memory cache... UIImage *image = [self imageFromMemoryCacheForKey:key]; if (image) { @@ -233,8 +325,8 @@ - (UIImage *)imageFromDiskCacheForKey:(NSString *)key { // Second check the disk cache... UIImage *diskImage = [self diskImageForKey:key]; - if (diskImage) { - CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale; + if (diskImage && self.shouldCacheImagesInMemory) { + NSUInteger cost = SDCacheCostForImage(diskImage); [self.memCache setObject:diskImage forKey:key cost:cost]; } @@ -248,12 +340,27 @@ - (NSData *)diskImageDataBySearchingAllPathsForKey:(NSString *)key { return data; } - for (NSString *path in self.customPaths) { + // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name + // checking the key with and without the extension + data = [NSData dataWithContentsOfFile:[defaultPath stringByDeletingPathExtension]]; + if (data) { + return data; + } + + NSArray *customPaths = [self.customPaths copy]; + for (NSString *path in customPaths) { NSString *filePath = [self cachePathForKey:key inPath:path]; NSData *imageData = [NSData dataWithContentsOfFile:filePath]; if (imageData) { return imageData; } + + // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name + // checking the key with and without the extension + imageData = [NSData dataWithContentsOfFile:[filePath stringByDeletingPathExtension]]; + if (imageData) { + return imageData; + } } return nil; @@ -264,7 +371,9 @@ - (UIImage *)diskImageForKey:(NSString *)key { if (data) { UIImage *image = [UIImage sd_imageWithData:data]; image = [self scaledImageForKey:key image:image]; - image = [UIImage decodedImageWithImage:image]; + if (self.shouldDecompressImages) { + image = [UIImage decodedImageWithImage:image]; + } return image; } else { @@ -301,8 +410,8 @@ - (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompl @autoreleasepool { UIImage *diskImage = [self diskImageForKey:key]; - if (diskImage) { - CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale; + if (diskImage && self.shouldCacheImagesInMemory) { + NSUInteger cost = SDCacheCostForImage(diskImage); [self.memCache setObject:diskImage forKey:key cost:cost]; } @@ -332,9 +441,11 @@ - (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion if (key == nil) { return; } - - [self.memCache removeObjectForKey:key]; - + + if (self.shouldCacheImagesInMemory) { + [self.memCache removeObjectForKey:key]; + } + if (fromDisk) { dispatch_async(self.ioQueue, ^{ [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil]; @@ -359,6 +470,14 @@ - (NSUInteger)maxMemoryCost { return self.memCache.totalCostLimit; } +- (NSUInteger)maxMemoryCountLimit { + return self.memCache.countLimit; +} + +- (void)setMaxMemoryCountLimit:(NSUInteger)maxCountLimit { + self.memCache.countLimit = maxCountLimit; +} + - (void)clearMemory { [self.memCache removeAllObjects]; } @@ -467,7 +586,11 @@ - (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock { } - (void)backgroundCleanDisk { - UIApplication *application = [UIApplication sharedApplication]; + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { + return; + } + UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ // Clean up any unfinished task business by marking where you // stopped or ending the task outright. diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h index a0555fd..3c21b41 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h @@ -13,8 +13,8 @@ #error SDWebImage does not support Objective-C Garbage Collection #endif -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 -#error SDWebImage doesn't support Deployement Target version < 5.0 +#if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 +#error SDWebImage doesn't support Deployment Target version < 5.0 #endif #if !TARGET_OS_IPHONE @@ -55,6 +55,8 @@ extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image); typedef void(^SDWebImageNoParamsBlock)(); +extern NSString *const SDWebImageErrorDomain; + #define dispatch_main_sync_safe(block)\ if ([NSThread isMainThread]) {\ block();\ diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m index 8c7d345..57d9413 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m @@ -28,13 +28,17 @@ } else { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { - CGFloat scale = 1.0; + CGFloat scale = 1; if (key.length >= 8) { - // Search @2x. at the end of the string, before a 3 to 4 extension length (only if key len is 8 or more @2x. + 4 len ext) - NSRange range = [key rangeOfString:@"@2x." options:0 range:NSMakeRange(key.length - 8, 5)]; + NSRange range = [key rangeOfString:@"@2x."]; if (range.location != NSNotFound) { scale = 2.0; } + + range = [key rangeOfString:@"@3x."]; + if (range.location != NSNotFound) { + scale = 3.0; + } } UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; @@ -43,3 +47,5 @@ return image; } } + +NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain"; diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m index 79ddb30..2bb5472 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m @@ -13,60 +13,80 @@ @implementation UIImage (ForceDecode) + (UIImage *)decodedImageWithImage:(UIImage *)image { - if (image.images) { - // Do not decode animated images - return image; + // while downloading huge amount of images + // autorelease the bitmap context + // and all vars to help system to free memory + // when there are memory warning. + // on iOS7, do not forget to call + // [[SDImageCache sharedImageCache] clearMemory]; + + if (image == nil) { // Prevent "CGBitmapContextCreateImage: invalid context 0x0" error + return nil; } + + @autoreleasepool{ + // do not decode animated images + if (image.images != nil) { + return image; + } + + CGImageRef imageRef = image.CGImage; + + CGImageAlphaInfo alpha = CGImageGetAlphaInfo(imageRef); + BOOL anyAlpha = (alpha == kCGImageAlphaFirst || + alpha == kCGImageAlphaLast || + alpha == kCGImageAlphaPremultipliedFirst || + alpha == kCGImageAlphaPremultipliedLast); + if (anyAlpha) { + return image; + } + + // current + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(CGImageGetColorSpace(imageRef)); + CGColorSpaceRef colorspaceRef = CGImageGetColorSpace(imageRef); + + BOOL unsupportedColorSpace = (imageColorSpaceModel == kCGColorSpaceModelUnknown || + imageColorSpaceModel == kCGColorSpaceModelMonochrome || + imageColorSpaceModel == kCGColorSpaceModelCMYK || + imageColorSpaceModel == kCGColorSpaceModelIndexed); + if (unsupportedColorSpace) { + colorspaceRef = CGColorSpaceCreateDeviceRGB(); + } + + size_t width = CGImageGetWidth(imageRef); + size_t height = CGImageGetHeight(imageRef); + NSUInteger bytesPerPixel = 4; + NSUInteger bytesPerRow = bytesPerPixel * width; + NSUInteger bitsPerComponent = 8; - CGImageRef imageRef = image.CGImage; - CGSize imageSize = CGSizeMake(CGImageGetWidth(imageRef), CGImageGetHeight(imageRef)); - CGRect imageRect = (CGRect){.origin = CGPointZero, .size = imageSize}; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - - int infoMask = (bitmapInfo & kCGBitmapAlphaInfoMask); - BOOL anyNonAlpha = (infoMask == kCGImageAlphaNone || - infoMask == kCGImageAlphaNoneSkipFirst || - infoMask == kCGImageAlphaNoneSkipLast); - - // CGBitmapContextCreate doesn't support kCGImageAlphaNone with RGB. - // https://developer.apple.com/library/mac/#qa/qa1037/_index.html - if (infoMask == kCGImageAlphaNone && CGColorSpaceGetNumberOfComponents(colorSpace) > 1) { - // Unset the old alpha info. - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - - // Set noneSkipFirst. - bitmapInfo |= kCGImageAlphaNoneSkipFirst; + // kCGImageAlphaNone is not supported in CGBitmapContextCreate. + // Since the original image here has no alpha info, use kCGImageAlphaNoneSkipLast + // to create bitmap graphics contexts without alpha info. + CGContextRef context = CGBitmapContextCreate(NULL, + width, + height, + bitsPerComponent, + bytesPerRow, + colorspaceRef, + kCGBitmapByteOrderDefault|kCGImageAlphaNoneSkipLast); + + // Draw the image into the context and retrieve the new bitmap image without alpha + CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); + CGImageRef imageRefWithoutAlpha = CGBitmapContextCreateImage(context); + UIImage *imageWithoutAlpha = [UIImage imageWithCGImage:imageRefWithoutAlpha + scale:image.scale + orientation:image.imageOrientation]; + + if (unsupportedColorSpace) { + CGColorSpaceRelease(colorspaceRef); + } + + CGContextRelease(context); + CGImageRelease(imageRefWithoutAlpha); + + return imageWithoutAlpha; } - // Some PNGs tell us they have alpha but only 3 components. Odd. - else if (!anyNonAlpha && CGColorSpaceGetNumberOfComponents(colorSpace) == 3) { - // Unset the old alpha info. - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - bitmapInfo |= kCGImageAlphaPremultipliedFirst; - } - - // It calculates the bytes-per-row based on the bitsPerComponent and width arguments. - CGContextRef context = CGBitmapContextCreate(NULL, - imageSize.width, - imageSize.height, - CGImageGetBitsPerComponent(imageRef), - 0, - colorSpace, - bitmapInfo); - CGColorSpaceRelease(colorSpace); - - // If failed, return undecompressed image - if (!context) return image; - - CGContextDrawImage(context, imageRect, imageRef); - CGImageRef decompressedImageRef = CGBitmapContextCreateImage(context); - - CGContextRelease(context); - - UIImage *decompressedImage = [UIImage imageWithCGImage:decompressedImageRef scale:image.scale orientation:image.imageOrientation]; - CGImageRelease(decompressedImageRef); - return decompressedImage; } @end diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h index 008231a..d440e04 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h @@ -15,7 +15,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { SDWebImageDownloaderProgressiveDownload = 1 << 1, /** - * By default, request prevent the of NSURLCache. With this flag, NSURLCache + * By default, request prevent the use of NSURLCache. With this flag, NSURLCache * is used with default policies. */ SDWebImageDownloaderUseNSURLCache = 1 << 2, @@ -40,7 +40,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { SDWebImageDownloaderHandleCookies = 1 << 5, /** - * Enable to allow untrusted SSL ceriticates. + * Enable to allow untrusted SSL certificates. * Useful for testing purposes. Use with caution in production. */ SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6, @@ -49,8 +49,6 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { * Put the image in the high priority queue. */ SDWebImageDownloaderHighPriority = 1 << 7, - - }; typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) { @@ -79,12 +77,17 @@ typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDi */ @interface SDWebImageDownloader : NSObject +/** + * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory. + * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption. + */ +@property (assign, nonatomic) BOOL shouldDecompressImages; + @property (assign, nonatomic) NSInteger maxConcurrentDownloads; /** * Shows the current amount of downloads that still need to be downloaded */ - @property (readonly, nonatomic) NSUInteger currentDownloadCount; @@ -106,6 +109,11 @@ typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDi */ + (SDWebImageDownloader *)sharedDownloader; +/** + * Set the default URL credential to be set for request operations. + */ +@property (strong, nonatomic) NSURLCredential *urlCredential; + /** * Set username */ @@ -139,6 +147,16 @@ typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDi */ - (NSString *)valueForHTTPHeaderField:(NSString *)field; +/** + * Sets a subclass of `SDWebImageDownloaderOperation` as the default + * `NSOperation` to be used each time SDWebImage constructs a request + * operation to download an image. + * + * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set + * as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`. + */ +- (void)setOperationClass:(Class)operationClass; + /** * Creates a SDWebImageDownloader async downloader instance with a given URL * @@ -170,4 +188,9 @@ typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDi */ - (void)setSuspended:(BOOL)suspended; +/** + * Cancels all download operations in the queue + */ +- (void)cancelAllDownloads; + @end diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m index 60914db..71ada19 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m @@ -10,21 +10,22 @@ #import "SDWebImageDownloaderOperation.h" #import -NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; -NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification"; - static NSString *const kProgressCallbackKey = @"progress"; static NSString *const kCompletedCallbackKey = @"completed"; -@interface SDWebImageDownloader () +@interface SDWebImageDownloader () @property (strong, nonatomic) NSOperationQueue *downloadQueue; @property (weak, nonatomic) NSOperation *lastAddedOperation; +@property (assign, nonatomic) Class operationClass; @property (strong, nonatomic) NSMutableDictionary *URLCallbacks; @property (strong, nonatomic) NSMutableDictionary *HTTPHeaders; // This queue is used to serialize the handling of the network responses of all the download operation in a single queue @property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t barrierQueue; +// The session in which data tasks will run +@property (strong, nonatomic) NSURLSession *session; + @end @implementation SDWebImageDownloader @@ -63,18 +64,40 @@ + (SDWebImageDownloader *)sharedDownloader { - (id)init { if ((self = [super init])) { + _operationClass = [SDWebImageDownloaderOperation class]; + _shouldDecompressImages = YES; _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; _downloadQueue = [NSOperationQueue new]; - _downloadQueue.maxConcurrentOperationCount = 2; + _downloadQueue.maxConcurrentOperationCount = 6; + _downloadQueue.name = @"com.hackemist.SDWebImageDownloader"; _URLCallbacks = [NSMutableDictionary new]; - _HTTPHeaders = [NSMutableDictionary dictionaryWithObject:@"image/webp,image/*;q=0.8" forKey:@"Accept"]; +#ifdef SD_WEBP + _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy]; +#else + _HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy]; +#endif _barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT); _downloadTimeout = 15.0; + + NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; + sessionConfig.timeoutIntervalForRequest = _downloadTimeout; + + /** + * Create the session for this task + * We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate + * method calls and completion handler calls. + */ + self.session = [NSURLSession sessionWithConfiguration:sessionConfig + delegate:self + delegateQueue:nil]; } return self; } - (void)dealloc { + [self.session invalidateAndCancel]; + self.session = nil; + [self.downloadQueue cancelAllOperations]; SDDispatchQueueRelease(_barrierQueue); } @@ -104,11 +127,15 @@ - (NSInteger)maxConcurrentDownloads { return _downloadQueue.maxConcurrentOperationCount; } +- (void)setOperationClass:(Class)operationClass { + _operationClass = operationClass ?: [SDWebImageDownloaderOperation class]; +} + - (id )downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock { __block SDWebImageDownloaderOperation *operation; - __weak SDWebImageDownloader *wself = self; + __weak __typeof(self)wself = self; - [self addProgressCallback:progressBlock andCompletedBlock:completedBlock forURL:url createCallback:^{ + [self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^{ NSTimeInterval timeoutInterval = wself.downloadTimeout; if (timeoutInterval == 0.0) { timeoutInterval = 15.0; @@ -124,36 +151,50 @@ - (NSInteger)maxConcurrentDownloads { else { request.allHTTPHeaderFields = wself.HTTPHeaders; } - operation = [[SDWebImageDownloaderOperation alloc] initWithRequest:request - options:options - progress:^(NSInteger receivedSize, NSInteger expectedSize) { - SDWebImageDownloader *sself = wself; - if (!sself) return; - NSArray *callbacksForURL = [sself callbacksForURL:url]; - for (NSDictionary *callbacks in callbacksForURL) { - SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey]; - if (callback) callback(receivedSize, expectedSize); - } - } - completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { - SDWebImageDownloader *sself = wself; - if (!sself) return; - NSArray *callbacksForURL = [sself callbacksForURL:url]; - if (finished) { - [sself removeCallbacksForURL:url]; - } - for (NSDictionary *callbacks in callbacksForURL) { - SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey]; - if (callback) callback(image, data, error, finished); - } - } - cancelled:^{ - SDWebImageDownloader *sself = wself; - if (!sself) return; - [sself removeCallbacksForURL:url]; - }]; + operation = [[wself.operationClass alloc] initWithRequest:request + inSession:self.session + options:options + progress:^(NSInteger receivedSize, NSInteger expectedSize) { + SDWebImageDownloader *sself = wself; + if (!sself) return; + __block NSArray *callbacksForURL; + dispatch_sync(sself.barrierQueue, ^{ + callbacksForURL = [sself.URLCallbacks[url] copy]; + }); + for (NSDictionary *callbacks in callbacksForURL) { + dispatch_async(dispatch_get_main_queue(), ^{ + SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey]; + if (callback) callback(receivedSize, expectedSize); + }); + } + } + completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { + SDWebImageDownloader *sself = wself; + if (!sself) return; + __block NSArray *callbacksForURL; + dispatch_barrier_sync(sself.barrierQueue, ^{ + callbacksForURL = [sself.URLCallbacks[url] copy]; + if (finished) { + [sself.URLCallbacks removeObjectForKey:url]; + } + }); + for (NSDictionary *callbacks in callbacksForURL) { + SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey]; + if (callback) callback(image, data, error, finished); + } + } + cancelled:^{ + SDWebImageDownloader *sself = wself; + if (!sself) return; + dispatch_barrier_async(sself.barrierQueue, ^{ + [sself.URLCallbacks removeObjectForKey:url]; + }); + }]; + operation.shouldDecompressImages = wself.shouldDecompressImages; - if (wself.username && wself.password) { + if (wself.urlCredential) { + operation.credential = wself.urlCredential; + } else if (wself.username && wself.password) { operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession]; } @@ -174,7 +215,7 @@ - (NSInteger)maxConcurrentDownloads { return operation; } -- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock andCompletedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback { +- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock completedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback { // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data. if (url == nil) { if (completedBlock != nil) { @@ -204,22 +245,74 @@ - (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock and }); } -- (NSArray *)callbacksForURL:(NSURL *)url { - __block NSArray *callbacksForURL; - dispatch_sync(self.barrierQueue, ^{ - callbacksForURL = self.URLCallbacks[url]; - }); - return [callbacksForURL copy]; +- (void)setSuspended:(BOOL)suspended { + [self.downloadQueue setSuspended:suspended]; } -- (void)removeCallbacksForURL:(NSURL *)url { - dispatch_barrier_async(self.barrierQueue, ^{ - [self.URLCallbacks removeObjectForKey:url]; - }); +- (void)cancelAllDownloads { + [self.downloadQueue cancelAllOperations]; } -- (void)setSuspended:(BOOL)suspended { - [self.downloadQueue setSuspended:suspended]; +#pragma mark Helper methods + +- (SDWebImageDownloaderOperation *)operationWithTask:(NSURLSessionTask *)task { + SDWebImageDownloaderOperation *returnOperation = nil; + for (SDWebImageDownloaderOperation *operation in self.downloadQueue.operations) { + if (operation.dataTask.taskIdentifier == task.taskIdentifier) { + returnOperation = operation; + break; + } + } + return returnOperation; +} + +#pragma mark NSURLSessionDataDelegate + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { + + // Identify the operation that runs this task and pass it the delegate method + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask]; + + [dataOperation URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler]; +} + +- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { + + // Identify the operation that runs this task and pass it the delegate method + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask]; + + [dataOperation URLSession:session dataTask:dataTask didReceiveData:data]; +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { + + // Identify the operation that runs this task and pass it the delegate method + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask]; + + [dataOperation URLSession:session dataTask:dataTask willCacheResponse:proposedResponse completionHandler:completionHandler]; +} + +#pragma mark NSURLSessionTaskDelegate + +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { + // Identify the operation that runs this task and pass it the delegate method + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:task]; + + [dataOperation URLSession:session task:task didCompleteWithError:error]; +} + +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { + + // Identify the operation that runs this task and pass it the delegate method + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:task]; + + [dataOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler]; } @end diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h index 21a3106..c6debc3 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h @@ -10,19 +10,31 @@ #import "SDWebImageDownloader.h" #import "SDWebImageOperation.h" -@interface SDWebImageDownloaderOperation : NSOperation +extern NSString *const SDWebImageDownloadStartNotification; +extern NSString *const SDWebImageDownloadReceiveResponseNotification; +extern NSString *const SDWebImageDownloadStopNotification; +extern NSString *const SDWebImageDownloadFinishNotification; + +@interface SDWebImageDownloaderOperation : NSOperation /** - * The request used by the operation's connection. + * The request used by the operation's task. */ @property (strong, nonatomic, readonly) NSURLRequest *request; /** - * Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. - * - * This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. + * The operation's task + */ +@property (strong, nonatomic, readonly) NSURLSessionTask *dataTask; + + +@property (assign, nonatomic) BOOL shouldDecompressImages; + +/** + * Was used to determine whether the URL connection should consult the credential storage for authenticating the connection. + * @deprecated Not used for a couple of versions */ -@property (nonatomic, assign) BOOL shouldUseCredentialStorage; +@property (nonatomic, assign) BOOL shouldUseCredentialStorage __deprecated_msg("Property deprecated. Does nothing. Kept only for backwards compatibility"); /** * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. @@ -36,12 +48,23 @@ */ @property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options; +/** + * The expected size of data. + */ +@property (assign, nonatomic) NSInteger expectedSize; + +/** + * The response returned by the operation's connection. + */ +@property (strong, nonatomic) NSURLResponse *response; + /** * Initializes a `SDWebImageDownloaderOperation` object * * @see SDWebImageDownloaderOperation * * @param request the URL request + * @param session the URL session in which this operation will run * @param options downloader options * @param progressBlock the block executed when a new chunk of data arrives. * @note the progress block is executed on a background queue @@ -52,9 +75,32 @@ * @return the initialized instance */ - (id)initWithRequest:(NSURLRequest *)request + inSession:(NSURLSession *)session options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock cancelled:(SDWebImageNoParamsBlock)cancelBlock; +/** + * Initializes a `SDWebImageDownloaderOperation` object + * + * @see SDWebImageDownloaderOperation + * + * @param request the URL request + * @param options downloader options + * @param progressBlock the block executed when a new chunk of data arrives. + * @note the progress block is executed on a background queue + * @param completedBlock the block executed when the download is done. + * @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue + * @param cancelBlock the block executed if the download (operation) is cancelled + * + * @return the initialized instance. The operation will run in a separate session created for this operation + */ +- (id)initWithRequest:(NSURLRequest *)request + options:(SDWebImageDownloaderOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageDownloaderCompletedBlock)completedBlock + cancelled:(SDWebImageNoParamsBlock)cancelBlock +__deprecated_msg("Method deprecated. Use `initWithRequest:inSession:options:progress:completed:cancelled`"); + @end diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m index 333e316..b722d56 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m @@ -12,7 +12,12 @@ #import #import "SDWebImageManager.h" -@interface SDWebImageDownloaderOperation () +NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; +NSString *const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification"; +NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification"; +NSString *const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification"; + +@interface SDWebImageDownloaderOperation () @property (copy, nonatomic) SDWebImageDownloaderProgressBlock progressBlock; @property (copy, nonatomic) SDWebImageDownloaderCompletedBlock completedBlock; @@ -20,9 +25,16 @@ @interface SDWebImageDownloaderOperation () @property (assign, nonatomic, getter = isExecuting) BOOL executing; @property (assign, nonatomic, getter = isFinished) BOOL finished; -@property (assign, nonatomic) NSInteger expectedSize; @property (strong, nonatomic) NSMutableData *imageData; -@property (strong, nonatomic) NSURLConnection *connection; + +// This is weak because it is injected by whoever manages this session. If this gets nil-ed out, we won't be able to run +// the task associated with this operation +@property (weak, nonatomic) NSURLSession *unownedSession; +// This is set if we're using not using an injected NSURLSession. We're responsible of invalidating this one +@property (strong, nonatomic) NSURLSession *ownedSession; + +@property (strong, nonatomic, readwrite) NSURLSessionTask *dataTask; + @property (strong, atomic) NSThread *thread; #if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 @@ -45,9 +57,24 @@ - (id)initWithRequest:(NSURLRequest *)request progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock cancelled:(SDWebImageNoParamsBlock)cancelBlock { + + return [self initWithRequest:request + inSession:nil + options:options + progress:progressBlock + completed:completedBlock + cancelled:cancelBlock]; +} + +- (id)initWithRequest:(NSURLRequest *)request + inSession:(NSURLSession *)session + options:(SDWebImageDownloaderOptions)options + progress:(SDWebImageDownloaderProgressBlock)progressBlock + completed:(SDWebImageDownloaderCompletedBlock)completedBlock + cancelled:(SDWebImageNoParamsBlock)cancelBlock { if ((self = [super init])) { - _request = request; - _shouldUseCredentialStorage = YES; + _request = [request copy]; + _shouldDecompressImages = YES; _options = options; _progressBlock = [progressBlock copy]; _completedBlock = [completedBlock copy]; @@ -55,7 +82,8 @@ - (id)initWithRequest:(NSURLRequest *)request _executing = NO; _finished = NO; _expectedSize = 0; - responseFromCached = YES; // Initially wrong until `connection:willCacheResponse:` is called or not called + _unownedSession = session; + responseFromCached = YES; // Initially wrong until `- URLSession:dataTask:willCacheResponse:completionHandler: is called or not called } return self; } @@ -69,48 +97,53 @@ - (void)start { } #if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 - if ([self shouldContinueWhenAppEntersBackground]) { + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)]; + if (hasApplication && [self shouldContinueWhenAppEntersBackground]) { __weak __typeof__ (self) wself = self; - self.backgroundTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ + UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)]; + self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{ __strong __typeof (wself) sself = wself; if (sself) { [sself cancel]; - [[UIApplication sharedApplication] endBackgroundTask:sself.backgroundTaskId]; + [app endBackgroundTask:sself.backgroundTaskId]; sself.backgroundTaskId = UIBackgroundTaskInvalid; } }]; } #endif - + NSURLSession *session = self.unownedSession; + if (!self.unownedSession) { + NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; + sessionConfig.timeoutIntervalForRequest = 15; + + /** + * Create the session for this task + * We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate + * method calls and completion handler calls. + */ + self.ownedSession = [NSURLSession sessionWithConfiguration:sessionConfig + delegate:self + delegateQueue:nil]; + session = self.ownedSession; + } + + self.dataTask = [session dataTaskWithRequest:self.request]; self.executing = YES; - self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; self.thread = [NSThread currentThread]; } + + [self.dataTask resume]; - [self.connection start]; - - if (self.connection) { + if (self.dataTask) { if (self.progressBlock) { self.progressBlock(0, NSURLResponseUnknownLength); } - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self]; - - if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_5_1) { - // Make sure to run the runloop in our background thread so it can process downloaded data - // Note: we use a timeout to work around an issue with NSURLConnection cancel under iOS 5 - // not waking up the runloop, leading to dead threads (see https://github.com/rs/SDWebImage/issues/466) - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, false); - } - else { - CFRunLoopRun(); - } - - if (!self.isFinished) { - [self.connection cancel]; - [self connection:self.connection didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:@{NSURLErrorFailingURLErrorKey : self.request.URL}]]; - } + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self]; + }); } else { if (self.completedBlock) { @@ -119,8 +152,13 @@ - (void)start { } #if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { + return; + } if (self.backgroundTaskId != UIBackgroundTaskInvalid) { - [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskId]; + UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)]; + [app endBackgroundTask:self.backgroundTaskId]; self.backgroundTaskId = UIBackgroundTaskInvalid; } #endif @@ -140,7 +178,6 @@ - (void)cancel { - (void)cancelInternalAndStop { if (self.isFinished) return; [self cancelInternal]; - CFRunLoopStop(CFRunLoopGetCurrent()); } - (void)cancelInternal { @@ -148,9 +185,11 @@ - (void)cancelInternal { [super cancel]; if (self.cancelBlock) self.cancelBlock(); - if (self.connection) { - [self.connection cancel]; - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + if (self.dataTask) { + [self.dataTask cancel]; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + }); // As we cancelled the connection, its callback won't be called and thus won't // maintain the isFinished and isExecuting flags. @@ -171,9 +210,13 @@ - (void)reset { self.cancelBlock = nil; self.completedBlock = nil; self.progressBlock = nil; - self.connection = nil; + self.dataTask = nil; self.imageData = nil; self.thread = nil; + if (self.ownedSession) { + [self.ownedSession invalidateAndCancel]; + self.ownedSession = nil; + } } - (void)setFinished:(BOOL)finished { @@ -192,32 +235,53 @@ - (BOOL)isConcurrent { return YES; } -#pragma mark NSURLConnection (delegate) +#pragma mark NSURLSessionDataDelegate -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { - if (![response respondsToSelector:@selector(statusCode)] || [((NSHTTPURLResponse *)response) statusCode] < 400) { +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { + + //'304 Not Modified' is an exceptional one + if (![response respondsToSelector:@selector(statusCode)] || ([((NSHTTPURLResponse *)response) statusCode] < 400 && [((NSHTTPURLResponse *)response) statusCode] != 304)) { NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0; self.expectedSize = expected; if (self.progressBlock) { self.progressBlock(0, expected); } - + self.imageData = [[NSMutableData alloc] initWithCapacity:expected]; + self.response = response; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:self]; + }); } else { - [self.connection cancel]; - - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil]; - + NSUInteger code = [((NSHTTPURLResponse *)response) statusCode]; + + //This is the case when server returns '304 Not Modified'. It means that remote image is not changed. + //In case of 304 we need just cancel the operation and return cached image from the cache. + if (code == 304) { + [self cancelInternal]; + } else { + [self.dataTask cancel]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + }); + if (self.completedBlock) { self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES); } - CFRunLoopStop(CFRunLoopGetCurrent()); [self done]; } + + if (completionHandler) { + completionHandler(NSURLSessionResponseAllow); + } } -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { +- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { [self.imageData appendData:data]; if ((self.options & SDWebImageDownloaderProgressiveDownload) && self.expectedSize > 0 && self.completedBlock) { @@ -228,8 +292,7 @@ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { const NSInteger totalSize = self.imageData.length; // Update the data source, we must pass ALL the data, not just the new bytes - CGImageSourceRef imageSource = CGImageSourceCreateIncremental(NULL); - CGImageSourceUpdateData(imageSource, (__bridge CFDataRef)self.imageData, totalSize == self.expectedSize); + CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)self.imageData, NULL); if (width + height == 0) { CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); @@ -246,7 +309,7 @@ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // When we draw to Core Graphics, we lose orientation information, // which means the image below born of initWithCGIImage will be // oriented incorrectly sometimes. (Unlike the image born of initWithData - // in connectionDidFinishLoading.) So save it here and pass it on later. + // in didCompleteWithError.) So save it here and pass it on later. orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)]; } @@ -280,7 +343,12 @@ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation]; NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; UIImage *scaledImage = [self scaledImageForKey:key image:image]; - image = [UIImage decodedImageWithImage:scaledImage]; + if (self.shouldDecompressImages) { + image = [UIImage decodedImageWithImage:scaledImage]; + } + else { + image = scaledImage; + } CGImageRelease(partialImageRef); dispatch_main_sync_safe(^{ if (self.completedBlock) { @@ -298,6 +366,112 @@ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { } } +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { + + responseFromCached = NO; // If this method is called, it means the response wasn't read from cache + NSCachedURLResponse *cachedResponse = proposedResponse; + + if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) { + // Prevents caching of responses + cachedResponse = nil; + } + if (completionHandler) { + completionHandler(cachedResponse); + } +} + +#pragma mark NSURLSessionTaskDelegate + +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { + @synchronized(self) { + self.thread = nil; + self.dataTask = nil; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; + if (!error) { + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:self]; + } + }); + } + + if (error) { + if (self.completedBlock) { + self.completedBlock(nil, nil, error, YES); + } + } else { + SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock; + + if (completionBlock) { + /** + * See #1608 and #1623 - apparently, there is a race condition on `NSURLCache` that causes a crash + * Limited the calls to `cachedResponseForRequest:` only for cases where we should ignore the cached response + * and images for which responseFromCached is YES (only the ones that cannot be cached). + * Note: responseFromCached is set to NO inside `willCacheResponse:`. This method doesn't get called for large images or images behind authentication + */ + if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached && [[NSURLCache sharedURLCache] cachedResponseForRequest:self.request]) { + completionBlock(nil, nil, nil, YES); + } else if (self.imageData) { + UIImage *image = [UIImage sd_imageWithData:self.imageData]; + NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; + image = [self scaledImageForKey:key image:image]; + + // Do not force decoding animated GIFs + if (!image.images) { + if (self.shouldDecompressImages) { + image = [UIImage decodedImageWithImage:image]; + } + } + if (CGSizeEqualToSize(image.size, CGSizeZero)) { + completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES); + } + else { + completionBlock(image, self.imageData, nil, YES); + } + } else { + completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}], YES); + } + } + } + + self.completionBlock = nil; + [self done]; +} + +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { + + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates)) { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } else { + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + disposition = NSURLSessionAuthChallengeUseCredential; + } + } else { + if ([challenge previousFailureCount] == 0) { + if (self.credential) { + credential = self.credential; + disposition = NSURLSessionAuthChallengeUseCredential; + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +#pragma mark Helper methods + + (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value { switch (value) { case 1: @@ -325,90 +499,8 @@ - (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image { return SDScaledImageForKey(key, image); } -- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection { - SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock; - @synchronized(self) { - CFRunLoopStop(CFRunLoopGetCurrent()); - self.thread = nil; - self.connection = nil; - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil]; - } - - if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) { - responseFromCached = NO; - } - - if (completionBlock) - { - if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) { - completionBlock(nil, nil, nil, YES); - } - else { - UIImage *image = [UIImage sd_imageWithData:self.imageData]; - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; - image = [self scaledImageForKey:key image:image]; - - // Do not force decoding animated GIFs - if (!image.images) { - image = [UIImage decodedImageWithImage:image]; - } - if (CGSizeEqualToSize(image.size, CGSizeZero)) { - completionBlock(nil, nil, [NSError errorWithDomain:@"SDWebImageErrorDomain" code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES); - } - else { - completionBlock(image, self.imageData, nil, YES); - } - } - } - self.completionBlock = nil; - [self done]; -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { - CFRunLoopStop(CFRunLoopGetCurrent()); - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil]; - - if (self.completedBlock) { - self.completedBlock(nil, nil, error, YES); - } - - [self done]; -} - -- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { - responseFromCached = NO; // If this method is called, it means the response wasn't read from cache - if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) { - // Prevents caching of responses - return nil; - } - else { - return cachedResponse; - } -} - - (BOOL)shouldContinueWhenAppEntersBackground { return self.options & SDWebImageDownloaderContinueInBackground; } -- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { - return self.shouldUseCredentialStorage; -} - -- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; - } else { - if ([challenge previousFailureCount] == 0) { - if (self.credential) { - [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } -} - @end diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.h index 6bb0dcf..9848999 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.h @@ -41,7 +41,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics. * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image. * - * Use this flag only if you can't make your URLs static with embeded cache busting parameter. + * Use this flag only if you can't make your URLs static with embedded cache busting parameter. */ SDWebImageRefreshCached = 1 << 4, @@ -58,15 +58,14 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { SDWebImageHandleCookies = 1 << 6, /** - * Enable to allow untrusted SSL ceriticates. + * Enable to allow untrusted SSL certificates. * Useful for testing purposes. Use with caution in production. */ SDWebImageAllowInvalidSSLCertificates = 1 << 7, /** - * By default, image are loaded in the order they were queued. This flag move them to - * the front of the queue and is loaded immediately instead of waiting for the current queue to be loaded (which - * could take a while). + * By default, images are loaded in the order in which they were queued. This flag moves them to + * the front of the queue. */ SDWebImageHighPriority = 1 << 8, @@ -74,7 +73,21 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, placeholder images are loaded while the image is loading. This flag will delay the loading * of the placeholder image until after the image has finished loading. */ - SDWebImageDelayPlaceholder = 1 << 9 + SDWebImageDelayPlaceholder = 1 << 9, + + /** + * We usually don't call transformDownloadedImage delegate method on animated images, + * as most transformation code would mangle it. + * Use this flag to transform them anyway. + */ + SDWebImageTransformAnimatedImage = 1 << 10, + + /** + * By default, image is added to the imageView after download. But in some cases, we want to + * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance) + * Use this flag if you want to manually set the image in the completion when success + */ + SDWebImageAvoidAutoSetImage = 1 << 11 }; typedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL); @@ -125,14 +138,14 @@ typedef NSString *(^SDWebImageCacheKeyFilterBlock)(NSURL *url); * @code SDWebImageManager *manager = [SDWebImageManager sharedManager]; -[manager downloadWithURL:imageURL - options:0 - progress:nil - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (image) { - // do something with image - } - }]; +[manager downloadImageWithURL:imageURL + options:0 + progress:nil + completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (image) { + // do something with image + } + }]; * @endcode */ @@ -159,7 +172,7 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; * @endcode */ -@property (copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter; +@property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter; /** * Returns global SDWebImageManager instance. @@ -168,6 +181,12 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; */ + (SDWebImageManager *)sharedManager; +/** + * Allows to specify instance of cache and image downloader used with image manager. + * @return new instance of `SDWebImageManager` with specified cache and downloader. + */ +- (instancetype)initWithCache:(SDImageCache *)cache downloader:(SDWebImageDownloader *)downloader; + /** * Downloads the image at the given URL if not present in cache or return the cached version otherwise. * @@ -181,11 +200,11 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; * This block has no return value and takes the requested UIImage as first parameter. * In case of error the image parameter is nil and the second parameter may contain an NSError. * - * The third parameter is an `SDImageCacheType` enum indicating if the image was retrived from the local cache + * The third parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache * or from the memory cache or from the network. * * The last parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is - * downloading. This block is thus called repetidly with a partial image. When image is fully downloaded, the + * downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the * block is called a last time with the full image and the last parameter set to YES. * * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation @@ -206,7 +225,7 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; - (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url; /** - * Cancel all current opreations + * Cancel all current operations */ - (void)cancelAll; diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.m index 2781ec8..d331a4a 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImageManager.m @@ -21,7 +21,7 @@ @interface SDWebImageManager () @property (strong, nonatomic, readwrite) SDImageCache *imageCache; @property (strong, nonatomic, readwrite) SDWebImageDownloader *imageDownloader; -@property (strong, nonatomic) NSMutableArray *failedURLs; +@property (strong, nonatomic) NSMutableSet *failedURLs; @property (strong, nonatomic) NSMutableArray *runningOperations; @end @@ -37,25 +37,30 @@ + (id)sharedManager { return instance; } -- (id)init { +- (instancetype)init { + SDImageCache *cache = [SDImageCache sharedImageCache]; + SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader]; + return [self initWithCache:cache downloader:downloader]; +} + +- (instancetype)initWithCache:(SDImageCache *)cache downloader:(SDWebImageDownloader *)downloader { if ((self = [super init])) { - _imageCache = [self createCache]; - _imageDownloader = [SDWebImageDownloader sharedDownloader]; - _failedURLs = [NSMutableArray new]; + _imageCache = cache; + _imageDownloader = downloader; + _failedURLs = [NSMutableSet new]; _runningOperations = [NSMutableArray new]; } return self; } -- (SDImageCache *)createCache { - return [SDImageCache sharedImageCache]; -} - - (NSString *)cacheKeyForURL:(NSURL *)url { + if (!url) { + return @""; + } + if (self.cacheKeyFilter) { return self.cacheKeyFilter(url); - } - else { + } else { return [url absoluteString]; } } @@ -112,7 +117,7 @@ - (void)diskImageExistsForURL:(NSURL *)url progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionWithFinishedBlock)completedBlock { // Invoking this method without a completedBlock is pointless - NSParameterAssert(completedBlock); + NSAssert(completedBlock != nil, @"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead"); // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString. @@ -133,7 +138,7 @@ - (void)diskImageExistsForURL:(NSURL *)url isFailedUrl = [self.failedURLs containsObject:url]; } - if (!url || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { + if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { dispatch_main_sync_safe(^{ NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil]; completedBlock(nil, error, SDImageCacheTypeNone, YES, url); @@ -158,7 +163,7 @@ - (void)diskImageExistsForURL:(NSURL *)url if ((!image || options & SDWebImageRefreshCached) && (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url])) { if (image && options & SDWebImageRefreshCached) { dispatch_main_sync_safe(^{ - // If image was found in the cache bug SDWebImageRefreshCached is provided, notify about the cached image + // If image was found in the cache but SDWebImageRefreshCached is provided, notify about the cached image // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server. completedBlock(image, nil, cacheType, YES, url); }); @@ -180,42 +185,54 @@ - (void)diskImageExistsForURL:(NSURL *)url downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse; } id subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) { - if (weakOperation.isCancelled) { + __strong __typeof(weakOperation) strongOperation = weakOperation; + if (!strongOperation || strongOperation.isCancelled) { // Do nothing if the operation was cancelled // See #699 for more details // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data } else if (error) { dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { + if (strongOperation && !strongOperation.isCancelled) { completedBlock(nil, error, SDImageCacheTypeNone, finished, url); } }); - if (error.code != NSURLErrorNotConnectedToInternet && error.code != NSURLErrorCancelled && error.code != NSURLErrorTimedOut) { + if ( error.code != NSURLErrorNotConnectedToInternet + && error.code != NSURLErrorCancelled + && error.code != NSURLErrorTimedOut + && error.code != NSURLErrorInternationalRoamingOff + && error.code != NSURLErrorDataNotAllowed + && error.code != NSURLErrorCannotFindHost + && error.code != NSURLErrorCannotConnectToHost) { @synchronized (self.failedURLs) { [self.failedURLs addObject:url]; } } } else { + if ((options & SDWebImageRetryFailed)) { + @synchronized (self.failedURLs) { + [self.failedURLs removeObject:url]; + } + } + BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly); if (options & SDWebImageRefreshCached && image && !downloadedImage) { // Image refresh hit the NSURLCache cache, do not call the completion block } - // NOTE: We don't call transformDownloadedImage delegate method on animated images as most transformation code would mangle it - else if (downloadedImage && !downloadedImage.images && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) { + else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url]; if (transformedImage && finished) { BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage]; - [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:data forKey:key toDisk:cacheOnDisk]; + [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:(imageWasTransformed ? nil : data) forKey:key toDisk:cacheOnDisk]; } dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { + if (strongOperation && !strongOperation.isCancelled) { completedBlock(transformedImage, nil, SDImageCacheTypeNone, finished, url); } }); @@ -227,7 +244,7 @@ - (void)diskImageExistsForURL:(NSURL *)url } dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { + if (strongOperation && !strongOperation.isCancelled) { completedBlock(downloadedImage, nil, SDImageCacheTypeNone, finished, url); } }); @@ -236,7 +253,9 @@ - (void)diskImageExistsForURL:(NSURL *)url if (finished) { @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; + if (strongOperation) { + [self.runningOperations removeObject:strongOperation]; + } } } }]; @@ -244,13 +263,17 @@ - (void)diskImageExistsForURL:(NSURL *)url [subOperation cancel]; @synchronized (self.runningOperations) { - [self.runningOperations removeObject:weakOperation]; + __strong __typeof(weakOperation) strongOperation = weakOperation; + if (strongOperation) { + [self.runningOperations removeObject:strongOperation]; + } } }; } else if (image) { dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { + __strong __typeof(weakOperation) strongOperation = weakOperation; + if (strongOperation && !strongOperation.isCancelled) { completedBlock(image, nil, cacheType, YES, url); } }); @@ -261,7 +284,8 @@ - (void)diskImageExistsForURL:(NSURL *)url else { // Image not in cache and download disallowed by delegate dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { + __strong __typeof(weakOperation) strongOperation = weakOperation; + if (strongOperation && !weakOperation.isCancelled) { completedBlock(nil, nil, SDImageCacheTypeNone, YES, url); } }); @@ -283,13 +307,18 @@ - (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url { - (void)cancelAll { @synchronized (self.runningOperations) { - [self.runningOperations makeObjectsPerformSelector:@selector(cancel)]; - [self.runningOperations removeAllObjects]; + NSArray *copiedOperations = [self.runningOperations copy]; + [copiedOperations makeObjectsPerformSelector:@selector(cancel)]; + [self.runningOperations removeObjectsInArray:copiedOperations]; } } - (BOOL)isRunning { - return self.runningOperations.count > 0; + BOOL isRunning = NO; + @synchronized(self.runningOperations) { + isRunning = (self.runningOperations.count > 0); + } + return isRunning; } @end diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h index 4f14fa2..6c31b15 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h @@ -58,6 +58,11 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, */ @property (nonatomic, assign) SDWebImageOptions options; +/** + * Queue options for Prefetcher. Defaults to Main Queue. + */ +@property (nonatomic, assign) dispatch_queue_t prefetcherQueue; + @property (weak, nonatomic) id delegate; /** @@ -65,6 +70,11 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, */ + (SDWebImagePrefetcher *)sharedImagePrefetcher; +/** + * Allows you to instantiate a prefetcher with any arbitrary image manager. + */ +- (id)initWithImageManager:(SDWebImageManager *)manager; + /** * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, * currently one image is downloaded at a time, diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m index 4087e4a..f518d44 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m @@ -8,10 +8,6 @@ #import "SDWebImagePrefetcher.h" -#if !defined(DEBUG) && !defined (SD_VERBOSE) -#define NSLog(...) -#endif - @interface SDWebImagePrefetcher () @property (strong, nonatomic) SDWebImageManager *manager; @@ -37,9 +33,14 @@ + (SDWebImagePrefetcher *)sharedImagePrefetcher { } - (id)init { + return [self initWithImageManager:[SDWebImageManager new]]; +} + +- (id)initWithImageManager:(SDWebImageManager *)manager { if ((self = [super init])) { - _manager = [SDWebImageManager new]; + _manager = manager; _options = SDWebImageLowPriority; + _prefetcherQueue = dispatch_get_main_queue(); self.maxConcurrentDownloads = 3; } return self; @@ -64,14 +65,11 @@ - (void)startPrefetchingAtIndex:(NSUInteger)index { if (self.progressBlock) { self.progressBlock(self.finishedCount,[self.prefetchURLs count]); } - NSLog(@"Prefetched %@ out of %@", @(self.finishedCount), @(self.prefetchURLs.count)); } else { if (self.progressBlock) { self.progressBlock(self.finishedCount,[self.prefetchURLs count]); } - NSLog(@"Prefetched %@ out of %@ (Failed)", @(self.finishedCount), @(self.prefetchURLs.count)); - // Add last failed self.skippedCount++; } @@ -80,32 +78,30 @@ - (void)startPrefetchingAtIndex:(NSUInteger)index { didPrefetchURL:self.prefetchURLs[index] finishedCount:self.finishedCount totalCount:self.prefetchURLs.count - ]; + ]; } - if (self.prefetchURLs.count > self.requestedCount) { - dispatch_async(dispatch_get_main_queue(), ^{ + dispatch_async(self.prefetcherQueue, ^{ [self startPrefetchingAtIndex:self.requestedCount]; }); - } - else if (self.finishedCount == self.requestedCount) { + } else if (self.finishedCount == self.requestedCount) { [self reportStatus]; if (self.completionBlock) { self.completionBlock(self.finishedCount, self.skippedCount); self.completionBlock = nil; } + self.progressBlock = nil; } }]; } - (void)reportStatus { NSUInteger total = [self.prefetchURLs count]; - NSLog(@"Finished prefetching (%@ successful, %@ skipped, timeElasped %.2f)", @(total - self.skippedCount), @(self.skippedCount), CFAbsoluteTimeGetCurrent() - self.startedTime); if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)]) { [self.delegate imagePrefetcher:self didFinishWithTotalCount:(total - self.skippedCount) skippedCount:self.skippedCount - ]; + ]; } } @@ -120,10 +116,16 @@ - (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock self.completionBlock = completionBlock; self.progressBlock = progressBlock; - // Starts prefetching from the very first image on the list with the max allowed concurrency - NSUInteger listCount = self.prefetchURLs.count; - for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) { - [self startPrefetchingAtIndex:i]; + if (urls.count == 0) { + if (completionBlock) { + completionBlock(0,0); + } + } else { + // Starts prefetching from the very first image on the list with the max allowed concurrency + NSUInteger listCount = self.prefetchURLs.count; + for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) { + [self startPrefetchingAtIndex:i]; + } } } diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h index 7a6e867..ecf5ced 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h @@ -70,8 +70,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; @@ -86,8 +86,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; @@ -103,8 +103,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; @@ -152,8 +152,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; @@ -168,8 +168,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; @@ -184,8 +184,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m index 8e076ae..ce2175d 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m @@ -57,8 +57,8 @@ - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placehold [self.imageURLStorage removeObjectForKey:@(state)]; dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; if (completedBlock) { + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; completedBlock(nil, error, SDImageCacheTypeNone, url); } }); @@ -68,13 +68,18 @@ - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placehold self.imageURLStorage[@(state)] = url; - __weak UIButton *wself = self; + __weak __typeof(self)wself = self; id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { if (!wself) return; dispatch_main_sync_safe(^{ __strong UIButton *sself = wself; if (!sself) return; - if (image) { + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { [sself setImage:image forState:state]; } if (completedBlock && finished) { @@ -106,18 +111,23 @@ - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state } - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_cancelImageLoadForState:state]; + [self sd_cancelBackgroundImageLoadForState:state]; [self setBackgroundImage:placeholder forState:state]; if (url) { - __weak UIButton *wself = self; + __weak __typeof(self)wself = self; id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { if (!wself) return; dispatch_main_sync_safe(^{ __strong UIButton *sself = wself; if (!sself) return; - if (image) { + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { [sself setBackgroundImage:image forState:state]; } if (completedBlock && finished) { @@ -128,7 +138,7 @@ - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state [self sd_setBackgroundImageLoadOperation:operation forState:state]; } else { dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; if (completedBlock) { completedBlock(nil, error, SDImageCacheTypeNone, url); } diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+GIF.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+GIF.m index a703637..bf74a36 100755 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+GIF.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+GIF.m @@ -32,6 +32,9 @@ + (UIImage *)sd_animatedGIFWithData:(NSData *)data { for (size_t i = 0; i < count; i++) { CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL); + if (!image) { + continue; + } duration += [self sd_frameDurationAtIndex:i source:source]; @@ -141,17 +144,17 @@ - (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size { NSMutableArray *scaledImages = [NSMutableArray array]; - UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); - for (UIImage *image in self.images) { + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); + [image drawInRect:CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledSize.width, scaledSize.height)]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); [scaledImages addObject:newImage]; - } - - UIGraphicsEndImageContext(); + UIGraphicsEndImageContext(); + } + return [UIImage animatedImageWithImages:scaledImages duration:self.duration]; } diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m index 5395280..a830754 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m @@ -18,6 +18,10 @@ @implementation UIImage (MultiFormat) + (UIImage *)sd_imageWithData:(NSData *)data { + if (!data) { + return nil; + } + UIImage *image; NSString *imageContentType = [NSData sd_contentTypeForImageData:data]; if ([imageContentType isEqualToString:@"image/gif"]) { diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h index 6b00366..c1d8fea 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h @@ -43,8 +43,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; @@ -58,8 +58,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; @@ -74,8 +74,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m index ae73610..921134e 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m @@ -33,13 +33,18 @@ - (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)op [self sd_cancelCurrentHighlightedImageLoad]; if (url) { - __weak UIImageView *wself = self; + __weak __typeof(self)wself = self; id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { if (!wself) return; dispatch_main_sync_safe (^ { if (!wself) return; - if (image) { + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { wself.highlightedImage = image; [wself setNeedsLayout]; } @@ -51,7 +56,7 @@ - (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)op [self sd_setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey]; } else { dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; if (completedBlock) { completedBlock(nil, error, SDImageCacheTypeNone, url); } diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h index 717d393..37ae1eb 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h @@ -92,8 +92,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; @@ -107,8 +107,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; @@ -123,8 +123,8 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; @@ -140,13 +140,13 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; /** - * Set the imageView `image` with an `url` and a optionaly placeholder image. + * Set the imageView `image` with an `url` and optionally a placeholder image. * * The download is asynchronous and cached. * @@ -157,10 +157,10 @@ * @param completedBlock A block called when operation has been completed. This block has no return value * and takes the requested UIImage as first parameter. In case of error the image parameter * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache of from the network. - * The forth parameter is the original image url. + * indicating if the image was retrieved from the local cache or from the network. + * The fourth parameter is the original image url. */ -- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; +- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; /** * Download an array of images and starts them in an animation loop @@ -176,6 +176,18 @@ - (void)sd_cancelCurrentAnimationImagesLoad; +/** + * Show activity UIActivityIndicatorView + */ +- (void)setShowActivityIndicatorView:(BOOL)show; + +/** + * set desired UIActivityIndicatorViewStyle + * + * @param style The style of the UIActivityIndicatorView + */ +- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style; + @end @@ -192,6 +204,8 @@ - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`"); - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:progress:completed:`"); +- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithPreviousCachedImageWithURL:placeholderImage:options:progress:completed:`"); + - (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs __deprecated_msg("Use `sd_setAnimationImagesWithURLs:`"); - (void)cancelCurrentArrayLoad __deprecated_msg("Use `sd_cancelCurrentAnimationImagesLoad`"); diff --git a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m index 51663dd..889305b 100644 --- a/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m +++ b/KDCycleBannerViewDemo/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m @@ -11,6 +11,9 @@ #import "UIView+WebCacheOperation.h" static char imageURLKey; +static char TAG_ACTIVITY_INDICATOR; +static char TAG_ACTIVITY_STYLE; +static char TAG_ACTIVITY_SHOW; @implementation UIImageView (WebCache) @@ -43,16 +46,30 @@ - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC); if (!(options & SDWebImageDelayPlaceholder)) { - self.image = placeholder; + dispatch_main_async_safe(^{ + self.image = placeholder; + }); } if (url) { - __weak UIImageView *wself = self; + + // check if activityView is enabled or not + if ([self showActivityIndicatorView]) { + [self addActivityIndicator]; + } + + __weak __typeof(self)wself = self; id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + [wself removeActivityIndicator]; if (!wself) return; dispatch_main_sync_safe(^{ if (!wself) return; - if (image) { + if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) + { + completedBlock(image, error, cacheType, url); + return; + } + else if (image) { wself.image = image; [wself setNeedsLayout]; } else { @@ -69,15 +86,16 @@ - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder [self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"]; } else { dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:@"SDWebImageErrorDomain" code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; + [self removeActivityIndicator]; if (completedBlock) { + NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; completedBlock(nil, error, SDImageCacheTypeNone, url); } }); } } -- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { +- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:url]; UIImage *lastPreviousCachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key]; @@ -90,7 +108,7 @@ - (NSURL *)sd_imageURL { - (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs { [self sd_cancelCurrentAnimationImagesLoad]; - __weak UIImageView *wself = self; + __weak __typeof(self)wself = self; NSMutableArray *operationsArray = [[NSMutableArray alloc] init]; @@ -127,6 +145,70 @@ - (void)sd_cancelCurrentAnimationImagesLoad { [self sd_cancelImageLoadOperationWithKey:@"UIImageViewAnimationImages"]; } + +#pragma mark - +- (UIActivityIndicatorView *)activityIndicator { + return (UIActivityIndicatorView *)objc_getAssociatedObject(self, &TAG_ACTIVITY_INDICATOR); +} + +- (void)setActivityIndicator:(UIActivityIndicatorView *)activityIndicator { + objc_setAssociatedObject(self, &TAG_ACTIVITY_INDICATOR, activityIndicator, OBJC_ASSOCIATION_RETAIN); +} + +- (void)setShowActivityIndicatorView:(BOOL)show{ + objc_setAssociatedObject(self, &TAG_ACTIVITY_SHOW, [NSNumber numberWithBool:show], OBJC_ASSOCIATION_RETAIN); +} + +- (BOOL)showActivityIndicatorView{ + return [objc_getAssociatedObject(self, &TAG_ACTIVITY_SHOW) boolValue]; +} + +- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style{ + objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInt:style], OBJC_ASSOCIATION_RETAIN); +} + +- (int)getIndicatorStyle{ + return [objc_getAssociatedObject(self, &TAG_ACTIVITY_STYLE) intValue]; +} + +- (void)addActivityIndicator { + if (!self.activityIndicator) { + self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:[self getIndicatorStyle]]; + self.activityIndicator.translatesAutoresizingMaskIntoConstraints = NO; + + dispatch_main_async_safe(^{ + [self addSubview:self.activityIndicator]; + + [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator + attribute:NSLayoutAttributeCenterX + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeCenterX + multiplier:1.0 + constant:0.0]]; + [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator + attribute:NSLayoutAttributeCenterY + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeCenterY + multiplier:1.0 + constant:0.0]]; + }); + } + + dispatch_main_async_safe(^{ + [self.activityIndicator startAnimating]; + }); + +} + +- (void)removeActivityIndicator { + if (self.activityIndicator) { + [self.activityIndicator removeFromSuperview]; + self.activityIndicator = nil; + } +} + @end @@ -180,6 +262,10 @@ - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder opt }]; } +- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { + [self sd_setImageWithPreviousCachedImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:completedBlock]; +} + - (void)cancelCurrentArrayLoad { [self sd_cancelCurrentAnimationImagesLoad]; } diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-acknowledgements.markdown similarity index 91% rename from KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown rename to KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-acknowledgements.markdown index 35f0c60..b61451b 100644 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-acknowledgements.markdown @@ -3,7 +3,7 @@ This application makes use of the following third party libraries: ## SDWebImage -Copyright (c) 2009 Olivier Poitrey +Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -24,4 +24,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Generated by CocoaPods - http://cocoapods.org +Generated by CocoaPods - https://cocoapods.org diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-acknowledgements.plist similarity index 91% rename from KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.plist rename to KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-acknowledgements.plist index dc43d36..a73280b 100644 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-acknowledgements.plist @@ -14,7 +14,7 @@ FooterText - Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com> + Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -35,6 +35,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title SDWebImage Type @@ -42,7 +44,7 @@ THE SOFTWARE. FooterText - Generated by CocoaPods - http://cocoapods.org + Generated by CocoaPods - https://cocoapods.org Title Type diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-dummy.m b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-dummy.m new file mode 100644 index 0000000..8416f83 --- /dev/null +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_KDCycleBannerViewDemo : NSObject +@end +@implementation PodsDummy_Pods_KDCycleBannerViewDemo +@end diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-frameworks.sh b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-frameworks.sh new file mode 100755 index 0000000..893c16a --- /dev/null +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-frameworks.sh @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-resources.sh b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-resources.sh new file mode 100755 index 0000000..25e9d37 --- /dev/null +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + 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}" + 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} + ;; + *.xib) + 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}" + 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} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + 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}" +fi diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.debug.xcconfig b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.debug.xcconfig new file mode 100644 index 0000000..6a81675 --- /dev/null +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.debug.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" +OTHER_LDFLAGS = $(inherited) -ObjC -l"SDWebImage" -framework "ImageIO" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.release.xcconfig b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.release.xcconfig new file mode 100644 index 0000000..6a81675 --- /dev/null +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-KDCycleBannerViewDemo/Pods-KDCycleBannerViewDemo.release.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" +OTHER_LDFLAGS = $(inherited) -ObjC -l"SDWebImage" -framework "ImageIO" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-Private.xcconfig b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-Private.xcconfig deleted file mode 100644 index 4677a2e..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-SDWebImage.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" -OTHER_LDFLAGS = ${PODS_SDWEBIMAGE_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-dummy.m b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-dummy.m deleted file mode 100644 index 1e978bb..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_SDWebImage : NSObject -@end -@implementation PodsDummy_Pods_SDWebImage -@end diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage.xcconfig b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage.xcconfig deleted file mode 100644 index b82befe..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_SDWEBIMAGE_OTHER_LDFLAGS = -framework "ImageIO" \ No newline at end of file diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-dummy.m b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-environment.h b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-environment.h deleted file mode 100644 index f45b6d6..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-environment.h +++ /dev/null @@ -1,20 +0,0 @@ - -// To check if a library is compiled with CocoaPods you -// can use the `COCOAPODS` macro definition which is -// defined in the xcconfigs so it is available in -// headers also when they are imported in the client -// project. - - -// SDWebImage -#define COCOAPODS_POD_AVAILABLE_SDWebImage -#define COCOAPODS_VERSION_MAJOR_SDWebImage 3 -#define COCOAPODS_VERSION_MINOR_SDWebImage 7 -#define COCOAPODS_VERSION_PATCH_SDWebImage 1 - -// SDWebImage/Core -#define COCOAPODS_POD_AVAILABLE_SDWebImage_Core -#define COCOAPODS_VERSION_MAJOR_SDWebImage_Core 3 -#define COCOAPODS_VERSION_MINOR_SDWebImage_Core 7 -#define COCOAPODS_VERSION_PATCH_SDWebImage_Core 1 - diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-resources.sh b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-resources.sh deleted file mode 100755 index e149064..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods-resources.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -install_resource() -{ - case $1 in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.framework) - echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" - xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ;; - /*) - echo "$1" - echo "$1" >> "$RESOURCES_TO_COPY" - ;; - *) - echo "${PODS_ROOT}/$1" - echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]]; then - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] -then - case "${TARGETED_DEVICE_FAMILY}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; - esac - find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods.debug.xcconfig deleted file mode 100644 index 2107d85..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -OTHER_LDFLAGS = -ObjC -l"Pods-SDWebImage" -framework "ImageIO" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods.release.xcconfig b/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods.release.xcconfig deleted file mode 100644 index 2107d85..0000000 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -OTHER_LDFLAGS = -ObjC -l"Pods-SDWebImage" -framework "ImageIO" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m b/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m new file mode 100644 index 0000000..86d2b5f --- /dev/null +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SDWebImage : NSObject +@end +@implementation PodsDummy_SDWebImage +@end diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch b/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch similarity index 62% rename from KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch rename to KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch index 95cf11d..aa992a4 100644 --- a/KDCycleBannerViewDemo/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig new file mode 100644 index 0000000..4fa7a3b --- /dev/null +++ b/KDCycleBannerViewDemo/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SDWebImage +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" +OTHER_LDFLAGS = -framework "ImageIO" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES