From 0799f84ba03a5a99049cb48cd83ee2de6e670b5b Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 27 Apr 2017 14:12:20 +0300 Subject: [PATCH 1/6] Try to fix network service --- .../project.pbxproj | 16 +++++++------- .../LoadingBarButton.swift} | 16 +++++++------- ...kService.swift => ApiNetworkService.swift} | 17 +++++++++++--- .../Network/DefaultNetworkService.swift | 22 +------------------ 4 files changed, 31 insertions(+), 40 deletions(-) rename LeadKitAdditions/LeadKitAdditions/{Services/BarButtonLoadingService.swift => Classes/LoadingBarButton.swift} (82%) rename LeadKitAdditions/LeadKitAdditions/Services/Network/{SimpleNetworkService.swift => ApiNetworkService.swift} (86%) diff --git a/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj b/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj index f47d885..9963a0d 100644 --- a/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj +++ b/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj @@ -25,10 +25,10 @@ EF05EDE91EAFA8A000CAE7B6 /* PassCodeHolderProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDE81EAFA8A000CAE7B6 /* PassCodeHolderProtocol.swift */; }; EF05EDEB1EAFA8E600CAE7B6 /* PassCodeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDEA1EAFA8E600CAE7B6 /* PassCodeError.swift */; }; EF05EDED1EAFA96D00CAE7B6 /* PassCodeHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDEC1EAFA96D00CAE7B6 /* PassCodeHolder.swift */; }; - EF05EDF61EB0D4C300CAE7B6 /* BarButtonLoadingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDF51EB0D4C300CAE7B6 /* BarButtonLoadingService.swift */; }; EF05EDF81EB0D5A600CAE7B6 /* UIBarButtonItem+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDF71EB0D5A600CAE7B6 /* UIBarButtonItem+Extensions.swift */; }; EF05EDFC1EB0D77400CAE7B6 /* DefaultNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDFA1EB0D77400CAE7B6 /* DefaultNetworkService.swift */; }; - EF05EDFD1EB0D77400CAE7B6 /* SimpleNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDFB1EB0D77400CAE7B6 /* SimpleNetworkService.swift */; }; + EF05EDFD1EB0D77400CAE7B6 /* ApiNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDFB1EB0D77400CAE7B6 /* ApiNetworkService.swift */; }; + EF05EE021EB206C000CAE7B6 /* LoadingBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EE011EB206C000CAE7B6 /* LoadingBarButton.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -54,10 +54,10 @@ EF05EDE81EAFA8A000CAE7B6 /* PassCodeHolderProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassCodeHolderProtocol.swift; sourceTree = ""; }; EF05EDEA1EAFA8E600CAE7B6 /* PassCodeError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassCodeError.swift; sourceTree = ""; }; EF05EDEC1EAFA96D00CAE7B6 /* PassCodeHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassCodeHolder.swift; sourceTree = ""; }; - EF05EDF51EB0D4C300CAE7B6 /* BarButtonLoadingService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarButtonLoadingService.swift; sourceTree = ""; }; EF05EDF71EB0D5A600CAE7B6 /* UIBarButtonItem+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIBarButtonItem+Extensions.swift"; sourceTree = ""; }; EF05EDFA1EB0D77400CAE7B6 /* DefaultNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultNetworkService.swift; sourceTree = ""; }; - EF05EDFB1EB0D77400CAE7B6 /* SimpleNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleNetworkService.swift; sourceTree = ""; }; + EF05EDFB1EB0D77400CAE7B6 /* ApiNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiNetworkService.swift; sourceTree = ""; }; + EF05EE011EB206C000CAE7B6 /* LoadingBarButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingBarButton.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -117,6 +117,7 @@ children = ( EF05EDBD1EAF706200CAE7B6 /* ApiResponse.swift */, EF05EDBE1EAF706200CAE7B6 /* BaseDateFormatter.swift */, + EF05EE011EB206C000CAE7B6 /* LoadingBarButton.swift */, ); path = Classes; sourceTree = ""; @@ -125,7 +126,6 @@ isa = PBXGroup; children = ( EF05EDF91EB0D75A00CAE7B6 /* Network */, - EF05EDF51EB0D4C300CAE7B6 /* BarButtonLoadingService.swift */, EF05EDC71EAF91D500CAE7B6 /* BasePassCodeService.swift */, EF05EDB31EAF703A00CAE7B6 /* BaseUserService.swift */, EF05EDC51EAF70EB00CAE7B6 /* TouchIDService.swift */, @@ -201,8 +201,8 @@ EF05EDF91EB0D75A00CAE7B6 /* Network */ = { isa = PBXGroup; children = ( + EF05EDFB1EB0D77400CAE7B6 /* ApiNetworkService.swift */, EF05EDFA1EB0D77400CAE7B6 /* DefaultNetworkService.swift */, - EF05EDFB1EB0D77400CAE7B6 /* SimpleNetworkService.swift */, ); path = Network; sourceTree = ""; @@ -367,13 +367,13 @@ EF05EDE31EAFA7A600CAE7B6 /* BasePassCodeViewModel.swift in Sources */, EF05EDBB1EAF705500CAE7B6 /* ApiError.swift in Sources */, EF05EDE91EAFA8A000CAE7B6 /* PassCodeHolderProtocol.swift in Sources */, - EF05EDFD1EB0D77400CAE7B6 /* SimpleNetworkService.swift in Sources */, + EF05EDFD1EB0D77400CAE7B6 /* ApiNetworkService.swift in Sources */, EF05EDF81EB0D5A600CAE7B6 /* UIBarButtonItem+Extensions.swift in Sources */, EF05EDED1EAFA96D00CAE7B6 /* PassCodeHolder.swift in Sources */, - EF05EDF61EB0D4C300CAE7B6 /* BarButtonLoadingService.swift in Sources */, EF05EDB71EAF704800CAE7B6 /* Observable+Extensions.swift in Sources */, EF05EDC01EAF706200CAE7B6 /* ApiResponse.swift in Sources */, EF05EDBC1EAF705500CAE7B6 /* ConnectionError.swift in Sources */, + EF05EE021EB206C000CAE7B6 /* LoadingBarButton.swift in Sources */, EF05EDEB1EAFA8E600CAE7B6 /* PassCodeError.swift in Sources */, EF05EDB41EAF703A00CAE7B6 /* BaseUserService.swift in Sources */, EF05EDE51EAFA80D00CAE7B6 /* PassCodeConfiguration.swift in Sources */, diff --git a/LeadKitAdditions/LeadKitAdditions/Services/BarButtonLoadingService.swift b/LeadKitAdditions/LeadKitAdditions/Classes/LoadingBarButton.swift similarity index 82% rename from LeadKitAdditions/LeadKitAdditions/Services/BarButtonLoadingService.swift rename to LeadKitAdditions/LeadKitAdditions/Classes/LoadingBarButton.swift index 832cdad..c22f87d 100644 --- a/LeadKitAdditions/LeadKitAdditions/Services/BarButtonLoadingService.swift +++ b/LeadKitAdditions/LeadKitAdditions/Classes/LoadingBarButton.swift @@ -24,16 +24,16 @@ import UIKit import RxSwift import RxCocoa -public enum BarButtonLoadingServiceSide { +public enum LoadingBarButtonSide { case left case right } -public class BarButtonLoadingService { +public class LoadingBarButton { fileprivate weak var navigationItem: UINavigationItem? fileprivate var savedBarButton: UIBarButtonItem? - private let side: BarButtonLoadingServiceSide + private let side: LoadingBarButtonSide private var barButtonItem: UIBarButtonItem? { get { @@ -54,12 +54,12 @@ public class BarButtonLoadingService { } } - public init(navigationItem: UINavigationItem, side: BarButtonLoadingServiceSide) { + public init(navigationItem: UINavigationItem, side: LoadingBarButtonSide) { self.navigationItem = navigationItem self.side = side } - fileprivate func setBarButton(waiting: Bool = false) { + fileprivate func setState(waiting: Bool = false) { if waiting { savedBarButton = barButtonItem @@ -75,12 +75,12 @@ public class BarButtonLoadingService { extension Observable { - public func changeLoadingUI(using loadingService: BarButtonLoadingService) -> Observable { + public func changeLoadingUI(using barButton: LoadingBarButton) -> Observable { return observeOn(MainScheduler.instance) .do(onSubscribe: { - loadingService.setBarButton(waiting: true) + barButton.setState(waiting: true) }, onDispose: { - loadingService.setBarButton(waiting: false) + barButton.setState(waiting: false) }) } diff --git a/LeadKitAdditions/LeadKitAdditions/Services/Network/SimpleNetworkService.swift b/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift similarity index 86% rename from LeadKitAdditions/LeadKitAdditions/Services/Network/SimpleNetworkService.swift rename to LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift index e18c722..0673483 100644 --- a/LeadKitAdditions/LeadKitAdditions/Services/Network/SimpleNetworkService.swift +++ b/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift @@ -24,10 +24,8 @@ import LeadKit import Alamofire import ObjectMapper import RxSwift -import RxCocoa -import RxAlamofire -open class SimpleNetworkService: DefaultNetworkService { +open class ApiNetworkService: DefaultNetworkService { open func request(with parameters: ApiRequestParameters) -> Observable { let apiResponseRequest = rxRequest(with: parameters) as Observable<(response: HTTPURLResponse, model: ApiResponse)> @@ -59,3 +57,16 @@ open class SimpleNetworkService: DefaultNetworkService { } } + +extension ApiRequestParameters { + + init(url: String, parameters: [String: Any] = [:]) { + + self.init(url: ApiNetworkService.baseUrl + url, + method: .post, + parameters: parameters, + encoding: JSONEncoding.default, + headers: nil) + } + +} diff --git a/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift b/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift index 9be9aca..a728d15 100644 --- a/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift +++ b/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift @@ -20,13 +20,10 @@ // THE SOFTWARE. // -import Foundation import Alamofire import LeadKit import ObjectMapper import RxSwift -import RxCocoa -import RxAlamofire open class DefaultNetworkService: NetworkService { @@ -37,7 +34,7 @@ open class DefaultNetworkService: NetworkService { } open class var defaultTimeoutInterval: TimeInterval { - fatalError("You should override this var: defaultTimeoutInterval") + return 20.0 } public override init(sessionManager: SessionManager) { @@ -67,21 +64,4 @@ open class DefaultNetworkService: NetworkService { return sessionManager } - public static func apiRequestParameters(url: String, parameters: [String: Any] = [:]) -> ApiRequestParameters { - return ApiRequestParameters(baseUrl: baseUrl, url: url, parameters: parameters) - } - -} - -private extension ApiRequestParameters { - - init(baseUrl: String, url: String, parameters: [String: Any] = [:]) { - - self.init(url: baseUrl + url, - method: .post, - parameters: parameters, - encoding: JSONEncoding.default, - headers: nil) - } - } From 5341a55ac38cc5df159a32da46bdb4d0125f0c69 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 27 Apr 2017 14:30:21 +0300 Subject: [PATCH 2/6] ApiRequestParameters init --- .../LeadKitAdditions/Services/Network/ApiNetworkService.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift b/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift index 0673483..c395baf 100644 --- a/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift +++ b/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift @@ -60,7 +60,7 @@ open class ApiNetworkService: DefaultNetworkService { extension ApiRequestParameters { - init(url: String, parameters: [String: Any] = [:]) { + public init(url: String, parameters: [String: Any] = [:]) { self.init(url: ApiNetworkService.baseUrl + url, method: .post, From 69df75a94a118cb33b0867f976f17245d0af16ca Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 27 Apr 2017 14:42:22 +0300 Subject: [PATCH 3/6] Network service changes reverted --- .../Services/Network/ApiNetworkService.swift | 13 ------------- .../Network/DefaultNetworkService.swift | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift b/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift index c395baf..d588926 100644 --- a/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift +++ b/LeadKitAdditions/LeadKitAdditions/Services/Network/ApiNetworkService.swift @@ -57,16 +57,3 @@ open class ApiNetworkService: DefaultNetworkService { } } - -extension ApiRequestParameters { - - public init(url: String, parameters: [String: Any] = [:]) { - - self.init(url: ApiNetworkService.baseUrl + url, - method: .post, - parameters: parameters, - encoding: JSONEncoding.default, - headers: nil) - } - -} diff --git a/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift b/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift index a728d15..4daa92d 100644 --- a/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift +++ b/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift @@ -64,4 +64,21 @@ open class DefaultNetworkService: NetworkService { return sessionManager } + public static func apiRequestParameters(url: String, parameters: [String: Any] = [:]) -> ApiRequestParameters { + return ApiRequestParameters(baseUrl: baseUrl, url: url, parameters: parameters) + } + +} + +private extension ApiRequestParameters { + + init(baseUrl: String, url: String, parameters: [String: Any] = [:]) { + + self.init(url: baseUrl + url, + method: .post, + parameters: parameters, + encoding: JSONEncoding.default, + headers: nil) + } + } From 2ff0057f1230c33b60bc852fad2b89a0ce7da106 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 27 Apr 2017 15:39:43 +0300 Subject: [PATCH 4/6] Error handling basic support --- .../project.pbxproj | 4 ++++ .../Enums/ApiErrorProtocol.swift | 23 +++++++++++++++++++ .../Extensions/Observable+Extensions.swift | 23 +++++++++++++++++++ .../Network/DefaultNetworkService.swift | 17 -------------- 4 files changed, 50 insertions(+), 17 deletions(-) create mode 100644 LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift diff --git a/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj b/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj index 9963a0d..ef8b0fc 100644 --- a/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj +++ b/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj @@ -29,6 +29,7 @@ EF05EDFC1EB0D77400CAE7B6 /* DefaultNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDFA1EB0D77400CAE7B6 /* DefaultNetworkService.swift */; }; EF05EDFD1EB0D77400CAE7B6 /* ApiNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDFB1EB0D77400CAE7B6 /* ApiNetworkService.swift */; }; EF05EE021EB206C000CAE7B6 /* LoadingBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EE011EB206C000CAE7B6 /* LoadingBarButton.swift */; }; + EF05EE041EB21A2D00CAE7B6 /* ApiErrorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EE031EB21A2D00CAE7B6 /* ApiErrorProtocol.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -58,6 +59,7 @@ EF05EDFA1EB0D77400CAE7B6 /* DefaultNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultNetworkService.swift; sourceTree = ""; }; EF05EDFB1EB0D77400CAE7B6 /* ApiNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiNetworkService.swift; sourceTree = ""; }; EF05EE011EB206C000CAE7B6 /* LoadingBarButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingBarButton.swift; sourceTree = ""; }; + EF05EE031EB21A2D00CAE7B6 /* ApiErrorProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiErrorProtocol.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -147,6 +149,7 @@ isa = PBXGroup; children = ( EF05EDB91EAF705500CAE7B6 /* ApiError.swift */, + EF05EE031EB21A2D00CAE7B6 /* ApiErrorProtocol.swift */, EF05EDBA1EAF705500CAE7B6 /* ConnectionError.swift */, ); path = Enums; @@ -361,6 +364,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + EF05EE041EB21A2D00CAE7B6 /* ApiErrorProtocol.swift in Sources */, EF05EDB81EAF704800CAE7B6 /* UserDefaults+UserService.swift in Sources */, EF05EDE11EAFA74200CAE7B6 /* BasePassCodeViewController.swift in Sources */, EF05EDC61EAF70EB00CAE7B6 /* TouchIDService.swift in Sources */, diff --git a/LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift b/LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift new file mode 100644 index 0000000..3f7d8c9 --- /dev/null +++ b/LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift @@ -0,0 +1,23 @@ +// +// ApiErrorProtocol.swift +// LeadKitAdditions +// +// Created by Alexey Gerasimov on 27/04/2017. +// Copyright © 2017 TouchInstinct. All rights reserved. +// + +public protocol ApiErrorProtocol: RawRepresentable {} + +extension Error { + + public func isApiError(_ apiErrorType: T) -> Bool where T.RawValue == Int { + if let error = self as? ApiError, + case let .error(code: code, message: _) = error, + code == apiErrorType.rawValue { + return true + } else { + return false + } + } + +} diff --git a/LeadKitAdditions/LeadKitAdditions/Extensions/Observable+Extensions.swift b/LeadKitAdditions/LeadKitAdditions/Extensions/Observable+Extensions.swift index 3aa0e7a..4a9eec8 100644 --- a/LeadKitAdditions/LeadKitAdditions/Extensions/Observable+Extensions.swift +++ b/LeadKitAdditions/LeadKitAdditions/Extensions/Observable+Extensions.swift @@ -66,4 +66,27 @@ public extension Observable { } } + public func handleApiError(_ apiErrorType: T, + handler: @escaping () -> Void) -> Observable + where T.RawValue == Int { + + return observeOn(CurrentThreadScheduler.instance) + .do(onError: { error in + if error.isApiError(apiErrorType) { + handler() + } + }) + } + + public func changeLoadingBehaviour(isLoading: PublishSubject) -> Observable { + return observeOn(CurrentThreadScheduler.instance) + .do(onNext: { _ in + isLoading.onNext(false) + }, onError: { _ in + isLoading.onNext(false) + }, onSubscribe: { _ in + isLoading.onNext(true) + }) + } + } diff --git a/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift b/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift index 4daa92d..a728d15 100644 --- a/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift +++ b/LeadKitAdditions/LeadKitAdditions/Services/Network/DefaultNetworkService.swift @@ -64,21 +64,4 @@ open class DefaultNetworkService: NetworkService { return sessionManager } - public static func apiRequestParameters(url: String, parameters: [String: Any] = [:]) -> ApiRequestParameters { - return ApiRequestParameters(baseUrl: baseUrl, url: url, parameters: parameters) - } - -} - -private extension ApiRequestParameters { - - init(baseUrl: String, url: String, parameters: [String: Any] = [:]) { - - self.init(url: baseUrl + url, - method: .post, - parameters: parameters, - encoding: JSONEncoding.default, - headers: nil) - } - } From deb9b3b9e192f421129c376e4645fa729d5ccc7a Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 27 Apr 2017 15:51:26 +0300 Subject: [PATCH 5/6] Version incremented --- LeadKitAdditions.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LeadKitAdditions.podspec b/LeadKitAdditions.podspec index 582e346..5f61d19 100644 --- a/LeadKitAdditions.podspec +++ b/LeadKitAdditions.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "LeadKitAdditions" - s.version = "0.0.7" + s.version = "0.0.8" s.summary = "iOS framework with a bunch of tools for rapid development" s.homepage = "https://github.com/NikAshanin/LeadKitAdditions" s.license = "Apache License, Version 2.0" From 39ca3d7fbd8bb1f22d0085d4dae1315c41c953d8 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 27 Apr 2017 15:58:44 +0300 Subject: [PATCH 6/6] Oops --- .../Classes/LoadingBarButton.swift | 7 +++--- .../Enums/ApiErrorProtocol.swift | 22 +++++++++++++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/LeadKitAdditions/LeadKitAdditions/Classes/LoadingBarButton.swift b/LeadKitAdditions/LeadKitAdditions/Classes/LoadingBarButton.swift index c22f87d..4056510 100644 --- a/LeadKitAdditions/LeadKitAdditions/Classes/LoadingBarButton.swift +++ b/LeadKitAdditions/LeadKitAdditions/Classes/LoadingBarButton.swift @@ -32,7 +32,7 @@ public enum LoadingBarButtonSide { public class LoadingBarButton { fileprivate weak var navigationItem: UINavigationItem? - fileprivate var savedBarButton: UIBarButtonItem? + fileprivate var initialBarButton: UIBarButtonItem? private let side: LoadingBarButtonSide private var barButtonItem: UIBarButtonItem? { @@ -57,17 +57,16 @@ public class LoadingBarButton { public init(navigationItem: UINavigationItem, side: LoadingBarButtonSide) { self.navigationItem = navigationItem self.side = side + initialBarButton = barButtonItem } fileprivate func setState(waiting: Bool = false) { if waiting { - savedBarButton = barButtonItem - let activityIndicatorItem = UIBarButtonItem.activityIndicator barButtonItem = activityIndicatorItem.barButton activityIndicatorItem.activityIndicator.startAnimating() } else { - barButtonItem = savedBarButton + barButtonItem = initialBarButton } } diff --git a/LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift b/LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift index 3f7d8c9..e71b6ae 100644 --- a/LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift +++ b/LeadKitAdditions/LeadKitAdditions/Enums/ApiErrorProtocol.swift @@ -1,9 +1,23 @@ // -// ApiErrorProtocol.swift -// LeadKitAdditions +// Copyright (c) 2017 Touch Instinct // -// Created by Alexey Gerasimov on 27/04/2017. -// Copyright © 2017 TouchInstinct. All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. // public protocol ApiErrorProtocol: RawRepresentable {}