From a3902d3edafabc85553bac61bb9127378adf9eb6 Mon Sep 17 00:00:00 2001 From: dmytrokhl <57712402+dmytrokhl@users.noreply.github.com> Date: Mon, 25 May 2020 15:05:12 +0300 Subject: [PATCH 1/9] Feature/ch71641/Security guides (#127) Security guides --- SECURITY.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..d7c3c019 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +If you found a security issue, please do not open GitHub issues or pull requests - this makes the problem immediately visible to everyone, including malicious actors. Security issues in the SDK can be safely reported to VGS by email: security@verygoodsecurity.com + +**Before reporting security issue please read this** [guide](https://www.verygoodsecurity.com/learn/reporting-security-vulnerability). From 083fc40d1d520dbb64c1fe257c49f663184cc186 Mon Sep 17 00:00:00 2001 From: Vitalii Obertynskyi Date: Tue, 26 May 2020 12:42:06 +0300 Subject: [PATCH 2/9] Add textfield delegate on editing (#137) * Add Textfield delegate on editing events --- .../UIElements/Text Field/VGSTextField.swift | 10 ++++++++-- .../UIElements/Text Field/VGSTextFieldDelegate.swift | 9 ++++++--- demoapp/demoapp/ViewController.swift | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift index 8f699c1f..3ae3d77f 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift @@ -105,6 +105,7 @@ public class VGSTextField: UIView { deinit { vgsCollector?.unregisterTextFields(textField: [self]) + NotificationCenter.default.removeObserver(self) } } @@ -132,12 +133,16 @@ extension VGSTextField: UITextFieldDelegate { public func textFieldDidBeginEditing(_ textField: UITextField) { delegate?.vgsTextFieldDidBeginEditing?(self) } + + @objc func textFieldDidChange(_ textField: UITextField) { + delegate?.vgsTextFieldDidChange?(self) + } public func textFieldDidEndEditing(_ textField: UITextField) { delegate?.vgsTextFieldDidEndEditing?(self) } - @objc public func textFieldDidEndEditingOnExit(_ textField: UITextField) { + @objc func textFieldDidEndEditingOnExit(_ textField: UITextField) { delegate?.vgsTextFieldDidEndEditingOnReturn?(self) } } @@ -167,11 +172,12 @@ internal extension VGSTextField { NSLayoutConstraint.activate(verticalConstraint) //delegates + textField.addSomeTarget(self, action: #selector(textFieldDidBeginEditing), for: .editingDidBegin) //Note: .allEditingEvents doesn't work proparly when set text programatically. Use setText instead! textField.addSomeTarget(self, action: #selector(textFieldValueChanged), for: .allEditingEvents) - textField.addSomeTarget(self, action: #selector(textFieldDidBeginEditing), for: .editingDidBegin) textField.addSomeTarget(self, action: #selector(textFieldDidEndEditing), for: .editingDidEnd) textField.addSomeTarget(self, action: #selector(textFieldDidEndEditingOnExit), for: .editingDidEndOnExit) + NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidChange), name: UITextField.textDidChangeNotification, object: textField) // tap gesture for update focus state let tapGesture = UITapGestureRecognizer(target: self, action: #selector(focusOn)) textField.addGestureRecognizer(tapGesture) diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift index 5d1955fd..591692d9 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift @@ -17,11 +17,14 @@ public protocol VGSTextFieldDelegate { // MARK: - Handle user ineraction with VGSTextField /// VGSTextField did become first responder. - @objc optional func vgsTextFieldDidBeginEditing(_ textfield: VGSTextField) + @objc optional func vgsTextFieldDidBeginEditing(_ textField: VGSTextField) /// VGSTextField did resign first responder. - @objc optional func vgsTextFieldDidEndEditing(_ textfield: VGSTextField) + @objc optional func vgsTextFieldDidEndEditing(_ textField: VGSTextField) /// VGSTextField did resign first responder on Return button pressed. - @objc optional func vgsTextFieldDidEndEditingOnReturn(_ textfield: VGSTextField) + @objc optional func vgsTextFieldDidEndEditingOnReturn(_ textField: VGSTextField) + + /// VGSTextField was edited. + @objc optional func vgsTextFieldDidChange(_ textField: VGSTextField) } diff --git a/demoapp/demoapp/ViewController.swift b/demoapp/demoapp/ViewController.swift index 48d95bcd..384faf0e 100644 --- a/demoapp/demoapp/ViewController.swift +++ b/demoapp/demoapp/ViewController.swift @@ -120,7 +120,7 @@ class ViewController: UIViewController { cardNumber.textAlignment = .natural cardNumber.tintColor = .lightGray - // To handle VGSTextFieldDelegate methods + // To handle fields editing events implement `VGSTextFieldDelegate` methods // cardNumber.delegate = self cardNumber.becomeFirstResponder() From 49a04cf5cde8806fd463e339ce2b9bf4fdc46980 Mon Sep 17 00:00:00 2001 From: dmytrokhl <57712402+dmytrokhl@users.noreply.github.com> Date: Tue, 26 May 2020 12:52:42 +0300 Subject: [PATCH 3/9] Clear textfield functionality. (#139) * Clear textfield functionality. --- .../UIElements/Text Field/Mask/MaskedTextField.swift | 5 ++++- .../VGSCollectSDK/UIElements/Text Field/VGSTextField.swift | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField.swift index 8a41274a..30f41f6a 100755 --- a/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField.swift @@ -60,7 +60,10 @@ internal class MaskedTextField: UITextField { */ @available(*, deprecated, message: "Don't use this method.") override var text: String? { - set {} + set { + // This fixes issue when clear button don't remove content on not activ textfield form first touch + super.text = nil + } get { return nil } } diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift index 3ae3d77f..6b88676f 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift @@ -47,6 +47,11 @@ public class VGSTextField: UIView { didSet { textField.textAlignment = textAlignment } } + /// Sets when the clear button shows up. Default is `UITextField.ViewMode.never` + public var clearButtonMode: UITextField.ViewMode = .never { + didSet { textField.clearButtonMode = clearButtonMode } + } + // MARK: - Functional Attributes /// Specifies `VGSTextField` configuration parameters to work with `VGSCollect`. From cbec47b9cbb260585f2b32461753b649af6641fe Mon Sep 17 00:00:00 2001 From: dmytrokhl <57712402+dmytrokhl@users.noreply.github.com> Date: Wed, 27 May 2020 11:13:33 +0300 Subject: [PATCH 4/9] Add adjustsFontForContentSizeCategory attribute for VGSTextField. (#140) --- .../VGSCollectSDK/UIElements/Text Field/VGSTextField.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift index 6b88676f..970bc17b 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift @@ -52,6 +52,11 @@ public class VGSTextField: UIView { didSet { textField.clearButtonMode = clearButtonMode } } + /// Indicates whether `VGSTextField ` should automatically update its font when the device’s `UIContentSizeCategory` is changed. + public var adjustsFontForContentSizeCategory: Bool = false { + didSet { textField.adjustsFontForContentSizeCategory = adjustsFontForContentSizeCategory } + } + // MARK: - Functional Attributes /// Specifies `VGSTextField` configuration parameters to work with `VGSCollect`. From 98b56f53b01a6d0849537c00be17372d7077f718 Mon Sep 17 00:00:00 2001 From: Vitalii Obertynskyi Date: Wed, 27 May 2020 17:07:43 +0300 Subject: [PATCH 5/9] Possibility to edit icon size for card brand icon + change R/L side for icon (#111) * Added functionality for configuring the icon side * Update VGSCardTextField.swift --- .../Mask/MaskedTextField+padding.swift | 26 --- .../Text Field/VGSCardTextField.swift | 173 +++++++++++++----- .../UIElements/Text Field/VGSTextField.swift | 61 ++++-- .../CardTextFieldTests.swift | 23 +++ .../Text Fields Tests/TextFielsStyleUI.swift | 19 -- VGSCollectSDK.xcodeproj/project.pbxproj | 12 +- demoapp/demoapp.xcodeproj/project.pbxproj | 18 +- .../xcshareddata/xcschemes/demoapp.xcscheme | 10 + demoapp/demoapp/ViewController.swift | 5 +- demoapp/demoapp/en.lproj/LaunchScreen.strings | 1 + 10 files changed, 217 insertions(+), 131 deletions(-) delete mode 100644 Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField+padding.swift create mode 100644 demoapp/demoapp/en.lproj/LaunchScreen.strings diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField+padding.swift b/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField+padding.swift deleted file mode 100644 index 2638fe2e..00000000 --- a/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField+padding.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// MaskedTextField+padding.swift -// VGSCollectSDK -// -// Created by Vitalii Obertynskyi on 9/28/19. -// Copyright © 2019 Vitalii Obertynskyi. All rights reserved. -// - -import Foundation -#if canImport(UIKit) -import UIKit -#endif - -extension MaskedTextField { - override func textRect(forBounds bounds: CGRect) -> CGRect { - return bounds.inset(by: padding) - } - - override func placeholderRect(forBounds bounds: CGRect) -> CGRect { - return bounds.inset(by: padding) - } - - override func editingRect(forBounds bounds: CGRect) -> CGRect { - return bounds.inset(by: padding) - } -} diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift index d3e817a1..11b4024d 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift @@ -12,68 +12,145 @@ import UIKit /// An object that displays an editable text area. Can be use instead of a `VGSTextField` when need to detect and show credit card brand images. public class VGSCardTextField: VGSTextField { - /// card brand icon width - var iconWidth: CGFloat = 45 - - /// callback for taking card brand icon + + internal let cardIconView = UIImageView() + internal lazy var stackView = self.makeStackView() + internal let stackSpacing: CGFloat = 8.0 + internal lazy var defaultUnknowBrandImage: UIImage? = { + return UIImage(named: "unknown", in: AssetsBundle.main.iconBundle, compatibleWith: nil) + }() + + /// Card brand icon location. + public enum CardIconLocation { + case left + case right + } + + /// Card brand icon position. + public var cardIconLocation = CardIconLocation.right { + didSet { + setCardIconAtLocation(cardIconLocation) + } + } + + /// Card brand icon size. + public var cardIconSize: CGSize = CGSize(width: 45, height: 45) { + didSet { + updateCardIconViewSize() + } + } + + /// Callback that asks custom image for specific `SwiftLuhn.CardType` public var cardsIconSource: ((SwiftLuhn.CardType) -> UIImage?)? - internal lazy var cardIconView = self.makeCardIcon() - + /// :nodoc: public override func didMoveToSuperview() { super.didMoveToSuperview() - updateCardIcon() + updateCardImage() + } +} + +internal extension VGSCardTextField { + + // MARK: - Initialization + override func mainInitialization() { + super.mainInitialization() + + setupCardIconView() + setCardIconAtLocation(cardIconLocation) + updateCardImage() + } + + override func buildTextFieldUI() { + addSubview(stackView) + textField.translatesAutoresizingMaskIntoConstraints = false + stackView.addArrangedSubview(textField) + setMainPaddings() } + override func setMainPaddings() { + NSLayoutConstraint.deactivate(verticalConstraint) + NSLayoutConstraint.deactivate(horizontalConstraints) + + let views = ["view": self, "stackView": stackView] + + horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-\(padding.left)-[stackView]-\(padding.right)-|", + options: .alignAllCenterY, + metrics: nil, + views: views) + NSLayoutConstraint.activate(horizontalConstraints) + + verticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-\(padding.top)-[stackView]-\(padding.bottom)-|", + options: .alignAllCenterX, + metrics: nil, + views: views) + NSLayoutConstraint.activate(verticalConstraint) + self.layoutIfNeeded() + } + + private func makeStackView() -> UIStackView { + let stack = UIStackView() + stack.alignment = .fill + stack.axis = .horizontal + stack.distribution = .fillProportionally + stack.translatesAutoresizingMaskIntoConstraints = false + stack.spacing = 8 + return stack + } + // override textFieldDidChange override func textFieldValueChanged() { super.textFieldValueChanged() - updateCardIcon() + updateCardImage() + } + + func updateCardImage() { + if let state = state as? CardState { + cardIconView.image = (cardsIconSource == nil) ? state.cardBrand.brandIcon : cardsIconSource?(state.cardBrand) + } else { + cardIconView.image = defaultUnknowBrandImage + } + } + + func setCardIconAtLocation(_ location: CardIconLocation) { + cardIconView.removeFromSuperview() + switch location { + case .left: + stackView.insertArrangedSubview(cardIconView, at: 0) + case .right: + stackView.addArrangedSubview(cardIconView) + } } - internal func updateCardIcon() { - if let state = state as? CardState { - if cardsIconSource != nil { - let icon = cardsIconSource?(state.cardBrand) - cardIconView.image = icon - - } else { - cardIconView.image = state.cardBrand.brandIcon - } - } else { - cardIconView.image = UIImage(named: "unknown", in: AssetsBundle.main.iconBundle, compatibleWith: nil) + func updateCardIconViewSize() { + if let widthConstraint = cardIconView.constraints.filter({ $0.identifier == "widthConstraint" }).first { + widthConstraint.constant = cardIconSize.width + } + if let heightConstraint = cardIconView.constraints.filter({ $0.identifier == "heightConstraint" }).first { + heightConstraint.constant = cardIconSize.height } } // make image view for a card brand icon - private func makeCardIcon() -> UIImageView { - let result = UIImageView(frame: .zero) - - result.contentMode = .scaleAspectFit - addSubview(result) - - // make constraints - let views = ["view": result] - result.translatesAutoresizingMaskIntoConstraints = false - - let width = NSLayoutConstraint.constraints(withVisualFormat: "H:[view(==\(iconWidth))]", - options: .alignAllCenterY, - metrics: nil, - views: views) - NSLayoutConstraint.activate(width) - - let vertical = NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[view]-0-|", - options: .alignAllCenterX, - metrics: nil, - views: views) - NSLayoutConstraint.activate(vertical) - - let horizontal = NSLayoutConstraint.constraints(withVisualFormat: "H:[view]-5-|", - options: .alignAllCenterY, - metrics: nil, - views: views) - NSLayoutConstraint.activate(horizontal) - - return result + private func setupCardIconView() { + cardIconView.translatesAutoresizingMaskIntoConstraints = false + cardIconView.contentMode = .scaleAspectFit + let widthConstraint = NSLayoutConstraint(item: cardIconView, + attribute: .width, + relatedBy: .equal, + toItem: nil, + attribute: .notAnAttribute, + multiplier: 1, + constant: cardIconSize.width) + widthConstraint.identifier = "widthConstraint" + let heightConstraint = NSLayoutConstraint(item: cardIconView, + attribute: .height, + relatedBy: .equal, + toItem: nil, + attribute: .notAnAttribute, + multiplier: 1, + constant: cardIconSize.height) + heightConstraint.identifier = "heightConstraint" + cardIconView.addConstraints([widthConstraint, heightConstraint]) } } diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift index 970bc17b..1b3bd61e 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift @@ -22,7 +22,9 @@ public class VGSTextField: UIView { internal var validationModel = VGSValidation() internal var fieldName: String! internal var token: String? - + internal var horizontalConstraints = [NSLayoutConstraint]() + internal var verticalConstraint = [NSLayoutConstraint]() + // MARK: - UI Attributes /// Textfield placeholder string. @@ -39,7 +41,7 @@ public class VGSTextField: UIView { /// `UIEdgeInsets` for text and placeholder inside `VGSTextField`. public var padding = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) { - didSet { textField.padding = padding } + didSet { setMainPaddings() } } /// The technique to use for aligning the text. @@ -160,38 +162,57 @@ extension VGSTextField: UITextFieldDelegate { // MARK: - private API internal extension VGSTextField { + @objc func mainInitialization() { // set main style for view mainStyle() - // text view + // add UI elements + buildTextFieldUI() + // add otextfield observers and delegates + addTextFieldObservers() + } + + @objc + func buildTextFieldUI() { textField.translatesAutoresizingMaskIntoConstraints = false addSubview(textField) + setMainPaddings() + } + + @objc + func addTextFieldObservers() { + //delegates + //Note: .allEditingEvents doesn't work proparly when set text programatically. Use setText instead! + textField.addSomeTarget(self, action: #selector(textFieldValueChanged), for: .allEditingEvents) + textField.addSomeTarget(self, action: #selector(textFieldDidBeginEditing), for: .editingDidBegin) + textField.addSomeTarget(self, action: #selector(textFieldDidEndEditing), for: .editingDidEnd) + textField.addSomeTarget(self, action: #selector(textFieldDidEndEditingOnExit), for: .editingDidEndOnExit) + // tap gesture for update focus state + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(focusOn)) + textField.addGestureRecognizer(tapGesture) + } + + @objc + func setMainPaddings() { + NSLayoutConstraint.deactivate(verticalConstraint) + NSLayoutConstraint.deactivate(horizontalConstraints) + + let views = ["view": self, "textField": textField] - let views = ["view": self, "textField": textField] - - let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[textField]-0-|", + horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-\(padding.left)-[textField]-\(padding.right)-|", options: .alignAllCenterY, metrics: nil, views: views) - NSLayoutConstraint.activate(horizontalConstraints) + NSLayoutConstraint.activate(horizontalConstraints) - let verticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[textField]-0-|", + verticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-\(padding.top)-[textField]-\(padding.bottom)-|", options: .alignAllCenterX, metrics: nil, views: views) - NSLayoutConstraint.activate(verticalConstraint) - - //delegates - textField.addSomeTarget(self, action: #selector(textFieldDidBeginEditing), for: .editingDidBegin) - //Note: .allEditingEvents doesn't work proparly when set text programatically. Use setText instead! - textField.addSomeTarget(self, action: #selector(textFieldValueChanged), for: .allEditingEvents) - textField.addSomeTarget(self, action: #selector(textFieldDidEndEditing), for: .editingDidEnd) - textField.addSomeTarget(self, action: #selector(textFieldDidEndEditingOnExit), for: .editingDidEndOnExit) - NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidChange), name: UITextField.textDidChangeNotification, object: textField) - // tap gesture for update focus state - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(focusOn)) - textField.addGestureRecognizer(tapGesture) + NSLayoutConstraint.activate(verticalConstraint) + self.layoutIfNeeded() } + @objc func textFieldValueChanged() { diff --git a/Tests/FrameworkTests/Text Fields Tests/CardTextFieldTests.swift b/Tests/FrameworkTests/Text Fields Tests/CardTextFieldTests.swift index d618ea0b..fcaac90f 100644 --- a/Tests/FrameworkTests/Text Fields Tests/CardTextFieldTests.swift +++ b/Tests/FrameworkTests/Text Fields Tests/CardTextFieldTests.swift @@ -60,6 +60,29 @@ class CardTextFieldTests: XCTestCase { } } + func testLeftRightIcon() { + let iconSize = CGSize(width: 46, height: 46) + let cardNum = "41111 1111 1111 1111" + + cardTextField.textField.secureText = cardNum + cardTextField.focusOn() + cardTextField.cardIconView.layoutSubviews() + + // right icon + cardTextField.cardIconLocation = .right + cardTextField.cardIconSize = iconSize + XCTAssertNotNil(cardTextField.cardIconView) + XCTAssertNotNil(cardTextField.stackView.arrangedSubviews.count > 1) + XCTAssertTrue(cardTextField.stackView.arrangedSubviews.firstIndex(of: cardTextField.cardIconView) == 1) + + // left icon + cardTextField.cardIconLocation = .left + cardTextField.cardIconSize = iconSize + XCTAssertNotNil(cardTextField.cardIconView) + XCTAssertNotNil(cardTextField.stackView.arrangedSubviews.count > 1) + XCTAssertTrue(cardTextField.stackView.arrangedSubviews.firstIndex(of: cardTextField.cardIconView) == 0) + } + func disable_testInput16() { let format14 = "#### ###### ####" let format16 = "#### #### #### ####" diff --git a/Tests/FrameworkTests/Text Fields Tests/TextFielsStyleUI.swift b/Tests/FrameworkTests/Text Fields Tests/TextFielsStyleUI.swift index c32615d7..0dcd7220 100644 --- a/Tests/FrameworkTests/Text Fields Tests/TextFielsStyleUI.swift +++ b/Tests/FrameworkTests/Text Fields Tests/TextFielsStyleUI.swift @@ -48,25 +48,6 @@ class TextFielsStyleUI: XCTestCase { XCTAssert(textField.layer.masksToBounds == true) } - func testPadding() { - var newRect: CGRect = .zero - let value: CGFloat = 15 - let padding = UIEdgeInsets(top: 0, left: value, bottom: 0, right: value) - textField.padding = padding - - newRect = textField.textField.textRect(forBounds: .zero) - XCTAssert(newRect.origin.x == value) - XCTAssert(newRect.size.width == value*(-2)) - - newRect = textField.textField.placeholderRect(forBounds: .zero) - XCTAssert(newRect.origin.x == value) - XCTAssert(newRect.size.width == value*(-2)) - - newRect = textField.textField.editingRect(forBounds: .zero) - XCTAssert(newRect.origin.x == value) - XCTAssert(newRect.size.width == value*(-2)) - } - func testFont() { let font = UIFont(name: "Arial", size: 22) textField.font = font diff --git a/VGSCollectSDK.xcodeproj/project.pbxproj b/VGSCollectSDK.xcodeproj/project.pbxproj index 05821df9..358f1b76 100644 --- a/VGSCollectSDK.xcodeproj/project.pbxproj +++ b/VGSCollectSDK.xcodeproj/project.pbxproj @@ -63,15 +63,14 @@ FD790B97243BB403006A30CB /* CardBrandTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD790B96243BB403006A30CB /* CardBrandTest.swift */; }; FD790B9A243BB432006A30CB /* _CardBrandDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD790B98243BB42B006A30CB /* _CardBrandDataSource.swift */; }; FDA680DF239844FC00372817 /* CardTextFieldTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDA680DE239844FC00372817 /* CardTextFieldTests.swift */; }; + FDD398EE247D776600B55057 /* VGSCardTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD398ED247D776600B55057 /* VGSCardTextField.swift */; }; FDD42A3D233F67BA0005D631 /* VGSTextField+UIBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD42A3C233F67BA0005D631 /* VGSTextField+UIBuilder.swift */; }; FDE247CD2467439D008D75B0 /* ApiClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE890812333AC6D00FA170D /* ApiClientTests.swift */; }; FDE247CF246749C3008D75B0 /* VGSCollect+network.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE247CE246749C3008D75B0 /* VGSCollect+network.swift */; }; FDE7447D238A5C96003AA46B /* CardIcon.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FDE7447C238A5C96003AA46B /* CardIcon.xcassets */; }; - FDE7447F238AF13F003AA46B /* VGSCardTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE7447E238AF13F003AA46B /* VGSCardTextField.swift */; }; FDF696E123463ACB00063507 /* TextFielsStyleUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDF696E023463ACA00063507 /* TextFielsStyleUI.swift */; }; FDF696E3234643F300063507 /* LuhnTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDF696E2234643F300063507 /* LuhnTests.swift */; }; FDF696E52346461D00063507 /* StorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDF696E42346461D00063507 /* StorageTests.swift */; }; - FDFCA7FE233F7C1E00C81126 /* MaskedTextField+padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDFCA7FD233F7C1E00C81126 /* MaskedTextField+padding.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -139,17 +138,16 @@ FD790B96243BB403006A30CB /* CardBrandTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardBrandTest.swift; sourceTree = ""; }; FD790B98243BB42B006A30CB /* _CardBrandDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = _CardBrandDataSource.swift; sourceTree = ""; }; FDA680DE239844FC00372817 /* CardTextFieldTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardTextFieldTests.swift; sourceTree = ""; }; + FDD398ED247D776600B55057 /* VGSCardTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VGSCardTextField.swift; sourceTree = ""; }; FDD42A3C233F67BA0005D631 /* VGSTextField+UIBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VGSTextField+UIBuilder.swift"; sourceTree = ""; }; FDE247CE246749C3008D75B0 /* VGSCollect+network.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VGSCollect+network.swift"; sourceTree = ""; }; FDE7447C238A5C96003AA46B /* CardIcon.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = CardIcon.xcassets; sourceTree = ""; }; - FDE7447E238AF13F003AA46B /* VGSCardTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VGSCardTextField.swift; sourceTree = ""; }; FDE8907A2333A16A00FA170D /* ExpDateTextFieldTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpDateTextFieldTests.swift; sourceTree = ""; }; FDE8907C2333A1D400FA170D /* CVVTextFieldTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CVVTextFieldTests.swift; sourceTree = ""; }; FDE890812333AC6D00FA170D /* ApiClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApiClientTests.swift; sourceTree = ""; }; FDF696E023463ACA00063507 /* TextFielsStyleUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFielsStyleUI.swift; sourceTree = ""; }; FDF696E2234643F300063507 /* LuhnTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LuhnTests.swift; sourceTree = ""; }; FDF696E42346461D00063507 /* StorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageTests.swift; sourceTree = ""; }; - FDFCA7FD233F7C1E00C81126 /* MaskedTextField+padding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MaskedTextField+padding.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -275,7 +273,6 @@ children = ( FD4ED0E22373662500AEAD24 /* MaskedTextField+security.swift */, FD1489FE232D4F8000FD7781 /* MaskedTextField.swift */, - FDFCA7FD233F7C1E00C81126 /* MaskedTextField+padding.swift */, ); path = Mask; sourceTree = ""; @@ -400,7 +397,7 @@ FD1489FD232D4F8000FD7781 /* Mask */, FD148A05232EC53600FD7781 /* State */, FD2495622330E313009024E6 /* Validation */, - FDE7447E238AF13F003AA46B /* VGSCardTextField.swift */, + FDD398ED247D776600B55057 /* VGSCardTextField.swift */, FD05F9442316CE5A000EAF52 /* VGSTextField.swift */, FD3C01C223AFC0980096B4A4 /* VGSTextField+CVC.swift */, FD1B44652327D9B0009AA04A /* VGSTextField+state.swift */, @@ -543,12 +540,12 @@ FD24956C2330E313009024E6 /* VGSValidation+type.swift in Sources */, 3262B2FD23F5A36E00D4A73D /* VGSImagePicker.swift in Sources */, 3262B2FB23F5A32400D4A73D /* VGSFileSource.swift in Sources */, + FDD398EE247D776600B55057 /* VGSCardTextField.swift in Sources */, 3262B2FF23F5A3B300D4A73D /* VGSDocumentPicker.swift in Sources */, FD05F9472316CE5A000EAF52 /* Storage.swift in Sources */, FDE247CF246749C3008D75B0 /* VGSCollect+network.swift in Sources */, FD362EDF2401659100B4A640 /* VGSTextFieldDelegate.swift in Sources */, 321300182417F2C70062FEF0 /* VGSCollect.swift in Sources */, - FDE7447F238AF13F003AA46B /* VGSCardTextField.swift in Sources */, 327C9E142407EF92004C641C /* VGSErrorInfo.swift in Sources */, 321300172417F2B70062FEF0 /* VGSTextField.swift in Sources */, 328A574023FADC3500714675 /* VGSFilePickerConfiguration.swift in Sources */, @@ -562,7 +559,6 @@ 32FD980E23D5E3A9005FA989 /* VGSCardIOScanControllerDelegate.swift in Sources */, 321300192417F2E80062FEF0 /* VGSCollect+internal.swift in Sources */, 32E4989C23FAEF8300863E61 /* VGSFileInfo.swift in Sources */, - FDFCA7FE233F7C1E00C81126 /* MaskedTextField+padding.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/demoapp/demoapp.xcodeproj/project.pbxproj b/demoapp/demoapp.xcodeproj/project.pbxproj index 10382a7e..2400cf82 100644 --- a/demoapp/demoapp.xcodeproj/project.pbxproj +++ b/demoapp/demoapp.xcodeproj/project.pbxproj @@ -18,7 +18,7 @@ FD12B98D2304616E00B670DD /* demoappTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD12B98C2304616E00B670DD /* demoappTests.swift */; }; FD12B9982304616E00B670DD /* demoappUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD12B9972304616E00B670DD /* demoappUITests.swift */; }; FD7503A323F468E900591668 /* FilePickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD7503A223F468E900591668 /* FilePickerViewController.swift */; }; - FDB4C10F23831FE400EA6D3C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FDB4C10E23831FE400EA6D3C /* Main.storyboard */; }; + FDD398F0247D7A7100B55057 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FDD398EF247D7A7100B55057 /* Main.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -39,7 +39,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 320E884F23A7DC9A00A9C1FA /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = ""; }; 325A06C3240FF97B00BCE764 /* AppCollectorConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCollectorConfiguration.swift; sourceTree = ""; }; 5FB2107869E88DC903D1C009 /* Pods-demoappTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-demoappTests.release.xcconfig"; path = "Target Support Files/Pods-demoappTests/Pods-demoappTests.release.xcconfig"; sourceTree = ""; }; 67F5FCBA93936AD73802D53D /* Pods-demoappUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-demoappUITests.debug.xcconfig"; path = "Target Support Files/Pods-demoappUITests/Pods-demoappUITests.debug.xcconfig"; sourceTree = ""; }; @@ -54,7 +53,6 @@ FD12B9772304616C00B670DD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; FD12B9792304616C00B670DD /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; FD12B97E2304616E00B670DD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FD12B9812304616E00B670DD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; FD12B9832304616E00B670DD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FD12B9882304616E00B670DD /* demoappTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = demoappTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; FD12B98C2304616E00B670DD /* demoappTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = demoappTests.swift; sourceTree = ""; }; @@ -63,7 +61,10 @@ FD12B9972304616E00B670DD /* demoappUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = demoappUITests.swift; sourceTree = ""; }; FD12B9992304616E00B670DD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FD7503A223F468E900591668 /* FilePickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilePickerViewController.swift; sourceTree = ""; }; - FDB4C10E23831FE400EA6D3C /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + FDD398EF247D7A7100B55057 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + FDD398F2247D7A7C00B55057 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + FDD398F4247D877800B55057 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LaunchScreen.strings; sourceTree = ""; }; + FDD398F6247D877900B55057 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -146,8 +147,8 @@ FD12B97E2304616E00B670DD /* Assets.xcassets */, FD12B9832304616E00B670DD /* Info.plist */, FD12B9802304616E00B670DD /* LaunchScreen.storyboard */, - FDB4C10E23831FE400EA6D3C /* Main.storyboard */, FD12B9792304616C00B670DD /* ViewController.swift */, + FDD398EF247D7A7100B55057 /* Main.storyboard */, FD7503A223F468E900591668 /* FilePickerViewController.swift */, 325A06C3240FF97B00BCE764 /* AppCollectorConfiguration.swift */, ); @@ -281,9 +282,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + FDD398F0247D7A7100B55057 /* Main.storyboard in Resources */, FD12B9822304616E00B670DD /* LaunchScreen.storyboard in Resources */, FD12B97F2304616E00B670DD /* Assets.xcassets in Resources */, - FDB4C10F23831FE400EA6D3C /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -436,8 +437,9 @@ FD12B9802304616E00B670DD /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - FD12B9812304616E00B670DD /* Base */, - 320E884F23A7DC9A00A9C1FA /* ar */, + FDD398F2247D7A7C00B55057 /* Base */, + FDD398F4247D877800B55057 /* en */, + FDD398F6247D877900B55057 /* ar */, ); name = LaunchScreen.storyboard; sourceTree = ""; diff --git a/demoapp/demoapp.xcodeproj/xcshareddata/xcschemes/demoapp.xcscheme b/demoapp/demoapp.xcodeproj/xcshareddata/xcschemes/demoapp.xcscheme index 871df8f8..bd809eb2 100644 --- a/demoapp/demoapp.xcodeproj/xcshareddata/xcschemes/demoapp.xcscheme +++ b/demoapp/demoapp.xcodeproj/xcshareddata/xcschemes/demoapp.xcscheme @@ -88,6 +88,16 @@ ReferencedContainer = "container:demoapp.xcodeproj"> + + + + + + Date: Wed, 27 May 2020 17:42:09 +0300 Subject: [PATCH 6/9] Update DinersClub regex. (#142) --- .../UIElements/Text Field/Validation/Card/SwiftLuhn.swift | 4 ++-- .../Card Brand Tests/_CardBrandDataSource.swift | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/Validation/Card/SwiftLuhn.swift b/Sources/VGSCollectSDK/UIElements/Text Field/Validation/Card/SwiftLuhn.swift index ba99b172..74296a87 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/Validation/Card/SwiftLuhn.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/Validation/Card/SwiftLuhn.swift @@ -147,7 +147,7 @@ extension SwiftLuhn.CardType { case .amex: return [15] case .dinersClub: - return [14] + return [14, 16] case .discover: return [16] case .jcb: @@ -174,7 +174,7 @@ internal extension SwiftLuhn.CardType { case .amex: return "^3[4,7]\\d*$" case .dinersClub: - return "^(36|38|30[0-5])\\d*$" + return "^3(?:[6,8,9]|(?:0[0,5,9]+))\\d*$" case .discover: return "^(6011|65|64[4-9]|622)\\d*$" case .jcb: diff --git a/Tests/FrameworkTests/Card Brand Tests/_CardBrandDataSource.swift b/Tests/FrameworkTests/Card Brand Tests/_CardBrandDataSource.swift index 7c69c571..5ba0cf17 100644 --- a/Tests/FrameworkTests/Card Brand Tests/_CardBrandDataSource.swift +++ b/Tests/FrameworkTests/Card Brand Tests/_CardBrandDataSource.swift @@ -110,7 +110,8 @@ extension SwiftLuhn.CardType { "36006666333344", "36070500001020", "36700102000000", - "36148900647913" + "36148900647913", + "3096000032340126" ] case .jcb: return [ From 506d43506aed28529c15e7990b66aea7f5ee8387 Mon Sep 17 00:00:00 2001 From: "dmytro.khl" Date: Wed, 27 May 2020 18:09:01 +0300 Subject: [PATCH 7/9] Update textfield observers. --- .../VGSCollectSDK/UIElements/Text Field/VGSTextField.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift index 1b3bd61e..8748cbc5 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift @@ -182,11 +182,12 @@ internal extension VGSTextField { @objc func addTextFieldObservers() { //delegates + textField.addSomeTarget(self, action: #selector(textFieldDidBeginEditing), for: .editingDidBegin) //Note: .allEditingEvents doesn't work proparly when set text programatically. Use setText instead! textField.addSomeTarget(self, action: #selector(textFieldValueChanged), for: .allEditingEvents) - textField.addSomeTarget(self, action: #selector(textFieldDidBeginEditing), for: .editingDidBegin) textField.addSomeTarget(self, action: #selector(textFieldDidEndEditing), for: .editingDidEnd) textField.addSomeTarget(self, action: #selector(textFieldDidEndEditingOnExit), for: .editingDidEndOnExit) + NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidChange), name: UITextField.textDidChangeNotification, object: textField) // tap gesture for update focus state let tapGesture = UITapGestureRecognizer(target: self, action: #selector(focusOn)) textField.addGestureRecognizer(tapGesture) @@ -226,6 +227,7 @@ internal extension VGSTextField { textField.secureText = text // this will update card textfield icons textFieldValueChanged() + textFieldDidChange(textField) } // change focus here From 017361ab55f49d51ffcef10c9e5d615d2c314308 Mon Sep 17 00:00:00 2001 From: "dmytro.khl" Date: Wed, 27 May 2020 18:39:25 +0300 Subject: [PATCH 8/9] Update API docs. --- .../Text Field/VGSCardTextField.swift | 16 +- .../UIElements/Text Field/VGSTextField.swift | 1 - .../Text Field/VGSTextFieldDelegate.swift | 8 +- docs/Card Scan.html | 5 +- docs/Classes/CardState.html | 5 +- docs/Classes/State.html | 5 +- docs/Classes/SwiftLuhn.html | 5 +- docs/Classes/SwiftLuhn/CardType.html | 5 +- docs/Classes/VGSCardIOScanController.html | 5 +- docs/Classes/VGSCardTextField.html | 135 +++++++- .../VGSCardTextField/CardIconLocation.html | 288 ++++++++++++++++++ docs/Classes/VGSCollect.html | 5 +- docs/Classes/VGSConfiguration.html | 5 +- docs/Classes/VGSError.html | 5 +- docs/Classes/VGSFileInfo.html | 5 +- docs/Classes/VGSFilePickerConfiguration.html | 5 +- docs/Classes/VGSFilePickerController.html | 5 +- docs/Classes/VGSTextField.html | 83 ++++- docs/Enums/CradIODataType.html | 5 +- docs/Enums/Environment.html | 5 +- docs/Enums/FieldType.html | 5 +- docs/Enums/HTTPMethod.html | 5 +- docs/Enums/VGSErrorType.html | 5 +- docs/Enums/VGSFileSource.html | 5 +- docs/Enums/VGSResponse.html | 7 +- docs/Error Keys.html | 5 +- docs/Errors.html | 5 +- docs/File Picker.html | 5 +- docs/Observe State and Send Data.html | 5 +- .../VGSCardIOScanControllerDelegate.html | 5 +- .../VGSFilePickerControllerDelegate.html | 5 +- docs/Protocols/VGSTextFieldDelegate.html | 48 ++- docs/Type Aliases.html | 5 +- docs/UI Elements.html | 11 +- .../Resources/Documents/Card Scan.html | 5 +- .../Documents/Classes/CardState.html | 5 +- .../Resources/Documents/Classes/State.html | 5 +- .../Documents/Classes/SwiftLuhn.html | 5 +- .../Documents/Classes/SwiftLuhn/CardType.html | 5 +- .../Classes/VGSCardIOScanController.html | 5 +- .../Documents/Classes/VGSCardTextField.html | 135 +++++++- .../VGSCardTextField/CardIconLocation.html | 288 ++++++++++++++++++ .../Documents/Classes/VGSCollect.html | 5 +- .../Documents/Classes/VGSConfiguration.html | 5 +- .../Resources/Documents/Classes/VGSError.html | 5 +- .../Documents/Classes/VGSFileInfo.html | 5 +- .../Classes/VGSFilePickerConfiguration.html | 5 +- .../Classes/VGSFilePickerController.html | 5 +- .../Documents/Classes/VGSTextField.html | 83 ++++- .../Documents/Enums/CradIODataType.html | 5 +- .../Documents/Enums/Environment.html | 5 +- .../Resources/Documents/Enums/FieldType.html | 5 +- .../Resources/Documents/Enums/HTTPMethod.html | 5 +- .../Documents/Enums/VGSErrorType.html | 5 +- .../Documents/Enums/VGSFileSource.html | 5 +- .../Documents/Enums/VGSResponse.html | 7 +- .../Resources/Documents/Error Keys.html | 5 +- .../Contents/Resources/Documents/Errors.html | 5 +- .../Resources/Documents/File Picker.html | 5 +- .../Observe State and Send Data.html | 5 +- .../VGSCardIOScanControllerDelegate.html | 5 +- .../VGSFilePickerControllerDelegate.html | 5 +- .../Protocols/VGSTextFieldDelegate.html | 48 ++- .../Resources/Documents/Type Aliases.html | 5 +- .../Resources/Documents/UI Elements.html | 11 +- .../Contents/Resources/Documents/index.html | 5 +- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 49152 -> 53248 bytes docs/docsets/VGSCollectSDK.tgz | Bin 108333 -> 111703 bytes docs/index.html | 5 +- docs/search.json | 2 +- docs/undocumented.json | 29 +- 72 files changed, 1328 insertions(+), 134 deletions(-) create mode 100644 docs/Classes/VGSCardTextField/CardIconLocation.html create mode 100644 docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField/CardIconLocation.html diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift index 11b4024d..906da6c2 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift @@ -20,13 +20,18 @@ public class VGSCardTextField: VGSTextField { return UIImage(named: "unknown", in: AssetsBundle.main.iconBundle, compatibleWith: nil) }() - /// Card brand icon location. + // MARK: - Enum cases + /// Available Card brand icon positions enum. public enum CardIconLocation { + /// Card brand icon at left side of `VGSCardTextField`. case left + + /// Card brand icon at right side of `VGSCardTextField`. case right } - - /// Card brand icon position. + + // MARK: Attributes + /// Card brand icon position inside `VGSCardTextField`. public var cardIconLocation = CardIconLocation.right { didSet { setCardIconAtLocation(cardIconLocation) @@ -39,8 +44,9 @@ public class VGSCardTextField: VGSTextField { updateCardIconViewSize() } } - - /// Callback that asks custom image for specific `SwiftLuhn.CardType` + + // MARK: Custom card brand images + /// Asks custom image for specific `SwiftLuhn.CardType` public var cardsIconSource: ((SwiftLuhn.CardType) -> UIImage?)? /// :nodoc: diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift index 8748cbc5..82ba8335 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift @@ -214,7 +214,6 @@ internal extension VGSTextField { self.layoutIfNeeded() } - @objc func textFieldValueChanged() { // update status diff --git a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift index 591692d9..7a91b61d 100644 --- a/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift +++ b/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextFieldDelegate.swift @@ -16,15 +16,15 @@ public protocol VGSTextFieldDelegate { // MARK: - Handle user ineraction with VGSTextField - /// VGSTextField did become first responder. + /// `VGSTextField` did become first responder. @objc optional func vgsTextFieldDidBeginEditing(_ textField: VGSTextField) - /// VGSTextField did resign first responder. + /// `VGSTextField` did resign first responder. @objc optional func vgsTextFieldDidEndEditing(_ textField: VGSTextField) - /// VGSTextField did resign first responder on Return button pressed. + /// `VGSTextField` did resign first responder on Return button pressed. @objc optional func vgsTextFieldDidEndEditingOnReturn(_ textField: VGSTextField) - /// VGSTextField was edited. + /// `VGSTextField` input changed. @objc optional func vgsTextFieldDidChange(_ textField: VGSTextField) } diff --git a/docs/Card Scan.html b/docs/Card Scan.html index e76fd578..487e7e51 100644 --- a/docs/Card Scan.html +++ b/docs/Card Scan.html @@ -59,6 +59,9 @@ + @@ -305,7 +308,7 @@

Declaration

diff --git a/docs/Classes/CardState.html b/docs/Classes/CardState.html index 23fe7fa1..5a224142 100644 --- a/docs/Classes/CardState.html +++ b/docs/Classes/CardState.html @@ -59,6 +59,9 @@ + @@ -337,7 +340,7 @@

Declaration

diff --git a/docs/Classes/State.html b/docs/Classes/State.html index d5273528..62a5429c 100644 --- a/docs/Classes/State.html +++ b/docs/Classes/State.html @@ -59,6 +59,9 @@ + @@ -427,7 +430,7 @@

Declaration

diff --git a/docs/Classes/SwiftLuhn.html b/docs/Classes/SwiftLuhn.html index a9c73e29..f647e417 100644 --- a/docs/Classes/SwiftLuhn.html +++ b/docs/Classes/SwiftLuhn.html @@ -59,6 +59,9 @@ + @@ -257,7 +260,7 @@

Declaration

diff --git a/docs/Classes/SwiftLuhn/CardType.html b/docs/Classes/SwiftLuhn/CardType.html index 6a135311..ab1ff664 100644 --- a/docs/Classes/SwiftLuhn/CardType.html +++ b/docs/Classes/SwiftLuhn/CardType.html @@ -59,6 +59,9 @@ + @@ -560,7 +563,7 @@

Declaration

diff --git a/docs/Classes/VGSCardIOScanController.html b/docs/Classes/VGSCardIOScanController.html index 8bb09b50..07b7a01a 100644 --- a/docs/Classes/VGSCardIOScanController.html +++ b/docs/Classes/VGSCardIOScanController.html @@ -59,6 +59,9 @@ + @@ -495,7 +498,7 @@

Parameters

diff --git a/docs/Classes/VGSCardTextField.html b/docs/Classes/VGSCardTextField.html index ad707a03..e864daaf 100644 --- a/docs/Classes/VGSCardTextField.html +++ b/docs/Classes/VGSCardTextField.html @@ -59,6 +59,9 @@ + @@ -208,6 +211,132 @@

VGSCardTextField

+
+ + +
+ +

Enum cases

+

+
+
+
    +
  • +
    + + + + CardIconLocation + +
    +
    +
    +
    +
    +
    +

    Available Card brand icon positions enum.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CardIconLocation
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ + +
+ +

Attributes

+

+
+
+
    +
  • +
    + + + + cardIconLocation + +
    +
    +
    +
    +
    +
    +

    Card brand icon position inside VGSCardTextField.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cardIconLocation: VGSCardTextField.CardIconLocation { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cardIconSize + +
    +
    +
    +
    +
    +
    +

    Card brand icon size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cardIconSize: CGSize { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ + +
+ +

Custom card brand images

+

+
+
@@ -247,7 +376,7 @@

Declaration

diff --git a/docs/Classes/VGSCardTextField/CardIconLocation.html b/docs/Classes/VGSCardTextField/CardIconLocation.html new file mode 100644 index 00000000..f8d8a148 --- /dev/null +++ b/docs/Classes/VGSCardTextField/CardIconLocation.html @@ -0,0 +1,288 @@ + + + + CardIconLocation Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + VGSCollectSDK + + +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CardIconLocation

+
+
+
public enum CardIconLocation
+ +
+
+

Available Card brand icon positions enum.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Classes/VGSCollect.html b/docs/Classes/VGSCollect.html index 4f4ae3c5..b6ba7556 100644 --- a/docs/Classes/VGSCollect.html +++ b/docs/Classes/VGSCollect.html @@ -59,6 +59,9 @@ + @@ -699,7 +702,7 @@

Parameters

diff --git a/docs/Classes/VGSConfiguration.html b/docs/Classes/VGSConfiguration.html index c5f4ee9c..79075ee8 100644 --- a/docs/Classes/VGSConfiguration.html +++ b/docs/Classes/VGSConfiguration.html @@ -59,6 +59,9 @@ + @@ -570,7 +573,7 @@

Parameters

diff --git a/docs/Classes/VGSError.html b/docs/Classes/VGSError.html index 47d8bc0b..6c5afeb4 100644 --- a/docs/Classes/VGSError.html +++ b/docs/Classes/VGSError.html @@ -59,6 +59,9 @@ + @@ -277,7 +280,7 @@

Declaration

diff --git a/docs/Classes/VGSFileInfo.html b/docs/Classes/VGSFileInfo.html index adec132b..c447f895 100644 --- a/docs/Classes/VGSFileInfo.html +++ b/docs/Classes/VGSFileInfo.html @@ -59,6 +59,9 @@ + @@ -312,7 +315,7 @@

Declaration

diff --git a/docs/Classes/VGSFilePickerConfiguration.html b/docs/Classes/VGSFilePickerConfiguration.html index 6e5808a6..469a321a 100644 --- a/docs/Classes/VGSFilePickerConfiguration.html +++ b/docs/Classes/VGSFilePickerConfiguration.html @@ -59,6 +59,9 @@ + @@ -342,7 +345,7 @@

Parameters

diff --git a/docs/Classes/VGSFilePickerController.html b/docs/Classes/VGSFilePickerController.html index c5ff3cfa..4926f50f 100644 --- a/docs/Classes/VGSFilePickerController.html +++ b/docs/Classes/VGSFilePickerController.html @@ -59,6 +59,9 @@ + @@ -465,7 +468,7 @@

Parameters

diff --git a/docs/Classes/VGSTextField.html b/docs/Classes/VGSTextField.html index 1ab82713..e810256c 100644 --- a/docs/Classes/VGSTextField.html +++ b/docs/Classes/VGSTextField.html @@ -59,6 +59,9 @@ + @@ -244,7 +247,7 @@

Declaration

@@ -274,7 +277,7 @@

Declaration

@@ -304,7 +307,7 @@

Declaration

@@ -334,7 +337,67 @@

Declaration

+ + + +
  • +
    + + + + clearButtonMode + +
    +
    +
    +
    +
    +
    +

    Sets when the clear button shows up. Default is UITextField.ViewMode.never

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var clearButtonMode: UITextField.ViewMode { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Indicates whether VGSTextField should automatically update its font when the device’s UIContentSizeCategory is changed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var adjustsFontForContentSizeCategory: Bool { get set }
    + +
    +
    +
    @@ -377,7 +440,7 @@

    Declaration

    @@ -407,7 +470,7 @@

    Declaration

    @@ -481,7 +544,7 @@

    Declaration

    @@ -512,7 +575,7 @@

    Declaration

    @@ -542,7 +605,7 @@

    Declaration

    @@ -555,7 +618,7 @@

    Declaration

    diff --git a/docs/Enums/CradIODataType.html b/docs/Enums/CradIODataType.html index 3ba0ca03..f2713f95 100644 --- a/docs/Enums/CradIODataType.html +++ b/docs/Enums/CradIODataType.html @@ -59,6 +59,9 @@
  • + @@ -368,7 +371,7 @@

    Declaration

    diff --git a/docs/Enums/Environment.html b/docs/Enums/Environment.html index fa0c753e..4c69fedc 100644 --- a/docs/Enums/Environment.html +++ b/docs/Enums/Environment.html @@ -59,6 +59,9 @@ + @@ -277,7 +280,7 @@

    Declaration

    diff --git a/docs/Enums/FieldType.html b/docs/Enums/FieldType.html index 808ab462..9fff88e9 100644 --- a/docs/Enums/FieldType.html +++ b/docs/Enums/FieldType.html @@ -59,6 +59,9 @@ + @@ -367,7 +370,7 @@

    Declaration

    diff --git a/docs/Enums/HTTPMethod.html b/docs/Enums/HTTPMethod.html index fc00c976..321933e4 100644 --- a/docs/Enums/HTTPMethod.html +++ b/docs/Enums/HTTPMethod.html @@ -59,6 +59,9 @@ + @@ -307,7 +310,7 @@

    Declaration

    diff --git a/docs/Enums/VGSErrorType.html b/docs/Enums/VGSErrorType.html index 25abf258..b7f26aff 100644 --- a/docs/Enums/VGSErrorType.html +++ b/docs/Enums/VGSErrorType.html @@ -59,6 +59,9 @@ + @@ -462,7 +465,7 @@

    Declaration

    diff --git a/docs/Enums/VGSFileSource.html b/docs/Enums/VGSFileSource.html index 9af0c21d..36e53121 100644 --- a/docs/Enums/VGSFileSource.html +++ b/docs/Enums/VGSFileSource.html @@ -59,6 +59,9 @@ + @@ -307,7 +310,7 @@

    Declaration

    diff --git a/docs/Enums/VGSResponse.html b/docs/Enums/VGSResponse.html index 14c5d9e9..48670556 100644 --- a/docs/Enums/VGSResponse.html +++ b/docs/Enums/VGSResponse.html @@ -59,6 +59,9 @@ + @@ -258,7 +261,7 @@

    Parameters

    -

    response Data object.

    +

    response data object.

    @@ -376,7 +379,7 @@

    Parameters

    diff --git a/docs/Error Keys.html b/docs/Error Keys.html index 6364e7e4..6aabe181 100644 --- a/docs/Error Keys.html +++ b/docs/Error Keys.html @@ -59,6 +59,9 @@ + @@ -503,7 +506,7 @@

    Declaration

    diff --git a/docs/Errors.html b/docs/Errors.html index 8209baf1..8615ce08 100644 --- a/docs/Errors.html +++ b/docs/Errors.html @@ -59,6 +59,9 @@ + @@ -302,7 +305,7 @@

    Declaration

    diff --git a/docs/File Picker.html b/docs/File Picker.html index f997f79c..39fd9c01 100644 --- a/docs/File Picker.html +++ b/docs/File Picker.html @@ -59,6 +59,9 @@ + @@ -366,7 +369,7 @@

    Declaration

    diff --git a/docs/Observe State and Send Data.html b/docs/Observe State and Send Data.html index 90d277b7..1b44e46c 100644 --- a/docs/Observe State and Send Data.html +++ b/docs/Observe State and Send Data.html @@ -59,6 +59,9 @@ + @@ -397,7 +400,7 @@

    Declaration

    diff --git a/docs/Protocols/VGSCardIOScanControllerDelegate.html b/docs/Protocols/VGSCardIOScanControllerDelegate.html index c2df1fc3..d3a7a767 100644 --- a/docs/Protocols/VGSCardIOScanControllerDelegate.html +++ b/docs/Protocols/VGSCardIOScanControllerDelegate.html @@ -59,6 +59,9 @@ + @@ -333,7 +336,7 @@

    Declaration

    diff --git a/docs/Protocols/VGSFilePickerControllerDelegate.html b/docs/Protocols/VGSFilePickerControllerDelegate.html index 4984e260..4df6b139 100644 --- a/docs/Protocols/VGSFilePickerControllerDelegate.html +++ b/docs/Protocols/VGSFilePickerControllerDelegate.html @@ -59,6 +59,9 @@ + @@ -317,7 +320,7 @@

    Declaration

    diff --git a/docs/Protocols/VGSTextFieldDelegate.html b/docs/Protocols/VGSTextFieldDelegate.html index 24181139..5e0cfe8b 100644 --- a/docs/Protocols/VGSTextFieldDelegate.html +++ b/docs/Protocols/VGSTextFieldDelegate.html @@ -59,6 +59,9 @@ + @@ -232,7 +235,7 @@

    Handle user ineraction with VGSTextField

    -

    VGSTextField did become first responder.

    +

    VGSTextField did become first responder.

    @@ -240,7 +243,7 @@

    Declaration

    Swift

    @objc
    -optional func vgsTextFieldDidBeginEditing(_ textfield: VGSTextField)
    +optional func vgsTextFieldDidBeginEditing(_ textField: VGSTextField)
    @@ -263,7 +266,7 @@

    Declaration

    -

    VGSTextField did resign first responder.

    +

    VGSTextField did resign first responder.

    @@ -271,7 +274,7 @@

    Declaration

    Swift

    @objc
    -optional func vgsTextFieldDidEndEditing(_ textfield: VGSTextField)
    +optional func vgsTextFieldDidEndEditing(_ textField: VGSTextField)
    @@ -294,7 +297,7 @@

    Declaration

    -

    VGSTextField did resign first responder on Return button pressed.

    +

    VGSTextField did resign first responder on Return button pressed.

    @@ -302,7 +305,7 @@

    Declaration

    Swift

    @objc
    -optional func vgsTextFieldDidEndEditingOnReturn(_ textfield: VGSTextField)
    +optional func vgsTextFieldDidEndEditingOnReturn(_ textField: VGSTextField)
    @@ -312,6 +315,37 @@

    Declaration

    +
  • + +
    +
    +
    +
    +
    +

    VGSTextField input changed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +optional func vgsTextFieldDidChange(_ textField: VGSTextField)
    + +
    +
    + +
    +
    +
  • @@ -320,7 +354,7 @@

    Declaration

    diff --git a/docs/Type Aliases.html b/docs/Type Aliases.html index 2937e75f..80503072 100644 --- a/docs/Type Aliases.html +++ b/docs/Type Aliases.html @@ -59,6 +59,9 @@ + @@ -270,7 +273,7 @@

    Declaration

    diff --git a/docs/UI Elements.html b/docs/UI Elements.html index e9aa9170..5752fd12 100644 --- a/docs/UI Elements.html +++ b/docs/UI Elements.html @@ -59,6 +59,9 @@ + @@ -229,7 +232,7 @@

    Declaration

    @@ -260,7 +263,7 @@

    Declaration

    @@ -292,7 +295,7 @@

    Declaration

    @@ -398,7 +401,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Card Scan.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Card Scan.html index e76fd578..487e7e51 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Card Scan.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Card Scan.html @@ -59,6 +59,9 @@ + @@ -305,7 +308,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/CardState.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/CardState.html index 23fe7fa1..5a224142 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/CardState.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/CardState.html @@ -59,6 +59,9 @@ + @@ -337,7 +340,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/State.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/State.html index d5273528..62a5429c 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/State.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/State.html @@ -59,6 +59,9 @@ + @@ -427,7 +430,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn.html index a9c73e29..f647e417 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn.html @@ -59,6 +59,9 @@ + @@ -257,7 +260,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn/CardType.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn/CardType.html index 6a135311..ab1ff664 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn/CardType.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/SwiftLuhn/CardType.html @@ -59,6 +59,9 @@ + @@ -560,7 +563,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardIOScanController.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardIOScanController.html index 8bb09b50..07b7a01a 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardIOScanController.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardIOScanController.html @@ -59,6 +59,9 @@ + @@ -495,7 +498,7 @@

    Parameters

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField.html index ad707a03..e864daaf 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField.html @@ -59,6 +59,9 @@ + @@ -208,6 +211,132 @@

    VGSCardTextField

    +
    + + +
    + +

    Enum cases

    +

    +
    +
    +
      +
    • +
      + + + + CardIconLocation + +
      +
      +
      +
      +
      +
      +

      Available Card brand icon positions enum.

      + + See more +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public enum CardIconLocation
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Attributes

    +

    +
    +
    +
      +
    • +
      + + + + cardIconLocation + +
      +
      +
      +
      +
      +
      +

      Card brand icon position inside VGSCardTextField.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var cardIconLocation: VGSCardTextField.CardIconLocation { get set }
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + cardIconSize + +
      +
      +
      +
      +
      +
      +

      Card brand icon size.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var cardIconSize: CGSize { get set }
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Custom card brand images

    +

    +
    +
    @@ -247,7 +376,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField/CardIconLocation.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField/CardIconLocation.html new file mode 100644 index 00000000..f8d8a148 --- /dev/null +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCardTextField/CardIconLocation.html @@ -0,0 +1,288 @@ + + + + CardIconLocation Enumeration Reference + + + + + + + + + + + + + + + + +
    +

    + + VGSCollectSDK + + +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +
    + + + +
    + +
    + +
    +
    +

    CardIconLocation

    +
    +
    +
    public enum CardIconLocation
    + +
    +
    +

    Available Card brand icon positions enum.

    + +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + + + + diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCollect.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCollect.html index 4f4ae3c5..b6ba7556 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCollect.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSCollect.html @@ -59,6 +59,9 @@ + @@ -699,7 +702,7 @@

    Parameters

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSConfiguration.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSConfiguration.html index c5f4ee9c..79075ee8 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSConfiguration.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSConfiguration.html @@ -59,6 +59,9 @@ + @@ -570,7 +573,7 @@

    Parameters

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSError.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSError.html index 47d8bc0b..6c5afeb4 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSError.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSError.html @@ -59,6 +59,9 @@ + @@ -277,7 +280,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFileInfo.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFileInfo.html index adec132b..c447f895 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFileInfo.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFileInfo.html @@ -59,6 +59,9 @@ + @@ -312,7 +315,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerConfiguration.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerConfiguration.html index 6e5808a6..469a321a 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerConfiguration.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerConfiguration.html @@ -59,6 +59,9 @@ + @@ -342,7 +345,7 @@

    Parameters

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerController.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerController.html index c5ff3cfa..4926f50f 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerController.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSFilePickerController.html @@ -59,6 +59,9 @@ + @@ -465,7 +468,7 @@

    Parameters

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSTextField.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSTextField.html index 1ab82713..e810256c 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSTextField.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Classes/VGSTextField.html @@ -59,6 +59,9 @@ + @@ -244,7 +247,7 @@

    Declaration

    @@ -274,7 +277,7 @@

    Declaration

    @@ -304,7 +307,7 @@

    Declaration

    @@ -334,7 +337,67 @@

    Declaration

    + + + +
  • +
    + + + + clearButtonMode + +
    +
    +
    +
    +
    +
    +

    Sets when the clear button shows up. Default is UITextField.ViewMode.never

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var clearButtonMode: UITextField.ViewMode { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Indicates whether VGSTextField should automatically update its font when the device’s UIContentSizeCategory is changed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var adjustsFontForContentSizeCategory: Bool { get set }
    + +
    +
    +
    @@ -377,7 +440,7 @@

    Declaration

    @@ -407,7 +470,7 @@

    Declaration

    @@ -481,7 +544,7 @@

    Declaration

    @@ -512,7 +575,7 @@

    Declaration

    @@ -542,7 +605,7 @@

    Declaration

    @@ -555,7 +618,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/CradIODataType.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/CradIODataType.html index 3ba0ca03..f2713f95 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/CradIODataType.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/CradIODataType.html @@ -59,6 +59,9 @@
  • + @@ -368,7 +371,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/Environment.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/Environment.html index fa0c753e..4c69fedc 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/Environment.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/Environment.html @@ -59,6 +59,9 @@ + @@ -277,7 +280,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/FieldType.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/FieldType.html index 808ab462..9fff88e9 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/FieldType.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/FieldType.html @@ -59,6 +59,9 @@ + @@ -367,7 +370,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/HTTPMethod.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/HTTPMethod.html index fc00c976..321933e4 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/HTTPMethod.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/HTTPMethod.html @@ -59,6 +59,9 @@ + @@ -307,7 +310,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSErrorType.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSErrorType.html index 25abf258..b7f26aff 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSErrorType.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSErrorType.html @@ -59,6 +59,9 @@ + @@ -462,7 +465,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSFileSource.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSFileSource.html index 9af0c21d..36e53121 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSFileSource.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSFileSource.html @@ -59,6 +59,9 @@ + @@ -307,7 +310,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSResponse.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSResponse.html index 14c5d9e9..48670556 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSResponse.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Enums/VGSResponse.html @@ -59,6 +59,9 @@ + @@ -258,7 +261,7 @@

    Parameters

    -

    response Data object.

    +

    response data object.

    @@ -376,7 +379,7 @@

    Parameters

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Error Keys.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Error Keys.html index 6364e7e4..6aabe181 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Error Keys.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Error Keys.html @@ -59,6 +59,9 @@ + @@ -503,7 +506,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Errors.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Errors.html index 8209baf1..8615ce08 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Errors.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Errors.html @@ -59,6 +59,9 @@ + @@ -302,7 +305,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/File Picker.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/File Picker.html index f997f79c..39fd9c01 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/File Picker.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/File Picker.html @@ -59,6 +59,9 @@ + @@ -366,7 +369,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Observe State and Send Data.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Observe State and Send Data.html index 90d277b7..1b44e46c 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Observe State and Send Data.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Observe State and Send Data.html @@ -59,6 +59,9 @@ + @@ -397,7 +400,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSCardIOScanControllerDelegate.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSCardIOScanControllerDelegate.html index c2df1fc3..d3a7a767 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSCardIOScanControllerDelegate.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSCardIOScanControllerDelegate.html @@ -59,6 +59,9 @@ + @@ -333,7 +336,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSFilePickerControllerDelegate.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSFilePickerControllerDelegate.html index 4984e260..4df6b139 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSFilePickerControllerDelegate.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSFilePickerControllerDelegate.html @@ -59,6 +59,9 @@ + @@ -317,7 +320,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSTextFieldDelegate.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSTextFieldDelegate.html index 24181139..5e0cfe8b 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSTextFieldDelegate.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Protocols/VGSTextFieldDelegate.html @@ -59,6 +59,9 @@ + @@ -232,7 +235,7 @@

    Handle user ineraction with VGSTextField

    -

    VGSTextField did become first responder.

    +

    VGSTextField did become first responder.

    @@ -240,7 +243,7 @@

    Declaration

    Swift

    @objc
    -optional func vgsTextFieldDidBeginEditing(_ textfield: VGSTextField)
    +optional func vgsTextFieldDidBeginEditing(_ textField: VGSTextField)
    @@ -263,7 +266,7 @@

    Declaration

    -

    VGSTextField did resign first responder.

    +

    VGSTextField did resign first responder.

    @@ -271,7 +274,7 @@

    Declaration

    Swift

    @objc
    -optional func vgsTextFieldDidEndEditing(_ textfield: VGSTextField)
    +optional func vgsTextFieldDidEndEditing(_ textField: VGSTextField)
    @@ -294,7 +297,7 @@

    Declaration

    -

    VGSTextField did resign first responder on Return button pressed.

    +

    VGSTextField did resign first responder on Return button pressed.

    @@ -302,7 +305,7 @@

    Declaration

    Swift

    @objc
    -optional func vgsTextFieldDidEndEditingOnReturn(_ textfield: VGSTextField)
    +optional func vgsTextFieldDidEndEditingOnReturn(_ textField: VGSTextField)
    @@ -312,6 +315,37 @@

    Declaration

    +
  • + +
    +
    +
    +
    +
    +

    VGSTextField input changed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +optional func vgsTextFieldDidChange(_ textField: VGSTextField)
    + +
    +
    + +
    +
    +
  • @@ -320,7 +354,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Type Aliases.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Type Aliases.html index 2937e75f..80503072 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Type Aliases.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/Type Aliases.html @@ -59,6 +59,9 @@ + @@ -270,7 +273,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/UI Elements.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/UI Elements.html index e9aa9170..5752fd12 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/UI Elements.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/UI Elements.html @@ -59,6 +59,9 @@ + @@ -229,7 +232,7 @@

    Declaration

    @@ -260,7 +263,7 @@

    Declaration

    @@ -292,7 +295,7 @@

    Declaration

    @@ -398,7 +401,7 @@

    Declaration

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/index.html b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/index.html index 6adc6aed..ea6617e9 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/index.html @@ -58,6 +58,9 @@ + @@ -627,7 +630,7 @@

    License

    diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/search.json b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/search.json index 8f5fdd58..210baae7 100644 --- a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Type%20Aliases.html#/s:13VGSCollectSDK11HTTPHeadersa":{"name":"HTTPHeaders","abstract":"

    Key-value data type, used in http request headers.

    "},"Type%20Aliases.html#/s:13VGSCollectSDK8JsonDataa":{"name":"JsonData","abstract":"

    Key-value data type, usually used for response format.

    "},"Error%20Keys.html#/s:13VGSCollectSDK30VGSSDKErrorInputDataIsNotValidSSvp":{"name":"VGSSDKErrorInputDataIsNotValid","abstract":"

    Error key, used for errors when input data is required to be not empty or to be valid only, but is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK28VGSSDKErrorInputDataRequiredSSvp":{"name":"VGSSDKErrorInputDataRequired","abstract":"

    Error key, used for errors when input data is required to be not empty but is empty or nil.

    "},"Error%20Keys.html#/s:13VGSCollectSDK33VGSSDKErrorInputDataRequiredValidSSvp":{"name":"VGSSDKErrorInputDataRequiredValid","abstract":"

    Error key, used for errors when input data is required to be valid is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK23VGSSDKErrorFileNotFoundSSvp":{"name":"VGSSDKErrorFileNotFound","abstract":"

    Error key, used for errors when SDK can’t find the file at file path. Can happened when file changes the path or doesn’t exist.

    "},"Error%20Keys.html#/s:13VGSCollectSDK31VGSSDKErrorFileTypeNotSupportedSSvp":{"name":"VGSSDKErrorFileTypeNotSupported","abstract":"

    Error key, used for errors when file type is not supported by SDK.

    "},"Error%20Keys.html#/s:13VGSCollectSDK34VGSSDKErrorFileSizeExceedsTheLimitSSvp":{"name":"VGSSDKErrorFileSizeExceedsTheLimit","abstract":"

    Error key, used for errors when file size exceeds maximum limit.

    "},"Error%20Keys.html#/s:13VGSCollectSDK29VGSSDKErrorSourceNotAvailableSSvp":{"name":"VGSSDKErrorSourceNotAvailable","abstract":"

    Error key, used for errors when SDK can’t get access to specific source.

    "},"Error%20Keys.html#/s:13VGSCollectSDK39VGSSDKErrorUnexpectedResponseDataFormatSSvp":{"name":"VGSSDKErrorUnexpectedResponseDataFormat","abstract":"

    Error key, used for errors when response for SDK API request is in format that not supported by SDK.

    "},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO19inputDataIsNotValidyA2CmF":{"name":"inputDataIsNotValid","abstract":"

    When input data is not valid, but required to be valid

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO17inputFileNotFoundyA2CmF":{"name":"inputFileNotFound","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO09inputFileD14IsNotSupportedyA2CmF":{"name":"inputFileTypeIsNotSupported","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28inputFileSizeExceedsTheLimityA2CmF":{"name":"inputFileSizeExceedsTheLimit","abstract":"

    When file size is larger then allowed limit

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO18sourceNotAvailableyA2CmF":{"name":"sourceNotAvailable","abstract":"

    When can’t get access to file source

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO018unexpectedResponseD0yA2CmF":{"name":"unexpectedResponseType","abstract":"

    When response type is not supported

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28unexpectedResponseDataFormatyA2CmF":{"name":"unexpectedResponseDataFormat","abstract":"

    When reponse data format is not supported

    ","parent_name":"VGSErrorType"},"Classes/VGSError.html#/s:13VGSCollectSDK8VGSErrorC4typeAA0C4TypeOSgvp":{"name":"type","abstract":"

    VGSErrorType- required for each VGSError instance

    ","parent_name":"VGSError"},"Classes/VGSError.html#/c:@M@VGSCollectSDK@objc(cs)VGSError(py)code":{"name":"code","abstract":"

    Code assiciated with VGSErrorType

    ","parent_name":"VGSError"},"Classes/VGSError.html":{"name":"VGSError","abstract":"

    An error produced by VGSCollectSDK. Works similar to default NSError in iOS.

    "},"Enums/VGSErrorType.html":{"name":"VGSErrorType","abstract":"

    Type of VGSError and it status code.

    "},"Errors.html#/s:13VGSCollectSDK0A14SDKErrorDomainSSvp":{"name":"VGSCollectSDKErrorDomain","abstract":"

    An error domain string used to produce VGSError from VGSCollectSDK - “vgscollect.sdk”

    "},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3getyA2CmF":{"name":"get","abstract":"

    GET method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO4postyA2CmF":{"name":"post","abstract":"

    POST method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3putyA2CmF":{"name":"put","abstract":"

    PUT method

    ","parent_name":"HTTPMethod"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7successyACSi_10Foundation4DataVSgSo13NSURLResponseCSgtcACmF":{"name":"success(_:_:_:)","abstract":"

    Success response case

    ","parent_name":"VGSResponse"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7failureyACSi_10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgtcACmF":{"name":"failure(_:_:_:_:)","abstract":"

    Failed response case

    ","parent_name":"VGSResponse"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC5last4SSvp":{"name":"last4","abstract":"

    Last 4 digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC3binSSvp":{"name":"bin","abstract":"

    Bin digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC9cardBrandAA9SwiftLuhnC0C4TypeOvp":{"name":"cardBrand","abstract":"

    Credit Card Brand of the card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains CardState attributes and their values.

    ","parent_name":"CardState"},"Classes/State.html#/s:13VGSCollectSDK5StateC9fieldNameSSSgvp":{"name":"fieldName","abstract":"

    VGSConfiguration.fieldName associated with VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC10isRequiredSbvp":{"name":"isRequired","abstract":"

    VGSConfiguration.isRequired attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    VGSConfiguration.isRequiredValidOnly attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isValidSbvp":{"name":"isValid","abstract":"

    Contains current validation state for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isEmptySbvp":{"name":"isEmpty","abstract":"

    Show if VGSTextField input is empty

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11inputLengthSivp":{"name":"inputLength","abstract":"

    Input data length in VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains State attributes and their values

    ","parent_name":"State"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO7sandboxyA2CmF":{"name":"sandbox","abstract":"

    Should be used for development and testing purpose.

    ","parent_name":"Environment"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO4liveyA2CmF":{"name":"live","abstract":"

    Should be used for production.

    ","parent_name":"Environment"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13customHeadersSDyS2SGSgvp":{"name":"customHeaders","abstract":"

    Set your custom HTTP headers

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C17observeFieldStateyAA07VGSTextD0CcSgvp":{"name":"observeFieldState","abstract":"

    Observe only focused VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13observeStatesySayAA12VGSTextFieldCGcSgvp":{"name":"observeStates","abstract":"

    Observe all VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C2id11environmentACSS_AA11EnvironmentOtcfc":{"name":"init(id:environment:)","abstract":"

    Initialzation

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C10cleanFilesyyF":{"name":"cleanFiles()","abstract":"

    Detach files for associated VGSCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12getTextField9fieldNameAA07VGSTextE0CSgSS_tF":{"name":"getTextField(fieldName:)","abstract":"

    Returns VGSTextField with VGSConfiguration.fieldName associated with VGCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12isJailbrokenSbyFZ":{"name":"isJailbroken()","abstract":"

    Check device if it jailbroken

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendData4path6method05extraD010completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendData(path:method:extraData:completion:)","abstract":"

    Send data from VGSTextFields to your organization vault.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendFile4path6method9extraData10completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendFile(path:method:extraData:completion:)","abstract":"

    Send file to your organization vault. Only send one file at a time.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html":{"name":"VGSCollect","abstract":"

    An object you use for observing VGSTextField State and send data to your organization vault.

    "},"Enums/Environment.html":{"name":"Environment","abstract":"

    Organization vault environment.

    "},"Classes/State.html":{"name":"State","abstract":"

    An object that describes VGSTextField state. State attributes are read-only.

    "},"Classes/CardState.html":{"name":"CardState","abstract":"

    An object that describes VGSCardTextField state. State attributes are read-only.

    "},"Enums/VGSResponse.html":{"name":"VGSResponse","abstract":"

    Response enum cases for SDK requests

    "},"Enums/HTTPMethod.html":{"name":"HTTPMethod","abstract":"

    HTTP request methods

    "},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)fileExtension":{"name":"fileExtension","abstract":"

    File extension, like “jpeg”, “png”, etc.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)size":{"name":"size","abstract":"

    File size.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)sizeUnits":{"name":"sizeUnits","abstract":"

    File size units.

    ","parent_name":"VGSFileInfo"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO12photoLibraryyA2CmF":{"name":"photoLibrary","abstract":"

    Device photo library.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO6camerayA2CmF":{"name":"camera","abstract":"

    Device camera.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO18documentsDirectoryyA2CmF":{"name":"documentsDirectory","abstract":"

    Device documents directory.

    ","parent_name":"VGSFileSource"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidPickFileWithInfo:":{"name":"userDidPickFileWithInfo(_:)","abstract":"

    On user select a file

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidSCancelFilePicking":{"name":"userDidSCancelFilePicking()","abstract":"

    On user canceling file picking

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)filePickingFailedWithError:":{"name":"filePickingFailedWithError(_:)","abstract":"

    On error occured when user pick a file.

    ","parent_name":"VGSFilePickerControllerDelegate"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with selected file by user. Used as a JSON key on send request with file data to your organozation vault.

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9collector9fieldName10fileSourceAcA0A0C_SSAA0cJ0Otcfc":{"name":"init(collector:fieldName:fileSource:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSFilePickerControllerDelegate - handle user interaction on file picking.

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC13configurationAcA0cD13ConfigurationC_tcfc":{"name":"init(configuration:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011presentFileD02on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentFilePicker(on:animated:completion:)","abstract":"

    Present file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011dismissFileD08animated10completionySb_yycSgtF":{"name":"dismissFilePicker(animated:completion:)","abstract":"

    Dismiss file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html":{"name":"VGSFilePickerController","abstract":"

    Controller responsible for importing files from device sources.

    "},"Classes/VGSFilePickerConfiguration.html":{"name":"VGSFilePickerConfiguration","abstract":"

    A class responsible for configuration VGSFilePickerController.

    "},"Protocols/VGSFilePickerControllerDelegate.html":{"name":"VGSFilePickerControllerDelegate","abstract":"

    Delegates produced by VGSFilePickerController.

    "},"Enums/VGSFileSource.html":{"name":"VGSFileSource","abstract":"

    Available file source destinations that VGSFilePickerController can work with.

    "},"Classes/VGSFileInfo.html":{"name":"VGSFileInfo","abstract":"

    An object that holds optional files’ metadata on selecting file through VGSFilePickerController.

    "},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCardNumber":{"name":"cardNumber","abstract":"

    Credit Card Number. 16 digits string.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationDate":{"name":"expirationDate","abstract":"

    Credit Card Expiration Date. String in format “01/21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationMonth":{"name":"expirationMonth","abstract":"

    Credit Card Expiration Month. String in format “01”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationYear":{"name":"expirationYear","abstract":"

    Credit Card Expiration Year. String in format “21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCvc":{"name":"cvc","abstract":"

    Credit Card CVC code. 3-4 digits string in format “123”.

    ","parent_name":"CradIODataType"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidFinishScan":{"name":"userDidFinishScan()","abstract":"

    On user confirm scanned data by selecting Done button on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidCancelScan":{"name":"userDidCancelScan()","abstract":"

    On user press Cancel buttonn on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)textFieldForScannedDataWithType:":{"name":"textFieldForScannedData(type:)","abstract":"

    Asks VGSTextField where scanned data with VGSConfiguration.FieldType need to be set. Called after user select Done button, just before userDidFinishScan() delegate.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSCardIOScanControllerDelegate - handle user interaction with Card.io scanner

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC23preferredCameraPositionSo015AVCaptureDeviceH0VSgvp":{"name":"preferredCameraPosition","abstract":"

    Defines preferred AVCaptureDevice.Position. Deault is AVCaptureDevice.Position.unspecified

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerCyAcA0cdE8Delegate_pSgcfc":{"name":"init(_:)","abstract":"

    Initialization

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18presentCardScanner2on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentCardScanner(on:animated:completion:)","abstract":"

    Present Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18dismissCardScanner8animated10completionySb_yycSgtF":{"name":"dismissCardScanner(animated:completion:)","abstract":"

    Dismiss Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html":{"name":"VGSCardIOScanController","abstract":"

    Controller responsible for managing Card.io scanner

    "},"Protocols/VGSCardIOScanControllerDelegate.html":{"name":"VGSCardIOScanControllerDelegate","abstract":"

    Delegates produced by VGSCardIOScanController instance.

    "},"Enums/CradIODataType.html":{"name":"CradIODataType","abstract":"

    Supported scan data fields by Card.io

    "},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO12visaElectronyA2EmF":{"name":"visaElectron","abstract":"

    Visa Electron

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7maestroyA2EmF":{"name":"maestro","abstract":"

    Maestro

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4visayA2EmF":{"name":"visa","abstract":"

    Visa

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10mastercardyA2EmF":{"name":"mastercard","abstract":"

    Mastercard

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4amexyA2EmF":{"name":"amex","abstract":"

    American Express

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10dinersClubyA2EmF":{"name":"dinersClub","abstract":"

    Diner’s Club

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO8discoveryA2EmF":{"name":"discover","abstract":"

    Discover

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO3jcbyA2EmF":{"name":"jcb","abstract":"

    JCB

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    Not supported card type - “unknown”

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11stringValueSSvp":{"name":"stringValue","abstract":"

    String representation of SwiftLuhn.CardType enum values.

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11cardLengthsSaySiGvp":{"name":"cardLengths","abstract":"

    Returns array with valid card number lengths for specific SwiftLuhn.CardType

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html":{"name":"CardType","abstract":"

    Supported card types

    ","parent_name":"SwiftLuhn"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO4noneyA2CmF":{"name":"none","abstract":"

    Field type that doesn’t require any input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO10cardNumberyA2CmF":{"name":"cardNumber","abstract":"

    Field type that requires Credit Card Number input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO7expDateyA2CmF":{"name":"expDate","abstract":"

    Field type that requires Expiration Date input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO3cvcyA2CmF":{"name":"cvc","abstract":"

    Field type that requires Credit Card CVC input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO14cardHolderNameyA2CmF":{"name":"cardHolderName","abstract":"

    Field type that requires Cardholder Name input formatting and validation.

    ","parent_name":"FieldType"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC4typeAA9FieldTypeOvp":{"name":"type","abstract":"

    Type of field congfiguration. Default is FieldType.none.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with VGSTextField and used as a JSON key on send request with textfield data to your organozation vault.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC10isRequiredSbvp":{"name":"isRequired","abstract":"

    Set if VGSTextField is required to be non-empty and non-nil on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    Set if VGSTextField is required to be valid only on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13formatPatternSSSgvp":{"name":"formatPattern","abstract":"

    Input data visual format pattern. If not applied, will be set by default depending on field type.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC7dividerSSSgvp":{"name":"divider","abstract":"

    String, used to replace not default VGSConfiguration.formatPattern characters in input text on send request.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC12keyboardTypeSo010UIKeyboardE0VSgvp":{"name":"keyboardType","abstract":"

    Preferred UIKeyboardType for VGSTextField. If not applied, will be set by default depending on field type parameter.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13returnKeyTypeSo08UIReturneF0VSgvp":{"name":"returnKeyType","abstract":"

    Preferred UIReturnKeyType for VGSTextField.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC18keyboardAppearanceSo010UIKeyboardE0VSgvp":{"name":"keyboardAppearance","abstract":"

    Preferred UIKeyboardAppearance for textfield. By default is UIKeyboardAppearance.default.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9collector9fieldNameAcA0A0C_SStcfc":{"name":"init(collector:fieldName:)","abstract":"

    Initialization

    ","parent_name":"VGSConfiguration"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidBeginEditing:":{"name":"vgsTextFieldDidBeginEditing(_:)","abstract":"

    VGSTextField did become first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditing:":{"name":"vgsTextFieldDidEndEditing(_:)","abstract":"

    VGSTextField did resign first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditingOnReturn:":{"name":"vgsTextFieldDidEndEditingOnReturn(_:)","abstract":"

    VGSTextField did resign first responder on Return button pressed.

    ","parent_name":"VGSTextFieldDelegate"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC15cardsIconSourceSo7UIImageCSgAA9SwiftLuhnC8CardTypeOcSgvp":{"name":"cardsIconSource","abstract":"

    callback for taking card brand icon

    ","parent_name":"VGSCardTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC11placeholderSSSgvp":{"name":"placeholder","abstract":"

    Textfield placeholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC21attributedPlaceholderSo18NSAttributedStringCSgvp":{"name":"attributedPlaceholder","abstract":"

    Textfield attributedPlaceholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC7paddingSo12UIEdgeInsetsVvp":{"name":"padding","abstract":"

    UIEdgeInsets for text and placeholder inside VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13textAlignmentSo06NSTextF0Vvp":{"name":"textAlignment","abstract":"

    The technique to use for aligning the text.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13configurationAA16VGSConfigurationCSgvp":{"name":"configuration","abstract":"

    Specifies VGSTextField configuration parameters to work with VGSCollect.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC8delegateAA0cD8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegates VGSTextField editing events. Default is nil.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC5stateAA5StateCvp":{"name":"state","abstract":"

    Describes VGSTextField input State

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)becomeFirstResponder":{"name":"becomeFirstResponder()","abstract":"

    Make VGSTextField focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)resignFirstResponder":{"name":"resignFirstResponder()","abstract":"

    Remove focus from VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(py)isFirstResponder":{"name":"isFirstResponder","abstract":"

    Check if VGSTextField is focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html":{"name":"VGSTextField","abstract":"

    An object that displays an editable text area in user interface.

    "},"Classes/VGSCardTextField.html":{"name":"VGSCardTextField","abstract":"

    An object that displays an editable text area. Can be use instead of a VGSTextField when need to detect and show credit card brand images.

    "},"Protocols/VGSTextFieldDelegate.html":{"name":"VGSTextFieldDelegate","abstract":"

    Delegates produced by VGSTextField instance.

    "},"Classes/VGSConfiguration.html":{"name":"VGSConfiguration","abstract":"

    A class responsible for configuration VGSTextField.

    "},"Enums/FieldType.html":{"name":"FieldType","abstract":"

    Type of VGSTextField configuration.

    "},"Classes/SwiftLuhn.html":{"name":"SwiftLuhn","abstract":"

    Class containing supported credit card types

    "},"UI%20Elements.html":{"name":"UI Elements"},"Card%20Scan.html":{"name":"Card Scan"},"File%20Picker.html":{"name":"File Picker"},"Observe%20State%20and%20Send%20Data.html":{"name":"Observe State and Send Data"},"Errors.html":{"name":"Errors"},"Error%20Keys.html":{"name":"Error Keys"},"Type%20Aliases.html":{"name":"Type Aliases"}} \ No newline at end of file +{"Type%20Aliases.html#/s:13VGSCollectSDK11HTTPHeadersa":{"name":"HTTPHeaders","abstract":"

    Key-value data type, used in http request headers.

    "},"Type%20Aliases.html#/s:13VGSCollectSDK8JsonDataa":{"name":"JsonData","abstract":"

    Key-value data type, usually used for response format.

    "},"Error%20Keys.html#/s:13VGSCollectSDK30VGSSDKErrorInputDataIsNotValidSSvp":{"name":"VGSSDKErrorInputDataIsNotValid","abstract":"

    Error key, used for errors when input data is required to be not empty or to be valid only, but is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK28VGSSDKErrorInputDataRequiredSSvp":{"name":"VGSSDKErrorInputDataRequired","abstract":"

    Error key, used for errors when input data is required to be not empty but is empty or nil.

    "},"Error%20Keys.html#/s:13VGSCollectSDK33VGSSDKErrorInputDataRequiredValidSSvp":{"name":"VGSSDKErrorInputDataRequiredValid","abstract":"

    Error key, used for errors when input data is required to be valid is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK23VGSSDKErrorFileNotFoundSSvp":{"name":"VGSSDKErrorFileNotFound","abstract":"

    Error key, used for errors when SDK can’t find the file at file path. Can happened when file changes the path or doesn’t exist.

    "},"Error%20Keys.html#/s:13VGSCollectSDK31VGSSDKErrorFileTypeNotSupportedSSvp":{"name":"VGSSDKErrorFileTypeNotSupported","abstract":"

    Error key, used for errors when file type is not supported by SDK.

    "},"Error%20Keys.html#/s:13VGSCollectSDK34VGSSDKErrorFileSizeExceedsTheLimitSSvp":{"name":"VGSSDKErrorFileSizeExceedsTheLimit","abstract":"

    Error key, used for errors when file size exceeds maximum limit.

    "},"Error%20Keys.html#/s:13VGSCollectSDK29VGSSDKErrorSourceNotAvailableSSvp":{"name":"VGSSDKErrorSourceNotAvailable","abstract":"

    Error key, used for errors when SDK can’t get access to specific source.

    "},"Error%20Keys.html#/s:13VGSCollectSDK39VGSSDKErrorUnexpectedResponseDataFormatSSvp":{"name":"VGSSDKErrorUnexpectedResponseDataFormat","abstract":"

    Error key, used for errors when response for SDK API request is in format that not supported by SDK.

    "},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO19inputDataIsNotValidyA2CmF":{"name":"inputDataIsNotValid","abstract":"

    When input data is not valid, but required to be valid

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO17inputFileNotFoundyA2CmF":{"name":"inputFileNotFound","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO09inputFileD14IsNotSupportedyA2CmF":{"name":"inputFileTypeIsNotSupported","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28inputFileSizeExceedsTheLimityA2CmF":{"name":"inputFileSizeExceedsTheLimit","abstract":"

    When file size is larger then allowed limit

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO18sourceNotAvailableyA2CmF":{"name":"sourceNotAvailable","abstract":"

    When can’t get access to file source

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO018unexpectedResponseD0yA2CmF":{"name":"unexpectedResponseType","abstract":"

    When response type is not supported

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28unexpectedResponseDataFormatyA2CmF":{"name":"unexpectedResponseDataFormat","abstract":"

    When reponse data format is not supported

    ","parent_name":"VGSErrorType"},"Classes/VGSError.html#/s:13VGSCollectSDK8VGSErrorC4typeAA0C4TypeOSgvp":{"name":"type","abstract":"

    VGSErrorType- required for each VGSError instance

    ","parent_name":"VGSError"},"Classes/VGSError.html#/c:@M@VGSCollectSDK@objc(cs)VGSError(py)code":{"name":"code","abstract":"

    Code assiciated with VGSErrorType

    ","parent_name":"VGSError"},"Classes/VGSError.html":{"name":"VGSError","abstract":"

    An error produced by VGSCollectSDK. Works similar to default NSError in iOS.

    "},"Enums/VGSErrorType.html":{"name":"VGSErrorType","abstract":"

    Type of VGSError and it status code.

    "},"Errors.html#/s:13VGSCollectSDK0A14SDKErrorDomainSSvp":{"name":"VGSCollectSDKErrorDomain","abstract":"

    An error domain string used to produce VGSError from VGSCollectSDK - “vgscollect.sdk”

    "},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3getyA2CmF":{"name":"get","abstract":"

    GET method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO4postyA2CmF":{"name":"post","abstract":"

    POST method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3putyA2CmF":{"name":"put","abstract":"

    PUT method

    ","parent_name":"HTTPMethod"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7successyACSi_10Foundation4DataVSgSo13NSURLResponseCSgtcACmF":{"name":"success(_:_:_:)","abstract":"

    Success response case

    ","parent_name":"VGSResponse"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7failureyACSi_10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgtcACmF":{"name":"failure(_:_:_:_:)","abstract":"

    Failed response case

    ","parent_name":"VGSResponse"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC5last4SSvp":{"name":"last4","abstract":"

    Last 4 digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC3binSSvp":{"name":"bin","abstract":"

    Bin digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC9cardBrandAA9SwiftLuhnC0C4TypeOvp":{"name":"cardBrand","abstract":"

    Credit Card Brand of the card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains CardState attributes and their values.

    ","parent_name":"CardState"},"Classes/State.html#/s:13VGSCollectSDK5StateC9fieldNameSSSgvp":{"name":"fieldName","abstract":"

    VGSConfiguration.fieldName associated with VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC10isRequiredSbvp":{"name":"isRequired","abstract":"

    VGSConfiguration.isRequired attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    VGSConfiguration.isRequiredValidOnly attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isValidSbvp":{"name":"isValid","abstract":"

    Contains current validation state for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isEmptySbvp":{"name":"isEmpty","abstract":"

    Show if VGSTextField input is empty

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11inputLengthSivp":{"name":"inputLength","abstract":"

    Input data length in VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains State attributes and their values

    ","parent_name":"State"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO7sandboxyA2CmF":{"name":"sandbox","abstract":"

    Should be used for development and testing purpose.

    ","parent_name":"Environment"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO4liveyA2CmF":{"name":"live","abstract":"

    Should be used for production.

    ","parent_name":"Environment"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13customHeadersSDyS2SGSgvp":{"name":"customHeaders","abstract":"

    Set your custom HTTP headers

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C17observeFieldStateyAA07VGSTextD0CcSgvp":{"name":"observeFieldState","abstract":"

    Observe only focused VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13observeStatesySayAA12VGSTextFieldCGcSgvp":{"name":"observeStates","abstract":"

    Observe all VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C2id11environmentACSS_AA11EnvironmentOtcfc":{"name":"init(id:environment:)","abstract":"

    Initialzation

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C10cleanFilesyyF":{"name":"cleanFiles()","abstract":"

    Detach files for associated VGSCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12getTextField9fieldNameAA07VGSTextE0CSgSS_tF":{"name":"getTextField(fieldName:)","abstract":"

    Returns VGSTextField with VGSConfiguration.fieldName associated with VGCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12isJailbrokenSbyFZ":{"name":"isJailbroken()","abstract":"

    Check device if it jailbroken

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendData4path6method05extraD010completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendData(path:method:extraData:completion:)","abstract":"

    Send data from VGSTextFields to your organization vault.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendFile4path6method9extraData10completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendFile(path:method:extraData:completion:)","abstract":"

    Send file to your organization vault. Only send one file at a time.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html":{"name":"VGSCollect","abstract":"

    An object you use for observing VGSTextField State and send data to your organization vault.

    "},"Enums/Environment.html":{"name":"Environment","abstract":"

    Organization vault environment.

    "},"Classes/State.html":{"name":"State","abstract":"

    An object that describes VGSTextField state. State attributes are read-only.

    "},"Classes/CardState.html":{"name":"CardState","abstract":"

    An object that describes VGSCardTextField state. State attributes are read-only.

    "},"Enums/VGSResponse.html":{"name":"VGSResponse","abstract":"

    Response enum cases for SDK requests

    "},"Enums/HTTPMethod.html":{"name":"HTTPMethod","abstract":"

    HTTP request methods

    "},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)fileExtension":{"name":"fileExtension","abstract":"

    File extension, like “jpeg”, “png”, etc.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)size":{"name":"size","abstract":"

    File size.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)sizeUnits":{"name":"sizeUnits","abstract":"

    File size units.

    ","parent_name":"VGSFileInfo"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO12photoLibraryyA2CmF":{"name":"photoLibrary","abstract":"

    Device photo library.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO6camerayA2CmF":{"name":"camera","abstract":"

    Device camera.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO18documentsDirectoryyA2CmF":{"name":"documentsDirectory","abstract":"

    Device documents directory.

    ","parent_name":"VGSFileSource"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidPickFileWithInfo:":{"name":"userDidPickFileWithInfo(_:)","abstract":"

    On user select a file

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidSCancelFilePicking":{"name":"userDidSCancelFilePicking()","abstract":"

    On user canceling file picking

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)filePickingFailedWithError:":{"name":"filePickingFailedWithError(_:)","abstract":"

    On error occured when user pick a file.

    ","parent_name":"VGSFilePickerControllerDelegate"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with selected file by user. Used as a JSON key on send request with file data to your organozation vault.

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9collector9fieldName10fileSourceAcA0A0C_SSAA0cJ0Otcfc":{"name":"init(collector:fieldName:fileSource:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSFilePickerControllerDelegate - handle user interaction on file picking.

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC13configurationAcA0cD13ConfigurationC_tcfc":{"name":"init(configuration:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011presentFileD02on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentFilePicker(on:animated:completion:)","abstract":"

    Present file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011dismissFileD08animated10completionySb_yycSgtF":{"name":"dismissFilePicker(animated:completion:)","abstract":"

    Dismiss file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html":{"name":"VGSFilePickerController","abstract":"

    Controller responsible for importing files from device sources.

    "},"Classes/VGSFilePickerConfiguration.html":{"name":"VGSFilePickerConfiguration","abstract":"

    A class responsible for configuration VGSFilePickerController.

    "},"Protocols/VGSFilePickerControllerDelegate.html":{"name":"VGSFilePickerControllerDelegate","abstract":"

    Delegates produced by VGSFilePickerController.

    "},"Enums/VGSFileSource.html":{"name":"VGSFileSource","abstract":"

    Available file source destinations that VGSFilePickerController can work with.

    "},"Classes/VGSFileInfo.html":{"name":"VGSFileInfo","abstract":"

    An object that holds optional files’ metadata on selecting file through VGSFilePickerController.

    "},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCardNumber":{"name":"cardNumber","abstract":"

    Credit Card Number. 16 digits string.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationDate":{"name":"expirationDate","abstract":"

    Credit Card Expiration Date. String in format “01/21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationMonth":{"name":"expirationMonth","abstract":"

    Credit Card Expiration Month. String in format “01”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationYear":{"name":"expirationYear","abstract":"

    Credit Card Expiration Year. String in format “21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCvc":{"name":"cvc","abstract":"

    Credit Card CVC code. 3-4 digits string in format “123”.

    ","parent_name":"CradIODataType"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidFinishScan":{"name":"userDidFinishScan()","abstract":"

    On user confirm scanned data by selecting Done button on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidCancelScan":{"name":"userDidCancelScan()","abstract":"

    On user press Cancel buttonn on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)textFieldForScannedDataWithType:":{"name":"textFieldForScannedData(type:)","abstract":"

    Asks VGSTextField where scanned data with VGSConfiguration.FieldType need to be set. Called after user select Done button, just before userDidFinishScan() delegate.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSCardIOScanControllerDelegate - handle user interaction with Card.io scanner

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC23preferredCameraPositionSo015AVCaptureDeviceH0VSgvp":{"name":"preferredCameraPosition","abstract":"

    Defines preferred AVCaptureDevice.Position. Deault is AVCaptureDevice.Position.unspecified

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerCyAcA0cdE8Delegate_pSgcfc":{"name":"init(_:)","abstract":"

    Initialization

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18presentCardScanner2on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentCardScanner(on:animated:completion:)","abstract":"

    Present Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18dismissCardScanner8animated10completionySb_yycSgtF":{"name":"dismissCardScanner(animated:completion:)","abstract":"

    Dismiss Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html":{"name":"VGSCardIOScanController","abstract":"

    Controller responsible for managing Card.io scanner

    "},"Protocols/VGSCardIOScanControllerDelegate.html":{"name":"VGSCardIOScanControllerDelegate","abstract":"

    Delegates produced by VGSCardIOScanController instance.

    "},"Enums/CradIODataType.html":{"name":"CradIODataType","abstract":"

    Supported scan data fields by Card.io

    "},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO12visaElectronyA2EmF":{"name":"visaElectron","abstract":"

    Visa Electron

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7maestroyA2EmF":{"name":"maestro","abstract":"

    Maestro

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4visayA2EmF":{"name":"visa","abstract":"

    Visa

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10mastercardyA2EmF":{"name":"mastercard","abstract":"

    Mastercard

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4amexyA2EmF":{"name":"amex","abstract":"

    American Express

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10dinersClubyA2EmF":{"name":"dinersClub","abstract":"

    Diner’s Club

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO8discoveryA2EmF":{"name":"discover","abstract":"

    Discover

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO3jcbyA2EmF":{"name":"jcb","abstract":"

    JCB

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    Not supported card type - “unknown”

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11stringValueSSvp":{"name":"stringValue","abstract":"

    String representation of SwiftLuhn.CardType enum values.

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11cardLengthsSaySiGvp":{"name":"cardLengths","abstract":"

    Returns array with valid card number lengths for specific SwiftLuhn.CardType

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html":{"name":"CardType","abstract":"

    Supported card types

    ","parent_name":"SwiftLuhn"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO4noneyA2CmF":{"name":"none","abstract":"

    Field type that doesn’t require any input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO10cardNumberyA2CmF":{"name":"cardNumber","abstract":"

    Field type that requires Credit Card Number input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO7expDateyA2CmF":{"name":"expDate","abstract":"

    Field type that requires Expiration Date input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO3cvcyA2CmF":{"name":"cvc","abstract":"

    Field type that requires Credit Card CVC input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO14cardHolderNameyA2CmF":{"name":"cardHolderName","abstract":"

    Field type that requires Cardholder Name input formatting and validation.

    ","parent_name":"FieldType"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC4typeAA9FieldTypeOvp":{"name":"type","abstract":"

    Type of field congfiguration. Default is FieldType.none.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with VGSTextField and used as a JSON key on send request with textfield data to your organozation vault.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC10isRequiredSbvp":{"name":"isRequired","abstract":"

    Set if VGSTextField is required to be non-empty and non-nil on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    Set if VGSTextField is required to be valid only on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13formatPatternSSSgvp":{"name":"formatPattern","abstract":"

    Input data visual format pattern. If not applied, will be set by default depending on field type.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC7dividerSSSgvp":{"name":"divider","abstract":"

    String, used to replace not default VGSConfiguration.formatPattern characters in input text on send request.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC12keyboardTypeSo010UIKeyboardE0VSgvp":{"name":"keyboardType","abstract":"

    Preferred UIKeyboardType for VGSTextField. If not applied, will be set by default depending on field type parameter.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13returnKeyTypeSo08UIReturneF0VSgvp":{"name":"returnKeyType","abstract":"

    Preferred UIReturnKeyType for VGSTextField.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC18keyboardAppearanceSo010UIKeyboardE0VSgvp":{"name":"keyboardAppearance","abstract":"

    Preferred UIKeyboardAppearance for textfield. By default is UIKeyboardAppearance.default.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9collector9fieldNameAcA0A0C_SStcfc":{"name":"init(collector:fieldName:)","abstract":"

    Initialization

    ","parent_name":"VGSConfiguration"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidBeginEditing:":{"name":"vgsTextFieldDidBeginEditing(_:)","abstract":"

    VGSTextField did become first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditing:":{"name":"vgsTextFieldDidEndEditing(_:)","abstract":"

    VGSTextField did resign first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditingOnReturn:":{"name":"vgsTextFieldDidEndEditingOnReturn(_:)","abstract":"

    VGSTextField did resign first responder on Return button pressed.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidChange:":{"name":"vgsTextFieldDidChange(_:)","abstract":"

    VGSTextField input changed.

    ","parent_name":"VGSTextFieldDelegate"},"Classes/VGSCardTextField/CardIconLocation.html#/s:13VGSCollectSDK16VGSCardTextFieldC16CardIconLocationO4leftyA2EmF":{"name":"left","abstract":"

    Card brand icon at left side of VGSCardTextField.

    ","parent_name":"CardIconLocation"},"Classes/VGSCardTextField/CardIconLocation.html#/s:13VGSCollectSDK16VGSCardTextFieldC16CardIconLocationO5rightyA2EmF":{"name":"right","abstract":"

    Card brand icon at right side of VGSCardTextField.

    ","parent_name":"CardIconLocation"},"Classes/VGSCardTextField/CardIconLocation.html":{"name":"CardIconLocation","abstract":"

    Available Card brand icon positions enum.

    ","parent_name":"VGSCardTextField"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC16cardIconLocationAC04CardgH0Ovp":{"name":"cardIconLocation","abstract":"

    Card brand icon position inside VGSCardTextField.

    ","parent_name":"VGSCardTextField"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC12cardIconSizeSo6CGSizeVvp":{"name":"cardIconSize","abstract":"

    Card brand icon size.

    ","parent_name":"VGSCardTextField"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC15cardsIconSourceSo7UIImageCSgAA9SwiftLuhnC8CardTypeOcSgvp":{"name":"cardsIconSource","abstract":"

    Asks custom image for specific SwiftLuhn.CardType

    ","parent_name":"VGSCardTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC11placeholderSSSgvp":{"name":"placeholder","abstract":"

    Textfield placeholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC21attributedPlaceholderSo18NSAttributedStringCSgvp":{"name":"attributedPlaceholder","abstract":"

    Textfield attributedPlaceholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC7paddingSo12UIEdgeInsetsVvp":{"name":"padding","abstract":"

    UIEdgeInsets for text and placeholder inside VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13textAlignmentSo06NSTextF0Vvp":{"name":"textAlignment","abstract":"

    The technique to use for aligning the text.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC15clearButtonModeSo06UITextd4ViewG0Vvp":{"name":"clearButtonMode","abstract":"

    Sets when the clear button shows up. Default is UITextField.ViewMode.never

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC33adjustsFontForContentSizeCategorySbvp":{"name":"adjustsFontForContentSizeCategory","abstract":"

    Indicates whether VGSTextField should automatically update its font when the device’s UIContentSizeCategory is changed.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13configurationAA16VGSConfigurationCSgvp":{"name":"configuration","abstract":"

    Specifies VGSTextField configuration parameters to work with VGSCollect.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC8delegateAA0cD8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegates VGSTextField editing events. Default is nil.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC5stateAA5StateCvp":{"name":"state","abstract":"

    Describes VGSTextField input State

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)becomeFirstResponder":{"name":"becomeFirstResponder()","abstract":"

    Make VGSTextField focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)resignFirstResponder":{"name":"resignFirstResponder()","abstract":"

    Remove focus from VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(py)isFirstResponder":{"name":"isFirstResponder","abstract":"

    Check if VGSTextField is focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html":{"name":"VGSTextField","abstract":"

    An object that displays an editable text area in user interface.

    "},"Classes/VGSCardTextField.html":{"name":"VGSCardTextField","abstract":"

    An object that displays an editable text area. Can be use instead of a VGSTextField when need to detect and show credit card brand images.

    "},"Protocols/VGSTextFieldDelegate.html":{"name":"VGSTextFieldDelegate","abstract":"

    Delegates produced by VGSTextField instance.

    "},"Classes/VGSConfiguration.html":{"name":"VGSConfiguration","abstract":"

    A class responsible for configuration VGSTextField.

    "},"Enums/FieldType.html":{"name":"FieldType","abstract":"

    Type of VGSTextField configuration.

    "},"Classes/SwiftLuhn.html":{"name":"SwiftLuhn","abstract":"

    Class containing supported credit card types

    "},"UI%20Elements.html":{"name":"UI Elements"},"Card%20Scan.html":{"name":"Card Scan"},"File%20Picker.html":{"name":"File Picker"},"Observe%20State%20and%20Send%20Data.html":{"name":"Observe State and Send Data"},"Errors.html":{"name":"Errors"},"Error%20Keys.html":{"name":"Error Keys"},"Type%20Aliases.html":{"name":"Type Aliases"}} \ No newline at end of file diff --git a/docs/docsets/VGSCollectSDK.docset/Contents/Resources/docSet.dsidx b/docs/docsets/VGSCollectSDK.docset/Contents/Resources/docSet.dsidx index b63790199383b3b14dbc9768f14250906aaf8cf0..b753b395e37a5581ff4e0f96f337523ed2531a19 100644 GIT binary patch delta 2438 zcmbW2e@s+Y7RT?s@4fqe%)Ix2;fHiOjKESr1P2fZMI3ebWmiO(3SF(KEHmO5m|3eBZN)pHMI95ol_z<1M?@*8MA7NOq@yGadvtV>#VJ#Az8Q@r*k0;?lcL9#VzE#!Y za}7d;qm@8u%uUcSSXEn%pM}pWOYsCeP!U-+#%#33!8Vf)@9u&AaDPKE5N-(ed5nuM z5N`GF^?5qNzOG>39!PGofxFICR$hKj-_}13_M)eZqU43bVAi!BABX?C3i0z`E6u|( zs4gwU0Ncw-@H8AP%g0j?aXD=#hH0LIHR8^WKJWU@V8F-^=f=}uI+hI0b*T_JBfzz3 zt)wi$!PgqB^fa24whi`17@@@u*7{3?4Z+S1V6CZebwq?yF)cC7(#pj!rdQY>46OCI zR(g!wT}`f*!QKP$neqshSPHFjur2~HHAc`uD6aIyEma|bJ|@&=4q(vR{{UKT3Ed|A z-r>h^Zf^#B`xgmjY7apD>d&Cwed&QFp*YQt&B*3gEoQ3^4D`T6Y)NFroo`BZg?qa9 zD||U};zy7$CKT{v+%;}1$Ky+6melGO^<~-%_z`WLdR-k>E!Gyxl*OgIrFi9UC;C;>Q8}q__w)g-auK7yrr49$HB{14zH>V8B35SA?Fhui> zb`o&b4HNVHKjcMJ5H^iT4ctwJdb-6I>Q{if7HJtWlVUJ`q&)Ty3o`#Wl&G;3*ZYkQ0bkI|^S*=Qqt1GOt)?`ai`MZ)UPspMa zkt)TDVl|zirNU`p1^)(LWhhBDxj;7JkMKtHDS8p@HtOc8mXi30<+dfeVn}|1$rNQcSRP!R`=cCS5=ABw2}EQ`Or*#J!sMZd zB{NEqsUG(fghlaKb)VvKfC&_tU?mc?$W_68aTR7f{Q1NHVH`N8dI%#hF%=~YgLB$X z7=mY}Puhke6q$n4`CIjd;R6(zg0mRm*YxJ$d+1H$egPReaVI2;GEtPs)Ph_s$OIGi z8Dq1v{yu-#u6r_Ab~l3+3mb1i$hZ-TOrYv{Jw5) zo!{%()e-3O0c*$rWoB#At;dI1(H@H0GY?`oe=Bsfu z+UMGGb-NX;>!cLRyOv7j3uTG?sPX%qoDY2?iV;Uy5A%*Pq<=A@IR3&>+{ zo&-BwcI8X?EKNYU_G0+fmBZz-RA`1gYP)4}m*yA|Qs6Wc;bgc11#*%>X+~pPV=KH} QF)elV?lQwA@O-j;=X~(o_QtyZJ;g|bA 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
    =D&L}(mi#ZW9?U11kmUBFGWs>BX{ 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 Ik;Q=dAA&+NDgXcg delta 107073 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 diff --git a/docs/index.html b/docs/index.html index 6adc6aed..ea6617e9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -58,6 +58,9 @@

    + @@ -627,7 +630,7 @@

    License

    diff --git a/docs/search.json b/docs/search.json index 8f5fdd58..210baae7 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Type%20Aliases.html#/s:13VGSCollectSDK11HTTPHeadersa":{"name":"HTTPHeaders","abstract":"

    Key-value data type, used in http request headers.

    "},"Type%20Aliases.html#/s:13VGSCollectSDK8JsonDataa":{"name":"JsonData","abstract":"

    Key-value data type, usually used for response format.

    "},"Error%20Keys.html#/s:13VGSCollectSDK30VGSSDKErrorInputDataIsNotValidSSvp":{"name":"VGSSDKErrorInputDataIsNotValid","abstract":"

    Error key, used for errors when input data is required to be not empty or to be valid only, but is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK28VGSSDKErrorInputDataRequiredSSvp":{"name":"VGSSDKErrorInputDataRequired","abstract":"

    Error key, used for errors when input data is required to be not empty but is empty or nil.

    "},"Error%20Keys.html#/s:13VGSCollectSDK33VGSSDKErrorInputDataRequiredValidSSvp":{"name":"VGSSDKErrorInputDataRequiredValid","abstract":"

    Error key, used for errors when input data is required to be valid is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK23VGSSDKErrorFileNotFoundSSvp":{"name":"VGSSDKErrorFileNotFound","abstract":"

    Error key, used for errors when SDK can’t find the file at file path. Can happened when file changes the path or doesn’t exist.

    "},"Error%20Keys.html#/s:13VGSCollectSDK31VGSSDKErrorFileTypeNotSupportedSSvp":{"name":"VGSSDKErrorFileTypeNotSupported","abstract":"

    Error key, used for errors when file type is not supported by SDK.

    "},"Error%20Keys.html#/s:13VGSCollectSDK34VGSSDKErrorFileSizeExceedsTheLimitSSvp":{"name":"VGSSDKErrorFileSizeExceedsTheLimit","abstract":"

    Error key, used for errors when file size exceeds maximum limit.

    "},"Error%20Keys.html#/s:13VGSCollectSDK29VGSSDKErrorSourceNotAvailableSSvp":{"name":"VGSSDKErrorSourceNotAvailable","abstract":"

    Error key, used for errors when SDK can’t get access to specific source.

    "},"Error%20Keys.html#/s:13VGSCollectSDK39VGSSDKErrorUnexpectedResponseDataFormatSSvp":{"name":"VGSSDKErrorUnexpectedResponseDataFormat","abstract":"

    Error key, used for errors when response for SDK API request is in format that not supported by SDK.

    "},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO19inputDataIsNotValidyA2CmF":{"name":"inputDataIsNotValid","abstract":"

    When input data is not valid, but required to be valid

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO17inputFileNotFoundyA2CmF":{"name":"inputFileNotFound","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO09inputFileD14IsNotSupportedyA2CmF":{"name":"inputFileTypeIsNotSupported","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28inputFileSizeExceedsTheLimityA2CmF":{"name":"inputFileSizeExceedsTheLimit","abstract":"

    When file size is larger then allowed limit

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO18sourceNotAvailableyA2CmF":{"name":"sourceNotAvailable","abstract":"

    When can’t get access to file source

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO018unexpectedResponseD0yA2CmF":{"name":"unexpectedResponseType","abstract":"

    When response type is not supported

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28unexpectedResponseDataFormatyA2CmF":{"name":"unexpectedResponseDataFormat","abstract":"

    When reponse data format is not supported

    ","parent_name":"VGSErrorType"},"Classes/VGSError.html#/s:13VGSCollectSDK8VGSErrorC4typeAA0C4TypeOSgvp":{"name":"type","abstract":"

    VGSErrorType- required for each VGSError instance

    ","parent_name":"VGSError"},"Classes/VGSError.html#/c:@M@VGSCollectSDK@objc(cs)VGSError(py)code":{"name":"code","abstract":"

    Code assiciated with VGSErrorType

    ","parent_name":"VGSError"},"Classes/VGSError.html":{"name":"VGSError","abstract":"

    An error produced by VGSCollectSDK. Works similar to default NSError in iOS.

    "},"Enums/VGSErrorType.html":{"name":"VGSErrorType","abstract":"

    Type of VGSError and it status code.

    "},"Errors.html#/s:13VGSCollectSDK0A14SDKErrorDomainSSvp":{"name":"VGSCollectSDKErrorDomain","abstract":"

    An error domain string used to produce VGSError from VGSCollectSDK - “vgscollect.sdk”

    "},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3getyA2CmF":{"name":"get","abstract":"

    GET method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO4postyA2CmF":{"name":"post","abstract":"

    POST method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3putyA2CmF":{"name":"put","abstract":"

    PUT method

    ","parent_name":"HTTPMethod"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7successyACSi_10Foundation4DataVSgSo13NSURLResponseCSgtcACmF":{"name":"success(_:_:_:)","abstract":"

    Success response case

    ","parent_name":"VGSResponse"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7failureyACSi_10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgtcACmF":{"name":"failure(_:_:_:_:)","abstract":"

    Failed response case

    ","parent_name":"VGSResponse"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC5last4SSvp":{"name":"last4","abstract":"

    Last 4 digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC3binSSvp":{"name":"bin","abstract":"

    Bin digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC9cardBrandAA9SwiftLuhnC0C4TypeOvp":{"name":"cardBrand","abstract":"

    Credit Card Brand of the card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains CardState attributes and their values.

    ","parent_name":"CardState"},"Classes/State.html#/s:13VGSCollectSDK5StateC9fieldNameSSSgvp":{"name":"fieldName","abstract":"

    VGSConfiguration.fieldName associated with VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC10isRequiredSbvp":{"name":"isRequired","abstract":"

    VGSConfiguration.isRequired attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    VGSConfiguration.isRequiredValidOnly attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isValidSbvp":{"name":"isValid","abstract":"

    Contains current validation state for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isEmptySbvp":{"name":"isEmpty","abstract":"

    Show if VGSTextField input is empty

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11inputLengthSivp":{"name":"inputLength","abstract":"

    Input data length in VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains State attributes and their values

    ","parent_name":"State"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO7sandboxyA2CmF":{"name":"sandbox","abstract":"

    Should be used for development and testing purpose.

    ","parent_name":"Environment"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO4liveyA2CmF":{"name":"live","abstract":"

    Should be used for production.

    ","parent_name":"Environment"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13customHeadersSDyS2SGSgvp":{"name":"customHeaders","abstract":"

    Set your custom HTTP headers

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C17observeFieldStateyAA07VGSTextD0CcSgvp":{"name":"observeFieldState","abstract":"

    Observe only focused VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13observeStatesySayAA12VGSTextFieldCGcSgvp":{"name":"observeStates","abstract":"

    Observe all VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C2id11environmentACSS_AA11EnvironmentOtcfc":{"name":"init(id:environment:)","abstract":"

    Initialzation

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C10cleanFilesyyF":{"name":"cleanFiles()","abstract":"

    Detach files for associated VGSCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12getTextField9fieldNameAA07VGSTextE0CSgSS_tF":{"name":"getTextField(fieldName:)","abstract":"

    Returns VGSTextField with VGSConfiguration.fieldName associated with VGCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12isJailbrokenSbyFZ":{"name":"isJailbroken()","abstract":"

    Check device if it jailbroken

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendData4path6method05extraD010completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendData(path:method:extraData:completion:)","abstract":"

    Send data from VGSTextFields to your organization vault.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendFile4path6method9extraData10completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendFile(path:method:extraData:completion:)","abstract":"

    Send file to your organization vault. Only send one file at a time.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html":{"name":"VGSCollect","abstract":"

    An object you use for observing VGSTextField State and send data to your organization vault.

    "},"Enums/Environment.html":{"name":"Environment","abstract":"

    Organization vault environment.

    "},"Classes/State.html":{"name":"State","abstract":"

    An object that describes VGSTextField state. State attributes are read-only.

    "},"Classes/CardState.html":{"name":"CardState","abstract":"

    An object that describes VGSCardTextField state. State attributes are read-only.

    "},"Enums/VGSResponse.html":{"name":"VGSResponse","abstract":"

    Response enum cases for SDK requests

    "},"Enums/HTTPMethod.html":{"name":"HTTPMethod","abstract":"

    HTTP request methods

    "},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)fileExtension":{"name":"fileExtension","abstract":"

    File extension, like “jpeg”, “png”, etc.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)size":{"name":"size","abstract":"

    File size.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)sizeUnits":{"name":"sizeUnits","abstract":"

    File size units.

    ","parent_name":"VGSFileInfo"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO12photoLibraryyA2CmF":{"name":"photoLibrary","abstract":"

    Device photo library.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO6camerayA2CmF":{"name":"camera","abstract":"

    Device camera.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO18documentsDirectoryyA2CmF":{"name":"documentsDirectory","abstract":"

    Device documents directory.

    ","parent_name":"VGSFileSource"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidPickFileWithInfo:":{"name":"userDidPickFileWithInfo(_:)","abstract":"

    On user select a file

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidSCancelFilePicking":{"name":"userDidSCancelFilePicking()","abstract":"

    On user canceling file picking

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)filePickingFailedWithError:":{"name":"filePickingFailedWithError(_:)","abstract":"

    On error occured when user pick a file.

    ","parent_name":"VGSFilePickerControllerDelegate"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with selected file by user. Used as a JSON key on send request with file data to your organozation vault.

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9collector9fieldName10fileSourceAcA0A0C_SSAA0cJ0Otcfc":{"name":"init(collector:fieldName:fileSource:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSFilePickerControllerDelegate - handle user interaction on file picking.

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC13configurationAcA0cD13ConfigurationC_tcfc":{"name":"init(configuration:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011presentFileD02on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentFilePicker(on:animated:completion:)","abstract":"

    Present file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011dismissFileD08animated10completionySb_yycSgtF":{"name":"dismissFilePicker(animated:completion:)","abstract":"

    Dismiss file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html":{"name":"VGSFilePickerController","abstract":"

    Controller responsible for importing files from device sources.

    "},"Classes/VGSFilePickerConfiguration.html":{"name":"VGSFilePickerConfiguration","abstract":"

    A class responsible for configuration VGSFilePickerController.

    "},"Protocols/VGSFilePickerControllerDelegate.html":{"name":"VGSFilePickerControllerDelegate","abstract":"

    Delegates produced by VGSFilePickerController.

    "},"Enums/VGSFileSource.html":{"name":"VGSFileSource","abstract":"

    Available file source destinations that VGSFilePickerController can work with.

    "},"Classes/VGSFileInfo.html":{"name":"VGSFileInfo","abstract":"

    An object that holds optional files’ metadata on selecting file through VGSFilePickerController.

    "},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCardNumber":{"name":"cardNumber","abstract":"

    Credit Card Number. 16 digits string.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationDate":{"name":"expirationDate","abstract":"

    Credit Card Expiration Date. String in format “01/21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationMonth":{"name":"expirationMonth","abstract":"

    Credit Card Expiration Month. String in format “01”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationYear":{"name":"expirationYear","abstract":"

    Credit Card Expiration Year. String in format “21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCvc":{"name":"cvc","abstract":"

    Credit Card CVC code. 3-4 digits string in format “123”.

    ","parent_name":"CradIODataType"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidFinishScan":{"name":"userDidFinishScan()","abstract":"

    On user confirm scanned data by selecting Done button on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidCancelScan":{"name":"userDidCancelScan()","abstract":"

    On user press Cancel buttonn on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)textFieldForScannedDataWithType:":{"name":"textFieldForScannedData(type:)","abstract":"

    Asks VGSTextField where scanned data with VGSConfiguration.FieldType need to be set. Called after user select Done button, just before userDidFinishScan() delegate.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSCardIOScanControllerDelegate - handle user interaction with Card.io scanner

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC23preferredCameraPositionSo015AVCaptureDeviceH0VSgvp":{"name":"preferredCameraPosition","abstract":"

    Defines preferred AVCaptureDevice.Position. Deault is AVCaptureDevice.Position.unspecified

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerCyAcA0cdE8Delegate_pSgcfc":{"name":"init(_:)","abstract":"

    Initialization

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18presentCardScanner2on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentCardScanner(on:animated:completion:)","abstract":"

    Present Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18dismissCardScanner8animated10completionySb_yycSgtF":{"name":"dismissCardScanner(animated:completion:)","abstract":"

    Dismiss Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html":{"name":"VGSCardIOScanController","abstract":"

    Controller responsible for managing Card.io scanner

    "},"Protocols/VGSCardIOScanControllerDelegate.html":{"name":"VGSCardIOScanControllerDelegate","abstract":"

    Delegates produced by VGSCardIOScanController instance.

    "},"Enums/CradIODataType.html":{"name":"CradIODataType","abstract":"

    Supported scan data fields by Card.io

    "},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO12visaElectronyA2EmF":{"name":"visaElectron","abstract":"

    Visa Electron

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7maestroyA2EmF":{"name":"maestro","abstract":"

    Maestro

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4visayA2EmF":{"name":"visa","abstract":"

    Visa

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10mastercardyA2EmF":{"name":"mastercard","abstract":"

    Mastercard

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4amexyA2EmF":{"name":"amex","abstract":"

    American Express

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10dinersClubyA2EmF":{"name":"dinersClub","abstract":"

    Diner’s Club

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO8discoveryA2EmF":{"name":"discover","abstract":"

    Discover

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO3jcbyA2EmF":{"name":"jcb","abstract":"

    JCB

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    Not supported card type - “unknown”

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11stringValueSSvp":{"name":"stringValue","abstract":"

    String representation of SwiftLuhn.CardType enum values.

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11cardLengthsSaySiGvp":{"name":"cardLengths","abstract":"

    Returns array with valid card number lengths for specific SwiftLuhn.CardType

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html":{"name":"CardType","abstract":"

    Supported card types

    ","parent_name":"SwiftLuhn"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO4noneyA2CmF":{"name":"none","abstract":"

    Field type that doesn’t require any input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO10cardNumberyA2CmF":{"name":"cardNumber","abstract":"

    Field type that requires Credit Card Number input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO7expDateyA2CmF":{"name":"expDate","abstract":"

    Field type that requires Expiration Date input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO3cvcyA2CmF":{"name":"cvc","abstract":"

    Field type that requires Credit Card CVC input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO14cardHolderNameyA2CmF":{"name":"cardHolderName","abstract":"

    Field type that requires Cardholder Name input formatting and validation.

    ","parent_name":"FieldType"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC4typeAA9FieldTypeOvp":{"name":"type","abstract":"

    Type of field congfiguration. Default is FieldType.none.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with VGSTextField and used as a JSON key on send request with textfield data to your organozation vault.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC10isRequiredSbvp":{"name":"isRequired","abstract":"

    Set if VGSTextField is required to be non-empty and non-nil on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    Set if VGSTextField is required to be valid only on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13formatPatternSSSgvp":{"name":"formatPattern","abstract":"

    Input data visual format pattern. If not applied, will be set by default depending on field type.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC7dividerSSSgvp":{"name":"divider","abstract":"

    String, used to replace not default VGSConfiguration.formatPattern characters in input text on send request.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC12keyboardTypeSo010UIKeyboardE0VSgvp":{"name":"keyboardType","abstract":"

    Preferred UIKeyboardType for VGSTextField. If not applied, will be set by default depending on field type parameter.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13returnKeyTypeSo08UIReturneF0VSgvp":{"name":"returnKeyType","abstract":"

    Preferred UIReturnKeyType for VGSTextField.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC18keyboardAppearanceSo010UIKeyboardE0VSgvp":{"name":"keyboardAppearance","abstract":"

    Preferred UIKeyboardAppearance for textfield. By default is UIKeyboardAppearance.default.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9collector9fieldNameAcA0A0C_SStcfc":{"name":"init(collector:fieldName:)","abstract":"

    Initialization

    ","parent_name":"VGSConfiguration"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidBeginEditing:":{"name":"vgsTextFieldDidBeginEditing(_:)","abstract":"

    VGSTextField did become first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditing:":{"name":"vgsTextFieldDidEndEditing(_:)","abstract":"

    VGSTextField did resign first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditingOnReturn:":{"name":"vgsTextFieldDidEndEditingOnReturn(_:)","abstract":"

    VGSTextField did resign first responder on Return button pressed.

    ","parent_name":"VGSTextFieldDelegate"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC15cardsIconSourceSo7UIImageCSgAA9SwiftLuhnC8CardTypeOcSgvp":{"name":"cardsIconSource","abstract":"

    callback for taking card brand icon

    ","parent_name":"VGSCardTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC11placeholderSSSgvp":{"name":"placeholder","abstract":"

    Textfield placeholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC21attributedPlaceholderSo18NSAttributedStringCSgvp":{"name":"attributedPlaceholder","abstract":"

    Textfield attributedPlaceholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC7paddingSo12UIEdgeInsetsVvp":{"name":"padding","abstract":"

    UIEdgeInsets for text and placeholder inside VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13textAlignmentSo06NSTextF0Vvp":{"name":"textAlignment","abstract":"

    The technique to use for aligning the text.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13configurationAA16VGSConfigurationCSgvp":{"name":"configuration","abstract":"

    Specifies VGSTextField configuration parameters to work with VGSCollect.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC8delegateAA0cD8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegates VGSTextField editing events. Default is nil.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC5stateAA5StateCvp":{"name":"state","abstract":"

    Describes VGSTextField input State

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)becomeFirstResponder":{"name":"becomeFirstResponder()","abstract":"

    Make VGSTextField focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)resignFirstResponder":{"name":"resignFirstResponder()","abstract":"

    Remove focus from VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(py)isFirstResponder":{"name":"isFirstResponder","abstract":"

    Check if VGSTextField is focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html":{"name":"VGSTextField","abstract":"

    An object that displays an editable text area in user interface.

    "},"Classes/VGSCardTextField.html":{"name":"VGSCardTextField","abstract":"

    An object that displays an editable text area. Can be use instead of a VGSTextField when need to detect and show credit card brand images.

    "},"Protocols/VGSTextFieldDelegate.html":{"name":"VGSTextFieldDelegate","abstract":"

    Delegates produced by VGSTextField instance.

    "},"Classes/VGSConfiguration.html":{"name":"VGSConfiguration","abstract":"

    A class responsible for configuration VGSTextField.

    "},"Enums/FieldType.html":{"name":"FieldType","abstract":"

    Type of VGSTextField configuration.

    "},"Classes/SwiftLuhn.html":{"name":"SwiftLuhn","abstract":"

    Class containing supported credit card types

    "},"UI%20Elements.html":{"name":"UI Elements"},"Card%20Scan.html":{"name":"Card Scan"},"File%20Picker.html":{"name":"File Picker"},"Observe%20State%20and%20Send%20Data.html":{"name":"Observe State and Send Data"},"Errors.html":{"name":"Errors"},"Error%20Keys.html":{"name":"Error Keys"},"Type%20Aliases.html":{"name":"Type Aliases"}} \ No newline at end of file +{"Type%20Aliases.html#/s:13VGSCollectSDK11HTTPHeadersa":{"name":"HTTPHeaders","abstract":"

    Key-value data type, used in http request headers.

    "},"Type%20Aliases.html#/s:13VGSCollectSDK8JsonDataa":{"name":"JsonData","abstract":"

    Key-value data type, usually used for response format.

    "},"Error%20Keys.html#/s:13VGSCollectSDK30VGSSDKErrorInputDataIsNotValidSSvp":{"name":"VGSSDKErrorInputDataIsNotValid","abstract":"

    Error key, used for errors when input data is required to be not empty or to be valid only, but is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK28VGSSDKErrorInputDataRequiredSSvp":{"name":"VGSSDKErrorInputDataRequired","abstract":"

    Error key, used for errors when input data is required to be not empty but is empty or nil.

    "},"Error%20Keys.html#/s:13VGSCollectSDK33VGSSDKErrorInputDataRequiredValidSSvp":{"name":"VGSSDKErrorInputDataRequiredValid","abstract":"

    Error key, used for errors when input data is required to be valid is not valid.

    "},"Error%20Keys.html#/s:13VGSCollectSDK23VGSSDKErrorFileNotFoundSSvp":{"name":"VGSSDKErrorFileNotFound","abstract":"

    Error key, used for errors when SDK can’t find the file at file path. Can happened when file changes the path or doesn’t exist.

    "},"Error%20Keys.html#/s:13VGSCollectSDK31VGSSDKErrorFileTypeNotSupportedSSvp":{"name":"VGSSDKErrorFileTypeNotSupported","abstract":"

    Error key, used for errors when file type is not supported by SDK.

    "},"Error%20Keys.html#/s:13VGSCollectSDK34VGSSDKErrorFileSizeExceedsTheLimitSSvp":{"name":"VGSSDKErrorFileSizeExceedsTheLimit","abstract":"

    Error key, used for errors when file size exceeds maximum limit.

    "},"Error%20Keys.html#/s:13VGSCollectSDK29VGSSDKErrorSourceNotAvailableSSvp":{"name":"VGSSDKErrorSourceNotAvailable","abstract":"

    Error key, used for errors when SDK can’t get access to specific source.

    "},"Error%20Keys.html#/s:13VGSCollectSDK39VGSSDKErrorUnexpectedResponseDataFormatSSvp":{"name":"VGSSDKErrorUnexpectedResponseDataFormat","abstract":"

    Error key, used for errors when response for SDK API request is in format that not supported by SDK.

    "},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO19inputDataIsNotValidyA2CmF":{"name":"inputDataIsNotValid","abstract":"

    When input data is not valid, but required to be valid

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO17inputFileNotFoundyA2CmF":{"name":"inputFileNotFound","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO09inputFileD14IsNotSupportedyA2CmF":{"name":"inputFileTypeIsNotSupported","abstract":"

    When can’t find file on device

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28inputFileSizeExceedsTheLimityA2CmF":{"name":"inputFileSizeExceedsTheLimit","abstract":"

    When file size is larger then allowed limit

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO18sourceNotAvailableyA2CmF":{"name":"sourceNotAvailable","abstract":"

    When can’t get access to file source

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO018unexpectedResponseD0yA2CmF":{"name":"unexpectedResponseType","abstract":"

    When response type is not supported

    ","parent_name":"VGSErrorType"},"Enums/VGSErrorType.html#/s:13VGSCollectSDK12VGSErrorTypeO28unexpectedResponseDataFormatyA2CmF":{"name":"unexpectedResponseDataFormat","abstract":"

    When reponse data format is not supported

    ","parent_name":"VGSErrorType"},"Classes/VGSError.html#/s:13VGSCollectSDK8VGSErrorC4typeAA0C4TypeOSgvp":{"name":"type","abstract":"

    VGSErrorType- required for each VGSError instance

    ","parent_name":"VGSError"},"Classes/VGSError.html#/c:@M@VGSCollectSDK@objc(cs)VGSError(py)code":{"name":"code","abstract":"

    Code assiciated with VGSErrorType

    ","parent_name":"VGSError"},"Classes/VGSError.html":{"name":"VGSError","abstract":"

    An error produced by VGSCollectSDK. Works similar to default NSError in iOS.

    "},"Enums/VGSErrorType.html":{"name":"VGSErrorType","abstract":"

    Type of VGSError and it status code.

    "},"Errors.html#/s:13VGSCollectSDK0A14SDKErrorDomainSSvp":{"name":"VGSCollectSDKErrorDomain","abstract":"

    An error domain string used to produce VGSError from VGSCollectSDK - “vgscollect.sdk”

    "},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3getyA2CmF":{"name":"get","abstract":"

    GET method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO4postyA2CmF":{"name":"post","abstract":"

    POST method

    ","parent_name":"HTTPMethod"},"Enums/HTTPMethod.html#/s:13VGSCollectSDK10HTTPMethodO3putyA2CmF":{"name":"put","abstract":"

    PUT method

    ","parent_name":"HTTPMethod"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7successyACSi_10Foundation4DataVSgSo13NSURLResponseCSgtcACmF":{"name":"success(_:_:_:)","abstract":"

    Success response case

    ","parent_name":"VGSResponse"},"Enums/VGSResponse.html#/s:13VGSCollectSDK11VGSResponseO7failureyACSi_10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgtcACmF":{"name":"failure(_:_:_:_:)","abstract":"

    Failed response case

    ","parent_name":"VGSResponse"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC5last4SSvp":{"name":"last4","abstract":"

    Last 4 digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC3binSSvp":{"name":"bin","abstract":"

    Bin digits of the valid card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC9cardBrandAA9SwiftLuhnC0C4TypeOvp":{"name":"cardBrand","abstract":"

    Credit Card Brand of the card number from associated VGSTextField with field configuration type FieldType.cardNumber.

    ","parent_name":"CardState"},"Classes/CardState.html#/s:13VGSCollectSDK9CardStateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains CardState attributes and their values.

    ","parent_name":"CardState"},"Classes/State.html#/s:13VGSCollectSDK5StateC9fieldNameSSSgvp":{"name":"fieldName","abstract":"

    VGSConfiguration.fieldName associated with VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC10isRequiredSbvp":{"name":"isRequired","abstract":"

    VGSConfiguration.isRequired attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    VGSConfiguration.isRequiredValidOnly attribute defined for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isValidSbvp":{"name":"isValid","abstract":"

    Contains current validation state for VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC7isEmptySbvp":{"name":"isEmpty","abstract":"

    Show if VGSTextField input is empty

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11inputLengthSivp":{"name":"inputLength","abstract":"

    Input data length in VGSTextField

    ","parent_name":"State"},"Classes/State.html#/s:13VGSCollectSDK5StateC11descriptionSSvp":{"name":"description","abstract":"

    Message that contains State attributes and their values

    ","parent_name":"State"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO7sandboxyA2CmF":{"name":"sandbox","abstract":"

    Should be used for development and testing purpose.

    ","parent_name":"Environment"},"Enums/Environment.html#/s:13VGSCollectSDK11EnvironmentO4liveyA2CmF":{"name":"live","abstract":"

    Should be used for production.

    ","parent_name":"Environment"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13customHeadersSDyS2SGSgvp":{"name":"customHeaders","abstract":"

    Set your custom HTTP headers

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C17observeFieldStateyAA07VGSTextD0CcSgvp":{"name":"observeFieldState","abstract":"

    Observe only focused VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C13observeStatesySayAA12VGSTextFieldCGcSgvp":{"name":"observeStates","abstract":"

    Observe all VGSTextField on editing events.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C2id11environmentACSS_AA11EnvironmentOtcfc":{"name":"init(id:environment:)","abstract":"

    Initialzation

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C10cleanFilesyyF":{"name":"cleanFiles()","abstract":"

    Detach files for associated VGSCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12getTextField9fieldNameAA07VGSTextE0CSgSS_tF":{"name":"getTextField(fieldName:)","abstract":"

    Returns VGSTextField with VGSConfiguration.fieldName associated with VGCollect instance.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C12isJailbrokenSbyFZ":{"name":"isJailbroken()","abstract":"

    Check device if it jailbroken

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendData4path6method05extraD010completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendData(path:method:extraData:completion:)","abstract":"

    Send data from VGSTextFields to your organization vault.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html#/s:13VGSCollectSDK0A0C8sendFile4path6method9extraData10completionySS_AA10HTTPMethodOSDySSypGSgyAA11VGSResponseOctF":{"name":"sendFile(path:method:extraData:completion:)","abstract":"

    Send file to your organization vault. Only send one file at a time.

    ","parent_name":"VGSCollect"},"Classes/VGSCollect.html":{"name":"VGSCollect","abstract":"

    An object you use for observing VGSTextField State and send data to your organization vault.

    "},"Enums/Environment.html":{"name":"Environment","abstract":"

    Organization vault environment.

    "},"Classes/State.html":{"name":"State","abstract":"

    An object that describes VGSTextField state. State attributes are read-only.

    "},"Classes/CardState.html":{"name":"CardState","abstract":"

    An object that describes VGSCardTextField state. State attributes are read-only.

    "},"Enums/VGSResponse.html":{"name":"VGSResponse","abstract":"

    Response enum cases for SDK requests

    "},"Enums/HTTPMethod.html":{"name":"HTTPMethod","abstract":"

    HTTP request methods

    "},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)fileExtension":{"name":"fileExtension","abstract":"

    File extension, like “jpeg”, “png”, etc.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)size":{"name":"size","abstract":"

    File size.

    ","parent_name":"VGSFileInfo"},"Classes/VGSFileInfo.html#/c:@M@VGSCollectSDK@objc(cs)VGSFileInfo(py)sizeUnits":{"name":"sizeUnits","abstract":"

    File size units.

    ","parent_name":"VGSFileInfo"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO12photoLibraryyA2CmF":{"name":"photoLibrary","abstract":"

    Device photo library.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO6camerayA2CmF":{"name":"camera","abstract":"

    Device camera.

    ","parent_name":"VGSFileSource"},"Enums/VGSFileSource.html#/s:13VGSCollectSDK13VGSFileSourceO18documentsDirectoryyA2CmF":{"name":"documentsDirectory","abstract":"

    Device documents directory.

    ","parent_name":"VGSFileSource"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidPickFileWithInfo:":{"name":"userDidPickFileWithInfo(_:)","abstract":"

    On user select a file

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)userDidSCancelFilePicking":{"name":"userDidSCancelFilePicking()","abstract":"

    On user canceling file picking

    ","parent_name":"VGSFilePickerControllerDelegate"},"Protocols/VGSFilePickerControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSFilePickerControllerDelegate(im)filePickingFailedWithError:":{"name":"filePickingFailedWithError(_:)","abstract":"

    On error occured when user pick a file.

    ","parent_name":"VGSFilePickerControllerDelegate"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with selected file by user. Used as a JSON key on send request with file data to your organozation vault.

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerConfiguration.html#/s:13VGSCollectSDK26VGSFilePickerConfigurationC9collector9fieldName10fileSourceAcA0A0C_SSAA0cJ0Otcfc":{"name":"init(collector:fieldName:fileSource:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerConfiguration"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSFilePickerControllerDelegate - handle user interaction on file picking.

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC13configurationAcA0cD13ConfigurationC_tcfc":{"name":"init(configuration:)","abstract":"

    Initialization

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011presentFileD02on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentFilePicker(on:animated:completion:)","abstract":"

    Present file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html#/s:13VGSCollectSDK23VGSFilePickerControllerC011dismissFileD08animated10completionySb_yycSgtF":{"name":"dismissFilePicker(animated:completion:)","abstract":"

    Dismiss file picker view

    ","parent_name":"VGSFilePickerController"},"Classes/VGSFilePickerController.html":{"name":"VGSFilePickerController","abstract":"

    Controller responsible for importing files from device sources.

    "},"Classes/VGSFilePickerConfiguration.html":{"name":"VGSFilePickerConfiguration","abstract":"

    A class responsible for configuration VGSFilePickerController.

    "},"Protocols/VGSFilePickerControllerDelegate.html":{"name":"VGSFilePickerControllerDelegate","abstract":"

    Delegates produced by VGSFilePickerController.

    "},"Enums/VGSFileSource.html":{"name":"VGSFileSource","abstract":"

    Available file source destinations that VGSFilePickerController can work with.

    "},"Classes/VGSFileInfo.html":{"name":"VGSFileInfo","abstract":"

    An object that holds optional files’ metadata on selecting file through VGSFilePickerController.

    "},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCardNumber":{"name":"cardNumber","abstract":"

    Credit Card Number. 16 digits string.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationDate":{"name":"expirationDate","abstract":"

    Credit Card Expiration Date. String in format “01/21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationMonth":{"name":"expirationMonth","abstract":"

    Credit Card Expiration Month. String in format “01”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeExpirationYear":{"name":"expirationYear","abstract":"

    Credit Card Expiration Year. String in format “21”.

    ","parent_name":"CradIODataType"},"Enums/CradIODataType.html#/c:@M@VGSCollectSDK@E@CradIODataType@CradIODataTypeCvc":{"name":"cvc","abstract":"

    Credit Card CVC code. 3-4 digits string in format “123”.

    ","parent_name":"CradIODataType"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidFinishScan":{"name":"userDidFinishScan()","abstract":"

    On user confirm scanned data by selecting Done button on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)userDidCancelScan":{"name":"userDidCancelScan()","abstract":"

    On user press Cancel buttonn on Card.io screen.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Protocols/VGSCardIOScanControllerDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSCardIOScanControllerDelegate(im)textFieldForScannedDataWithType:":{"name":"textFieldForScannedData(type:)","abstract":"

    Asks VGSTextField where scanned data with VGSConfiguration.FieldType need to be set. Called after user select Done button, just before userDidFinishScan() delegate.

    ","parent_name":"VGSCardIOScanControllerDelegate"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC8delegateAA0cdE8Delegate_pSgvp":{"name":"delegate","abstract":"

    VGSCardIOScanControllerDelegate - handle user interaction with Card.io scanner

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC23preferredCameraPositionSo015AVCaptureDeviceH0VSgvp":{"name":"preferredCameraPosition","abstract":"

    Defines preferred AVCaptureDevice.Position. Deault is AVCaptureDevice.Position.unspecified

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerCyAcA0cdE8Delegate_pSgcfc":{"name":"init(_:)","abstract":"

    Initialization

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18presentCardScanner2on8animated10completionySo06UIViewE0C_SbyycSgtF":{"name":"presentCardScanner(on:animated:completion:)","abstract":"

    Present Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html#/s:13VGSCollectSDK23VGSCardIOScanControllerC18dismissCardScanner8animated10completionySb_yycSgtF":{"name":"dismissCardScanner(animated:completion:)","abstract":"

    Dismiss Card.io scanner.

    ","parent_name":"VGSCardIOScanController"},"Classes/VGSCardIOScanController.html":{"name":"VGSCardIOScanController","abstract":"

    Controller responsible for managing Card.io scanner

    "},"Protocols/VGSCardIOScanControllerDelegate.html":{"name":"VGSCardIOScanControllerDelegate","abstract":"

    Delegates produced by VGSCardIOScanController instance.

    "},"Enums/CradIODataType.html":{"name":"CradIODataType","abstract":"

    Supported scan data fields by Card.io

    "},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO12visaElectronyA2EmF":{"name":"visaElectron","abstract":"

    Visa Electron

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7maestroyA2EmF":{"name":"maestro","abstract":"

    Maestro

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4visayA2EmF":{"name":"visa","abstract":"

    Visa

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10mastercardyA2EmF":{"name":"mastercard","abstract":"

    Mastercard

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO4amexyA2EmF":{"name":"amex","abstract":"

    American Express

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO10dinersClubyA2EmF":{"name":"dinersClub","abstract":"

    Diner’s Club

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO8discoveryA2EmF":{"name":"discover","abstract":"

    Discover

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO3jcbyA2EmF":{"name":"jcb","abstract":"

    JCB

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO7unknownyA2EmF":{"name":"unknown","abstract":"

    Not supported card type - “unknown”

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11stringValueSSvp":{"name":"stringValue","abstract":"

    String representation of SwiftLuhn.CardType enum values.

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html#/s:13VGSCollectSDK9SwiftLuhnC8CardTypeO11cardLengthsSaySiGvp":{"name":"cardLengths","abstract":"

    Returns array with valid card number lengths for specific SwiftLuhn.CardType

    ","parent_name":"CardType"},"Classes/SwiftLuhn/CardType.html":{"name":"CardType","abstract":"

    Supported card types

    ","parent_name":"SwiftLuhn"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO4noneyA2CmF":{"name":"none","abstract":"

    Field type that doesn’t require any input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO10cardNumberyA2CmF":{"name":"cardNumber","abstract":"

    Field type that requires Credit Card Number input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO7expDateyA2CmF":{"name":"expDate","abstract":"

    Field type that requires Expiration Date input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO3cvcyA2CmF":{"name":"cvc","abstract":"

    Field type that requires Credit Card CVC input formatting and validation.

    ","parent_name":"FieldType"},"Enums/FieldType.html#/s:13VGSCollectSDK9FieldTypeO14cardHolderNameyA2CmF":{"name":"cardHolderName","abstract":"

    Field type that requires Cardholder Name input formatting and validation.

    ","parent_name":"FieldType"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC4typeAA9FieldTypeOvp":{"name":"type","abstract":"

    Type of field congfiguration. Default is FieldType.none.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9fieldNameSSvp":{"name":"fieldName","abstract":"

    Name that will be associated with VGSTextField and used as a JSON key on send request with textfield data to your organozation vault.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC10isRequiredSbvp":{"name":"isRequired","abstract":"

    Set if VGSTextField is required to be non-empty and non-nil on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC19isRequiredValidOnlySbvp":{"name":"isRequiredValidOnly","abstract":"

    Set if VGSTextField is required to be valid only on send request. Default is false.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13formatPatternSSSgvp":{"name":"formatPattern","abstract":"

    Input data visual format pattern. If not applied, will be set by default depending on field type.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC7dividerSSSgvp":{"name":"divider","abstract":"

    String, used to replace not default VGSConfiguration.formatPattern characters in input text on send request.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC12keyboardTypeSo010UIKeyboardE0VSgvp":{"name":"keyboardType","abstract":"

    Preferred UIKeyboardType for VGSTextField. If not applied, will be set by default depending on field type parameter.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC13returnKeyTypeSo08UIReturneF0VSgvp":{"name":"returnKeyType","abstract":"

    Preferred UIReturnKeyType for VGSTextField.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC18keyboardAppearanceSo010UIKeyboardE0VSgvp":{"name":"keyboardAppearance","abstract":"

    Preferred UIKeyboardAppearance for textfield. By default is UIKeyboardAppearance.default.

    ","parent_name":"VGSConfiguration"},"Classes/VGSConfiguration.html#/s:13VGSCollectSDK16VGSConfigurationC9collector9fieldNameAcA0A0C_SStcfc":{"name":"init(collector:fieldName:)","abstract":"

    Initialization

    ","parent_name":"VGSConfiguration"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidBeginEditing:":{"name":"vgsTextFieldDidBeginEditing(_:)","abstract":"

    VGSTextField did become first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditing:":{"name":"vgsTextFieldDidEndEditing(_:)","abstract":"

    VGSTextField did resign first responder.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidEndEditingOnReturn:":{"name":"vgsTextFieldDidEndEditingOnReturn(_:)","abstract":"

    VGSTextField did resign first responder on Return button pressed.

    ","parent_name":"VGSTextFieldDelegate"},"Protocols/VGSTextFieldDelegate.html#/c:@M@VGSCollectSDK@objc(pl)VGSTextFieldDelegate(im)vgsTextFieldDidChange:":{"name":"vgsTextFieldDidChange(_:)","abstract":"

    VGSTextField input changed.

    ","parent_name":"VGSTextFieldDelegate"},"Classes/VGSCardTextField/CardIconLocation.html#/s:13VGSCollectSDK16VGSCardTextFieldC16CardIconLocationO4leftyA2EmF":{"name":"left","abstract":"

    Card brand icon at left side of VGSCardTextField.

    ","parent_name":"CardIconLocation"},"Classes/VGSCardTextField/CardIconLocation.html#/s:13VGSCollectSDK16VGSCardTextFieldC16CardIconLocationO5rightyA2EmF":{"name":"right","abstract":"

    Card brand icon at right side of VGSCardTextField.

    ","parent_name":"CardIconLocation"},"Classes/VGSCardTextField/CardIconLocation.html":{"name":"CardIconLocation","abstract":"

    Available Card brand icon positions enum.

    ","parent_name":"VGSCardTextField"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC16cardIconLocationAC04CardgH0Ovp":{"name":"cardIconLocation","abstract":"

    Card brand icon position inside VGSCardTextField.

    ","parent_name":"VGSCardTextField"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC12cardIconSizeSo6CGSizeVvp":{"name":"cardIconSize","abstract":"

    Card brand icon size.

    ","parent_name":"VGSCardTextField"},"Classes/VGSCardTextField.html#/s:13VGSCollectSDK16VGSCardTextFieldC15cardsIconSourceSo7UIImageCSgAA9SwiftLuhnC8CardTypeOcSgvp":{"name":"cardsIconSource","abstract":"

    Asks custom image for specific SwiftLuhn.CardType

    ","parent_name":"VGSCardTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC11placeholderSSSgvp":{"name":"placeholder","abstract":"

    Textfield placeholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC21attributedPlaceholderSo18NSAttributedStringCSgvp":{"name":"attributedPlaceholder","abstract":"

    Textfield attributedPlaceholder string.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC7paddingSo12UIEdgeInsetsVvp":{"name":"padding","abstract":"

    UIEdgeInsets for text and placeholder inside VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13textAlignmentSo06NSTextF0Vvp":{"name":"textAlignment","abstract":"

    The technique to use for aligning the text.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC15clearButtonModeSo06UITextd4ViewG0Vvp":{"name":"clearButtonMode","abstract":"

    Sets when the clear button shows up. Default is UITextField.ViewMode.never

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC33adjustsFontForContentSizeCategorySbvp":{"name":"adjustsFontForContentSizeCategory","abstract":"

    Indicates whether VGSTextField should automatically update its font when the device’s UIContentSizeCategory is changed.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC13configurationAA16VGSConfigurationCSgvp":{"name":"configuration","abstract":"

    Specifies VGSTextField configuration parameters to work with VGSCollect.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC8delegateAA0cD8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegates VGSTextField editing events. Default is nil.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/s:13VGSCollectSDK12VGSTextFieldC5stateAA5StateCvp":{"name":"state","abstract":"

    Describes VGSTextField input State

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)becomeFirstResponder":{"name":"becomeFirstResponder()","abstract":"

    Make VGSTextField focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(im)resignFirstResponder":{"name":"resignFirstResponder()","abstract":"

    Remove focus from VGSTextField.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html#/c:@CM@VGSCollectSDK@objc(cs)VGSTextField(py)isFirstResponder":{"name":"isFirstResponder","abstract":"

    Check if VGSTextField is focused.

    ","parent_name":"VGSTextField"},"Classes/VGSTextField.html":{"name":"VGSTextField","abstract":"

    An object that displays an editable text area in user interface.

    "},"Classes/VGSCardTextField.html":{"name":"VGSCardTextField","abstract":"

    An object that displays an editable text area. Can be use instead of a VGSTextField when need to detect and show credit card brand images.

    "},"Protocols/VGSTextFieldDelegate.html":{"name":"VGSTextFieldDelegate","abstract":"

    Delegates produced by VGSTextField instance.

    "},"Classes/VGSConfiguration.html":{"name":"VGSConfiguration","abstract":"

    A class responsible for configuration VGSTextField.

    "},"Enums/FieldType.html":{"name":"FieldType","abstract":"

    Type of VGSTextField configuration.

    "},"Classes/SwiftLuhn.html":{"name":"SwiftLuhn","abstract":"

    Class containing supported credit card types

    "},"UI%20Elements.html":{"name":"UI Elements"},"Card%20Scan.html":{"name":"Card Scan"},"File%20Picker.html":{"name":"File Picker"},"Observe%20State%20and%20Send%20Data.html":{"name":"Observe State and Send Data"},"Errors.html":{"name":"Errors"},"Error%20Keys.html":{"name":"Error Keys"},"Type%20Aliases.html":{"name":"Type Aliases"}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index 3dae6bcd..3967edaf 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -56,20 +56,6 @@ "symbol_kind": "source.lang.swift.decl.extension", "warning": "undocumented" }, - { - "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/Mask/MaskedTextField.swift", - "line": 14, - "symbol": "MaskedTextField", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/VGSCardTextField.swift", - "line": 23, - "symbol": "VGSCardTextField.didMoveToSuperview()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, { "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField+UIBuilder.swift", "line": 15, @@ -121,28 +107,35 @@ }, { "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift", - "line": 132, + "line": 145, "symbol": "VGSTextField.textFieldDidBeginEditing(_:)", "symbol_kind": "source.lang.swift.decl.function.method.instance", "warning": "undocumented" }, { "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift", - "line": 136, + "line": 149, + "symbol": "VGSTextField.textFieldDidChange(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift", + "line": 153, "symbol": "VGSTextField.textFieldDidEndEditing(_:)", "symbol_kind": "source.lang.swift.decl.function.method.instance", "warning": "undocumented" }, { "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift", - "line": 140, + "line": 157, "symbol": "VGSTextField.textFieldDidEndEditingOnExit(_:)", "symbol_kind": "source.lang.swift.decl.function.method.instance", "warning": "undocumented" }, { "file": "/Users/dima/vgs-collect-ios/Sources/VGSCollectSDK/UIElements/Text Field/VGSTextField.swift", - "line": 205, + "line": 243, "symbol": "UIView.mainStyle()", "symbol_kind": "source.lang.swift.decl.function.method.instance", "warning": "undocumented" From a3064bc1f0011afd165686f678ce6e924a2ae173 Mon Sep 17 00:00:00 2001 From: "dmytro.khl" Date: Wed, 27 May 2020 18:40:37 +0300 Subject: [PATCH 9/9] Bump SDK version. --- VGSCollectSDK.podspec | 2 +- VGSCollectSDK.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VGSCollectSDK.podspec b/VGSCollectSDK.podspec index 1a5c0c53..8ef22cb4 100644 --- a/VGSCollectSDK.podspec +++ b/VGSCollectSDK.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = 'VGSCollectSDK' - spec.version = '1.5.0' + spec.version = '1.5.1' spec.summary = 'VGS Collect - is a product suite that allows customers to collect information securely without possession of it.' spec.swift_version = '5.0' spec.description = <<-DESC diff --git a/VGSCollectSDK.xcodeproj/project.pbxproj b/VGSCollectSDK.xcodeproj/project.pbxproj index 358f1b76..3051ff32 100644 --- a/VGSCollectSDK.xcodeproj/project.pbxproj +++ b/VGSCollectSDK.xcodeproj/project.pbxproj @@ -750,7 +750,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.5.0; + MARKETING_VERSION = 1.5.1; PRODUCT_BUNDLE_IDENTIFIER = com.vgs.framework; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -786,7 +786,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.5.0; + MARKETING_VERSION = 1.5.1; PRODUCT_BUNDLE_IDENTIFIER = com.vgs.framework; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = "";