diff --git a/SDWebImage.podspec b/SDWebImage.podspec index 5f64d5ad..f205158a 100644 --- a/SDWebImage.podspec +++ b/SDWebImage.podspec @@ -3,6 +3,8 @@ Pod::Spec.new do |s| s.version = '3.8.1' s.ios.deployment_target = '7.0' s.tvos.deployment_target = '9.0' + s.watchos.deployment_target = '2.0' + s.license = 'MIT' s.summary = 'Asynchronous image downloader with cache support with an UIImageView category.' s.homepage = 'https://github.com/rs/SDWebImage' @@ -36,7 +38,7 @@ Pod::Spec.new do |s| end s.subspec 'GIF' do |gif| - gif.ios.deployment_target = '6.0' + gif.ios.deployment_target = '7.0' gif.source_files = 'SDWebImage/FLAnimatedImage/*.{h,m}' gif.dependency 'SDWebImage/Core' gif.dependency 'FLAnimatedImage', '~> 1.0' diff --git a/SDWebImage.xcodeproj/project.pbxproj b/SDWebImage.xcodeproj/project.pbxproj index 477ddd7d..af5c9cfc 100644 --- a/SDWebImage.xcodeproj/project.pbxproj +++ b/SDWebImage.xcodeproj/project.pbxproj @@ -267,6 +267,40 @@ 431739591CDFC8B70008FEB9 /* mux.h in Headers */ = {isa = PBXBuildFile; fileRef = DA577CC81998E60B007367ED /* mux.h */; }; 4317395A1CDFC8B70008FEB9 /* mux_types.h in Headers */ = {isa = PBXBuildFile; fileRef = DA577CC91998E60B007367ED /* mux_types.h */; }; 4317395B1CDFC8B70008FEB9 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = DA577CCA1998E60B007367ED /* types.h */; }; + 431BB68C1D06D2C1006A3455 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 530E49E416460AE2002868E7 /* SDWebImageDownloaderOperation.m */; }; + 431BB68E1D06D2C1006A3455 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 53922D92148C56230056699D /* SDWebImagePrefetcher.m */; }; + 431BB6901D06D2C1006A3455 /* FLAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 43CE75CF1CFE98E0006C64D0 /* FLAnimatedImageView+WebCache.m */; }; + 431BB6921D06D2C1006A3455 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D5B9141188EE8DD006D06BD /* NSData+ImageContentType.m */; }; + 431BB69A1D06D2C1006A3455 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 53922D8C148C56230056699D /* SDWebImageDownloader.m */; }; + 431BB6A31D06D2C1006A3455 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 53922D96148C56230056699D /* UIImageView+WebCache.m */; }; + 431BB6AA1D06D2C1006A3455 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 53922D8F148C56230056699D /* SDWebImageManager.m */; }; + 431BB6AC1D06D2C1006A3455 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5340674F167780C40042B59E /* SDWebImageCompat.m */; }; + 431BB6B11D06D2C1006A3455 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = AB615302192DA24600A2D8E9 /* UIView+WebCacheOperation.m */; }; + 431BB6B41D06D2C1006A3455 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 53922D8A148C56230056699D /* SDWebImageDecoder.m */; }; + 431BB6B61D06D2C1006A3455 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 53EDFB921762547C00698166 /* UIImage+WebP.m */; }; + 431BB6B91D06D2C1006A3455 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 53922D94148C56230056699D /* UIButton+WebCache.m */; }; + 431BB6BD1D06D2C1006A3455 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = A18A6CC6172DC28500419892 /* UIImage+GIF.m */; }; + 431BB6C01D06D2C1006A3455 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 53922D86148C56230056699D /* SDImageCache.m */; }; + 431BB6C41D06D2C1006A3455 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 53EDFB8917623F7C00698166 /* UIImage+MultiFormat.m */; }; + 431BB6C71D06D2C1006A3455 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = ABBE71A618C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m */; }; + 431BB6D71D06D2C1006A3455 /* UIImage+WebP.h in Headers */ = {isa = PBXBuildFile; fileRef = 53EDFB911762547C00698166 /* UIImage+WebP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6D91D06D2C1006A3455 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D8E148C56230056699D /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6DC1D06D2C1006A3455 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D93148C56230056699D /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6DF1D06D2C1006A3455 /* FLAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 43CE75CE1CFE98E0006C64D0 /* FLAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6E11D06D2C1006A3455 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A2CAE031AB4BB5400B6BC39 /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6E21D06D2C1006A3455 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = ABBE71A518C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6E31D06D2C1006A3455 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D85148C56230056699D /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6E61D06D2C1006A3455 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D95148C56230056699D /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6E71D06D2C1006A3455 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D88148C56230056699D /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6E91D06D2C1006A3455 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 530E49E316460AE2002868E7 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6EB1D06D2C1006A3455 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6EE1D06D2C1006A3455 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D5B9140188EE8DD006D06BD /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6EF1D06D2C1006A3455 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D91148C56230056699D /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6F01D06D2C1006A3455 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 530E49E71646388E002868E7 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6F61D06D2C1006A3455 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 53EDFB8817623F7C00698166 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6F91D06D2C1006A3455 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A18A6CC5172DC28500419892 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6FA1D06D2C1006A3455 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D8B148C56230056699D /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431BB6FC1D06D2C1006A3455 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53922D89148C56230056699D /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 438096721CDFC08200DC626B /* MKAnnotationView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 535699B415113E7300A4C397 /* MKAnnotationView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; 438096731CDFC08F00DC626B /* MKAnnotationView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 535699B515113E7300A4C397 /* MKAnnotationView+WebCache.m */; }; 438096741CDFC09C00DC626B /* UIImage+WebP.h in Headers */ = {isa = PBXBuildFile; fileRef = 53EDFB911762547C00698166 /* UIImage+WebP.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -359,6 +393,7 @@ /* Begin PBXFileReference section */ 00733A4C1BC487C000A5A117 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 431BB7031D06D2C1006A3455 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 43CE75491CFE9427006C64D0 /* FLAnimatedImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImage.h; sourceTree = ""; }; 43CE754A1CFE9427006C64D0 /* FLAnimatedImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLAnimatedImage.m; sourceTree = ""; }; 43CE754B1CFE9427006C64D0 /* FLAnimatedImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImageView.h; sourceTree = ""; }; @@ -491,6 +526,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 431BB6CA1D06D2C1006A3455 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4A2CADFB1AB4BB5300B6BC39 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -574,6 +616,7 @@ 53761325155AD0D5005750A4 /* libSDWebImage.a */, 4A2CADFF1AB4BB5300B6BC39 /* SDWebImage.framework */, 00733A4C1BC487C000A5A117 /* SDWebImage.framework */, + 431BB7031D06D2C1006A3455 /* SDWebImage.framework */, ); name = Products; sourceTree = ""; @@ -848,6 +891,31 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 431BB6CB1D06D2C1006A3455 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 431BB6D71D06D2C1006A3455 /* UIImage+WebP.h in Headers */, + 431BB6D91D06D2C1006A3455 /* SDWebImageManager.h in Headers */, + 431BB6DC1D06D2C1006A3455 /* UIButton+WebCache.h in Headers */, + 431BB6DF1D06D2C1006A3455 /* FLAnimatedImageView+WebCache.h in Headers */, + 431BB6E11D06D2C1006A3455 /* SDWebImage.h in Headers */, + 431BB6E21D06D2C1006A3455 /* UIImageView+HighlightedWebCache.h in Headers */, + 431BB6E31D06D2C1006A3455 /* SDImageCache.h in Headers */, + 431BB6E61D06D2C1006A3455 /* UIImageView+WebCache.h in Headers */, + 431BB6E71D06D2C1006A3455 /* SDWebImageCompat.h in Headers */, + 431BB6E91D06D2C1006A3455 /* SDWebImageDownloaderOperation.h in Headers */, + 431BB6EB1D06D2C1006A3455 /* UIView+WebCacheOperation.h in Headers */, + 431BB6EE1D06D2C1006A3455 /* NSData+ImageContentType.h in Headers */, + 431BB6EF1D06D2C1006A3455 /* SDWebImagePrefetcher.h in Headers */, + 431BB6F01D06D2C1006A3455 /* SDWebImageOperation.h in Headers */, + 431BB6F61D06D2C1006A3455 /* UIImage+MultiFormat.h in Headers */, + 431BB6F91D06D2C1006A3455 /* UIImage+GIF.h in Headers */, + 431BB6FA1D06D2C1006A3455 /* SDWebImageDownloader.h in Headers */, + 431BB6FC1D06D2C1006A3455 /* SDWebImageDecoder.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4A2CADFC1AB4BB5300B6BC39 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -986,6 +1054,24 @@ productReference = 00733A4C1BC487C000A5A117 /* SDWebImage.framework */; productType = "com.apple.product-type.framework"; }; + 431BB6891D06D2C1006A3455 /* SDWebImage watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 431BB7001D06D2C1006A3455 /* Build configuration list for PBXNativeTarget "SDWebImage watchOS" */; + buildPhases = ( + 431BB68A1D06D2C1006A3455 /* Sources */, + 431BB6CA1D06D2C1006A3455 /* Frameworks */, + 431BB6CB1D06D2C1006A3455 /* Headers */, + 431BB6FF1D06D2C1006A3455 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SDWebImage watchOS"; + productName = "WebImage tvOS"; + productReference = 431BB7031D06D2C1006A3455 /* SDWebImage.framework */; + productType = "com.apple.product-type.framework"; + }; 4A2CADFE1AB4BB5300B6BC39 /* SDWebImage iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 4A2CAE121AB4BB5400B6BC39 /* Build configuration list for PBXNativeTarget "SDWebImage iOS" */; @@ -1054,6 +1140,7 @@ 53761307155AD0D5005750A4 /* SDWebImage */, 4A2CADFE1AB4BB5300B6BC39 /* SDWebImage iOS */, 00733A4B1BC487C000A5A117 /* SDWebImage tvOS */, + 431BB6891D06D2C1006A3455 /* SDWebImage watchOS */, ); }; /* End PBXProject section */ @@ -1066,6 +1153,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 431BB6FF1D06D2C1006A3455 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4A2CADFD1AB4BB5300B6BC39 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1163,6 +1257,29 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 431BB68A1D06D2C1006A3455 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 431BB68C1D06D2C1006A3455 /* SDWebImageDownloaderOperation.m in Sources */, + 431BB68E1D06D2C1006A3455 /* SDWebImagePrefetcher.m in Sources */, + 431BB6901D06D2C1006A3455 /* FLAnimatedImageView+WebCache.m in Sources */, + 431BB6921D06D2C1006A3455 /* NSData+ImageContentType.m in Sources */, + 431BB69A1D06D2C1006A3455 /* SDWebImageDownloader.m in Sources */, + 431BB6A31D06D2C1006A3455 /* UIImageView+WebCache.m in Sources */, + 431BB6AA1D06D2C1006A3455 /* SDWebImageManager.m in Sources */, + 431BB6AC1D06D2C1006A3455 /* SDWebImageCompat.m in Sources */, + 431BB6B11D06D2C1006A3455 /* UIView+WebCacheOperation.m in Sources */, + 431BB6B41D06D2C1006A3455 /* SDWebImageDecoder.m in Sources */, + 431BB6B61D06D2C1006A3455 /* UIImage+WebP.m in Sources */, + 431BB6B91D06D2C1006A3455 /* UIButton+WebCache.m in Sources */, + 431BB6BD1D06D2C1006A3455 /* UIImage+GIF.m in Sources */, + 431BB6C01D06D2C1006A3455 /* SDImageCache.m in Sources */, + 431BB6C41D06D2C1006A3455 /* UIImage+MultiFormat.m in Sources */, + 431BB6C71D06D2C1006A3455 /* UIImageView+HighlightedWebCache.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4A2CADFA1AB4BB5300B6BC39 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1321,7 +1438,6 @@ ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = WebImage/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.dailymotion.$(PRODUCT_NAME:rfc1034identifier).tvos"; @@ -1350,7 +1466,6 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = WebImage/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.dailymotion.$(PRODUCT_NAME:rfc1034identifier).tvos"; @@ -1364,6 +1479,62 @@ }; name = Release; }; + 431BB7011D06D2C1006A3455 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = WebImage/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.dailymotion.$(PRODUCT_NAME:rfc1034identifier).watchos"; + PRODUCT_NAME = SDWebImage; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "watchsimulator watchos"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = 3; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Debug; + }; + 431BB7021D06D2C1006A3455 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = WebImage/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.dailymotion.$(PRODUCT_NAME:rfc1034identifier).watchos"; + PRODUCT_NAME = SDWebImage; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "watchsimulator watchos"; + TARGETED_DEVICE_FAMILY = 3; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Release; + }; 4A2CAE131AB4BB5400B6BC39 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1450,7 +1621,6 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", - "SD_WEBP=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; @@ -1506,10 +1676,7 @@ ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "SD_WEBP=1", - "$(inherited)", - ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; GCC_TREAT_WARNINGS_AS_ERRORS = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; @@ -1548,6 +1715,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 431BB7001D06D2C1006A3455 /* Build configuration list for PBXNativeTarget "SDWebImage watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 431BB7011D06D2C1006A3455 /* Debug */, + 431BB7021D06D2C1006A3455 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 4A2CAE121AB4BB5400B6BC39 /* Build configuration list for PBXNativeTarget "SDWebImage iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/SDWebImage.xcodeproj/xcshareddata/xcschemes/SDWebImage watchOS.xcscheme b/SDWebImage.xcodeproj/xcshareddata/xcschemes/SDWebImage watchOS.xcscheme new file mode 100644 index 00000000..70ec4055 --- /dev/null +++ b/SDWebImage.xcodeproj/xcshareddata/xcschemes/SDWebImage watchOS.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDWebImage.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/SDWebImage.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..08de0be8 --- /dev/null +++ b/SDWebImage.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + + diff --git a/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.h b/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.h index acd4a8a6..e7610a36 100644 --- a/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.h +++ b/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.h @@ -6,6 +6,7 @@ * file that was distributed with this source code. */ +#if TARGET_OS_IOS || TARGET_OS_TV #if COCOAPODS @import FLAnimatedImage; @@ -139,3 +140,5 @@ - (void)sd_cancelCurrentImageLoad; @end + +#endif diff --git a/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.m b/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.m index 145ef5f2..eca04203 100644 --- a/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.m +++ b/SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.m @@ -6,6 +6,7 @@ * file that was distributed with this source code. */ +#if TARGET_OS_IOS || TARGET_OS_TV #import "FLAnimatedImageView+WebCache.h" #import "objc/runtime.h" @@ -117,3 +118,5 @@ static char imageURLKey; @end + +#endif diff --git a/SDWebImage/SDImageCache.m b/SDWebImage/SDImageCache.m index f49e3819..4727a3d1 100644 --- a/SDWebImage/SDImageCache.m +++ b/SDWebImage/SDImageCache.m @@ -21,14 +21,17 @@ - (nonnull instancetype)init { self = [super init]; if (self) { +#if TARGET_OS_IOS || TARGET_OS_TV [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; +#endif } return self; } - (void)dealloc { +#if TARGET_OS_IOS || TARGET_OS_TV [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; - +#endif } @end @@ -126,7 +129,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { _fileManager = [NSFileManager new]; }); -#if TARGET_OS_IOS +#if TARGET_OS_IOS || TARGET_OS_TV // Subscribe to app events [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(clearMemory) @@ -211,7 +214,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { NSData *data = imageData; if (image && (recalculate || !data)) { -#if TARGET_OS_IPHONE +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH // We need to determine if the image is a PNG or a JPEG // PNGs are easier to detect because they have a unique signature (http://www.w3.org/TR/PNG-Structure.html) // The first eight bytes of a PNG file always contain the following (decimal) values: @@ -589,6 +592,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { }); } +#if TARGET_OS_IOS || TARGET_OS_TV - (void)backgroundCleanDisk { Class UIApplicationClass = NSClassFromString(@"UIApplication"); if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { @@ -608,6 +612,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { bgTask = UIBackgroundTaskInvalid; }]; } +#endif - (NSUInteger)getSize { __block NSUInteger size = 0; diff --git a/SDWebImage/SDWebImageCompat.h b/SDWebImage/SDWebImageCompat.h index 3c21b413..3d4b48d8 100644 --- a/SDWebImage/SDWebImageCompat.h +++ b/SDWebImage/SDWebImageCompat.h @@ -18,17 +18,18 @@ #endif #if !TARGET_OS_IPHONE -#import -#ifndef UIImage -#define UIImage NSImage -#endif -#ifndef UIImageView -#define UIImageView NSImageView -#endif + #import + #ifndef UIImage + #define UIImage NSImage + #endif + #ifndef UIImageView + #define UIImageView NSImageView + #endif #else - -#import - + #import + #if TARGET_OS_WATCH + #import + #endif #endif #ifndef NS_ENUM diff --git a/SDWebImage/SDWebImageCompat.m b/SDWebImage/SDWebImageCompat.m index 77a8c504..1380f3d3 100644 --- a/SDWebImage/SDWebImageCompat.m +++ b/SDWebImage/SDWebImageCompat.m @@ -27,7 +27,11 @@ inline UIImage *SDScaledImageForKey(NSString * _Nullable key, UIImage * _Nullabl return [UIImage animatedImageWithImages:scaledImages duration:image.duration]; } else { +#if TARGET_OS_WATCH + if ([[WKInterfaceDevice currentDevice] respondsToSelector:@selector(screenScale)]) { +#else if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { +#endif CGFloat scale = 1; if (key.length >= 8) { NSRange range = [key rangeOfString:@"@2x."]; diff --git a/SDWebImage/SDWebImageDownloaderOperation.m b/SDWebImage/SDWebImageDownloaderOperation.m index 5baa83a1..766e683f 100644 --- a/SDWebImage/SDWebImageDownloaderOperation.m +++ b/SDWebImage/SDWebImageDownloaderOperation.m @@ -41,7 +41,7 @@ typedef NSMutableDictionary SDCallbacksDictionary; @property (strong, atomic, nullable) NSThread *thread; @property (SDDispatchQueueSetterSementics, nonatomic, nullable) dispatch_queue_t barrierQueue; -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 +#if TARGET_OS_IOS || TARGET_OS_TV @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId; #endif @@ -125,7 +125,7 @@ typedef NSMutableDictionary SDCallbacksDictionary; return; } -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 +#if TARGET_OS_IOS || TARGET_OS_TV Class UIApplicationClass = NSClassFromString(@"UIApplication"); BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)]; if (hasApplication && [self shouldContinueWhenAppEntersBackground]) { @@ -179,7 +179,7 @@ typedef NSMutableDictionary SDCallbacksDictionary; } } -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 +#if TARGET_OS_IOS || TARGET_OS_TV Class UIApplicationClass = NSClassFromString(@"UIApplication"); if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { return; @@ -345,7 +345,7 @@ didReceiveResponse:(NSURLResponse *)response // Create the image CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); -#ifdef TARGET_OS_IPHONE +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH // Workaround for iOS anamorphic image if (partialImageRef) { const size_t partialHeight = CGImageGetHeight(partialImageRef); diff --git a/SDWebImage/UIButton+WebCache.h b/SDWebImage/UIButton+WebCache.h index 122c29dc..e0115010 100644 --- a/SDWebImage/UIButton+WebCache.h +++ b/SDWebImage/UIButton+WebCache.h @@ -9,6 +9,8 @@ #import "SDWebImageCompat.h" #import "SDWebImageManager.h" +#if TARGET_OS_IOS || TARGET_OS_TV + /** * Integrates SDWebImage async downloading and caching of remote images with UIButtonView. */ @@ -230,3 +232,5 @@ - (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state; @end + +#endif diff --git a/SDWebImage/UIButton+WebCache.m b/SDWebImage/UIButton+WebCache.m index 84b9c5d2..5ffaa576 100644 --- a/SDWebImage/UIButton+WebCache.m +++ b/SDWebImage/UIButton+WebCache.m @@ -10,6 +10,8 @@ #import "objc/runtime.h" #import "UIView+WebCacheOperation.h" +#if TARGET_OS_IOS || TARGET_OS_TV + static char imageURLStorageKey; typedef NSMutableDictionary SDStateImageURLDictionary; @@ -183,3 +185,5 @@ typedef NSMutableDictionary SDStateImageURLDictionary; } @end + +#endif diff --git a/SDWebImage/UIImage+GIF.h b/SDWebImage/UIImage+GIF.h index 63cb856d..a177969d 100755 --- a/SDWebImage/UIImage+GIF.h +++ b/SDWebImage/UIImage+GIF.h @@ -8,6 +8,9 @@ */ #import +#if TARGET_OS_WATCH + #import +#endif @interface UIImage (GIF) diff --git a/SDWebImage/UIImage+GIF.m b/SDWebImage/UIImage+GIF.m index 37c5130b..e8bcca0c 100755 --- a/SDWebImage/UIImage+GIF.m +++ b/SDWebImage/UIImage+GIF.m @@ -29,8 +29,16 @@ } else { // we will only retrieve the 1st frame. the full GIF support is available via the FLAnimatedImageView category. // this here is only code to allow drawing animated images as static ones + CGFloat scale = 1; +#if TARGET_OS_WATCH + scale = [WKInterfaceDevice currentDevice].screenScale; +#else + scale = [UIScreen mainScreen].scale; +#endif + + CGImageRef CGImage = CGImageSourceCreateImageAtIndex(source, 0, NULL); - UIImage *frameImage = [UIImage imageWithCGImage:CGImage scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]; + UIImage *frameImage = [UIImage imageWithCGImage:CGImage scale:scale orientation:UIImageOrientationUp]; staticImage = [UIImage animatedImageWithImages:@[frameImage] duration:0.0f]; CGImageRelease(CGImage); } diff --git a/SDWebImage/UIImageView+HighlightedWebCache.h b/SDWebImage/UIImageView+HighlightedWebCache.h index d97b4f04..1605b97d 100644 --- a/SDWebImage/UIImageView+HighlightedWebCache.h +++ b/SDWebImage/UIImageView+HighlightedWebCache.h @@ -10,6 +10,8 @@ #import "SDWebImageCompat.h" #import "SDWebImageManager.h" +#if TARGET_OS_IOS || TARGET_OS_TV + /** * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state. */ @@ -92,3 +94,5 @@ - (void)sd_cancelCurrentHighlightedImageLoad; @end + +#endif diff --git a/SDWebImage/UIImageView+HighlightedWebCache.m b/SDWebImage/UIImageView+HighlightedWebCache.m index dbc3374a..fe581b8b 100644 --- a/SDWebImage/UIImageView+HighlightedWebCache.m +++ b/SDWebImage/UIImageView+HighlightedWebCache.m @@ -9,6 +9,8 @@ #import "UIImageView+HighlightedWebCache.h" #import "UIView+WebCacheOperation.h" +#if TARGET_OS_IOS || TARGET_OS_TV + #define UIImageViewHighlightedWebCacheOperationKey @"highlightedImage" @implementation UIImageView (HighlightedWebCache) @@ -71,3 +73,5 @@ } @end + +#endif diff --git a/SDWebImage/UIImageView+WebCache.h b/SDWebImage/UIImageView+WebCache.h index 85ca2eda..a41102b1 100644 --- a/SDWebImage/UIImageView+WebCache.h +++ b/SDWebImage/UIImageView+WebCache.h @@ -9,6 +9,8 @@ #import "SDWebImageCompat.h" #import "SDWebImageManager.h" +#if TARGET_OS_IOS || TARGET_OS_TV + /** * Integrates SDWebImage async downloading and caching of remote images with UIImageView. * @@ -211,3 +213,5 @@ @end + +#endif diff --git a/SDWebImage/UIImageView+WebCache.m b/SDWebImage/UIImageView+WebCache.m index a9286606..5f2bca56 100644 --- a/SDWebImage/UIImageView+WebCache.m +++ b/SDWebImage/UIImageView+WebCache.m @@ -10,6 +10,8 @@ #import "objc/runtime.h" #import "UIView+WebCacheOperation.h" +#if TARGET_OS_IOS || TARGET_OS_TV + static char imageURLKey; static char TAG_ACTIVITY_INDICATOR; static char TAG_ACTIVITY_STYLE; @@ -218,3 +220,5 @@ static char TAG_ACTIVITY_SHOW; } @end + +#endif diff --git a/SDWebImage/UIView+WebCacheOperation.h b/SDWebImage/UIView+WebCacheOperation.h index 8f83eda3..1c6fa235 100644 --- a/SDWebImage/UIView+WebCacheOperation.h +++ b/SDWebImage/UIView+WebCacheOperation.h @@ -9,6 +9,8 @@ #import #import "SDWebImageManager.h" +#if TARGET_OS_IOS || TARGET_OS_TV + @interface UIView (WebCacheOperation) /** @@ -34,3 +36,5 @@ - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; @end + +#endif diff --git a/SDWebImage/UIView+WebCacheOperation.m b/SDWebImage/UIView+WebCacheOperation.m index 2533930b..dd607f97 100644 --- a/SDWebImage/UIView+WebCacheOperation.m +++ b/SDWebImage/UIView+WebCacheOperation.m @@ -9,6 +9,8 @@ #import "UIView+WebCacheOperation.h" #import "objc/runtime.h" +#if TARGET_OS_IOS || TARGET_OS_TV + static char loadOperationKey; typedef NSMutableDictionary SDOperationsDictionary; @@ -59,3 +61,5 @@ typedef NSMutableDictionary SDOperationsDictionary; } @end + +#endif