From c30f39032a70e31985f510cbf798608aeff0ac22 Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Mon, 25 Apr 2016 16:38:34 +0200 Subject: [PATCH 1/8] Add MD5 pod as a dependency --- Cache.podspec | 1 + 1 file changed, 1 insertion(+) diff --git a/Cache.podspec b/Cache.podspec index b600c08..15462b6 100644 --- a/Cache.podspec +++ b/Cache.podspec @@ -18,4 +18,5 @@ Pod::Spec.new do |s| s.tvos.source_files = 'Source/{iOS,Shared}/**/*' s.frameworks = 'Foundation' + s.dependency 'MD5' end From 85c218f241d894a666865a3232badf47686711c8 Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Mon, 25 Apr 2016 16:39:34 +0200 Subject: [PATCH 2/8] Use MD5 digest as filename if possible --- Source/Shared/Storage/DiskStorage.swift | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Source/Shared/Storage/DiskStorage.swift b/Source/Shared/Storage/DiskStorage.swift index 45ae33b..19f1e0a 100644 --- a/Source/Shared/Storage/DiskStorage.swift +++ b/Source/Shared/Storage/DiskStorage.swift @@ -1,4 +1,5 @@ import Foundation +import MD5 public class DiskStorage: StorageAware { @@ -204,7 +205,19 @@ public class DiskStorage: StorageAware { // MARK: - Helpers func fileName(key: String) -> String { - return key.base64() + if let digest = key.dataUsingEncoding(NSUTF8StringEncoding)?.md5() { + var string = "" + var byte: UInt8 = 0 + + for i in 0 ..< digest.length { + digest.getBytes(&byte, range: NSMakeRange(i, 1)) + string += String(format: "%02x", byte) + } + + return string + } else { + return key.base64() + } } func filePath(key: String) -> String { From b71cc50c5fa49a2da80392a713686a5079c2cab5 Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Tue, 26 Apr 2016 10:10:04 +0200 Subject: [PATCH 3/8] Add missing dependency --- Cartfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 Cartfile diff --git a/Cartfile b/Cartfile new file mode 100644 index 0000000..a537b6f --- /dev/null +++ b/Cartfile @@ -0,0 +1 @@ +github "3lvis/MD5" "master" From da32a4f729ae26ba55e0f4d16a51c4d61324215d Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Tue, 26 Apr 2016 14:01:38 +0200 Subject: [PATCH 4/8] Replace MD5 with CryptoSwift --- Cache.xcodeproj/project.pbxproj | 18 ++++++++++++++++++ Cartfile | 2 +- Cartfile.resolved | 5 +++-- Source/Shared/Storage/DiskStorage.swift | 2 +- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Cache.xcodeproj/project.pbxproj b/Cache.xcodeproj/project.pbxproj index c8b265d..6971de6 100644 --- a/Cache.xcodeproj/project.pbxproj +++ b/Cache.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 9ABAE0371CCF8FF7009477CF /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ABAE0361CCF8FF7009477CF /* CryptoSwift.framework */; }; + 9ABAE0391CCF9003009477CF /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ABAE0381CCF9003009477CF /* CryptoSwift.framework */; }; D5291C291C28220B00B702C9 /* UIImage+Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291C0D1C28220B00B702C9 /* UIImage+Cache.swift */; }; D5291C2D1C28220B00B702C9 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291C151C28220B00B702C9 /* Config.swift */; }; D5291C2E1C28220B00B702C9 /* Cachable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291C171C28220B00B702C9 /* Cachable.swift */; }; @@ -92,6 +94,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 9ABAE0361CCF8FF7009477CF /* CryptoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoSwift.framework; path = Carthage/Build/iOS/CryptoSwift.framework; sourceTree = ""; }; + 9ABAE0381CCF9003009477CF /* CryptoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoSwift.framework; path = Carthage/Build/Mac/CryptoSwift.framework; sourceTree = ""; }; D5291C0D1C28220B00B702C9 /* UIImage+Cache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Cache.swift"; sourceTree = ""; }; D5291C151C28220B00B702C9 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; D5291C171C28220B00B702C9 /* Cachable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cachable.swift; sourceTree = ""; }; @@ -181,6 +185,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 9ABAE0371CCF8FF7009477CF /* CryptoSwift.framework in Frameworks */, + 9ABAE0391CCF9003009477CF /* CryptoSwift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -408,6 +414,7 @@ D5291DA51C28454000B702C9 /* Mac */ = { isa = PBXGroup; children = ( + 9ABAE0381CCF9003009477CF /* CryptoSwift.framework */, D5291CD91C2835D000B702C9 /* Quick.framework */, D5291CDA1C2835D000B702C9 /* Nimble.framework */, ); @@ -417,6 +424,7 @@ D5291DA61C28454800B702C9 /* iOS */ = { isa = PBXGroup; children = ( + 9ABAE0361CCF8FF7009477CF /* CryptoSwift.framework */, D5DC5A6C1C205C2A003BD79B /* Quick.framework */, D5DC5A6D1C205C2A003BD79B /* Nimble.framework */, ); @@ -980,6 +988,11 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); INFOPLIST_FILE = "$(SRCROOT)/SupportFiles/iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -997,6 +1010,11 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); INFOPLIST_FILE = "$(SRCROOT)/SupportFiles/iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; diff --git a/Cartfile b/Cartfile index a537b6f..07e14ee 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1 @@ -github "3lvis/MD5" "master" +github "krzyzanowskim/CryptoSwift" "master" diff --git a/Cartfile.resolved b/Cartfile.resolved index 9f494e8..8637c47 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,2 +1,3 @@ -github "Quick/Nimble" "v3.2.0" -github "Quick/Quick" "v0.9.1" +github "krzyzanowskim/CryptoSwift" "3f9ca1c1980fdc8e5c719d48ab81ae421b0497ee" +github "Quick/Nimble" "v4.0.1" +github "Quick/Quick" "v0.9.2" diff --git a/Source/Shared/Storage/DiskStorage.swift b/Source/Shared/Storage/DiskStorage.swift index 19f1e0a..8f45424 100644 --- a/Source/Shared/Storage/DiskStorage.swift +++ b/Source/Shared/Storage/DiskStorage.swift @@ -1,5 +1,5 @@ import Foundation -import MD5 +import CryptoSwift public class DiskStorage: StorageAware { From 0ca98d8a6476ed4f6f0db016d951ab153fbbf2da Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Tue, 26 Apr 2016 14:04:19 +0200 Subject: [PATCH 5/8] Update pod dependecy --- Cache.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cache.podspec b/Cache.podspec index 15462b6..4434e18 100644 --- a/Cache.podspec +++ b/Cache.podspec @@ -18,5 +18,5 @@ Pod::Spec.new do |s| s.tvos.source_files = 'Source/{iOS,Shared}/**/*' s.frameworks = 'Foundation' - s.dependency 'MD5' + s.dependency 'CryptoSwift' end From 5785a004fbfa4739c5b2d6379447f1eeaf477928 Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Tue, 26 Apr 2016 14:33:05 +0200 Subject: [PATCH 6/8] Add missing framework reference --- Cache.xcodeproj/project.pbxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Cache.xcodeproj/project.pbxproj b/Cache.xcodeproj/project.pbxproj index 6971de6..772e5b8 100644 --- a/Cache.xcodeproj/project.pbxproj +++ b/Cache.xcodeproj/project.pbxproj @@ -658,6 +658,7 @@ inputPaths = ( "$(SRCROOT)/Carthage/Build/iOS/Quick.framework", "$(SRCROOT)/Carthage/Build/iOS/Nimble.framework", + "$(SRCROOT)/Carthage/Build/iOS/CryptoSwift.framework", ); outputPaths = ( ); From d50fa7da0a2a82078cc6bb0f0c5aa4d08b12187d Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Tue, 26 Apr 2016 14:33:13 +0200 Subject: [PATCH 7/8] Fix broken test --- Tests/iOS/Specs/Storage/DiskStorageSpec.swift | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Tests/iOS/Specs/Storage/DiskStorageSpec.swift b/Tests/iOS/Specs/Storage/DiskStorageSpec.swift index 93bd93c..773e23f 100644 --- a/Tests/iOS/Specs/Storage/DiskStorageSpec.swift +++ b/Tests/iOS/Specs/Storage/DiskStorageSpec.swift @@ -1,5 +1,6 @@ import Quick import Nimble +import CryptoSwift @testable import Cache class DiskStorageSpec: QuickSpec { @@ -178,7 +179,19 @@ class DiskStorageSpec: QuickSpec { describe("#fileName") { it("returns a correct file name") { - expect(storage.fileName(key)).to(equal(key.base64())) + if let digest = key.dataUsingEncoding(NSUTF8StringEncoding)?.md5() { + var string = "" + var byte: UInt8 = 0 + + for i in 0 ..< digest.length { + digest.getBytes(&byte, range: NSMakeRange(i, 1)) + string += String(format: "%02x", byte) + } + + expect(storage.fileName(key)).to(equal(string)) + } else { + expect(storage.fileName(key)).to(equal(key.base64())) + } } } From c8d0d0abb55239bf7f87ed2a6b81bc04ee3b738d Mon Sep 17 00:00:00 2001 From: Attila Bardos Date: Tue, 26 Apr 2016 14:42:05 +0200 Subject: [PATCH 8/8] Fix broken Mac test --- Cache.xcodeproj/project.pbxproj | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Cache.xcodeproj/project.pbxproj b/Cache.xcodeproj/project.pbxproj index 772e5b8..bfb7f5e 100644 --- a/Cache.xcodeproj/project.pbxproj +++ b/Cache.xcodeproj/project.pbxproj @@ -8,7 +8,8 @@ /* Begin PBXBuildFile section */ 9ABAE0371CCF8FF7009477CF /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ABAE0361CCF8FF7009477CF /* CryptoSwift.framework */; }; - 9ABAE0391CCF9003009477CF /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ABAE0381CCF9003009477CF /* CryptoSwift.framework */; }; + 9AFE68041CCF982800B7C6AC /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AFE68031CCF982800B7C6AC /* Quick.framework */; }; + 9AFE68071CCF994A00B7C6AC /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AFE68051CCF986C00B7C6AC /* CryptoSwift.framework */; }; D5291C291C28220B00B702C9 /* UIImage+Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291C0D1C28220B00B702C9 /* UIImage+Cache.swift */; }; D5291C2D1C28220B00B702C9 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291C151C28220B00B702C9 /* Config.swift */; }; D5291C2E1C28220B00B702C9 /* Cachable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291C171C28220B00B702C9 /* Cachable.swift */; }; @@ -70,7 +71,6 @@ D5291D961C283CFB00B702C9 /* StorageFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291C271C28220B00B702C9 /* StorageFactory.swift */; }; D5291D9A1C283DB300B702C9 /* UIImage+CacheSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291D991C283DB300B702C9 /* UIImage+CacheSpec.swift */; }; D5291D9C1C283DD900B702C9 /* NSImage+CacheSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291D9B1C283DD900B702C9 /* NSImage+CacheSpec.swift */; }; - D5291D9D1C283EC000B702C9 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5291CD91C2835D000B702C9 /* Quick.framework */; }; D5291D9E1C283EC000B702C9 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5291CDA1C2835D000B702C9 /* Nimble.framework */; }; D5291DA11C28405900B702C9 /* UIImage+CacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291DA01C28405900B702C9 /* UIImage+CacheTests.swift */; }; D5291DA31C2841D200B702C9 /* NSImage+CacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291DA21C2841D200B702C9 /* NSImage+CacheTests.swift */; }; @@ -95,7 +95,8 @@ /* Begin PBXFileReference section */ 9ABAE0361CCF8FF7009477CF /* CryptoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoSwift.framework; path = Carthage/Build/iOS/CryptoSwift.framework; sourceTree = ""; }; - 9ABAE0381CCF9003009477CF /* CryptoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoSwift.framework; path = Carthage/Build/Mac/CryptoSwift.framework; sourceTree = ""; }; + 9AFE68031CCF982800B7C6AC /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/Mac/Quick.framework; sourceTree = ""; }; + 9AFE68051CCF986C00B7C6AC /* CryptoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoSwift.framework; path = Carthage/Build/Mac/CryptoSwift.framework; sourceTree = ""; }; D5291C0D1C28220B00B702C9 /* UIImage+Cache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Cache.swift"; sourceTree = ""; }; D5291C151C28220B00B702C9 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; D5291C171C28220B00B702C9 /* Cachable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cachable.swift; sourceTree = ""; }; @@ -115,7 +116,6 @@ D5291C6A1C2827FB00B702C9 /* BasicHybridCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicHybridCache.swift; sourceTree = ""; }; D5291C6B1C2827FB00B702C9 /* Cache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cache.swift; sourceTree = ""; }; D5291C721C28296B00B702C9 /* HybridCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HybridCache.swift; sourceTree = ""; }; - D5291CD91C2835D000B702C9 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/Mac/Quick.framework; sourceTree = ""; }; D5291CDA1C2835D000B702C9 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/Mac/Nimble.framework; sourceTree = ""; }; D5291CDF1C28374800B702C9 /* SpecHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpecHelper.swift; sourceTree = ""; }; D5291CE01C28374800B702C9 /* User.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; @@ -168,6 +168,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 9AFE68071CCF994A00B7C6AC /* CryptoSwift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -175,7 +176,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D5291D9D1C283EC000B702C9 /* Quick.framework in Frameworks */, D5291D9E1C283EC000B702C9 /* Nimble.framework in Frameworks */, D5291D6A1C283B5400B702C9 /* Cache.framework in Frameworks */, ); @@ -186,7 +186,7 @@ buildActionMask = 2147483647; files = ( 9ABAE0371CCF8FF7009477CF /* CryptoSwift.framework in Frameworks */, - 9ABAE0391CCF9003009477CF /* CryptoSwift.framework in Frameworks */, + 9AFE68041CCF982800B7C6AC /* Quick.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -414,8 +414,8 @@ D5291DA51C28454000B702C9 /* Mac */ = { isa = PBXGroup; children = ( - 9ABAE0381CCF9003009477CF /* CryptoSwift.framework */, - D5291CD91C2835D000B702C9 /* Quick.framework */, + 9AFE68051CCF986C00B7C6AC /* CryptoSwift.framework */, + 9AFE68031CCF982800B7C6AC /* Quick.framework */, D5291CDA1C2835D000B702C9 /* Nimble.framework */, ); name = Mac; @@ -674,6 +674,7 @@ inputPaths = ( "$(SRCROOT)/Carthage/Build/Mac/Quick.framework", "$(SRCROOT)/Carthage/Build/Mac/Nimble.framework", + "$(SRCROOT)/Carthage/Build/Mac/CryptoSwift.framework", ); outputPaths = ( ); @@ -824,6 +825,10 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/SupportFiles/Mac/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -845,6 +850,10 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/SupportFiles/Mac/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";