From 8ed1a023aef49ef5843fa8b3fee275f383e47e49 Mon Sep 17 00:00:00 2001 From: Vadim Shikulo Date: Tue, 10 Apr 2018 18:20:40 +0300 Subject: [PATCH 1/2] Fix NSURLConnectionDelegate and NSURLConnectionDataDelegate methods' signatures --- Source/Timberjack.swift | 336 +++++++++--------- Timberjack.xcodeproj/project.pbxproj | 6 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + 3 files changed, 179 insertions(+), 171 deletions(-) create mode 100644 Timberjack.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Source/Timberjack.swift b/Source/Timberjack.swift index 0917ca8..61d25e5 100644 --- a/Source/Timberjack.swift +++ b/Source/Timberjack.swift @@ -24,178 +24,178 @@ let TimberjackRequestHandledKey = "Timberjack" let TimberjackRequestTimeKey = "TimberjackRequestTime" public enum Style { - case verbose - case light + case verbose + case light } open class Timberjack: URLProtocol { - var connection: NSURLConnection? - var data: NSMutableData? - var response: URLResponse? - var newRequest: NSMutableURLRequest? - - open static var logStyle: Style = .verbose - - open class func register() { - URLProtocol.registerClass(self) - } - - open class func unregister() { - URLProtocol.unregisterClass(self) - } - - open class func defaultSessionConfiguration() -> URLSessionConfiguration { - let config = URLSessionConfiguration.default - config.protocolClasses?.insert(Timberjack.self, at: 0) - return config + var connection: NSURLConnection? + var data: NSMutableData? + var response: URLResponse? + var newRequest: NSMutableURLRequest? + + open static var logStyle: Style = .verbose + + open class func register() { + URLProtocol.registerClass(self) + } + + open class func unregister() { + URLProtocol.unregisterClass(self) + } + + open class func defaultSessionConfiguration() -> URLSessionConfiguration { + let config = URLSessionConfiguration.default + config.protocolClasses?.insert(Timberjack.self, at: 0) + return config + } + + //MARK: - NSURLProtocol + + open override class func canInit(with request: URLRequest) -> Bool { + guard self.property(forKey: TimberjackRequestHandledKey, in: request) == nil else { + return false + } + return true + } + + open override class func canonicalRequest(for request: URLRequest) -> URLRequest { + return request + } + + open override class func requestIsCacheEquivalent(_ a: URLRequest, to b: URLRequest) -> Bool { + return super.requestIsCacheEquivalent(a, to: b) + } + + open override func startLoading() { + guard let req = (request as NSURLRequest).mutableCopy() as? NSMutableURLRequest, newRequest == nil else { return } + + newRequest = req + + Timberjack.setProperty(true, forKey: TimberjackRequestHandledKey, in: newRequest!) + Timberjack.setProperty(Date(), forKey: TimberjackRequestTimeKey, in: newRequest!) + + connection = NSURLConnection(request: newRequest! as URLRequest, delegate: self) + + logRequest(newRequest! as URLRequest) + } + + open override func stopLoading() { + connection?.cancel() + connection = nil + } + + //MARK: - Logging + open func logDivider() { + print("---------------------") + } + + open func logError(_ error: NSError) { + logDivider() + + print("Error: \(error.localizedDescription)") + + guard Timberjack.logStyle == .verbose else { return } + + if let reason = error.localizedFailureReason { + print("Reason: \(reason)") + } + + if let suggestion = error.localizedRecoverySuggestion { + print("Suggestion: \(suggestion)") + } + } + + open func logRequest(_ request: URLRequest) { + logDivider() + + if let url = request.url?.absoluteString { + print("Request: \(request.httpMethod!) \(url)") + } + + guard Timberjack.logStyle == .verbose else { return } + + if let headers = request.allHTTPHeaderFields { + self.logHeaders(headers as [String : AnyObject]) + } + } + + open func logResponse(_ response: URLResponse, data: Data? = nil) { + logDivider() + + if let url = response.url?.absoluteString { + print("Response: \(url)") + } + + if let httpResponse = response as? HTTPURLResponse { + let localisedStatus = HTTPURLResponse.localizedString(forStatusCode: httpResponse.statusCode).capitalized + print("Status: \(httpResponse.statusCode) - \(localisedStatus)") + } + + guard Timberjack.logStyle == .verbose else { return } + + if let headers = (response as? HTTPURLResponse)?.allHeaderFields as? [String: AnyObject] { + self.logHeaders(headers) + } + + if let startDate = Timberjack.property(forKey: TimberjackRequestTimeKey, in: newRequest! as URLRequest) as? Date { + let difference = fabs(startDate.timeIntervalSinceNow) + print("Duration: \(difference)s") + } + + guard let data = data else { return } + + do { + let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) + let pretty = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) + + if let string = NSString(data: pretty, encoding: String.Encoding.utf8.rawValue) { + print("JSON: \(string)") + } + } catch { + if let string = NSString(data: data, encoding: String.Encoding.utf8.rawValue) { + print("Data: \(string)") + } } - - //MARK: - NSURLProtocol - - open override class func canInit(with request: URLRequest) -> Bool { - guard self.property(forKey: TimberjackRequestHandledKey, in: request) == nil else { - return false - } - - return true - } - - open override class func canonicalRequest(for request: URLRequest) -> URLRequest { - return request - } - - open override class func requestIsCacheEquivalent(_ a: URLRequest, to b: URLRequest) -> Bool { - return super.requestIsCacheEquivalent(a, to: b) + } + + open func logHeaders(_ headers: [String: AnyObject]) { + print("Headers: [") + for (key, value) in headers { + print(" \(key) : \(value)") } + print("]") + } +} - open override func startLoading() { - guard let req = (request as NSURLRequest).mutableCopy() as? NSMutableURLRequest , newRequest == nil else { return } - - self.newRequest = req - - Timberjack.setProperty(true, forKey: TimberjackRequestHandledKey, in: newRequest!) - Timberjack.setProperty(Date(), forKey: TimberjackRequestTimeKey, in: newRequest!) - - connection = NSURLConnection(request: newRequest! as URLRequest, delegate: self) - - logRequest(newRequest! as URLRequest) - } - - open override func stopLoading() { - connection?.cancel() - connection = nil - } - - // MARK: NSURLConnectionDelegate - - func connection(_ connection: NSURLConnection!, didReceiveResponse response: URLResponse!) { - let policy = URLCache.StoragePolicy(rawValue: request.cachePolicy.rawValue) ?? .notAllowed - client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: policy) - - self.response = response - self.data = NSMutableData() - } - - func connection(_ connection: NSURLConnection!, didReceiveData data: Data!) { - client?.urlProtocol(self, didLoad: data) - self.data?.append(data) - } - - func connectionDidFinishLoading(_ connection: NSURLConnection!) { - client?.urlProtocolDidFinishLoading(self) - - if let response = response { - logResponse(response, data: data as Data?) - } - } - - func connection(_ connection: NSURLConnection!, didFailWithError error: NSError!) { - client?.urlProtocol(self, didFailWithError: error) - logError(error) - } - - //MARK: - Logging - - open func logDivider() { - print("---------------------") - } - - open func logError(_ error: NSError) { - logDivider() - - print("Error: \(error.localizedDescription)") - - if Timberjack.logStyle == .verbose { - if let reason = error.localizedFailureReason { - print("Reason: \(reason)") - } - - if let suggestion = error.localizedRecoverySuggestion { - print("Suggestion: \(suggestion)") - } - } - } - - open func logRequest(_ request: URLRequest) { - logDivider() - - if let url = request.url?.absoluteString { - print("Request: \(request.httpMethod!) \(url)") - } - - if Timberjack.logStyle == .verbose { - if let headers = request.allHTTPHeaderFields { - self.logHeaders(headers as [String : AnyObject]) - } - } - } - - open func logResponse(_ response: URLResponse, data: Data? = nil) { - logDivider() - - if let url = response.url?.absoluteString { - print("Response: \(url)") - } - - if let httpResponse = response as? HTTPURLResponse { - let localisedStatus = HTTPURLResponse.localizedString(forStatusCode: httpResponse.statusCode).capitalized - print("Status: \(httpResponse.statusCode) - \(localisedStatus)") - } - - if Timberjack.logStyle == .verbose { - if let headers = (response as? HTTPURLResponse)?.allHeaderFields as? [String: AnyObject] { - self.logHeaders(headers) - } - - if let startDate = Timberjack.property(forKey: TimberjackRequestTimeKey, in: newRequest! as URLRequest) as? Date { - let difference = fabs(startDate.timeIntervalSinceNow) - print("Duration: \(difference)s") - } - - guard let data = data else { return } - - do { - let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) - let pretty = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) - - if let string = NSString(data: pretty, encoding: String.Encoding.utf8.rawValue) { - print("JSON: \(string)") - } - } - - catch { - if let string = NSString(data: data, encoding: String.Encoding.utf8.rawValue) { - print("Data: \(string)") - } - } - } - } - - open func logHeaders(_ headers: [String: AnyObject]) { - print("Headers: [") - for (key, value) in headers { - print(" \(key) : \(value)") - } - print("]") - } +// MARK: - NSURLConnectionDelegate +extension Timberjack: NSURLConnectionDelegate { + public func connection(_ connection: NSURLConnection, didFailWithError error: NSError) { + client?.urlProtocol(self, didFailWithError: error) + logError(error) + } +} + +// MARK: - NSURLConnectionDataDelegate +extension Timberjack: NSURLConnectionDataDelegate { + public func connection(_ connection: NSURLConnection, didReceive response: URLResponse) { + let policy = URLCache.StoragePolicy(rawValue: request.cachePolicy.rawValue) ?? .notAllowed + client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: policy) + + self.response = response + self.data = NSMutableData() + } + + public func connection(_ connection: NSURLConnection, didReceive data: Data) { + client?.urlProtocol(self, didLoad: data) + self.data?.append(data) + } + + public func connectionDidFinishLoading(_ connection: NSURLConnection) { + client?.urlProtocolDidFinishLoading(self) + + if let response = response { + logResponse(response, data: data as Data?) + } + } } diff --git a/Timberjack.xcodeproj/project.pbxproj b/Timberjack.xcodeproj/project.pbxproj index 6bc2db1..9a709db 100644 --- a/Timberjack.xcodeproj/project.pbxproj +++ b/Timberjack.xcodeproj/project.pbxproj @@ -24,7 +24,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - A13DF14E1B999BA9008015C3 /* Timberjack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Timberjack.swift; sourceTree = ""; }; + A13DF14E1B999BA9008015C3 /* Timberjack.swift */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.swift; path = Timberjack.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; A1D2658E1B9999E3000D8735 /* Timberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Timberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A1D265921B9999E3000D8735 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A1D265931B9999E3000D8735 /* Timberjack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Timberjack.h; sourceTree = ""; }; @@ -344,7 +344,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -362,7 +362,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "co.rockettown.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Release; }; diff --git a/Timberjack.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Timberjack.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Timberjack.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + From d7e4024935a16b5b3141e6fe72b81f4c15af3e83 Mon Sep 17 00:00:00 2001 From: Jason Wolkovitz Date: Sat, 3 Nov 2018 12:40:16 -0400 Subject: [PATCH 2/2] Upgraded to swift 4.2 and removed warnings --- .../project.pbxproj | 25 +++++++++++-- Example/Timberjack Example/AppDelegate.swift | 2 +- Source/Timberjack.swift | 2 +- Timberjack.xcodeproj/project.pbxproj | 37 +++++++++++++++++-- .../xcschemes/Timberjack.xcscheme | 2 +- 5 files changed, 58 insertions(+), 10 deletions(-) diff --git a/Example/Timberjack Example.xcodeproj/project.pbxproj b/Example/Timberjack Example.xcodeproj/project.pbxproj index 3bbbd27..1fc7a61 100644 --- a/Example/Timberjack Example.xcodeproj/project.pbxproj +++ b/Example/Timberjack Example.xcodeproj/project.pbxproj @@ -102,11 +102,12 @@ A1825E511B99BCA5001C4857 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1010; ORGANIZATIONNAME = "Rocket Town Ltd"; TargetAttributes = { A1825E581B99BCA5001C4857 = { CreatedOnToolsVersion = 7.0; + LastSwiftMigration = 1010; }; }; }; @@ -181,14 +182,22 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -227,14 +236,22 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -267,7 +284,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "co.rockettown.Timberjack-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Debug; }; @@ -279,7 +297,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "co.rockettown.Timberjack-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Release; }; diff --git a/Example/Timberjack Example/AppDelegate.swift b/Example/Timberjack Example/AppDelegate.swift index 8a91433..9afde1d 100644 --- a/Example/Timberjack Example/AppDelegate.swift +++ b/Example/Timberjack Example/AppDelegate.swift @@ -5,7 +5,7 @@ import Timberjack class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Timberjack.logStyle = .verbose //Either .Verbose, or .Light Timberjack.register() //Register Timberjack to log all requests diff --git a/Source/Timberjack.swift b/Source/Timberjack.swift index 61d25e5..4545996 100644 --- a/Source/Timberjack.swift +++ b/Source/Timberjack.swift @@ -34,7 +34,7 @@ open class Timberjack: URLProtocol { var response: URLResponse? var newRequest: NSMutableURLRequest? - open static var logStyle: Style = .verbose + public static var logStyle: Style = .verbose open class func register() { URLProtocol.registerClass(self) diff --git a/Timberjack.xcodeproj/project.pbxproj b/Timberjack.xcodeproj/project.pbxproj index 9a709db..59671bf 100644 --- a/Timberjack.xcodeproj/project.pbxproj +++ b/Timberjack.xcodeproj/project.pbxproj @@ -162,12 +162,12 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0700; + LastUpgradeCheck = 1010; ORGANIZATIONNAME = "Rocket Town Ltd"; TargetAttributes = { A1D2658D1B9999E3000D8735 = { CreatedOnToolsVersion = 6.4; - LastSwiftMigration = 0800; + LastSwiftMigration = 1010; }; A1D265981B9999E3000D8735 = { CreatedOnToolsVersion = 6.4; @@ -246,13 +246,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -281,6 +291,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -296,13 +307,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -322,6 +343,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -333,6 +356,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -344,7 +368,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Debug; }; @@ -352,6 +377,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -362,7 +388,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "co.rockettown.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 4.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Release; }; @@ -378,6 +405,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "co.rockettown.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; }; name = Debug; }; @@ -389,6 +417,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "co.rockettown.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; }; name = Release; }; diff --git a/Timberjack.xcodeproj/xcshareddata/xcschemes/Timberjack.xcscheme b/Timberjack.xcodeproj/xcshareddata/xcschemes/Timberjack.xcscheme index da1525e..579ac00 100644 --- a/Timberjack.xcodeproj/xcshareddata/xcschemes/Timberjack.xcscheme +++ b/Timberjack.xcodeproj/xcshareddata/xcschemes/Timberjack.xcscheme @@ -1,6 +1,6 @@