Jelajahi Sumber

Merge branch 'master' into xcode11

Wei Wang 6 tahun lalu
induk
melakukan
ee8137e391

+ 8 - 2
Demo/Demo/Kingfisher-Demo/ViewControllers/ProgressiveJPEGViewController.swift

@@ -64,8 +64,14 @@ class ProgressiveJPEGViewController: UIViewController {
                 self.progressLabel.text = "\(receivedSize) / \(totalSize)"
                 self.progressLabel.text = "\(receivedSize) / \(totalSize)"
             },
             },
             completionHandler: { result in
             completionHandler: { result in
-                print(result)
-                print("Finished")
+                do {
+                    let value = try result.get()
+                    print(value)
+                    print("Finished")
+                    
+                } catch {
+                    self.progressLabel.text = error.localizedDescription
+                }
             }
             }
         )
         )
     }
     }

+ 10 - 17
Demo/Kingfisher-Demo.xcodeproj/project.pbxproj

@@ -577,30 +577,25 @@
 				TargetAttributes = {
 				TargetAttributes = {
 					4B2944541C3D03880088C3E7 = {
 					4B2944541C3D03880088C3E7 = {
 						CreatedOnToolsVersion = 7.2;
 						CreatedOnToolsVersion = 7.2;
-						DevelopmentTeam = A4YJ9MRZ66;
 						LastSwiftMigration = 0900;
 						LastSwiftMigration = 0900;
 						ProvisioningStyle = Automatic;
 						ProvisioningStyle = Automatic;
 					};
 					};
 					D13F49C11BEDA53F00CE335D = {
 					D13F49C11BEDA53F00CE335D = {
 						CreatedOnToolsVersion = 7.1;
 						CreatedOnToolsVersion = 7.1;
-						DevelopmentTeam = A4YJ9MRZ66;
 						LastSwiftMigration = 0900;
 						LastSwiftMigration = 0900;
 						ProvisioningStyle = Automatic;
 						ProvisioningStyle = Automatic;
 					};
 					};
 					D1679A381C4E78B20020FD12 = {
 					D1679A381C4E78B20020FD12 = {
 						CreatedOnToolsVersion = 7.2;
 						CreatedOnToolsVersion = 7.2;
-						DevelopmentTeam = A4YJ9MRZ66;
 						LastSwiftMigration = 0900;
 						LastSwiftMigration = 0900;
 						ProvisioningStyle = Automatic;
 						ProvisioningStyle = Automatic;
 					};
 					};
 					D1679A441C4E78B20020FD12 = {
 					D1679A441C4E78B20020FD12 = {
 						CreatedOnToolsVersion = 7.2;
 						CreatedOnToolsVersion = 7.2;
-						DevelopmentTeam = A4YJ9MRZ66;
 						LastSwiftMigration = 0920;
 						LastSwiftMigration = 0920;
 					};
 					};
 					D1ED2D0A1AD2CFA600CFC3EB = {
 					D1ED2D0A1AD2CFA600CFC3EB = {
 						CreatedOnToolsVersion = 6.2;
 						CreatedOnToolsVersion = 6.2;
-						DevelopmentTeam = A4YJ9MRZ66;
 						LastSwiftMigration = 0900;
 						LastSwiftMigration = 0900;
 					};
 					};
 					D1F7609423098F62000C5269 = {
 					D1F7609423098F62000C5269 = {
@@ -830,8 +825,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				CODE_SIGN_STYLE = Automatic;
 				COMBINE_HIDPI_IMAGES = YES;
 				COMBINE_HIDPI_IMAGES = YES;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEBUG_INFORMATION_FORMAT = dwarf;
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
-				ENABLE_HARDENED_RUNTIME = YES;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				INFOPLIST_FILE = "Demo/Kingfisher-macOS-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-macOS-Demo/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
@@ -850,8 +844,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				CODE_SIGN_STYLE = Automatic;
 				COMBINE_HIDPI_IMAGES = YES;
 				COMBINE_HIDPI_IMAGES = YES;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
-				ENABLE_HARDENED_RUNTIME = YES;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				INFOPLIST_FILE = "Demo/Kingfisher-macOS-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-macOS-Demo/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
@@ -871,7 +864,7 @@
 				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
 				CODE_SIGN_STYLE = Automatic;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEBUG_INFORMATION_FORMAT = dwarf;
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				INFOPLIST_FILE = "Demo/Kingfisher-tvOS-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-tvOS-Demo/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -891,7 +884,7 @@
 				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
 				CODE_SIGN_STYLE = Automatic;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				INFOPLIST_FILE = "Demo/Kingfisher-tvOS-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-tvOS-Demo/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -909,7 +902,7 @@
 			buildSettings = {
 			buildSettings = {
 				CLANG_ENABLE_MODULES = YES;
 				CLANG_ENABLE_MODULES = YES;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEBUG_INFORMATION_FORMAT = dwarf;
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo Extension/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo Extension/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
@@ -927,7 +920,7 @@
 			buildSettings = {
 			buildSettings = {
 				CLANG_ENABLE_MODULES = YES;
 				CLANG_ENABLE_MODULES = YES;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo Extension/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo Extension/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
@@ -949,7 +942,7 @@
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
 				CODE_SIGN_STYLE = Automatic;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEBUG_INFORMATION_FORMAT = dwarf;
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				IBSC_MODULE = Kingfisher_watchOS_Demo_Extension;
 				IBSC_MODULE = Kingfisher_watchOS_Demo_Extension;
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo/Info.plist";
@@ -972,7 +965,7 @@
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
 				CODE_SIGN_STYLE = Automatic;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				IBSC_MODULE = Kingfisher_watchOS_Demo_Extension;
 				IBSC_MODULE = Kingfisher_watchOS_Demo_Extension;
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-watchOS-Demo/Info.plist";
@@ -1104,7 +1097,7 @@
 			buildSettings = {
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_IDENTITY = "iPhone Developer";
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				INFOPLIST_FILE = "Demo/Kingfisher-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-Demo/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				PRODUCT_BUNDLE_IDENTIFIER = "com.onevcat.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_BUNDLE_IDENTIFIER = "com.onevcat.$(PRODUCT_NAME:rfc1034identifier)";
@@ -1117,7 +1110,7 @@
 			buildSettings = {
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_IDENTITY = "iPhone Developer";
-				DEVELOPMENT_TEAM = A4YJ9MRZ66;
+				DEVELOPMENT_TEAM = "";
 				INFOPLIST_FILE = "Demo/Kingfisher-Demo/Info.plist";
 				INFOPLIST_FILE = "Demo/Kingfisher-Demo/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				PRODUCT_BUNDLE_IDENTIFIER = "com.onevcat.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_BUNDLE_IDENTIFIER = "com.onevcat.$(PRODUCT_NAME:rfc1034identifier)";

+ 7 - 5
Sources/Cache/FormatIndicatedCacheSerializer.swift

@@ -72,11 +72,13 @@ public struct FormatIndicatedCacheSerializer: CacheSerializer {
     public func data(with image: KFCrossPlatformImage, original: Data?) -> Data? {
     public func data(with image: KFCrossPlatformImage, original: Data?) -> Data? {
         
         
         func imageData(withFormat imageFormat: ImageFormat) -> Data? {
         func imageData(withFormat imageFormat: ImageFormat) -> Data? {
-            switch imageFormat {
-            case .PNG: return image.kf.pngRepresentation()
-            case .JPEG: return image.kf.jpegRepresentation(compressionQuality: 1.0)
-            case .GIF: return image.kf.gifRepresentation()
-            case .unknown: return nil
+            return autoreleasepool { () -> Data? in
+                switch imageFormat {
+                case .PNG: return image.kf.pngRepresentation()
+                case .JPEG: return image.kf.jpegRepresentation(compressionQuality: 1.0)
+                case .GIF: return image.kf.gifRepresentation()
+                case .unknown: return nil
+                }
             }
             }
         }
         }
         
         

+ 2 - 0
Sources/Extensions/ImageView+Kingfisher.swift

@@ -302,6 +302,8 @@ extension KingfisherWrapper where Base: KFCrossPlatformImageView {
     public private(set) var taskIdentifier: Source.Identifier.Value? {
     public private(set) var taskIdentifier: Source.Identifier.Value? {
         get {
         get {
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &taskIdentifierKey)
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &taskIdentifierKey)
+            defer { objc_sync_exit(self) }
+            objc_sync_enter(self)
             return box?.value
             return box?.value
         }
         }
         set {
         set {

+ 4 - 0
Sources/Extensions/NSButton+Kingfisher.swift

@@ -302,6 +302,8 @@ extension KingfisherWrapper where Base: NSButton {
     public private(set) var taskIdentifier: Source.Identifier.Value? {
     public private(set) var taskIdentifier: Source.Identifier.Value? {
         get {
         get {
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &taskIdentifierKey)
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &taskIdentifierKey)
+            defer { objc_sync_exit(self) }
+            objc_sync_enter(self)
             return box?.value
             return box?.value
         }
         }
         set {
         set {
@@ -318,6 +320,8 @@ extension KingfisherWrapper where Base: NSButton {
     public private(set) var alternateTaskIdentifier: Source.Identifier.Value? {
     public private(set) var alternateTaskIdentifier: Source.Identifier.Value? {
         get {
         get {
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &alternateTaskIdentifierKey)
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &alternateTaskIdentifierKey)
+            defer { objc_sync_exit(self) }
+            objc_sync_enter(self)
             return box?.value
             return box?.value
         }
         }
         set {
         set {

+ 8 - 0
Sources/Extensions/UIButton+Kingfisher.swift

@@ -323,10 +323,14 @@ extension KingfisherWrapper where Base: UIButton {
     private typealias TaskIdentifier = Box<[UInt: Source.Identifier.Value]>
     private typealias TaskIdentifier = Box<[UInt: Source.Identifier.Value]>
     
     
     public func taskIdentifier(for state: UIControl.State) -> Source.Identifier.Value? {
     public func taskIdentifier(for state: UIControl.State) -> Source.Identifier.Value? {
+        defer { objc_sync_exit(self) }
+        objc_sync_enter(self)
         return taskIdentifierInfo.value[state.rawValue]
         return taskIdentifierInfo.value[state.rawValue]
     }
     }
 
 
     private func setTaskIdentifier(_ identifier: Source.Identifier.Value?, for state: UIControl.State) {
     private func setTaskIdentifier(_ identifier: Source.Identifier.Value?, for state: UIControl.State) {
+        defer { objc_sync_exit(self) }
+        objc_sync_enter(self)
         taskIdentifierInfo.value[state.rawValue] = identifier
         taskIdentifierInfo.value[state.rawValue] = identifier
     }
     }
     
     
@@ -351,10 +355,14 @@ private var backgroundImageTaskKey: Void?
 extension KingfisherWrapper where Base: UIButton {
 extension KingfisherWrapper where Base: UIButton {
     
     
     public func backgroundTaskIdentifier(for state: UIControl.State) -> Source.Identifier.Value? {
     public func backgroundTaskIdentifier(for state: UIControl.State) -> Source.Identifier.Value? {
+        defer { objc_sync_exit(self) }
+        objc_sync_enter(self)
         return backgroundTaskIdentifierInfo.value[state.rawValue]
         return backgroundTaskIdentifierInfo.value[state.rawValue]
     }
     }
     
     
     private func setBackgroundTaskIdentifier(_ identifier: Source.Identifier.Value?, for state: UIControl.State) {
     private func setBackgroundTaskIdentifier(_ identifier: Source.Identifier.Value?, for state: UIControl.State) {
+        defer { objc_sync_exit(self) }
+        objc_sync_enter(self)
         backgroundTaskIdentifierInfo.value[state.rawValue] = identifier
         backgroundTaskIdentifierInfo.value[state.rawValue] = identifier
     }
     }
     
     

+ 2 - 0
Sources/Extensions/WKInterfaceImage+Kingfisher.swift

@@ -178,6 +178,8 @@ extension KingfisherWrapper where Base: WKInterfaceImage {
     public private(set) var taskIdentifier: Source.Identifier.Value? {
     public private(set) var taskIdentifier: Source.Identifier.Value? {
         get {
         get {
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &taskIdentifierKey)
             let box: Box<Source.Identifier.Value>? = getAssociatedObject(base, &taskIdentifierKey)
+            defer { objc_sync_exit(self) }
+            objc_sync_enter(self)
             return box?.value
             return box?.value
         }
         }
         set {
         set {

+ 10 - 8
Sources/Image/Image.swift

@@ -235,15 +235,17 @@ extension KingfisherWrapper where Base: KFCrossPlatformImage {
     ///                     converted in the PNG representation.
     ///                     converted in the PNG representation.
     /// - Returns: The output data representing.
     /// - Returns: The output data representing.
     public func data(format: ImageFormat) -> Data? {
     public func data(format: ImageFormat) -> Data? {
-        let data: Data?
-        switch format {
-        case .PNG: data = pngRepresentation()
-        case .JPEG: data = jpegRepresentation(compressionQuality: 1.0)
-        case .GIF: data = gifRepresentation()
-        case .unknown: data = normalized.kf.pngRepresentation()
+        return autoreleasepool { () -> Data? in
+            let data: Data?
+            switch format {
+            case .PNG: data = pngRepresentation()
+            case .JPEG: data = jpegRepresentation(compressionQuality: 1.0)
+            case .GIF: data = gifRepresentation()
+            case .unknown: data = normalized.kf.pngRepresentation()
+            }
+            
+            return data
         }
         }
-
-        return data
     }
     }
 }
 }