Skip to content

Commit

Permalink
Test credit card details
Browse files Browse the repository at this point in the history
  • Loading branch information
3lvis committed Jun 14, 2024
1 parent 59a3c88 commit c650536
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Vanilla/Vanilla.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
282B13122C1BE91F00FB13F1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 282B13112C1BE91F00FB13F1 /* Assets.xcassets */; };
282B13152C1BE91F00FB13F1 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 282B13142C1BE91F00FB13F1 /* Base */; };
2867CE842C1BE96E004C821F /* FormTextField in Frameworks */ = {isa = PBXBuildFile; productRef = 2867CE832C1BE96E004C821F /* FormTextField */; };
28EE88A42C1C8020000EBFCF /* CreditCardDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EE88A32C1C8020000EBFCF /* CreditCardDetailsController.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
Expand All @@ -21,6 +22,8 @@
282B13112C1BE91F00FB13F1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
282B13142C1BE91F00FB13F1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
282B13162C1BE91F00FB13F1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
28EE88A32C1C8020000EBFCF /* CreditCardDetailsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreditCardDetailsController.swift; sourceTree = "<group>"; };
28EE88A52C1C8231000EBFCF /* Vanilla.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Vanilla.entitlements; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -55,8 +58,10 @@
282B13072C1BE91E00FB13F1 /* Vanilla */ = {
isa = PBXGroup;
children = (
28EE88A52C1C8231000EBFCF /* Vanilla.entitlements */,
282B13082C1BE91E00FB13F1 /* AppDelegate.swift */,
282B130C2C1BE91E00FB13F1 /* ViewController.swift */,
28EE88A32C1C8020000EBFCF /* CreditCardDetailsController.swift */,
282B13112C1BE91F00FB13F1 /* Assets.xcassets */,
282B13132C1BE91F00FB13F1 /* LaunchScreen.storyboard */,
282B13162C1BE91F00FB13F1 /* Info.plist */,
Expand Down Expand Up @@ -144,6 +149,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
28EE88A42C1C8020000EBFCF /* CreditCardDetailsController.swift in Sources */,
282B130D2C1BE91E00FB13F1 /* ViewController.swift in Sources */,
282B13092C1BE91E00FB13F1 /* AppDelegate.swift in Sources */,
);
Expand Down Expand Up @@ -287,6 +293,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Vanilla/Vanilla.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
Expand Down Expand Up @@ -319,6 +326,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Vanilla/Vanilla.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
Expand Down
61 changes: 61 additions & 0 deletions Vanilla/Vanilla/CreditCardDetailsController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import UIKit
import FormTextField

class CreditCardDetailsController: UIViewController {
lazy var inputValidator: InputValidator = {
var validation = Validation()
validation.maximumLength = "1234 5678 1234 5678".count
validation.minimumLength = "1234 5678 1234 5678".count
let characterSet = NSMutableCharacterSet.decimalDigit()
characterSet.addCharacters(in: " ")
validation.characterSet = characterSet as CharacterSet
let inputValidator = InputValidator(validation: validation)
return inputValidator
}()

let formatter = CardNumberFormatter()

lazy var creditCardNumberTextField: UITextField = {
let textField = UITextField(frame: .zero)
textField.translatesAutoresizingMaskIntoConstraints = false
textField.backgroundColor = .secondarySystemBackground
textField.textColor = .label
textField.autocapitalizationType = .none
textField.autocorrectionType = .no
textField.keyboardType = .numberPad
textField.textContentType = .creditCardNumber
textField.placeholder = "Credit card number"
textField.delegate = self
textField.addTarget(self, action: #selector(textFieldDidUpdate(_:)), for: .editingChanged)
textField.clearButtonMode = .whileEditing
return textField
}()

override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(creditCardNumberTextField)
view.backgroundColor = .systemBackground

NSLayoutConstraint.activate([
creditCardNumberTextField.centerYAnchor.constraint(equalTo: view.centerYAnchor),
creditCardNumberTextField.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 12),
creditCardNumberTextField.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -12),
])
}

@objc func textFieldDidUpdate(_ textField: UITextField) {
let creditCardNumber = creditCardNumberTextField.text ?? ""
textField.text = formatter.formatString(creditCardNumber, reverse: reverse)
creditCardNumberTextField.backgroundColor = self.inputValidator.validateString(creditCardNumber) ? .systemMint : .secondarySystemBackground
}

var reverse = false
}

extension CreditCardDetailsController: UITextFieldDelegate {
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
reverse = string.isEmpty
return self.inputValidator.validateReplacementString(string, fullString: textField.text, inRange: range)
}
}

8 changes: 8 additions & 0 deletions Vanilla/Vanilla/Vanilla.entitlements
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.authentication-services.autofill-credential-provider</key>
<true/>
</dict>
</plist>

0 comments on commit c650536

Please sign in to comment.