diff --git a/ImgixSwift.podspec b/ImgixSwift.podspec index 465dc80..b73316a 100644 --- a/ImgixSwift.podspec +++ b/ImgixSwift.podspec @@ -5,7 +5,7 @@ Pod::Spec.new do |s| s.license = { :type => 'BSD 2-Clause', :file => 'LICENSE.md' } s.homepage = "https://github.com/imgix/imgix-swift" - s.authors = { "Paul Straw" => "paulstraw@paulstraw.com" } + s.authors = { "Paul Straw" => "paulstraw@paulstraw.com", "Sherwin Heydarbeygi" => "sherwin@imgix.com" } s.source = { :git => "https://github.com/imgix/imgix-swift.git", :tag => s.version } s.xcconfig = { @@ -13,7 +13,7 @@ Pod::Spec.new do |s| } s.requires_arc = true - s.source_files = ["Sources/*.{h,m,swift}"] + s.source_files = ["Sources/ImgixSwift/*.swift"] s.ios.deployment_target = "9.0" s.osx.deployment_target = "10.10" diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..482fd27 --- /dev/null +++ b/Package.swift @@ -0,0 +1,26 @@ +// swift-tools-version:5.1 + +import PackageDescription + +let package = Package( + name: "ImgixSwift", + platforms: [ + .macOS(.v10_10), + .iOS(.v9), + .tvOS(.v9) + ], + products: [ + .library( + name: "ImgixSwift", + targets: ["ImgixSwift"]) + ], + targets: [ + .target( + name: "ImgixSwift" + ), + .testTarget( + name: "ImgixSwiftTests", + dependencies: ["ImgixSwift"]) + ], + swiftLanguageVersions: [.v5] +) diff --git a/Sources/ImgixClient.swift b/Sources/ImgixSwift/ImgixClient.swift similarity index 92% rename from Sources/ImgixClient.swift rename to Sources/ImgixSwift/ImgixClient.swift index 8500ca0..6f0764b 100644 --- a/Sources/ImgixClient.swift +++ b/Sources/ImgixSwift/ImgixClient.swift @@ -2,9 +2,6 @@ // ImgixClient.swift // imgix-swift // -// Created by Paul Straw on 6/30/16. -// -// import Foundation @@ -13,7 +10,7 @@ import Foundation @objc public let host: String @objc open var useHttps: Bool = true - @objc open var secureUrlToken: String? = nil + @objc open var secureUrlToken: String? @objc open var includeLibraryParam: Bool = true @objc public init(host: String) { @@ -46,7 +43,10 @@ import Foundation urlComponents.queryItems = buildParams(params) if secureUrlToken != nil { - let signature = signatureForPathAndQueryString(path, queryString: encodeQueryItems(urlComponents.queryItems!)) + let signature = signatureForPathAndQueryString( + path, + queryString: encodeQueryItems(urlComponents.queryItems!) + ) urlComponents.queryItems?.append(signature) } @@ -73,7 +73,7 @@ import Foundation } } - mergedParams.addEntries(from: params as! [AnyHashable : Any]) + mergedParams.addEntries(from: params as! [AnyHashable: Any]) let generatedURL = buildUrl(originalURL.path, params: mergedParams) @@ -120,26 +120,26 @@ import Foundation var queryItems = [URLQueryItem]() let queryParams: NSMutableDictionary = NSMutableDictionary.init(dictionary: params) - if (includeLibraryParam) { + if includeLibraryParam { queryParams.setValue("swift-" + ImgixClient.VERSION, forKey: "ixlib") } let keys = queryParams.allKeys.map { String(describing: $0) } - + for key in keys.sorted(by: {$0 < $1}) { if let val = queryParams[key] { var stringVal = String(describing: val) - + if key.hasSuffix("64") { stringVal = stringVal.ixEncode64() } let queryItem = URLQueryItem.init(name: key, value: stringVal) - + queryItems.append(queryItem) } } - + return queryItems } diff --git a/Sources/Info.plist b/Sources/ImgixSwift/Info.plist similarity index 100% rename from Sources/Info.plist rename to Sources/ImgixSwift/Info.plist diff --git a/Sources/String+ImgixSwift.swift b/Sources/ImgixSwift/String+ImgixSwift.swift similarity index 82% rename from Sources/String+ImgixSwift.swift rename to Sources/ImgixSwift/String+ImgixSwift.swift index 0172be2..748d161 100644 --- a/Sources/String+ImgixSwift.swift +++ b/Sources/ImgixSwift/String+ImgixSwift.swift @@ -2,9 +2,6 @@ // String+ImgixSwift.swift // imgix-swift // -// Created by Paul Straw on 7/7/16. -// -// import Foundation import var CommonCrypto.CC_MD5_DIGEST_LENGTH @@ -13,25 +10,25 @@ import typealias CommonCrypto.CC_LONG extension String { static var ixEncodeUriComponentCharSet: CharacterSet = { - var cs = CharacterSet.alphanumerics - cs.insert(charactersIn: "-_.!~*'()") - return cs + var charSet = CharacterSet.alphanumerics + charSet.insert(charactersIn: "-_.!~*'()") + return charSet }() func ixEncode64() -> String { let strData = self.data(using: String.Encoding.utf8) - + guard var str64 = strData?.base64EncodedString(options: Data.Base64EncodingOptions()) else { return "" } - + str64 = str64.replacingOccurrences(of: "=", with: "") str64 = str64.replacingOccurrences(of: "/", with: "_") str64 = str64.replacingOccurrences(of: "+", with: "-") - + return str64 } - + func ixEncodeUriComponent() -> String { return self.addingPercentEncoding(withAllowedCharacters: String.ixEncodeUriComponentCharSet)! } @@ -42,12 +39,13 @@ extension String { func MD5(string: String) -> String { let length = Int(CC_MD5_DIGEST_LENGTH) - let messageData = string.data(using:.utf8)! + let messageData = string.data(using: .utf8)! var digestData = Data(count: length) _ = digestData.withUnsafeMutableBytes { digestBytes -> UInt8 in messageData.withUnsafeBytes { messageBytes -> UInt8 in - if let messageBytesBaseAddress = messageBytes.baseAddress, let digestBytesBlindMemory = digestBytes.bindMemory(to: UInt8.self).baseAddress { + if let messageBytesBaseAddress = messageBytes.baseAddress, + let digestBytesBlindMemory = digestBytes.bindMemory(to: UInt8.self).baseAddress { let messageLength = CC_LONG(messageData.count) CC_MD5(messageBytesBaseAddress, messageLength, digestBytesBlindMemory) } diff --git a/ImgixSwiftTests/BuildUrlTests.swift b/Tests/ImgixSwiftTests/BuildUrlTests.swift similarity index 90% rename from ImgixSwiftTests/BuildUrlTests.swift rename to Tests/ImgixSwiftTests/BuildUrlTests.swift index 4c8a307..b328ea7 100644 --- a/ImgixSwiftTests/BuildUrlTests.swift +++ b/Tests/ImgixSwiftTests/BuildUrlTests.swift @@ -1,9 +1,6 @@ // // BuildUrlTests.swift -// imgix-swift -// -// Created by Paul Straw on 7/4/16. -// +// ImgixSwiftTests // import XCTest @@ -14,11 +11,11 @@ class BuildUrlTests: XCTestCase { override func setUp() { super.setUp() - + client = ImgixClient.init(host: "paulstraw.imgix.net") client.includeLibraryParam = false } - + override func tearDown() { super.tearDown() } @@ -26,83 +23,83 @@ class BuildUrlTests: XCTestCase { func testBuildUrlWithoutParams() { let generatedUrl = client.buildUrl("1.jpg") let expectedUrl = "https://paulstraw.imgix.net/1.jpg" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testBuildUrlWithoutParamsAndIncludeLibraryParam() { client.includeLibraryParam = true - + let generatedUrl = client.buildUrl("1.jpg") let expectedUrl = "https://paulstraw.imgix.net/1.jpg?ixlib=swift-\(ImgixClient.VERSION)" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } func testBuildUrlEmptyParams() { let generatedUrl = client.buildUrl("1.jpg", params: [:]) let expectedUrl = "https://paulstraw.imgix.net/1.jpg" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testBuildUrlWithOneParam() { let generatedUrl = client.buildUrl("1.jpg", params: ["w": 400]) let expectedUrl = "https://paulstraw.imgix.net/1.jpg?w=400" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testBuildUrlWithOneParamAndIncludeLibraryParam() { client.includeLibraryParam = true - + let generatedUrl = client.buildUrl("1.jpg", params: ["w": 400]) let expectedUrl = "https://paulstraw.imgix.net/1.jpg?ixlib=swift-\(ImgixClient.VERSION)&w=400" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testBuildUrlWithMultipleParams() { let generatedUrl = client.buildUrl("1.jpg", params: ["w": 400, "flip": "v"]) let expectedUrl = "https://paulstraw.imgix.net/1.jpg?flip=v&w=400" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } func testBuildUrlWithMultipleParamsSorted() { let generatedUrl = client.buildUrl("1.jpg", params: ["w": 900, "h": 300, "fit": "crop", "crop": "entropy"]) let expectedUrl = "https://paulstraw.imgix.net/1.jpg?crop=entropy&fit=crop&h=300&w=900" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } func testBuildUrlWithMultipleParamsAndIncludeLibraryParamSorted() { client.includeLibraryParam = true let generatedUrl = client.buildUrl("1.jpg", params: ["w": 900, "h": 300, "fit": "crop", "crop": "entropy"]) - let expectedUrl = "https://paulstraw.imgix.net/1.jpg?crop=entropy&fit=crop&h=300&ixlib=swift-\(ImgixClient.VERSION)&w=900" - + let expectedUrl = "https://paulstraw.imgix.net/1.jpg?" + + "crop=entropy&fit=crop&h=300&ixlib=swift-\(ImgixClient.VERSION)&w=900" + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testQueryStringKeyEscaping() { let generatedUrl = client.buildUrl("1.jpg", params: ["hello world": "interesting"]) let expectedQuery = "hello%20world=interesting" - + XCTAssert(generatedUrl.query == expectedQuery) } - + func testQueryStringValueEscaping() { let generatedUrl = client.buildUrl("1.jpg", params: ["txt": "/foo'> <"]) let expectedQuery = "txt=%2Ffoo'%3E%20%3Cscript%3Ealert('hacked')%3C%2Fscript%3E%3C" - + XCTAssert(generatedUrl.query == expectedQuery) } - + func testBase64ParamVariantsAreBase64Encoded() { let generatedUrl = client.buildUrl("~text", params: ["txt64": "I cannøt belîév∑ it wors! 😱"]) let expectedQuery = "txt64=SSBjYW5uw7h0IGJlbMOuw6l24oiRIGl0IHdvcu-jv3MhIPCfmLE" - + XCTAssert(generatedUrl.query == expectedQuery) } - } diff --git a/ImgixSwiftTests/Info.plist b/Tests/ImgixSwiftTests/Info.plist similarity index 100% rename from ImgixSwiftTests/Info.plist rename to Tests/ImgixSwiftTests/Info.plist diff --git a/ImgixSwiftTests/InitializationTests.swift b/Tests/ImgixSwiftTests/InitializationTests.swift similarity index 91% rename from ImgixSwiftTests/InitializationTests.swift rename to Tests/ImgixSwiftTests/InitializationTests.swift index fb9dd6c..055da07 100644 --- a/ImgixSwiftTests/InitializationTests.swift +++ b/Tests/ImgixSwiftTests/InitializationTests.swift @@ -2,46 +2,43 @@ // InitializationTests.swift // ImgixSwiftTests // -// Created by Paul Straw on 7/4/16. -// -// import XCTest import ImgixSwift class InitializationTests: XCTestCase { - + override func setUp() { super.setUp() // Put setup code here. This method is called before the invocation of each test method in the class. } - + override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() } - + func testHost() { let client = ImgixClient.init(host: "paulstraw.imgix.net") - + XCTAssert(client.host == "paulstraw.imgix.net") } - + func testDefaultsToHttpsUrls() { let client = ImgixClient.init(host: "paulstraw.imgix.net") - + XCTAssert(client.useHttps == true) } - + func testSettingHttpUrls() { let client = ImgixClient.init(host: "paulstraw.imgix.net", useHttps: false) - + XCTAssert(client.useHttps == false) } - + func testSettingSecureUrlToken() { let client = ImgixClient.init(host: "paulstraw.imgix.net", secureUrlToken: "loreM") - + XCTAssert(client.secureUrlToken == "loreM") } } diff --git a/ImgixSwiftTests/ReconstructTests.swift b/Tests/ImgixSwiftTests/ReconstructTests.swift similarity index 95% rename from ImgixSwiftTests/ReconstructTests.swift rename to Tests/ImgixSwiftTests/ReconstructTests.swift index 1a96df6..73922e4 100644 --- a/ImgixSwiftTests/ReconstructTests.swift +++ b/Tests/ImgixSwiftTests/ReconstructTests.swift @@ -1,9 +1,6 @@ // // ReconstructTests.swift -// imgix-swift -// -// Created by Paul Straw on 11/3/16. -// +// ImgixSwiftTests // import XCTest @@ -11,14 +8,14 @@ import ImgixSwift class ReconstructTests: XCTestCase { var client: ImgixClient! - + override func setUp() { super.setUp() - + client = ImgixClient.init(host: "paulstraw.imgix.net") client.includeLibraryParam = false } - + override func tearDown() { super.tearDown() } @@ -27,18 +24,18 @@ class ReconstructTests: XCTestCase { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL) let expectedUrl = "https://paulstraw.imgix.net/pika.jpg" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithSingleExistingParam() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg?w=200") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL) let expectedUrl = "https://paulstraw.imgix.net/pika.jpg?w=200" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithMultipleExistingParams() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg?w=200&h=200") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL) @@ -46,23 +43,23 @@ class ReconstructTests: XCTestCase { XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithoutParamsAndOneNewParam() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL, params: ["w": 200]) let expectedUrl = "https://paulstraw.imgix.net/pika.jpg?w=200" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithoutParamsAndMultipleNewParams() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL, params: ["w": 200, "h": 200]) let expectedUrl = "https://paulstraw.imgix.net/pika.jpg?h=200&w=200" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithSingleExistingParamAndOneNewParam() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg?w=200") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL, params: ["h": 200]) @@ -70,7 +67,7 @@ class ReconstructTests: XCTestCase { XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithMultipleExistingParamsAndOneNewParam() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg?w=200&h=200") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL, params: ["fit": "crop"]) @@ -78,45 +75,44 @@ class ReconstructTests: XCTestCase { XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithMultipleExistingParamsAndMultipleNewParams() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg?w=200&h=200") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL, params: ["fit": "crop", "invert": true]) let expectedUrl = "https://paulstraw.imgix.net/pika.jpg?fit=crop&h=200&invert=1&w=200" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithExistingParamOverriddenByNewParam() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net/pika.jpg?w=200") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL, params: ["w": 300]) let expectedUrl = "https://paulstraw.imgix.net/pika.jpg?w=300" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithDifferentHostThanClient() { let inputUrl = NSURL.init(string: "https://faulstraw.imgix.net/pika.jpg") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL) let expectedUrl = "https://faulstraw.imgix.net/pika.jpg" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithDifferentSchemeThanClient() { let inputUrl = NSURL.init(string: "http://paulstraw.imgix.net/pika.jpg") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL) let expectedUrl = "http://paulstraw.imgix.net/pika.jpg" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testReconstructUrlWithDifferentPortThanClient() { let inputUrl = NSURL.init(string: "https://paulstraw.imgix.net:8080/pika.jpg") let generatedUrl = client.reconstruct(originalURL: inputUrl! as URL) let expectedUrl = "https://paulstraw.imgix.net:8080/pika.jpg" - + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - } diff --git a/ImgixSwiftTests/SignatureTests.swift b/Tests/ImgixSwiftTests/SignatureTests.swift similarity index 91% rename from ImgixSwiftTests/SignatureTests.swift rename to Tests/ImgixSwiftTests/SignatureTests.swift index 0b31284..76442c9 100644 --- a/ImgixSwiftTests/SignatureTests.swift +++ b/Tests/ImgixSwiftTests/SignatureTests.swift @@ -1,9 +1,6 @@ // // SignatureTests.swift -// imgix-swift -// -// Created by Paul Straw on 7/5/16. -// +// ImgixSwiftTests // import XCTest @@ -11,56 +8,55 @@ import ImgixSwift class SignatureTests: XCTestCase { var client: ImgixClient! - + override func setUp() { super.setUp() - + client = ImgixClient.init( host: "imgix-library-secure-test-source.imgix.net", secureUrlToken: "EHFQXiZhxP4wA2c4" ) - + client.includeLibraryParam = false } - + override func tearDown() { super.tearDown() } - + func testSigningWithoutParams() { let generatedUrl = client.buildUrl("dog.jpg") let expectedQuery = "s=2b0bc99b1042e3c1c9aae6598acc3def" - + XCTAssert(generatedUrl.query == expectedQuery) } - + func testSigningWithOneParam() { let generatedUrl = client.buildUrl("dog.jpg", params: ["bri": 50]) let expectedQuery = "bri=50&s=3b293930d9c288fb788657fd9ed8164f" - + XCTAssert(generatedUrl.query == expectedQuery) } - + func testSigningWithMultipleParams() { let generatedUrl = client.buildUrl("dog.jpg", params: ["bri": 50, "con": 20]) let expectedQuery = "bri=50&con=20&s=30c03db96a644d5ce6e85022be191248" - + XCTAssert(generatedUrl.query == expectedQuery) } - + func testSigningWithParamIncludingComma() { let generatedUrl = client.buildUrl("dog.jpg", params: ["rect": "1300,900,360,360"]) let expectedQuery = "rect=1300%2C900%2C360%2C360&s=aa57997fdc2d6dd979b11bb831a9c711" - + XCTAssert(generatedUrl.query == expectedQuery) } - + func testSigningWithBase64ParamVariant() { let generatedUrl = client.buildUrl("dog.jpg", params: ["rect64": "1300,900,360,360"]) let expectedQuery = "rect64=MTMwMCw5MDAsMzYwLDM2MA&s=364717b54a62b58a2b1eb29949c08d95" - + XCTAssert(generatedUrl.query == expectedQuery) } - -} +} diff --git a/ImgixSwiftTests/WebProxyTests.swift b/Tests/ImgixSwiftTests/WebProxyTests.swift similarity index 69% rename from ImgixSwiftTests/WebProxyTests.swift rename to Tests/ImgixSwiftTests/WebProxyTests.swift index 77a8c25..4430301 100644 --- a/ImgixSwiftTests/WebProxyTests.swift +++ b/Tests/ImgixSwiftTests/WebProxyTests.swift @@ -1,9 +1,6 @@ // // WebProxyTests.swift -// imgix-swift -// -// Created by Paul Straw on 7/5/16. -// +// ImgixSwiftTests // import XCTest @@ -12,30 +9,32 @@ import ImgixSwift class WebProxyTests: XCTestCase { var client: ImgixClient! - + override func setUp() { super.setUp() - - client = ImgixClient.init(host: "imgix-library-web-proxy-test-source.imgix.net", secureUrlToken: "qN5VOqaLGQUFzETO") + + client = ImgixClient.init(host: "imgix-library-web-proxy-test-source.imgix.net", + secureUrlToken: "qN5VOqaLGQUFzETO") client.includeLibraryParam = false } - + override func tearDown() { super.tearDown() } - + func testFullyQualifiedPath() { let generatedUrl = client.buildUrl("http://files.paulstraw.com/pixelpaul.png") - let expectedUrl = "https://imgix-library-web-proxy-test-source.imgix.net/http%3A%2F%2Ffiles.paulstraw.com%2Fpixelpaul.png?s=1c57b8db669c9b265b4dd42f3b2de37a" - + let expectedUrl = "https://imgix-library-web-proxy-test-source.imgix.net/" + + "http%3A%2F%2Ffiles.paulstraw.com%2Fpixelpaul.png?s=1c57b8db669c9b265b4dd42f3b2de37a" + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - + func testEscapesFullyQualifiedPath() { let generatedUrl = client.buildUrl("http://files.paulstraw.com/pixel>paul.png") - let expectedUrl = "https://imgix-library-web-proxy-test-source.imgix.net/http%3A%2F%2Ffiles.paulstraw.com%2Fpixel%3Epaul.png?s=a9bbef784d922914d0a915dc9e218f6f" - + let expectedUrl = "https://imgix-library-web-proxy-test-source.imgix.net/" + + "http%3A%2F%2Ffiles.paulstraw.com%2Fpixel%3Epaul.png?s=a9bbef784d922914d0a915dc9e218f6f" + XCTAssert(generatedUrl.absoluteString == expectedUrl) } - } diff --git a/imgix-swift.xcodeproj/project.pbxproj b/imgix-swift.xcodeproj/project.pbxproj index 1b3bb4b..bd6bb33 100644 --- a/imgix-swift.xcodeproj/project.pbxproj +++ b/imgix-swift.xcodeproj/project.pbxproj @@ -7,30 +7,36 @@ objects = { /* Begin PBXBuildFile section */ - 580B383523E4DFA100FB9DF3 /* ReconstructTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB9ABCC1DCC037B00D2FD6B /* ReconstructTests.swift */; }; - 580B383623E4DFEA00FB9DF3 /* ReconstructTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB9ABCC1DCC037B00D2FD6B /* ReconstructTests.swift */; }; + 588DC28523F3666000E7B7D7 /* WebProxyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27C23F3666000E7B7D7 /* WebProxyTests.swift */; }; + 588DC28623F3666000E7B7D7 /* WebProxyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27C23F3666000E7B7D7 /* WebProxyTests.swift */; }; + 588DC28723F3666000E7B7D7 /* WebProxyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27C23F3666000E7B7D7 /* WebProxyTests.swift */; }; + 588DC28B23F3666000E7B7D7 /* ReconstructTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27D23F3666000E7B7D7 /* ReconstructTests.swift */; }; + 588DC28C23F3666000E7B7D7 /* ReconstructTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27D23F3666000E7B7D7 /* ReconstructTests.swift */; }; + 588DC28D23F3666000E7B7D7 /* ReconstructTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27D23F3666000E7B7D7 /* ReconstructTests.swift */; }; + 588DC29123F3666000E7B7D7 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27E23F3666000E7B7D7 /* InitializationTests.swift */; }; + 588DC29223F3666000E7B7D7 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27E23F3666000E7B7D7 /* InitializationTests.swift */; }; + 588DC29323F3666000E7B7D7 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27E23F3666000E7B7D7 /* InitializationTests.swift */; }; + 588DC29723F3666000E7B7D7 /* BuildUrlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27F23F3666000E7B7D7 /* BuildUrlTests.swift */; }; + 588DC29823F3666000E7B7D7 /* BuildUrlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27F23F3666000E7B7D7 /* BuildUrlTests.swift */; }; + 588DC29923F3666000E7B7D7 /* BuildUrlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC27F23F3666000E7B7D7 /* BuildUrlTests.swift */; }; + 588DC2A323F3666000E7B7D7 /* SignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC28123F3666000E7B7D7 /* SignatureTests.swift */; }; + 588DC2A423F3666000E7B7D7 /* SignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC28123F3666000E7B7D7 /* SignatureTests.swift */; }; + 588DC2A523F3666000E7B7D7 /* SignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC28123F3666000E7B7D7 /* SignatureTests.swift */; }; + 588DC2AB23F3666400E7B7D7 /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */; }; + 588DC2AC23F3666400E7B7D7 /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */; }; + 588DC2AD23F3666400E7B7D7 /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */; }; + 588DC2AE23F3666400E7B7D7 /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */; }; + 588DC2AF23F3666400E7B7D7 /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */; }; + 588DC2B023F3666400E7B7D7 /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */; }; + 588DC2B123F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */; }; + 588DC2B223F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */; }; + 588DC2B323F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */; }; + 588DC2B423F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */; }; + 588DC2B523F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */; }; + 588DC2B623F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */; }; 8F06ECF11D2C8AA8001CEC88 /* ImgixSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F06ECCC1D2C8832001CEC88 /* ImgixSwift.framework */; }; 8F06ED001D2C8ABA001CEC88 /* ImgixSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F06ECA51D2C8805001CEC88 /* ImgixSwift.framework */; }; 8F06ED0F1D2C8AD2001CEC88 /* ImgixSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F06ECBF1D2C8828001CEC88 /* ImgixSwift.framework */; }; - 8F06ED151D2C8AE1001CEC88 /* BuildUrlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF42EA01D2B38AC002BE7D4 /* BuildUrlTests.swift */; }; - 8F06ED161D2C8AE1001CEC88 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF42E901D2B312C002BE7D4 /* InitializationTests.swift */; }; - 8F06ED171D2C8AE1001CEC88 /* SignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9052181D2C34A000B0C1B6 /* SignatureTests.swift */; }; - 8F06ED181D2C8AE1001CEC88 /* WebProxyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F90521A1D2C3D0B00B0C1B6 /* WebProxyTests.swift */; }; - 8F06ED191D2C8AE1001CEC88 /* BuildUrlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF42EA01D2B38AC002BE7D4 /* BuildUrlTests.swift */; }; - 8F06ED1A1D2C8AE1001CEC88 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF42E901D2B312C002BE7D4 /* InitializationTests.swift */; }; - 8F06ED1B1D2C8AE1001CEC88 /* SignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9052181D2C34A000B0C1B6 /* SignatureTests.swift */; }; - 8F06ED1C1D2C8AE1001CEC88 /* WebProxyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F90521A1D2C3D0B00B0C1B6 /* WebProxyTests.swift */; }; - 8F06ED1D1D2C8AE1001CEC88 /* BuildUrlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF42EA01D2B38AC002BE7D4 /* BuildUrlTests.swift */; }; - 8F06ED1E1D2C8AE1001CEC88 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF42E901D2B312C002BE7D4 /* InitializationTests.swift */; }; - 8F06ED1F1D2C8AE1001CEC88 /* SignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9052181D2C34A000B0C1B6 /* SignatureTests.swift */; }; - 8F06ED201D2C8AE1001CEC88 /* WebProxyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F90521A1D2C3D0B00B0C1B6 /* WebProxyTests.swift */; }; - 8F12BC2E1D2EF2FE00B56C8A /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F12BC2D1D2EF2FE00B56C8A /* String+ImgixSwift.swift */; }; - 8F12BC2F1D2EF2FE00B56C8A /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F12BC2D1D2EF2FE00B56C8A /* String+ImgixSwift.swift */; }; - 8F12BC301D2EF2FE00B56C8A /* String+ImgixSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F12BC2D1D2EF2FE00B56C8A /* String+ImgixSwift.swift */; }; - 8F91A77B1D2C94EB0010384D /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F91A7751D2C94EB0010384D /* ImgixClient.swift */; }; - 8F91A77C1D2C94EB0010384D /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F91A7751D2C94EB0010384D /* ImgixClient.swift */; }; - 8F91A77D1D2C94EB0010384D /* ImgixClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F91A7751D2C94EB0010384D /* ImgixClient.swift */; }; - 8FB9ABCD1DCC037B00D2FD6B /* ReconstructTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB9ABCC1DCC037B00D2FD6B /* ReconstructTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -58,21 +64,21 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 588DC27C23F3666000E7B7D7 /* WebProxyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebProxyTests.swift; sourceTree = ""; }; + 588DC27D23F3666000E7B7D7 /* ReconstructTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReconstructTests.swift; sourceTree = ""; }; + 588DC27E23F3666000E7B7D7 /* InitializationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InitializationTests.swift; sourceTree = ""; }; + 588DC27F23F3666000E7B7D7 /* BuildUrlTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BuildUrlTests.swift; sourceTree = ""; }; + 588DC28023F3666000E7B7D7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 588DC28123F3666000E7B7D7 /* SignatureTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignatureTests.swift; sourceTree = ""; }; + 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImgixClient.swift; sourceTree = ""; }; + 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+ImgixSwift.swift"; sourceTree = ""; }; + 588DC2AA23F3666400E7B7D7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8F06ECA51D2C8805001CEC88 /* ImgixSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImgixSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8F06ECBF1D2C8828001CEC88 /* ImgixSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImgixSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8F06ECCC1D2C8832001CEC88 /* ImgixSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImgixSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8F06ECEC1D2C8AA8001CEC88 /* ImgixSwiftTests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ImgixSwiftTests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 8F06ECFB1D2C8ABA001CEC88 /* ImgixSwiftTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ImgixSwiftTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 8F06ED0A1D2C8AD2001CEC88 /* ImgixSwiftTests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ImgixSwiftTests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 8F12BC2D1D2EF2FE00B56C8A /* String+ImgixSwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "String+ImgixSwift.swift"; path = "Sources/String+ImgixSwift.swift"; sourceTree = ""; }; - 8F9052181D2C34A000B0C1B6 /* SignatureTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignatureTests.swift; sourceTree = ""; }; - 8F90521A1D2C3D0B00B0C1B6 /* WebProxyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebProxyTests.swift; sourceTree = ""; }; - 8F91A76E1D2C94CD0010384D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Sources/Info.plist; sourceTree = ""; }; - 8F91A7751D2C94EB0010384D /* ImgixClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ImgixClient.swift; path = Sources/ImgixClient.swift; sourceTree = ""; }; - 8FB9ABCC1DCC037B00D2FD6B /* ReconstructTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReconstructTests.swift; sourceTree = ""; }; - 8FF42E901D2B312C002BE7D4 /* InitializationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitializationTests.swift; sourceTree = ""; }; - 8FF42E921D2B312C002BE7D4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8FF42EA01D2B38AC002BE7D4 /* BuildUrlTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BuildUrlTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -124,49 +130,65 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 8F82BE501D25EDDD00551F76 = { + 588DC27A23F3666000E7B7D7 /* Tests */ = { isa = PBXGroup; children = ( - 8F82BE5D1D25EE1100551F76 /* Products */, - 8FF42E8F1D2B312C002BE7D4 /* ImgixSwiftTests */, - 8F82BE921D25F0ED00551F76 /* Sources */, + 588DC27B23F3666000E7B7D7 /* ImgixSwiftTests */, ); + path = Tests; sourceTree = ""; }; - 8F82BE5D1D25EE1100551F76 /* Products */ = { + 588DC27B23F3666000E7B7D7 /* ImgixSwiftTests */ = { isa = PBXGroup; children = ( - 8F06ECA51D2C8805001CEC88 /* ImgixSwift.framework */, - 8F06ECBF1D2C8828001CEC88 /* ImgixSwift.framework */, - 8F06ECCC1D2C8832001CEC88 /* ImgixSwift.framework */, - 8F06ECEC1D2C8AA8001CEC88 /* ImgixSwiftTests-macOS.xctest */, - 8F06ECFB1D2C8ABA001CEC88 /* ImgixSwiftTests-iOS.xctest */, - 8F06ED0A1D2C8AD2001CEC88 /* ImgixSwiftTests-tvOS.xctest */, + 588DC27C23F3666000E7B7D7 /* WebProxyTests.swift */, + 588DC27D23F3666000E7B7D7 /* ReconstructTests.swift */, + 588DC27E23F3666000E7B7D7 /* InitializationTests.swift */, + 588DC27F23F3666000E7B7D7 /* BuildUrlTests.swift */, + 588DC28023F3666000E7B7D7 /* Info.plist */, + 588DC28123F3666000E7B7D7 /* SignatureTests.swift */, ); - name = Products; + path = ImgixSwiftTests; sourceTree = ""; }; - 8F82BE921D25F0ED00551F76 /* Sources */ = { + 588DC2A623F3666400E7B7D7 /* Sources */ = { isa = PBXGroup; children = ( - 8F91A76E1D2C94CD0010384D /* Info.plist */, - 8F91A7751D2C94EB0010384D /* ImgixClient.swift */, - 8F12BC2D1D2EF2FE00B56C8A /* String+ImgixSwift.swift */, + 588DC2A723F3666400E7B7D7 /* ImgixSwift */, ); - name = Sources; + path = Sources; sourceTree = ""; }; - 8FF42E8F1D2B312C002BE7D4 /* ImgixSwiftTests */ = { + 588DC2A723F3666400E7B7D7 /* ImgixSwift */ = { isa = PBXGroup; children = ( - 8FF42EA01D2B38AC002BE7D4 /* BuildUrlTests.swift */, - 8FF42E901D2B312C002BE7D4 /* InitializationTests.swift */, - 8FB9ABCC1DCC037B00D2FD6B /* ReconstructTests.swift */, - 8F9052181D2C34A000B0C1B6 /* SignatureTests.swift */, - 8F90521A1D2C3D0B00B0C1B6 /* WebProxyTests.swift */, - 8FF42E921D2B312C002BE7D4 /* Info.plist */, + 588DC2A823F3666400E7B7D7 /* ImgixClient.swift */, + 588DC2A923F3666400E7B7D7 /* String+ImgixSwift.swift */, + 588DC2AA23F3666400E7B7D7 /* Info.plist */, ); - path = ImgixSwiftTests; + path = ImgixSwift; + sourceTree = ""; + }; + 8F82BE501D25EDDD00551F76 = { + isa = PBXGroup; + children = ( + 8F82BE5D1D25EE1100551F76 /* Products */, + 588DC2A623F3666400E7B7D7 /* Sources */, + 588DC27A23F3666000E7B7D7 /* Tests */, + ); + sourceTree = ""; + }; + 8F82BE5D1D25EE1100551F76 /* Products */ = { + isa = PBXGroup; + children = ( + 8F06ECA51D2C8805001CEC88 /* ImgixSwift.framework */, + 8F06ECBF1D2C8828001CEC88 /* ImgixSwift.framework */, + 8F06ECCC1D2C8832001CEC88 /* ImgixSwift.framework */, + 8F06ECEC1D2C8AA8001CEC88 /* ImgixSwiftTests-macOS.xctest */, + 8F06ECFB1D2C8ABA001CEC88 /* ImgixSwiftTests-iOS.xctest */, + 8F06ED0A1D2C8AD2001CEC88 /* ImgixSwiftTests-tvOS.xctest */, + ); + name = Products; sourceTree = ""; }; /* End PBXGroup section */ @@ -412,8 +434,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8F91A77B1D2C94EB0010384D /* ImgixClient.swift in Sources */, - 8F12BC2E1D2EF2FE00B56C8A /* String+ImgixSwift.swift in Sources */, + 588DC2B123F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */, + 588DC2AB23F3666400E7B7D7 /* ImgixClient.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -421,8 +443,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8F91A77C1D2C94EB0010384D /* ImgixClient.swift in Sources */, - 8F12BC2F1D2EF2FE00B56C8A /* String+ImgixSwift.swift in Sources */, + 588DC2B223F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */, + 588DC2AC23F3666400E7B7D7 /* ImgixClient.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -430,8 +452,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8F91A77D1D2C94EB0010384D /* ImgixClient.swift in Sources */, - 8F12BC301D2EF2FE00B56C8A /* String+ImgixSwift.swift in Sources */, + 588DC2B323F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */, + 588DC2AD23F3666400E7B7D7 /* ImgixClient.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -439,11 +461,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8F06ED171D2C8AE1001CEC88 /* SignatureTests.swift in Sources */, - 8FB9ABCD1DCC037B00D2FD6B /* ReconstructTests.swift in Sources */, - 8F06ED151D2C8AE1001CEC88 /* BuildUrlTests.swift in Sources */, - 8F06ED161D2C8AE1001CEC88 /* InitializationTests.swift in Sources */, - 8F06ED181D2C8AE1001CEC88 /* WebProxyTests.swift in Sources */, + 588DC29723F3666000E7B7D7 /* BuildUrlTests.swift in Sources */, + 588DC2B423F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */, + 588DC2AE23F3666400E7B7D7 /* ImgixClient.swift in Sources */, + 588DC2A323F3666000E7B7D7 /* SignatureTests.swift in Sources */, + 588DC28B23F3666000E7B7D7 /* ReconstructTests.swift in Sources */, + 588DC29123F3666000E7B7D7 /* InitializationTests.swift in Sources */, + 588DC28523F3666000E7B7D7 /* WebProxyTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -451,11 +475,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 580B383623E4DFEA00FB9DF3 /* ReconstructTests.swift in Sources */, - 8F06ED1B1D2C8AE1001CEC88 /* SignatureTests.swift in Sources */, - 8F06ED191D2C8AE1001CEC88 /* BuildUrlTests.swift in Sources */, - 8F06ED1A1D2C8AE1001CEC88 /* InitializationTests.swift in Sources */, - 8F06ED1C1D2C8AE1001CEC88 /* WebProxyTests.swift in Sources */, + 588DC29823F3666000E7B7D7 /* BuildUrlTests.swift in Sources */, + 588DC2B523F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */, + 588DC2AF23F3666400E7B7D7 /* ImgixClient.swift in Sources */, + 588DC2A423F3666000E7B7D7 /* SignatureTests.swift in Sources */, + 588DC28C23F3666000E7B7D7 /* ReconstructTests.swift in Sources */, + 588DC29223F3666000E7B7D7 /* InitializationTests.swift in Sources */, + 588DC28623F3666000E7B7D7 /* WebProxyTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -463,11 +489,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 580B383523E4DFA100FB9DF3 /* ReconstructTests.swift in Sources */, - 8F06ED1F1D2C8AE1001CEC88 /* SignatureTests.swift in Sources */, - 8F06ED1D1D2C8AE1001CEC88 /* BuildUrlTests.swift in Sources */, - 8F06ED1E1D2C8AE1001CEC88 /* InitializationTests.swift in Sources */, - 8F06ED201D2C8AE1001CEC88 /* WebProxyTests.swift in Sources */, + 588DC29923F3666000E7B7D7 /* BuildUrlTests.swift in Sources */, + 588DC2B623F3666400E7B7D7 /* String+ImgixSwift.swift in Sources */, + 588DC2B023F3666400E7B7D7 /* ImgixClient.swift in Sources */, + 588DC2A523F3666000E7B7D7 /* SignatureTests.swift in Sources */, + 588DC28D23F3666000E7B7D7 /* ReconstructTests.swift in Sources */, + 588DC29323F3666000E7B7D7 /* InitializationTests.swift in Sources */, + 588DC28723F3666000E7B7D7 /* WebProxyTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -535,7 +563,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/ImgixSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -595,7 +623,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/ImgixSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -659,7 +687,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/ImgixSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = ""; @@ -718,7 +746,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/ImgixSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = ""; @@ -784,7 +812,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/ImgixSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; @@ -845,7 +873,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/ImgixSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; @@ -869,6 +897,7 @@ 8F06ECF51D2C8AA8001CEC88 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -903,7 +932,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = ImgixSwiftTests/Info.plist; + INFOPLIST_FILE = Tests/ImgixSwiftTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; @@ -920,6 +949,7 @@ 8F06ECF61D2C8AA8001CEC88 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -948,7 +978,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = ImgixSwiftTests/Info.plist; + INFOPLIST_FILE = Tests/ImgixSwiftTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; @@ -963,6 +993,7 @@ 8F06ED041D2C8ABA001CEC88 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -996,7 +1027,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = ImgixSwiftTests/Info.plist; + INFOPLIST_FILE = Tests/ImgixSwiftTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; @@ -1012,6 +1043,7 @@ 8F06ED051D2C8ABA001CEC88 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -1039,7 +1071,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = ImgixSwiftTests/Info.plist; + INFOPLIST_FILE = Tests/ImgixSwiftTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; @@ -1054,6 +1086,7 @@ 8F06ED131D2C8AD2001CEC88 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -1086,7 +1119,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = ImgixSwiftTests/Info.plist; + INFOPLIST_FILE = Tests/ImgixSwiftTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; @@ -1102,6 +1135,7 @@ 8F06ED141D2C8AD2001CEC88 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -1128,7 +1162,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = ImgixSwiftTests/Info.plist; + INFOPLIST_FILE = Tests/ImgixSwiftTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.imgix.ImgixSwiftTests-tvOS"; diff --git a/imgix-swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/imgix-swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata index fa179ab..7c6de21 100644 --- a/imgix-swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/imgix-swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -1,7 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + location = "self:">