Selaa lähdekoodia

Merge pull request #2275 from bpoplauschi/5.x.changelog

5.x CHANGELOG + Migration guide + version update
Bogdan Poplauschi 7 vuotta sitten
vanhempi
sitoutus
af0200fbff

+ 54 - 0
CHANGELOG.md

@@ -1,3 +1,57 @@
+## [5.0.0 - Release_name_TBD, on Apr xxth, 2018](https://github.com/rs/SDWebImage/releases/tag/5.0.0-beta)
+See [all tickets marked for the 5.0.0 release](https://github.com/rs/SDWebImage/milestone/15)
+
+#### Infrastructure
+- the new requirements are **iOS 8.0+** and **macOS 10.10+** #2147
+- **Xcode 9+**
+
+#### Backwards incompatible changes
+
+See the [5.0 Migration Guide](Docs/SDWebImage-5.0-Migration-guide.md) for a list of comprehensive changes and the way to update your code
+
+#### Features
+- Introduce `SDAnimatedImageView`, `SDAnimatedImage` and refactor the way we handle animated images #2140
+- Added APNG support via dedicated coder `SDImageAPNGCoder` #2149
+- Refactored `SDWebImageDownloader` configs, separated them into a dedicated `SDWebImageDownloaderConfig` object #2263
+- Refactored the way we work with the scale factor #2266
+- Created request and response modifier #2261
+- Refactor Cache Path API #2276
+- Refactor custom cache serializer & headers filter for request level #2280
+- Refactor cache - Support custom memory cache & disk cache #2282
+- Refactor cache - Support custom web cache #2278
+- Refactor - custom image loader - Supports loader protocol #2256
+- Use `SDWebImageAvoidDecodeImage` to allow user to control force decode feature for individual image request #2283
+
+- `SDImageCache` supports disk cache writing options. See `SDImageCacheConfig diskCacheWritingOptions` #2148
+- `SDImageCache` now uses `NSData writeToFile:options:error` instead of `NSFileManager createFileAtPath:contents:attributes` #2148
+- Moved `SDImageCache maxMemoryCost` and `SDImageCache maxMemoryCountLimit` to `SDImageCacheConfig` #2151
+- Added `SDImageCache diskImageDataExistsWithKey:` synchronous method #2151
+- Moved `UIImage sd_imageLoopCount` and `UIImage isGIF` (and renamed to `sd_isAnimated`) to `UIImage+WebCache` category, removed the outdated methods #2152
+- Move context and other type definitions to a separate header (`SDWebImageDefine`) to allow to be included without dependency #2188
+- Pass `context` arg from the top level APIs to the bottom level APIs to allow specify logic in the future #2189 d6a3e2c c24c3d3
+- Refactor the image indicator by creating `SDWebImageIndicator` and `SDWebImageProgressIndicator` protocols and two concrete classes that implement activity and progress indicators for both UIKit and AppKit #2185 46b62cf
+- Refactor the implementation of `SDWebImagePrefetcher` so it behaves more like a "shared instance" object, similar to other platform classes. Each instance will manage its own list of urls. #2191 1efc247 92f3d2c bc164d6
+- Refactored and enhanced the way we allow image transformations. Switched from a single delegate method to composition of `SDImageTransformer` #2219
+- API style refactoring - #2250
+  - Use property instead of setters and getters to make the property available in Swift
+  - Use class property with the correct name instead of `+(instanceType)sharedInstance` in singleton to make it more easy to use in Swift. The generated interface should be simple `open class var shared { get }`
+  - Add all nullability annotation to avoid any `AnyObject!` implicitly unwrapped optionals (Except that `null_resettable`)
+  - Add all Core Foundation Ownership using `CF_RETURNS_RETAINED` for
+    Get Rule and `CF_RETURNS_NOT_RETAINED` for Create Rule to avoid any `Unmanaged` CF value
+  - Change all key for Dictionary with `NS_STRING_ENUM` to make it easy to use in Swift with dot syntax
+  - Change all global value type which represent enum with `NS_TYPED_ENUM` to make it easy to use in Swift with dot syntax
+- Remove the extra calculation of image orientation for ImageIO coder & Fix macOS image orientation #2271
+- Added `SDWebImageError` (defined as `NS_ERROR_ENUM`) to group all our errors together #2290
+- Added tests for macOS
+- Add the `SDWebImageContextStoreCacheType` context option to specify target cache type when the image is downloaded by manager and will store to cache #2360
+- Feature watchOS `WKInterfaceImage` with `sd_setImageWithURL` #2331
+- Add options to specify query cache sync/async behavior #2312
+
+#### Fixes
+- `SDWebImageManager loadImageWithURL:options:progress:completed:` changed the `completed` param requirement from `nullable` to `nonnull` #2164
+
+TODO: Update diagrams
+
 ## [4.4.1 - 4.4 patch, on June 7th, 2018](https://github.com/rs/SDWebImage/releases/tag/4.4.1)
 ## [4.4.1 - 4.4 patch, on June 7th, 2018](https://github.com/rs/SDWebImage/releases/tag/4.4.1)
 See [all tickets marked for the 4.4.1 release](https://github.com/rs/SDWebImage/milestone/26)
 See [all tickets marked for the 4.4.1 release](https://github.com/rs/SDWebImage/milestone/26)
 	
 	

+ 103 - 0
Docs/API-Diff/5.0/apidiff.css

@@ -0,0 +1,103 @@
+body {
+    font: 12px 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;
+    margin: 0;
+    padding: 0 2em 2em 2em;
+}
+
+h1 {
+    margin-top: 30px;
+    margin-bottom: 30px;
+    font-size: 28px;
+    font-weight: bold;
+}
+
+.headerFile {
+    margin-left: 20px;
+}
+
+.headerName {
+    margin:  15px 0px 10px -20px;
+    padding:  4px 4px  4px  20px;
+    font-weight: bold;
+    font-size: 120%;
+    background-color: #f8f8f8;
+}
+
+.differenceGroup {
+    margin-top: 5px;
+}
+
+.difference {
+    padding-left: 20px;
+    font-family: Courier, Consolas, monospace;
+    font-size: 110%;
+}
+
+.status {
+    font-style: italic;
+    font-size: 80%;
+}
+
+.removed {
+    color: red;
+}
+
+.added {
+    color: blue;
+}
+
+.modified {
+    color: #080;
+}
+
+.declaration {
+    font-family: Courier, Consolas, monospace;
+}
+
+table {
+    border: 1px #888 solid;
+    padding: 2px;
+    border-spacing: 0px;
+    border-collapse: collapse;
+    margin-left: 40px;
+    margin-top: 7px;
+}
+
+td, th {
+    font-size: 10px;
+    border: 1px #888 solid;
+    padding:3px 6px;
+}
+
+th {
+    font-size: 10px;
+    text-align: center;
+    background-color: #eee;
+}
+
+td {
+    font-size: 90%;
+    text-align: left;
+}
+
+ul {
+    list-style: disc outside;
+    margin: 0 0 0 16px;
+    padding: 0;
+}
+
+li {
+    margin-top: 7px;
+}
+
+.message {
+    margin-left: 20px;
+    font-style: italic;
+    color: #888;
+}
+
+a:link          { color: #18396E; text-decoration: none; }
+a:active        { color: #18396E; text-decoration: none; }
+a:visited       { color: #003366; text-decoration: none; }
+a:link:hover    { color: #18396E; text-decoration: underline; }
+a:visited:hover { color: #003366; text-decoration: underline; }

+ 1222 - 0
Docs/API-Diff/5.0/apidiff.html

@@ -0,0 +1,1222 @@
+<html>
+<head>
+<link rel="stylesheet" href="apidiff.css" type="text/css" />
+<meta charset="utf-8" />
+</head>
+<body>
+
+<div class="headerFile">
+<div class="headerName">FLAnimatedImageView+WebCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> -[FLAnimatedImageView sd_setImageWithURL:placeholderImage:options:progress:completed:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">MKAnnotationView+WebCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> -[MKAnnotationView sd_setImageWithURL:placeholderImage:options:context:]</div>
+<div class="difference"><span class="status added">Added</span> -[MKAnnotationView sd_setImageWithURL:placeholderImage:options:progress:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[MKAnnotationView sd_setImageWithURL:placeholderImage:options:context:progress:completed:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDAnimatedImage.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDAnimatedImage</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage initWithAnimatedCoder:scale:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage preloadAllFrames]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage unloadAllFrames]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage isAllFramesLoaded]</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImage</div>
+<div class="difference"><span class="status added">Added</span> +[SDAnimatedImage imageNamed:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDAnimatedImage imageNamed:inBundle:compatibleWithTraitCollection:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDAnimatedImage imageWithContentsOfFile:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDAnimatedImage imageWithData:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDAnimatedImage imageWithData:scale:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage initWithContentsOfFile:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage initWithData:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage initWithData:scale:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage initWithAnimatedCoder:scale:]</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImage.animatedImageFormat</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImage.animatedImageData</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImage.scale</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage preloadAllFrames]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImage unloadAllFrames]</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImage.allFramesLoaded</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDAnimatedImageView.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.currentFrame</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.currentFrameIndex</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.currentLoopCount</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.shouldCustomLoopCount</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.animationRepeatCount</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.maxBufferSize</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.shouldIncrementalLoad</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageView.runLoopMode</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDAnimatedImageView+WebCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:placeholderImage:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:placeholderImage:options:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:placeholderImage:options:context:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:placeholderImage:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:placeholderImage:options:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:placeholderImage:options:progress:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageView sd_setImageWithURL:placeholderImage:options:context:progress:completed:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDDiskCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDDiskCache</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache initWithCachePath:config:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache containsDataForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache dataForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache setData:forKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache removeDataForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache removeAllData]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache removeExpiredData]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache cachePathForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache totalCount]</div>
+<div class="difference"><span class="status added">Added</span> -[SDDiskCache totalSize]</div>
+<div class="difference"><span class="status added">Added</span> SDDiskCache</div>
+<div class="difference"><span class="status added">Added</span> SDDiskCache.config</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageAPNGCoder.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageAPNGCoder</div>
+<div class="difference"><span class="status added">Added</span> SDImageAPNGCoder.sharedCoder</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDImageCacheQueryDataWhenInMemory</div>
+<div class="difference"><span class="status removed">Removed</span> SDImageCacheQueryDiskSync</div>
+<div class="difference"><span class="status removed">Removed</span> SDCacheQueryCompletedBlock</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCheckCacheCompletionBlock</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCalculateSizeBlock</div>
+<div class="difference"><span class="status removed">Removed</span> SDImageCache.maxMemoryCost</div>
+<div class="difference"><span class="status removed">Removed</span> SDImageCache.maxMemoryCountLimit</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDImageCache makeDiskCachePath:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDImageCache addReadOnlyCachePath:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDImageCache cachePathForKey:inPath:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDImageCache defaultCachePathForKey:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageCacheQueryMemoryData</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheQueryMemoryDataSync</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheQueryDiskDataSync</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheAvoidDecodeImage</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheDecodeFirstFrameOnly</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachePreloadAllFrames</div>
+<div class="difference"><span class="status added">Added</span> SDImageCache.diskCachePath</div>
+<div class="difference"><span class="status added">Added</span> SDImageCache.additionalCachePathBlock</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache initWithNamespace:diskCacheDirectory:config:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache cachePathForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache storeImageToMemory:forKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache queryCacheOperationForKey:options:context:done:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache removeImageFromMemoryForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache removeImageFromDiskForKey:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> SDImageCache</div>
+<table>
+<tr><th></th><th>Protocols</th></tr>
+<tr><th>From</th><td><em>none</em></td></tr>
+<tr><th>To</th><td>SDImageCache</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDImageCache.config</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, readonly, nonnull) SDImageCacheConfig *config</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, copy, nonnull) SDImageCacheConfig *config</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> +[SDImageCache sharedImageCache]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">+ (nonnull instancetype)sharedImageCache</td></tr>
+<tr><th>To</th><td class="declaration">@property (class, nonatomic, readonly, nonnull) SDImageCache *sharedImageCache</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDImageCache diskImageExistsWithKey:completion:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)diskImageExistsWithKey:(nullable NSString *)key completion:(nullable SDWebImageCheckCacheCompletionBlock)completionBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (void)diskImageExistsWithKey:(nullable NSString *)key completion:(nullable SDImageCacheCheckCompletionBlock)completionBlock</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDImageCache queryCacheOperationForKey:done:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key done:(nullable SDCacheQueryCompletedBlock)doneBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key done:(nullable SDImageCacheQueryCompletionBlock)doneBlock</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDImageCache queryCacheOperationForKey:options:done:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDCacheQueryCompletedBlock)doneBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDImageCacheQueryCompletionBlock)doneBlock</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDImageCache calculateSizeWithCompletionBlock:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)calculateSizeWithCompletionBlock:(nullable SDWebImageCalculateSizeBlock)completionBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (void)calculateSizeWithCompletionBlock:(nullable SDImageCacheCalculateSizeBlock)completionBlock</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageCacheConfig.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDImageCacheConfig.shouldDecompressImages</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.defaultCacheConfig</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.shouldRemoveExpiredDataWhenEnterBackground</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.maxMemoryCost</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.maxMemoryCount</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.namespacePrefix</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.fileManager</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.memoryCacheClass</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheConfig.diskCacheClass</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> SDImageCacheConfig</div>
+<table>
+<tr><th></th><th>Protocols</th></tr>
+<tr><th>From</th><td><em>none</em></td></tr>
+<tr><th>To</th><td>NSCopying</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDImageCacheConfig.maxCacheAge</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, assign) NSInteger maxCacheAge</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, assign) NSTimeInterval maxCacheAge</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageCacheDefine.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageCacheTypeAll</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheCheckCompletionBlock</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheCalculateSizeBlock</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheAdditionalCachePathBlock</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheQueryCompletionBlock</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheContainsCompletionBlock</div>
+<div class="difference"><span class="status added">Added</span> SDImageCacheDecodeImageData()</div>
+<div class="difference"><span class="status added">Added</span> SDImageCache</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache queryImageForKey:options:context:completion:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache storeImage:imageData:forKey:cacheType:completion:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache removeImageForKey:cacheType:completion:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache containsImageForKey:cacheType:completion:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCache clearWithCacheType:completion:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageCachesManager.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageCachesManagerOperationPolicy</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManagerOperationPolicySerial</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManagerOperationPolicyConcurrent</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManagerOperationPolicyHighestOnly</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManagerOperationPolicyLowestOnly</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager.sharedManager</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager.queryOperationPolicy</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager.storeOperationPolicy</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager.removeOperationPolicy</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager.containsOperationPolicy</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager.clearOperationPolicy</div>
+<div class="difference"><span class="status added">Added</span> SDImageCachesManager.caches</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCachesManager addCache:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCachesManager removeCache:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageCoder.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageCoderOption</div>
+<div class="difference"><span class="status added">Added</span> SDImageCoderOptions</div>
+<div class="difference"><span class="status added">Added</span> SDImageCoderDecodeFirstFrameOnly</div>
+<div class="difference"><span class="status added">Added</span> SDImageCoderDecodeScaleFactor</div>
+<div class="difference"><span class="status added">Added</span> SDImageCoderEncodeFirstFrameOnly</div>
+<div class="difference"><span class="status added">Added</span> SDImageCoderEncodeCompressionQuality</div>
+<div class="difference"><span class="status added">Added</span> SDImageCoder</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCoder canDecodeFromData:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCoder decodedImageWithData:options:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCoder canEncodeToFormat:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCoder encodedDataWithImage:format:options:]</div>
+<div class="difference"><span class="status added">Added</span> SDProgressiveImageCoder</div>
+<div class="difference"><span class="status added">Added</span> -[SDProgressiveImageCoder canIncrementalDecodeFromData:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDProgressiveImageCoder initIncrementalWithOptions:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDProgressiveImageCoder updateIncrementalData:finished:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDProgressiveImageCoder incrementalDecodedImageWithOptions:]</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageProvider</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageProvider animatedImageData]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageProvider animatedImageFrameCount]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageProvider animatedImageLoopCount]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageProvider animatedImageFrameAtIndex:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageProvider animatedImageDurationAtIndex:]</div>
+<div class="difference"><span class="status added">Added</span> SDAnimatedImageCoder</div>
+<div class="difference"><span class="status added">Added</span> -[SDAnimatedImageCoder initWithAnimatedImageData:options:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageCoderHelper.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageCoderHelper</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper animatedImageWithFrames:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper framesFromAnimatedImage:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper colorSpaceGetDeviceRGB]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper CGImageContainsAlpha:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper CGImageCreateDecoded:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper CGImageCreateDecoded:orientation:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper decodedImageWithImage:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper decodedAndScaledDownImageWithImage:limitBytes:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper imageOrientationFromEXIFOrientation:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCoderHelper exifOrientationFromImageOrientation:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageCodersManager.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageCodersManager</div>
+<div class="difference"><span class="status added">Added</span> SDImageCodersManager.sharedManager</div>
+<div class="difference"><span class="status added">Added</span> SDImageCodersManager.coders</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCodersManager addCoder:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageCodersManager removeCoder:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageFrame.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageFrame</div>
+<div class="difference"><span class="status added">Added</span> SDImageFrame.image</div>
+<div class="difference"><span class="status added">Added</span> SDImageFrame.duration</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageFrame frameWithImage:duration:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageGIFCoder.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageGIFCoder</div>
+<div class="difference"><span class="status added">Added</span> SDImageGIFCoder.sharedCoder</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageIOCoder.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageIOCoder</div>
+<div class="difference"><span class="status added">Added</span> SDImageIOCoder.sharedCoder</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageLoader.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageLoaderProgressBlock</div>
+<div class="difference"><span class="status added">Added</span> SDImageLoaderCompletedBlock</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextLoaderCachedImage</div>
+<div class="difference"><span class="status added">Added</span> SDImageLoaderDecodeImageData()</div>
+<div class="difference"><span class="status added">Added</span> SDImageLoaderDecodeProgressiveImageData()</div>
+<div class="difference"><span class="status added">Added</span> SDImageLoader</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageLoader canLoadWithURL:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageLoader loadImageWithURL:options:context:progress:completed:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageLoadersManager.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageLoadersManager</div>
+<div class="difference"><span class="status added">Added</span> SDImageLoadersManager.sharedManager</div>
+<div class="difference"><span class="status added">Added</span> SDImageLoadersManager.loaders</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageLoadersManager addLoader:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageLoadersManager removeLoader:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDImageTransformer.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDTransformedKeyForKey()</div>
+<div class="difference"><span class="status added">Added</span> SDImageTransformer</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageTransformer transformerKey]</div>
+<div class="difference"><span class="status added">Added</span> -[SDImageTransformer transformedImageWithImage:forKey:]</div>
+<div class="difference"><span class="status added">Added</span> SDImagePipelineTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImagePipelineTransformer.transformers</div>
+<div class="difference"><span class="status added">Added</span> +[SDImagePipelineTransformer transformerWithTransformers:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageRoundCornerTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageRoundCornerTransformer.cornerRadius</div>
+<div class="difference"><span class="status added">Added</span> SDImageRoundCornerTransformer.corners</div>
+<div class="difference"><span class="status added">Added</span> SDImageRoundCornerTransformer.borderWidth</div>
+<div class="difference"><span class="status added">Added</span> SDImageRoundCornerTransformer.borderColor</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageRoundCornerTransformer transformerWithRadius:corners:borderWidth:borderColor:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageResizingTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageResizingTransformer.size</div>
+<div class="difference"><span class="status added">Added</span> SDImageResizingTransformer.scaleMode</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageResizingTransformer transformerWithSize:scaleMode:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageCroppingTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageCroppingTransformer.rect</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageCroppingTransformer transformerWithRect:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageFlippingTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageFlippingTransformer.horizontal</div>
+<div class="difference"><span class="status added">Added</span> SDImageFlippingTransformer.vertical</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageFlippingTransformer transformerWithHorizontal:vertical:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageRotationTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageRotationTransformer.angle</div>
+<div class="difference"><span class="status added">Added</span> SDImageRotationTransformer.fitSize</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageRotationTransformer transformerWithAngle:fitSize:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageTintTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageTintTransformer.tintColor</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageTintTransformer transformerWithColor:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageBlurTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageBlurTransformer.blurRadius</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageBlurTransformer transformerWithRadius:]</div>
+<div class="difference"><span class="status added">Added</span> SDImageFilterTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDImageFilterTransformer.filter</div>
+<div class="difference"><span class="status added">Added</span> +[SDImageFilterTransformer transformerWithFilter:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDMemoryCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDMemoryCacheCostForImage()</div>
+<div class="difference"><span class="status added">Added</span> SDMemoryCache</div>
+<div class="difference"><span class="status added">Added</span> -[SDMemoryCache initWithConfig:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDMemoryCache objectForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDMemoryCache setObject:forKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDMemoryCache setObject:forKey:cost:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDMemoryCache removeObjectForKey:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDMemoryCache removeAllObjects]</div>
+<div class="difference"><span class="status added">Added</span> SDMemoryCache</div>
+<div class="difference"><span class="status added">Added</span> SDMemoryCache.config</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageCacheKeyFilter.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageCacheKeyFilter</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageCacheKeyFilter cacheKeyForURL:]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageCacheKeyFilter</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageCacheKeyFilter initWithBlock:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDWebImageCacheKeyFilter cacheKeyFilterWithBlock:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> SDWebImageCacheKeyFilterBlock</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">typedef NSString * _Nullable (^SDWebImageCacheKeyFilterBlock)(NSURL * _Nullable url)</td></tr>
+<tr><th>To</th><td class="declaration">typedef NSString * _Nullable (^SDWebImageCacheKeyFilterBlock)(NSURL * _Nonnull url)</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageCacheSerializer.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageCacheSerializer</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageCacheSerializer cacheDataWithImage:originalData:imageURL:]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageCacheSerializer</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageCacheSerializer initWithBlock:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDWebImageCacheSerializer cacheSerializerWithBlock:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageCoder.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCoderScaleDownLargeImagesKey</div>
+<div class="difference"><span class="status removed">Removed</span> SDCGColorSpaceGetDeviceRGB()</div>
+<div class="difference"><span class="status removed">Removed</span> SDCGImageRefContainsAlpha()</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCoder</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageCoder canDecodeFromData:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageCoder decodedImageWithData:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageCoder decompressedImageWithImage:data:options:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageCoder canEncodeToFormat:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageCoder encodedDataWithImage:format:]</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageProgressiveCoder</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageProgressiveCoder canIncrementallyDecodeFromData:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageProgressiveCoder incrementallyDecodedImageWithData:finished:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageCoderHelper.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCoderHelper</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageCoderHelper animatedImageWithFrames:]</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageCoderHelper framesFromAnimatedImage:]</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageCoderHelper imageOrientationFromEXIFOrientation:]</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageCoderHelper exifOrientationFromImageOrientation:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageCodersManager.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCodersManager</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageCodersManager sharedInstance]</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCodersManager.coders</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageCodersManager addCoder:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageCodersManager removeCoder:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageCompat.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> #def dispatch_queue_async_safe</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageDefine.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageContextOption</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContext</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageMutableContext</div>
+<div class="difference"><span class="status added">Added</span> SDImageScaleFactorForKey()</div>
+<div class="difference"><span class="status added">Added</span> SDScaledImageForScaleFactor()</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageProgressiveLoad</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageQueryMemoryData</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageQueryMemoryDataSync</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageQueryDiskDataSync</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageFromLoaderOnly</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageAvoidDecodeImage</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDecodeFirstFrameOnly</div>
+<div class="difference"><span class="status added">Added</span> SDWebImagePreloadAllFrames</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextSetImageOperationKey</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextSetImageGroup</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextCustomManager</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextImageTransformer</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextImageScaleFactor</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextStoreCacheType</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextAnimatedImageClass</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextDownloadRequestModifier</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextCacheKeyFilter</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageContextCacheSerializer</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> SDScaledImageForKey()</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">UIImage *SDScaledImageForKey(NSString *key, UIImage *image)</td></tr>
+<tr><th>To</th><td class="declaration">UIImage * _Nullable SDScaledImageForKey(NSString * _Nullable key, UIImage * _Nullable image)</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageDownloader.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloaderProgressiveDownload</div>
+<div class="difference"><span class="status removed">Removed</span> SDHTTPHeadersDictionary</div>
+<div class="difference"><span class="status removed">Removed</span> SDHTTPHeadersMutableDictionary</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloaderHeadersFilterBlock</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloadToken.downloadOperationCancelToken</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.shouldDecompressImages</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.maxConcurrentDownloads</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.downloadTimeout</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.executionOrder</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.urlCredential</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.username</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.password</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloader.headersFilter</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloader initWithSessionConfiguration:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloader setOperationClass:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloader cancel:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloader createNewSessionWithConfiguration:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderProgressiveLoad</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderAvoidDecodeImage</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderDecodeFirstFrameOnly</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderPreloadAllFrames</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloadToken cancel]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloadToken.request</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloadToken.response</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloader.config</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloader.requestModifier</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloader initWithConfig:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloader downloadImageWithURL:options:context:progress:completed:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> SDWebImageDownloaderProgressBlock</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">typedef void (^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL)</td></tr>
+<tr><th>To</th><td class="declaration">typedef SDWebImageDownloaderProgressBlock SDWebImageDownloaderProgressBlock</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageDownloaderCompletedBlock</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">typedef void (^SDWebImageDownloaderCompletedBlock)(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished)</td></tr>
+<tr><th>To</th><td class="declaration">typedef SDWebImageDownloaderCompletedBlock SDWebImageDownloaderCompletedBlock</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageDownloadToken.url</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, strong, nullable) NSURL *url</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, strong, nullable) NSURL *url</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageDownloader</div>
+<table>
+<tr><th></th><th>Protocols</th></tr>
+<tr><th>From</th><td><em>none</em></td></tr>
+<tr><th>To</th><td>SDImageLoader</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDWebImageDownloader setSuspended:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)setSuspended:(BOOL)suspended</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, assign, getter=isSuspended) BOOL suspended</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageDownloader.currentDownloadCount</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, readonly) NSUInteger currentDownloadCount</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, assign) NSUInteger currentDownloadCount</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> +[SDWebImageDownloader sharedDownloader]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">+ (nonnull instancetype)sharedDownloader</td></tr>
+<tr><th>To</th><td class="declaration">@property (class, nonatomic, readonly, nonnull) SDWebImageDownloader *sharedDownloader</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageDownloaderConfig.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.defaultDownloaderConfig</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.maxConcurrentDownloads</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.downloadTimeout</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.sessionConfiguration</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.operationClass</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.executionOrder</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.urlCredential</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.username</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderConfig.password</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageDownloaderOperation.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloaderOperationInterface</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloaderOperationInterface initWithRequest:inSession:options:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloaderOperationInterface addHandlersForProgress:completed:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloaderOperationInterface shouldDecompressImages]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloaderOperationInterface setShouldDecompressImages:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloaderOperationInterface credential]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloaderOperationInterface setCredential:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageDownloaderOperationInterface cancel:]</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloaderOperation.shouldDecompressImages</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloaderOperation.shouldUseCredentialStorage</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageDownloaderOperation.expectedSize</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderOperation</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation initWithRequest:inSession:options:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation initWithRequest:inSession:options:context:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation addHandlersForProgress:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation credential]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation setCredential:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation cancel:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation request]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation response]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation dataTask]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderOperation.context</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderOperation initWithRequest:inSession:options:context:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> SDWebImageDownloaderOperation</div>
+<table>
+<tr><th></th><th>Protocols</th></tr>
+<tr><th>From</th><td>NSURLSessionDataDelegate, NSURLSessionTaskDelegate, SDWebImageDownloaderOperationInterface, SDWebImageOperation</td></tr>
+<tr><th>To</th><td>SDWebImageDownloaderOperation</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageDownloaderOperation.response</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, strong, nullable) NSURLResponse *response</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, strong, nullable) NSURLResponse *response</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageDownloaderRequestModifier.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderRequestModifierBlock</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderRequestModifier</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderRequestModifier modifiedRequestWithRequest:]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageDownloaderRequestModifier</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageDownloaderRequestModifier initWithBlock:]</div>
+<div class="difference"><span class="status added">Added</span> +[SDWebImageDownloaderRequestModifier requestModifierWithBlock:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageError.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageErrorDownloadStatusCodeKey</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageError</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageErrorInvalidURL</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageErrorBadImageData</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageErrorCacheNotModified</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageErrorInvalidDownloadOperation</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageErrorInvalidDownloadStatusCode</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> SDWebImageErrorDomain</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">NSString *const SDWebImageErrorDomain</td></tr>
+<tr><th>To</th><td class="declaration">NSErrorDomain  _Nonnull const SDWebImageErrorDomain</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageFrame.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageFrame</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageFrame.image</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageFrame.duration</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageFrame frameWithImage:duration:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageGIFCoder.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageGIFCoder</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageGIFCoder sharedCoder]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageImageIOCoder.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageImageIOCoder</div>
+<div class="difference"><span class="status removed">Removed</span> +[SDWebImageImageIOCoder sharedCoder]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageIndicator.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageIndicator</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageIndicator indicatorView]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageIndicator startAnimatingIndicator]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageIndicator stopAnimatingIndicator]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageIndicator updateIndicatorProgress:]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageActivityIndicator</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageActivityIndicator.indicatorView</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageActivityIndicator.grayIndicator</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageActivityIndicator.grayLargeIndicator</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageActivityIndicator.whiteIndicator</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageActivityIndicator.whiteLargeIndicator</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageProgressIndicator</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageProgressIndicator.indicatorView</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageProgressIndicator.defaultIndicator</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageProgressIndicator.barIndicator</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageManager.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageCacheMemoryOnly</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageProgressiveDownload</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageQueryDataWhenInMemory</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageQueryDiskSync</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageManagerDelegate imageManager:transformDownloadedImage:withURL:]</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageManager.imageDownloader</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageManager initWithCache:downloader:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageManager saveImageToCache:forURL:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageManager cachedImageExistsForURL:completion:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[SDWebImageManager diskImageExistsForURL:completion:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImageCombinedOperation</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageCombinedOperation cancel]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageCombinedOperation.cacheOperation</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageCombinedOperation.loaderOperation</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageManager.imageLoader</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageManager.transformer</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageManager.defaultImageCache</div>
+<div class="difference"><span class="status added">Added</span> SDWebImageManager.defaultImageLoader</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageManager initWithCache:loader:]</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImageManager loadImageWithURL:options:context:progress:completed:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> -[SDWebImageManagerDelegate imageManager:shouldDownloadImageForURL:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldDownloadImageForURL:(nullable NSURL *)imageURL</td></tr>
+<tr><th>To</th><td class="declaration">- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldDownloadImageForURL:(nonnull NSURL *)imageURL</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageManager.imageCache</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, readonly, strong, nullable) SDImageCache *imageCache</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, strong, nonnull) id&lt;SDImageCache&gt; imageCache</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageManager.cacheKeyFilter</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, copy, nullable) SDWebImageCacheKeyFilterBlock cacheKeyFilter</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, strong, nullable) id&lt;SDWebImageCacheKeyFilter&gt; cacheKeyFilter</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> SDWebImageManager.cacheSerializer</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">@property (nonatomic, copy, nullable) SDWebImageCacheSerializerBlock cacheSerializer</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, strong, nullable) id&lt;SDWebImageCacheSerializer&gt; cacheSerializer</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDWebImageManager isRunning]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (BOOL)isRunning</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, assign, getter=isRunning) BOOL running</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> +[SDWebImageManager sharedManager]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">+ (nonnull instancetype)sharedManager</td></tr>
+<tr><th>To</th><td class="declaration">@property (class, nonatomic, readonly, nonnull) SDWebImageManager *sharedManager</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDWebImageManager loadImageWithURL:options:progress:completed:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (nullable id&lt;SDWebImageOperation&gt;)loadImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock completed:(nullable SDInternalCompletionBlock)completedBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (nullable SDWebImageCombinedOperation *)loadImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nonnull SDInternalCompletionBlock)completedBlock</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImageOperation.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> NSOperation (SDWebImageOperation)</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">SDWebImagePrefetcher.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImagePrefetcher.maxConcurrentDownloads</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImagePrefetcher.prefetcherQueue</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDWebImagePrefetchToken</div>
+<div class="difference"><span class="status added">Added</span> -[SDWebImagePrefetchToken cancel]</div>
+<div class="difference"><span class="status added">Added</span> SDWebImagePrefetchToken.urls</div>
+<div class="difference"><span class="status added">Added</span> SDWebImagePrefetcher.context</div>
+<div class="difference"><span class="status added">Added</span> SDWebImagePrefetcher.delegateQueue</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> +[SDWebImagePrefetcher sharedImagePrefetcher]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">+ (nonnull instancetype)sharedImagePrefetcher</td></tr>
+<tr><th>To</th><td class="declaration">@property (class, nonatomic, readonly, nonnull) SDWebImagePrefetcher *sharedImagePrefetcher</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDWebImagePrefetcher prefetchURLs:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)prefetchURLs:(nullable NSArray&lt;NSURL *&gt; *)urls</td></tr>
+<tr><th>To</th><td class="declaration">- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray&lt;NSURL *&gt; *)urls</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[SDWebImagePrefetcher prefetchURLs:progress:completed:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)prefetchURLs:(nullable NSArray&lt;NSURL *&gt; *)urls progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray&lt;NSURL *&gt; *)urls progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIButton+WebCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> -[UIButton sd_setImageWithURL:forState:placeholderImage:options:context:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIButton sd_setImageWithURL:forState:placeholderImage:options:progress:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIButton sd_setImageWithURL:forState:placeholderImage:options:context:progress:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIButton sd_setBackgroundImageWithURL:forState:placeholderImage:options:context:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIButton sd_setBackgroundImageWithURL:forState:placeholderImage:options:progress:completed:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIButton sd_setBackgroundImageWithURL:forState:placeholderImage:options:context:progress:completed:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> -[UIButton sd_currentImageURL]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (nullable NSURL *)sd_currentImageURL</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, strong, nullable) NSURL *sd_currentImageURL</td></tr>
+</table>
+<br>
+<div class="difference"><span class="status modified">Modified</span> -[UIButton sd_currentBackgroundImageURL]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (nullable NSURL *)sd_currentBackgroundImageURL</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, strong, nullable) NSURL *sd_currentBackgroundImageURL</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIImage+ForceDecode.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> +[UIImage decodedImageWithImage:]</div>
+<div class="difference"><span class="status removed">Removed</span> +[UIImage decodedAndScaledDownImageWithImage:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> UIImage.sd_isDecoded</div>
+<div class="difference"><span class="status added">Added</span> +[UIImage sd_decodedImageWithImage:]</div>
+<div class="difference"><span class="status added">Added</span> +[UIImage sd_decodedAndScaledDownImageWithImage:]</div>
+<div class="difference"><span class="status added">Added</span> +[UIImage sd_decodedAndScaledDownImageWithImage:limitBytes:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIImage+GIF.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> +[UIImage sd_animatedGIFWithData:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIImage isGIF]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> +[UIImage sd_imageWithGIFData:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIImage+Metadata.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> UIImage (Metadata)</div>
+<div class="difference"><span class="status added">Added</span> UIImage.sd_isAnimated</div>
+<div class="difference"><span class="status added">Added</span> UIImage.sd_isIncremental</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIImage+MultiFormat.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> +[UIImage sd_imageWithData:scale:]</div>
+<div class="difference"><span class="status added">Added</span> +[UIImage sd_imageWithData:scale:firstFrameOnly:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_imageDataAsFormat:compressionQuality:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_imageDataAsFormat:compressionQuality:firstFrameOnly:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIImage+Transform.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> SDImageScaleMode</div>
+<div class="difference"><span class="status added">Added</span> SDImageScaleModeFill</div>
+<div class="difference"><span class="status added">Added</span> SDImageScaleModeAspectFit</div>
+<div class="difference"><span class="status added">Added</span> SDImageScaleModeAspectFill</div>
+<div class="difference"><span class="status added">Added</span> SDRectCorner</div>
+<div class="difference"><span class="status added">Added</span> UIImage (Transform)</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_resizedImageWithSize:scaleMode:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_croppedImageWithRect:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_roundedCornerImageWithRadius:corners:borderWidth:borderColor:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_rotatedImageWithAngle:fitSize:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_flippedImageWithHorizontal:vertical:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_tintedImageWithColor:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_colorAtPoint:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_colorsWithRect:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_blurredImageWithRadius:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImage sd_filteredImageWithFilter:]</div>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIImageView+HighlightedWebCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> -[UIImageView sd_setHighlightedImageWithURL:options:context:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImageView sd_setHighlightedImageWithURL:options:context:progress:completed:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> -[UIImageView sd_setHighlightedImageWithURL:options:progress:completed:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIImageView+WebCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> -[UIImageView sd_setImageWithPreviousCachedImageWithURL:placeholderImage:options:progress:completed:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> -[UIImageView sd_setImageWithURL:placeholderImage:options:context:]</div>
+<div class="difference"><span class="status added">Added</span> -[UIImageView sd_setImageWithURL:placeholderImage:options:context:progress:completed:]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> -[UIImageView sd_setImageWithURL:placeholderImage:options:progress:completed:]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock</td></tr>
+<tr><th>To</th><td class="declaration">- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIView+WebCache.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status removed">Removed</span> SDWebImageInternalSetImageGroupKey</div>
+<div class="difference"><span class="status removed">Removed</span> SDWebImageExternalCustomManagerKey</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIView sd_internalSetImageWithURL:placeholderImage:options:operationKey:setImageBlock:progress:completed:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIView sd_internalSetImageWithURL:placeholderImage:options:operationKey:setImageBlock:progress:completed:context:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIView sd_setShowActivityIndicatorView:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIView sd_setIndicatorStyle:]</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIView sd_showActivityIndicatorView]</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIView sd_addActivityIndicator]</div>
+<div class="difference"><span class="status removed">Removed</span> -[UIView sd_removeActivityIndicator]</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> -[UIView sd_internalSetImageWithURL:placeholderImage:options:context:setImageBlock:progress:completed:]</div>
+<div class="difference"><span class="status added">Added</span> UIView.sd_imageIndicator</div>
+</div>
+
+
+<div class="differenceGroup">
+<div class="difference"><span class="status modified">Modified</span> -[UIView sd_imageURL]</div>
+<table>
+<tr><th></th><th>Declaration</th></tr>
+<tr><th>From</th><td class="declaration">- (nullable NSURL *)sd_imageURL</td></tr>
+<tr><th>To</th><td class="declaration">@property (nonatomic, readonly, strong, nullable) NSURL *sd_imageURL</td></tr>
+</table>
+<br>
+</div>
+
+</div>
+
+<div class="headerFile">
+<div class="headerName">UIView+WebCacheOperation.h</div>
+
+<div class="differenceGroup">
+<div class="difference"><span class="status added">Added</span> -[UIView sd_imageLoadOperationForKey:]</div>
+</div>
+
+</div>
+</body>
+</html>

+ 219 - 0
Docs/SDWebImage-5.0-Migration-guide.md

@@ -0,0 +1,219 @@
+## SDWebImage 5.0 Migration Guide
+
+SDWebImage 5.0 is the latest major release of SDWebImage, a top library for downloading and caching images.
+As a major release, following [Semantic Versioning](http://semver.org/) conventions, 5.0 introduces several API-breaking changes with its new architecture.
+
+This guide is provided in order to ease the transition of existing applications using SDWebImage 4.X to the latest APIs, as well as explain the design and structure of new and changed functionality.
+
+### Requirements: iOS 8, Mac OS X 10.10, watchOS 2, tvOS 9, Xcode 9
+
+SDWebImage 5.0 officially supports iOS 8 and later, Mac OS X 10.10 and later, watchOS 2 and later and tvOS 9 and later.
+It needs Xcode 9 or later to be able to build everything properly.
+
+For targeting previous versions of the SDKs, check [README - Backwards compatibility](https://github.com/rs/SDWebImage#backwards-compatibility).
+
+### Migration
+
+Using the view categories brings no change from 4.x to 5.0. 
+
+Objective-C:
+
+```objective-c
+[imageView sd_setImageWithURL:url placeholderImage:placeholderImage];
+```
+
+Swift:
+
+```swift
+imageView.sd_setImage(with: url, placeholderImage: placeholder)
+```
+
+However, all view categories in 5.0 introduce a new extra arg called `SDWebImageContext`. This param can hold anything, as oposed to the previous `SDWebImageOptions` enum limitations. This gives developers advanced control for the behavior of image loading (cache, loader, etc). See the declaration for `SDWebImageContext` for detailed information.
+
+### New Feature
+
+#### Animated Image View
+
+In 5.0, we introduced a brand new mechanism for supporting animated images. This includes animated image loading, rendering, decoding, and also supports customizations (for advanced users).
+
+This animated image solution is available for `iOS`/`tvOS`/`macOS`. The `SDAnimatedImage` is subclass of `UIImage/NSImage`, and `SDAnimatedImageView` is subclass of `UIImageView/NSImageView`, to make them compatible with the common frameworks APIs. See [Animated Image](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#animated-image-50) for more detailed information.
+
+#### Transformer
+
+In 5.0, we introduced an easy way to hook an image transformation process after the image was downloaded from network. This allows the user to easily scale, rotate, add rounded corner the original image and even chain a list of transformations. These transformed images will also be stored to the cache as they are after transformation. The reasons for this decision are: avoiding redoing the transformations (which can lead to unwanted behavior) and also time saving. See [Image Transformer](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#transformer-50) for more detailed information.
+
+#### Customization
+
+In 5.0, we refactored our framework architecture in many aspects. This makes our framework easier to customize for advanced users, without the need for hooking anything or forking. We introduced [Custom Cache](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#custom-cache-50) to control detailed cache loading behavior, and separate the memory cache & disk cache implementation. We introduced [Custom Loader](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#custom-loader-50) to allow custom loading from your own source (doesn't have to be the network). And also, we changed the current [Custom Coder](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#custom-coder-420) to work better for custom image decoder/encoder and animated images.
+
+#### View Indicator
+In 5.0, we refactored the image loading indicator API into a better and extensible API for `iOS`/`tvOS`/`macOS`. This is suitable for easy usage like providing a loading view during the image loading process. See [View Indicator](https://github.com/rs/SDWebImage/wiki/How-to-use#use-view-indicator-50) for more detailed information.
+
+#### FLAnimatedImage support moved to a dedicated plugin repo
+
+In order to clean up things and make our core project do less things, we decided that the `FLAnimatedImage` integration does not belong here. From 5.0, this will still be available, but under a dedicated repo [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin).
+
+#### Photos Plugin
+
+By taking the advantage of the [Custom Loader](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#custom-loader-50) feature, we introduced a plugin to allow easy loading images from the Photos Library. See [SDWebImagePhotosPlugin](https://github.com/SDWebImage/SDWebImagePhotosPlugin) for more detailed information.
+
+
+### API Changes
+
+#### SDImageCache
+
+- moved `maxMemoryCost` and `maxMemoryCountLimit` to `SDImageCacheConfig`
+- `makeDiskCachePath:` removed, use `NSSearchPathForDirectoriesInDomains` with NSString's Path API instead.
+- `addReadOnlyCachePath:` removed, use `additionalCachePathBlock` instead
+- `cachePathForKey:inPath:` removed, use `cachePathForKey:` with NSString's path API instead.
+- `defaultCachePathForKey:` removed, use `cachePathForKey:` instead
+- `SDCacheQueryCompletedBlock` renamed to `SDImageCacheQueryCompletionBlock`
+- `SDWebImageCheckCacheCompletionBlock` renamed to `SDImageCacheCheckCompletionBlock`
+- `SDWebImageCalculateSizeBlock` renamed to `SDImageCacheCalculateSizeBlock`
+
+#### SDImageCacheConfig
+
+- `shouldDecompressImages` removed. Use  `SDImageCacheAvoidDecodeImage` in cache options instead
+
+#### SDWebImageManager
+
+- `loadImageWithURL:options:progress:completed:` changed the `completed` param requirement from `nullable` to `nonnull`
+- `loadImageWithURL:options:progress:completed:` return type `id<SDWebImageOperation>` changed to `SDWebImageCombinedOperation *`
+- `imageCache` changed from nullable to nonnull. And property type changed from `SDImageCache *` to `id<SDImageCache>`. The default value does not change.
+- `imageDownloader` renamed to `imageLoader` and changed from nullable to nonnull. And property type changed from `SDWebImageDownloader *` to `id<SDImageLoader>`. The default value does not change.
+- `cacheKeyFilter` property type changed to `id<SDWebImageCacheKeyFilter>`, you can use `+[SDWebImageCacheKeyFilter cacheKeyFilterWithBlock:]` to create
+- `cacheSerializer` property type changed to `id<SDWebImageCacheSerializer>`, you can use `+[SDWebImageCacheSerializer cacheSerializerWithBlock:]` to create
+- `SDWebImageCacheKeyFilterBlock`'s `url` arg change from nullable to nonnull
+- `initWithCache:downloader:` 's `cache` arg type changed from `SDImageCache *` to `id<SDImageCache>`
+- `initWithCache:downloader` renamed to `initWithCache:loader:` 
+- `saveImageToCache:forURL:` removed. Use `SDImageCache storeImage:imageData:forKey:cacheType:completion:` (or `SDImageCache storeImage:forKey:toDisk:completion:` if you use default cache class) with `cacheKeyForURL:` instead.
+- `diskImageExistsForURL:completion:` removed. Use `SDImageCache containsImageForKey:cacheType:completion:` (or `SDImageCache diskImageExistsWithKey:completion:` if you use default cache class) with `cacheKeyForURL:` instead.
+- `cachedImageExistsForURL:completion` removed. Use `SDImageCache containsImageForKey:cacheType:completion:` (or `SDImageCache diskImageExistsWithKey:completion:` and `SDImageCache imageFromMemoryCacheForKey:` if you use default cache class) with `cacheKeyForURL:` instead.
+
+#### SDWebImageManagerDelegate
+
+- removed `imageManager:transformDownloadedImage:forKey:`, use `SDImageTransformer` with context option instead
+
+#### UIView and subclasses (UIImageView, UIButton, ...)
+
+- `sd_internalSetImageWithURL:placeholderImage:options:operationKey:setImageBlock:progress:completed:` renamed to `UIView sd_internalSetImageWithURL:placeholderImage:options:context:setImageBlock:progress:completed:` (The biggest changes is that the completion block type from `SDExternalCompletionBlock` to `SDInternalCompletionBlock`. Which allow advanced user to get more information of image loading process) 
+- `sd_internalSetImageWithURL:placeholderImage:options:operationKey:setImageBlock:progress:completed:context:` removed
+- activity indicator refactoring - use `sd_imageIndicator` with `SDWebImageActivityIndicator`
+  - `sd_setShowActivityIndicatorView:` removed 
+  - `sd_setIndicatorStyle:` removed
+  - `sd_showActivityIndicatorView` removed
+  - `sd_addActivityIndicator:` removed
+  - `sd_removeActivityIndicator:` removed
+
+#### UIImage
+
+- Renamed `isGIF` to `sd_isAnimated`, also `NSImage isGIF` renamed to `NSImage sd_isAnimated`
+- Renamed `decodedImageWithImage:` to `sd_decodedImageWithImage:`
+- Renamed `decodedAndScaledDownImageWithImage:` to `sd_decodedAndScaledDownImageWithImage:`
+- Renamed `sd_animatedGIFWithData` to `sd_imageWithGIFData:`
+- Removed `sd_webpLoopCount`
+
+#### UIImageView
+
+- Removed `sd_setImageWithPreviousCachedImageWithURL:placeholderImage:options:progress:completed`
+
+#### SDWebImageDownloader
+
+- `shouldDecompressImages` moved to `SDWebImageDownloaderConfig.shouldDecompressImages`
+- `maxConcurrentDownloads` moved to `SDWebImageDownloaderConfig.maxConcurrentDownloads`
+- `downloadTimeout` moved to `SDWebImageDownloaderConfig.downloadTimeout`
+- `operationClass` moved to `SDWebImageDownloaderConfig.operationClass`
+- `executionOrder` moved to `SDWebImageDownloaderConfig.executionOrder`
+- `urlCredential` moved to `SDWebImageDownloaderConfig.urlCredential`
+- `username` moved to `SDWebImageDownloaderConfig.username`
+- `password` moved to `SDWebImageDownloaderConfig.password`
+- `initWithSessionConfiguration:` removed, use `initWithConfig:` with session configuration instead
+- `createNewSessionWithConfiguration:` removed, use `initWithConfig:` with new session configuration instead. To modify shared downloader configuration, provide custom `SDWebImageDownloaderConfig.defaultDownloaderConfig` before it created.
+- `headersFilter` removed, use `requestModifier` instead
+- `cancel:` removed, use `-[SDWebImageDownloadToken cancel]` instead
+- `shouldDecompressImages` removed. Use `SDWebImageDownloaderAvoidDecodeImage` in downloader options instead
+- use `SDWebImageLoaderProgressBlock` instead of `SDWebImageDownloaderProgressBlock`
+- use `SDWebImageLoaderCompletedBlock` instead of `SDWebImageDownloaderCompletedBlock`
+
+#### SDWebImageDownloaderOperation
+
+- `initWithRequest:inSession:options:context:` is now the designated initializer
+- Removed `shouldUseCredentialStorage` property
+- `SDWebImageDownloadOperationInterface` protocol renamed to `SDWebImageDownloadOperation`
+- `expectedSize` removed, use `response.expectedContentLength` instead
+- `shouldDecompressImages` removed. Use `SDWebImageDownloaderAvoidDecodeImage` in downloader options instead.
+- `response` property change to readonly
+
+#### SDWebImagePrefetcher
+
+- `prefetchURLs:` and `prefetchURLs:progress:completed:` return types changed from `void` to `SDWebImagePrefetchToken`
+- `prefetcherQueue` property renamed to `delegateQueue`
+- `maxConcurrentDownloads` property removed, use `SDWebImageManager.downloader` config instead
+
+#### SDImageCoder
+- `SDCGColorSpaceGetDeviceRGB()` moved to `+[SDImageCoderHelper colorSpaceGetDeviceRGB]` 
+- `SDCGImageRefContainsAlpha()`, moved to `+[SDImageCoderHelper imageRefContainsAlpha:]`
+- `decodedImageWithData:` replaced with `decodedImageWithData:options:`
+- `encodedDataWithImage:format:` replaced with `encodedDataWithImage:format:options`
+- `init` method from `SDWebImageProgressiveCoder` changed to `initIncrementalWithOptions:`
+- `incrementalDecodedImageWithData:finished` replaced with `updateIncrementalData:finished` and `incrementalDecodedImageWithOptions:` two APIs
+- removed `decompressedImage:data:options`, use `+[SDImageCoderHelper decodedImageWithImage:]` and `+[SDImageCoderHelper decodedAndScaledDownImageWithImage:limitBytes:]` instead
+
+#### Constants
+
+- `SDWebImageInternalSetImageGroupKey` renamed to `SDWebImageContextSetImageGroup`
+- `SDWebImageExternalCustomManagerKey` renamed to `SDWebImageContextCustomManager`
+
+#### Swift Specific API Change
+In SDWebImage 5.0 we did a clean up of the API. We are using many modern Objective-C declarations to generate the Swift API. We now provide full nullability support, string enum, class property, and even custom Swift API name, all to make the framework easier to use for our Swift users. Here are the API change specify for Swift. 
+
+##### UIView+WebCache
+- `sd_imageURL()` changed to `sd_imageURL`
+
+##### SDImageCache
+- `shared()` changed to `shared`
+
+##### SDWebImageManager
+- `shared()` changed to `shared`
+- `isRunning()` changed to `isRunning`
+
+##### SDWebImageDownloader
+- `shared()` changed to `shared`
+- `setOperationClass(_:)` available for Swift user with `operationClass` property
+- `setSuspended(_:)` changed to `isSuspended` property
+
+##### SDWebImageDownloadOperation
+- `SDWebImageDownloadOperationInterface` protocol renamed to `SDWebImageDownloadOperationProtocol`. 
+
+##### SDImageCodersManager
+
+- `sharedInstance()` changed to `shared`
+
+##### SDImageIOCoder
+
+- `shared()` changed to `shared`
+
+##### SDImageGIFCoder
+
+- `shared()` changed to `shared`
+
+##### SDImageWebPCoder
+
+- `shared()` changed to `shared`
+
+##### NSData-ImageContentType
+
+- `sd_UTTypeFromSDImageFormat` return `CFString` instead of `Unmanaged<CFString>`
+
+##### UIButton-WebCache
+
+- `sd_currentImageURL()` changed to `sd_currentImageURL`
+  
+##### NSButton-WebCache
+
+- `sd_currentImageURL()` changed to `sd_currentImageURL`
+- `sd_currentAlternateImageURL()` changed to `sd_currentAlternateImageURL`
+
+### Full API Diff
+For advanced user who need the detailed API diff, we provide the full diff in a HTML web page: [SDWebImage 5.0 API Diff](https://raw.githubusercontent.com/rs/SDWebImage/master/Docs/Diff/5.0/apidiff.html)
+

+ 2 - 2
Docs/SDWebImage.mdj

@@ -20261,7 +20261,7 @@
 									"_parent": {
 									"_parent": {
 										"$ref": "AAAAAAFUkhyNUo23oFw="
 										"$ref": "AAAAAAFUkhyNUo23oFw="
 									},
 									},
-									"name": "SDWebImageProgressiveDownload",
+									"name": "SDWebImageProgressiveLoad",
 									"visibility": "public"
 									"visibility": "public"
 								},
 								},
 								{
 								{
@@ -22759,4 +22759,4 @@
 			"visibility": "public"
 			"visibility": "public"
 		}
 		}
 	]
 	]
-}
+}

+ 2 - 1
README.md

@@ -41,7 +41,7 @@ This library provides an async image downloader with cache support. For convenie
 
 
 #### Backwards compatibility
 #### Backwards compatibility
 
 
-- For iOS 7 and macOS 10.9, use [any 4.x version up to 4.3.3](https://github.com/rs/SDWebImage/releases/tag/4.3.3)
+- For iOS 7, macOS 10.9 or Xcode < 8, use [any 4.x version up to 4.3.3](https://github.com/rs/SDWebImage/releases/tag/4.3.3)
 - For macOS 10.8, use [any 4.x version up to 4.3.0](https://github.com/rs/SDWebImage/releases/tag/4.3.0)
 - For macOS 10.8, use [any 4.x version up to 4.3.0](https://github.com/rs/SDWebImage/releases/tag/4.3.0)
 - For iOS 5 and 6, use [any 3.x version up to 3.7.6](https://github.com/rs/SDWebImage/tag/3.7.6)
 - For iOS 5 and 6, use [any 3.x version up to 3.7.6](https://github.com/rs/SDWebImage/tag/3.7.6)
 - For iOS < 5.0, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat).
 - For iOS < 5.0, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat).
@@ -53,6 +53,7 @@ This library provides an async image downloader with cache support. For convenie
 - Read the [Documentation @ CocoaDocs](http://cocoadocs.org/docsets/SDWebImage/)
 - Read the [Documentation @ CocoaDocs](http://cocoadocs.org/docsets/SDWebImage/)
 - Try the example by downloading the project from Github or even easier using CocoaPods try `pod try SDWebImage`
 - Try the example by downloading the project from Github or even easier using CocoaPods try `pod try SDWebImage`
 - Read the [Installation Guide](https://github.com/rs/SDWebImage/wiki/Installation-Guide)
 - Read the [Installation Guide](https://github.com/rs/SDWebImage/wiki/Installation-Guide)
+- Read the [SDWebImage 5.0 Migration Guide](Docs/SDWebImage-5.0-Migration-guide.md) to get an idea of the changes from 4.x to 5.x
 - Read the [SDWebImage 4.0 Migration Guide](Docs/SDWebImage-4.0-Migration-guide.md) to get an idea of the changes from 3.x to 4.x
 - Read the [SDWebImage 4.0 Migration Guide](Docs/SDWebImage-4.0-Migration-guide.md) to get an idea of the changes from 3.x to 4.x
 - Read the [Common Problems](https://github.com/rs/SDWebImage/wiki/Common-Problems) to find the solution for common problems 
 - Read the [Common Problems](https://github.com/rs/SDWebImage/wiki/Common-Problems) to find the solution for common problems 
 - Go to the [Wiki Page](https://github.com/rs/SDWebImage/wiki) for more information such as [Advanced Usage](https://github.com/rs/SDWebImage/wiki/Advanced-Usage)
 - Go to the [Wiki Page](https://github.com/rs/SDWebImage/wiki) for more information such as [Advanced Usage](https://github.com/rs/SDWebImage/wiki/Advanced-Usage)

+ 1 - 1
SDWebImage.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
 Pod::Spec.new do |s|
   s.name = 'SDWebImage'
   s.name = 'SDWebImage'
-  s.version = '4.4.1'
+  s.version = '5.0.0-beta'
 
 
   s.osx.deployment_target = '10.10'
   s.osx.deployment_target = '10.10'
   s.ios.deployment_target = '8.0'
   s.ios.deployment_target = '8.0'

+ 2 - 2
WebImage/Info.plist

@@ -15,11 +15,11 @@
 	<key>CFBundlePackageType</key>
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
 	<key>CFBundleShortVersionString</key>
-	<string>4.4.1</string>
+	<string>5.0.0-beta</string>
 	<key>CFBundleSignature</key>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<string>????</string>
 	<key>CFBundleVersion</key>
 	<key>CFBundleVersion</key>
-	<string>4.4.1</string>
+	<string>5.0.0-beta</string>
 	<key>NSPrincipalClass</key>
 	<key>NSPrincipalClass</key>
 	<string></string>
 	<string></string>
 </dict>
 </dict>