From 49acbdf9a97f9c6f1c92cba2577eae82d73bc0e4 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Tue, 27 Feb 2018 23:12:06 +0800 Subject: [PATCH 1/4] Fix that iOS 8 NSURLSessionTaskPriorityHigh symbol not defined in Foundation framework and cause crash --- SDWebImage/SDWebImageDownloaderOperation.m | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/SDWebImage/SDWebImageDownloaderOperation.m b/SDWebImage/SDWebImageDownloaderOperation.m index 99e508ae..722645f0 100644 --- a/SDWebImage/SDWebImageDownloaderOperation.m +++ b/SDWebImage/SDWebImageDownloaderOperation.m @@ -14,6 +14,13 @@ #define LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); #define UNLOCK(lock) dispatch_semaphore_signal(lock); +// iOS 8 Foundation.framework extern these symbol but the define is in CFNetwork.framework. We just fix this without import CFNetwork.framework +#if (__IPHONE_OS_VERSION_MIN_REQUIRED && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0) +const float NSURLSessionTaskPriorityHigh = 0.75; +const float NSURLSessionTaskPriorityDefault = 0.5; +const float NSURLSessionTaskPriorityLow = 0.25; +#endif + NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; NSString *const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification"; NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification"; @@ -176,7 +183,6 @@ typedef NSMutableDictionary SDCallbacksDictionary; } if (self.dataTask) { - [self.dataTask resume]; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunguarded-availability" if ([self.dataTask respondsToSelector:@selector(setPriority:)]) { @@ -187,6 +193,7 @@ typedef NSMutableDictionary SDCallbacksDictionary; } } #pragma clang diagnostic pop + [self.dataTask resume]; for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { progressBlock(0, NSURLResponseUnknownLength, self.request.URL); } From a2eb8958aba4e51992469f704e419fd2b22fe29b Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Wed, 28 Feb 2018 00:04:56 +0800 Subject: [PATCH 2/4] Update the comments --- SDWebImage/SDWebImageDownloader.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/SDWebImage/SDWebImageDownloader.h b/SDWebImage/SDWebImageDownloader.h index 54224c5c..b5911aff 100644 --- a/SDWebImage/SDWebImageDownloader.h +++ b/SDWebImage/SDWebImageDownloader.h @@ -11,7 +11,14 @@ #import "SDWebImageOperation.h" typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { + /** + * Put the download in the low queue priority and task priority. + */ SDWebImageDownloaderLowPriority = 1 << 0, + + /** + * This flag enables progressive download, the image is displayed progressively during download as a browser would do. + */ SDWebImageDownloaderProgressiveDownload = 1 << 1, /** @@ -45,7 +52,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6, /** - * Put the image in the high priority queue. + * Put the download in the high queue priority and task priority. */ SDWebImageDownloaderHighPriority = 1 << 7, From 776ce2b85e41f23b521f435eb3821ef6ffa978d7 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Wed, 28 Feb 2018 01:09:26 +0800 Subject: [PATCH 3/4] Follow Apple's doc, add NSOperation only after all configuration done. --- SDWebImage/SDWebImageDownloader.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SDWebImage/SDWebImageDownloader.m b/SDWebImage/SDWebImageDownloader.m index 19d689f6..f775a249 100644 --- a/SDWebImage/SDWebImageDownloader.m +++ b/SDWebImage/SDWebImageDownloader.m @@ -234,8 +234,7 @@ } else if (options & SDWebImageDownloaderLowPriority) { operation.queuePriority = NSOperationQueuePriorityLow; } - - [sself.downloadQueue addOperation:operation]; + if (sself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) { // Emulate LIFO execution order by systematically adding new operations as last operation's dependency [sself.lastAddedOperation addDependency:operation]; @@ -289,6 +288,9 @@ UNLOCK(sself.operationsLock); }; [self.URLOperations setObject:operation forKey:url]; + // Add operation to operation queue only after all configuration done according to Apple's doc. + // `addOperation:` does not synchronously execute the `operation.completionBlock` so this will not cause deadlock. + [self.downloadQueue addOperation:operation]; } UNLOCK(self.operationsLock); From 5147ae5c8946883aec82cf22b04a01e9971c3511 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Wed, 28 Feb 2018 12:05:42 +0800 Subject: [PATCH 4/4] Bumped version to 4.3.2 update CHANGELOG --- CHANGELOG.md | 13 ++++++++++++- SDWebImage.podspec | 2 +- WebImage/Info.plist | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 518989e0..ea9b2ae0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,15 @@ -## [4.3.1 - 4.3.0 Patch](https://github.com/rs/SDWebImage/releases/tag/4.3.1) +## [4.3.2 - 4.3 Patch, on Feb 28th, 2018](https://github.com/rs/SDWebImage/releases/tag/4.3.2) +See [all tickets marked for the 4.3.2 release](https://github.com/rs/SDWebImage/milestone/23) + +#### Fixes +- Download Operation + - Fix that iOS 8 NSURLSessionTaskPriorityHigh symbol not defined in Foundation framework and cause crash #2231 #2230 + +#### Improvements +- Downloader + - Follow Apple's doc, add NSOperation only after all configuration done #2232 + +## [4.3.1 - 4.3 Patch, on Feb 25th, 2018](https://github.com/rs/SDWebImage/releases/tag/4.3.1) See [all tickets marked for the 4.3.1 release](https://github.com/rs/SDWebImage/milestone/22) #### Fixes diff --git a/SDWebImage.podspec b/SDWebImage.podspec index 32dd9a18..b805b502 100644 --- a/SDWebImage.podspec +++ b/SDWebImage.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'SDWebImage' - s.version = '4.3.1' + s.version = '4.3.2' s.osx.deployment_target = '10.9' s.ios.deployment_target = '7.0' diff --git a/WebImage/Info.plist b/WebImage/Info.plist index 0295c9d3..96379299 100644 --- a/WebImage/Info.plist +++ b/WebImage/Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.3.1 + 4.3.2 CFBundleSignature ???? CFBundleVersion - 4.3.1 + 4.3.2 NSPrincipalClass