Compare commits
1 Commits
master
...
feature/ca
| Author | SHA1 | Date |
|---|---|---|
|
|
83b427488d |
|
|
@ -1,6 +1,7 @@
|
||||||
# Xcode
|
# Xcode
|
||||||
#
|
#
|
||||||
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
|
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
## User settings
|
## User settings
|
||||||
xcuserdata/
|
xcuserdata/
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 54fd9f11068bf9264e29ccd77827c5bda961d37c
|
Subproject commit 2ac36fbc1b190b229d906d28ba23390f55fab335
|
||||||
|
|
@ -3,23 +3,35 @@
|
||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 51;
|
objectVersion = 52;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
3400B87893AA2CBDF5E3FB8C /* Pods_testapp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CEF4CC413320F5A9AC9F4AD /* Pods_testapp.framework */; };
|
3400B87893AA2CBDF5E3FB8C /* Pods_testapp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CEF4CC413320F5A9AC9F4AD /* Pods_testapp.framework */; };
|
||||||
|
4C520A242633FE7D004C4424 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4C520A232633FE7D004C4424 /* GoogleService-Info.plist */; };
|
||||||
|
4C520A292633FF33004C4424 /* QRCodeReader in Frameworks */ = {isa = PBXBuildFile; productRef = 4C520A282633FF33004C4424 /* QRCodeReader */; };
|
||||||
|
4C520A2D2633FFBF004C4424 /* TISwiftUtils in Frameworks */ = {isa = PBXBuildFile; productRef = 4C520A2C2633FFBF004C4424 /* TISwiftUtils */; };
|
||||||
|
4C520A2F2633FFBF004C4424 /* TIUIKitCore in Frameworks */ = {isa = PBXBuildFile; productRef = 4C520A2E2633FFBF004C4424 /* TIUIKitCore */; };
|
||||||
|
4C520A312633FFBF004C4424 /* TIFoundationUtils in Frameworks */ = {isa = PBXBuildFile; productRef = 4C520A302633FFBF004C4424 /* TIFoundationUtils */; };
|
||||||
|
4C520A332633FFBF004C4424 /* TIUIElements in Frameworks */ = {isa = PBXBuildFile; productRef = 4C520A322633FFBF004C4424 /* TIUIElements */; };
|
||||||
|
4C520A362633FFE1004C4424 /* CardScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C520A352633FFE1004C4424 /* CardScanner.swift */; };
|
||||||
|
4C520A3B2634007D004C4424 /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 4C520A3A2634007D004C4424 /* SnapKit */; };
|
||||||
|
4C520A3E263401A9004C4424 /* Images.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C520A3D263401A9004C4424 /* Images.swift */; };
|
||||||
|
4C520A4726340555004C4424 /* Reg in Frameworks */ = {isa = PBXBuildFile; productRef = 4C520A4626340555004C4424 /* Reg */; };
|
||||||
4CEDA81A243116E2009937F6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA819243116E2009937F6 /* AppDelegate.swift */; };
|
4CEDA81A243116E2009937F6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA819243116E2009937F6 /* AppDelegate.swift */; };
|
||||||
4CEDA81C243116E2009937F6 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA81B243116E2009937F6 /* SceneDelegate.swift */; };
|
4CEDA81C243116E2009937F6 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA81B243116E2009937F6 /* SceneDelegate.swift */; };
|
||||||
4CEDA81E243116E2009937F6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA81D243116E2009937F6 /* ViewController.swift */; };
|
4CEDA81E243116E2009937F6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA81D243116E2009937F6 /* ViewController.swift */; };
|
||||||
4CEDA821243116E2009937F6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4CEDA81F243116E2009937F6 /* Main.storyboard */; };
|
4CEDA821243116E2009937F6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4CEDA81F243116E2009937F6 /* Main.storyboard */; };
|
||||||
4CEDA823243116E4009937F6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4CEDA822243116E4009937F6 /* Assets.xcassets */; };
|
4CEDA823243116E4009937F6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4CEDA822243116E4009937F6 /* Assets.xcassets */; };
|
||||||
4CEDA826243116E4009937F6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4CEDA824243116E4009937F6 /* LaunchScreen.storyboard */; };
|
4CEDA826243116E4009937F6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4CEDA824243116E4009937F6 /* LaunchScreen.storyboard */; };
|
||||||
4CEDA82E24311BB7009937F6 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4CEDA82D24311BB7009937F6 /* GoogleService-Info.plist */; };
|
|
||||||
4CEDA83224311D39009937F6 /* FirebaseConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA83124311D39009937F6 /* FirebaseConfigurator.swift */; };
|
4CEDA83224311D39009937F6 /* FirebaseConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDA83124311D39009937F6 /* FirebaseConfigurator.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
1A298113541BC1F2C4C002E5 /* Pods-testapp.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-testapp.appstore.xcconfig"; path = "Target Support Files/Pods-testapp/Pods-testapp.appstore.xcconfig"; sourceTree = "<group>"; };
|
1A298113541BC1F2C4C002E5 /* Pods-testapp.appstore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-testapp.appstore.xcconfig"; path = "Target Support Files/Pods-testapp/Pods-testapp.appstore.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
4C520A232633FE7D004C4424 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
4C520A352633FFE1004C4424 /* CardScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardScanner.swift; sourceTree = "<group>"; };
|
||||||
|
4C520A3D263401A9004C4424 /* Images.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Images.swift; sourceTree = "<group>"; };
|
||||||
4CEDA816243116E2009937F6 /* testapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testapp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
4CEDA816243116E2009937F6 /* testapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testapp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
4CEDA819243116E2009937F6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
4CEDA819243116E2009937F6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
4CEDA81B243116E2009937F6 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
4CEDA81B243116E2009937F6 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
|
@ -28,7 +40,6 @@
|
||||||
4CEDA822243116E4009937F6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
4CEDA822243116E4009937F6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
4CEDA825243116E4009937F6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
4CEDA825243116E4009937F6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
4CEDA827243116E4009937F6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
4CEDA827243116E4009937F6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
4CEDA82D24311BB7009937F6 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
|
||||||
4CEDA83124311D39009937F6 /* FirebaseConfigurator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseConfigurator.swift; sourceTree = "<group>"; };
|
4CEDA83124311D39009937F6 /* FirebaseConfigurator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseConfigurator.swift; sourceTree = "<group>"; };
|
||||||
78341F7625BEA2BE0045D4D3 /* AppStore.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AppStore.entitlements; sourceTree = "<group>"; };
|
78341F7625BEA2BE0045D4D3 /* AppStore.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AppStore.entitlements; sourceTree = "<group>"; };
|
||||||
78341F7725BEA2BE0045D4D3 /* Enterprise.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Enterprise.entitlements; sourceTree = "<group>"; };
|
78341F7725BEA2BE0045D4D3 /* Enterprise.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Enterprise.entitlements; sourceTree = "<group>"; };
|
||||||
|
|
@ -62,7 +73,14 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
4C520A2D2633FFBF004C4424 /* TISwiftUtils in Frameworks */,
|
||||||
|
4C520A4726340555004C4424 /* Reg in Frameworks */,
|
||||||
3400B87893AA2CBDF5E3FB8C /* Pods_testapp.framework in Frameworks */,
|
3400B87893AA2CBDF5E3FB8C /* Pods_testapp.framework in Frameworks */,
|
||||||
|
4C520A312633FFBF004C4424 /* TIFoundationUtils in Frameworks */,
|
||||||
|
4C520A3B2634007D004C4424 /* SnapKit in Frameworks */,
|
||||||
|
4C520A292633FF33004C4424 /* QRCodeReader in Frameworks */,
|
||||||
|
4C520A332633FFBF004C4424 /* TIUIElements in Frameworks */,
|
||||||
|
4C520A2F2633FFBF004C4424 /* TIUIKitCore in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
@ -103,6 +121,8 @@
|
||||||
78341F7625BEA2BE0045D4D3 /* AppStore.entitlements */,
|
78341F7625BEA2BE0045D4D3 /* AppStore.entitlements */,
|
||||||
78341F7725BEA2BE0045D4D3 /* Enterprise.entitlements */,
|
78341F7725BEA2BE0045D4D3 /* Enterprise.entitlements */,
|
||||||
78341F7825BEA2BE0045D4D3 /* Standard.entitlements */,
|
78341F7825BEA2BE0045D4D3 /* Standard.entitlements */,
|
||||||
|
4C520A352633FFE1004C4424 /* CardScanner.swift */,
|
||||||
|
4C520A3D263401A9004C4424 /* Images.swift */,
|
||||||
);
|
);
|
||||||
path = testapp;
|
path = testapp;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -110,7 +130,7 @@
|
||||||
4CEDA82F24311BC0009937F6 /* Resources */ = {
|
4CEDA82F24311BC0009937F6 /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
4CEDA82D24311BB7009937F6 /* GoogleService-Info.plist */,
|
4C520A232633FE7D004C4424 /* GoogleService-Info.plist */,
|
||||||
);
|
);
|
||||||
path = Resources;
|
path = Resources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -177,6 +197,15 @@
|
||||||
dependencies = (
|
dependencies = (
|
||||||
);
|
);
|
||||||
name = testapp;
|
name = testapp;
|
||||||
|
packageProductDependencies = (
|
||||||
|
4C520A282633FF33004C4424 /* QRCodeReader */,
|
||||||
|
4C520A2C2633FFBF004C4424 /* TISwiftUtils */,
|
||||||
|
4C520A2E2633FFBF004C4424 /* TIUIKitCore */,
|
||||||
|
4C520A302633FFBF004C4424 /* TIFoundationUtils */,
|
||||||
|
4C520A322633FFBF004C4424 /* TIUIElements */,
|
||||||
|
4C520A3A2634007D004C4424 /* SnapKit */,
|
||||||
|
4C520A4626340555004C4424 /* Reg */,
|
||||||
|
);
|
||||||
productName = testapp;
|
productName = testapp;
|
||||||
productReference = 4CEDA816243116E2009937F6 /* testapp.app */;
|
productReference = 4CEDA816243116E2009937F6 /* testapp.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
|
|
@ -205,6 +234,12 @@
|
||||||
Base,
|
Base,
|
||||||
);
|
);
|
||||||
mainGroup = 4CEDA80D243116E1009937F6;
|
mainGroup = 4CEDA80D243116E1009937F6;
|
||||||
|
packageReferences = (
|
||||||
|
4C520A272633FF33004C4424 /* XCRemoteSwiftPackageReference "QRCodeReader-ios" */,
|
||||||
|
4C520A2B2633FFBF004C4424 /* XCRemoteSwiftPackageReference "LeadKit" */,
|
||||||
|
4C520A392634007D004C4424 /* XCRemoteSwiftPackageReference "SnapKit" */,
|
||||||
|
4C520A4526340555004C4424 /* XCRemoteSwiftPackageReference "Reg" */,
|
||||||
|
);
|
||||||
productRefGroup = 4CEDA817243116E2009937F6 /* Products */;
|
productRefGroup = 4CEDA817243116E2009937F6 /* Products */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
|
|
@ -220,9 +255,9 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
4CEDA826243116E4009937F6 /* LaunchScreen.storyboard in Resources */,
|
4CEDA826243116E4009937F6 /* LaunchScreen.storyboard in Resources */,
|
||||||
4CEDA82E24311BB7009937F6 /* GoogleService-Info.plist in Resources */,
|
|
||||||
4CEDA823243116E4009937F6 /* Assets.xcassets in Resources */,
|
4CEDA823243116E4009937F6 /* Assets.xcassets in Resources */,
|
||||||
4CEDA821243116E2009937F6 /* Main.storyboard in Resources */,
|
4CEDA821243116E2009937F6 /* Main.storyboard in Resources */,
|
||||||
|
4C520A242633FE7D004C4424 /* GoogleService-Info.plist in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
@ -276,9 +311,11 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
4CEDA81E243116E2009937F6 /* ViewController.swift in Sources */,
|
4CEDA81E243116E2009937F6 /* ViewController.swift in Sources */,
|
||||||
|
4C520A3E263401A9004C4424 /* Images.swift in Sources */,
|
||||||
4CEDA83224311D39009937F6 /* FirebaseConfigurator.swift in Sources */,
|
4CEDA83224311D39009937F6 /* FirebaseConfigurator.swift in Sources */,
|
||||||
4CEDA81A243116E2009937F6 /* AppDelegate.swift in Sources */,
|
4CEDA81A243116E2009937F6 /* AppDelegate.swift in Sources */,
|
||||||
4CEDA81C243116E2009937F6 /* SceneDelegate.swift in Sources */,
|
4CEDA81C243116E2009937F6 /* SceneDelegate.swift in Sources */,
|
||||||
|
4C520A362633FFE1004C4424 /* CardScanner.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
@ -426,6 +463,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
INFOPLIST_FILE = testapp/Info.plist;
|
INFOPLIST_FILE = testapp/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
|
@ -442,6 +480,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
INFOPLIST_FILE = testapp/Info.plist;
|
INFOPLIST_FILE = testapp/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
|
@ -513,6 +552,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
INFOPLIST_FILE = testapp/Info.plist;
|
INFOPLIST_FILE = testapp/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
|
@ -547,6 +587,79 @@
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
|
/* Begin XCRemoteSwiftPackageReference section */
|
||||||
|
4C520A272633FF33004C4424 /* XCRemoteSwiftPackageReference "QRCodeReader-ios" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/TouchInstinct/QRCodeReader-ios";
|
||||||
|
requirement = {
|
||||||
|
branch = feature/card_scan;
|
||||||
|
kind = branch;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
4C520A2B2633FFBF004C4424 /* XCRemoteSwiftPackageReference "LeadKit" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/TouchInstinct/LeadKit";
|
||||||
|
requirement = {
|
||||||
|
kind = upToNextMajorVersion;
|
||||||
|
minimumVersion = 1.1.1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
4C520A392634007D004C4424 /* XCRemoteSwiftPackageReference "SnapKit" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/SnapKit/SnapKit";
|
||||||
|
requirement = {
|
||||||
|
kind = upToNextMajorVersion;
|
||||||
|
minimumVersion = 5.0.1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
4C520A4526340555004C4424 /* XCRemoteSwiftPackageReference "Reg" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/yhkaplan/Reg.git";
|
||||||
|
requirement = {
|
||||||
|
kind = upToNextMajorVersion;
|
||||||
|
minimumVersion = 0.3.0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
/* End XCRemoteSwiftPackageReference section */
|
||||||
|
|
||||||
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
|
4C520A282633FF33004C4424 /* QRCodeReader */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 4C520A272633FF33004C4424 /* XCRemoteSwiftPackageReference "QRCodeReader-ios" */;
|
||||||
|
productName = QRCodeReader;
|
||||||
|
};
|
||||||
|
4C520A2C2633FFBF004C4424 /* TISwiftUtils */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 4C520A2B2633FFBF004C4424 /* XCRemoteSwiftPackageReference "LeadKit" */;
|
||||||
|
productName = TISwiftUtils;
|
||||||
|
};
|
||||||
|
4C520A2E2633FFBF004C4424 /* TIUIKitCore */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 4C520A2B2633FFBF004C4424 /* XCRemoteSwiftPackageReference "LeadKit" */;
|
||||||
|
productName = TIUIKitCore;
|
||||||
|
};
|
||||||
|
4C520A302633FFBF004C4424 /* TIFoundationUtils */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 4C520A2B2633FFBF004C4424 /* XCRemoteSwiftPackageReference "LeadKit" */;
|
||||||
|
productName = TIFoundationUtils;
|
||||||
|
};
|
||||||
|
4C520A322633FFBF004C4424 /* TIUIElements */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 4C520A2B2633FFBF004C4424 /* XCRemoteSwiftPackageReference "LeadKit" */;
|
||||||
|
productName = TIUIElements;
|
||||||
|
};
|
||||||
|
4C520A3A2634007D004C4424 /* SnapKit */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 4C520A392634007D004C4424 /* XCRemoteSwiftPackageReference "SnapKit" */;
|
||||||
|
productName = SnapKit;
|
||||||
|
};
|
||||||
|
4C520A4626340555004C4424 /* Reg */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 4C520A4526340555004C4424 /* XCRemoteSwiftPackageReference "Reg" */;
|
||||||
|
productName = Reg;
|
||||||
|
};
|
||||||
|
/* End XCSwiftPackageProductDependency section */
|
||||||
};
|
};
|
||||||
rootObject = 4CEDA80E243116E1009937F6 /* Project object */;
|
rootObject = 4CEDA80E243116E1009937F6 /* Project object */;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
"object": {
|
||||||
|
"pins": [
|
||||||
|
{
|
||||||
|
"package": "LeadKit",
|
||||||
|
"repositoryURL": "https://github.com/TouchInstinct/LeadKit",
|
||||||
|
"state": {
|
||||||
|
"branch": null,
|
||||||
|
"revision": "e86dcc81f9d5cf802ea7e1941326f8c24fcb2a15",
|
||||||
|
"version": "1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"package": "QRCodeReader",
|
||||||
|
"repositoryURL": "https://github.com/TouchInstinct/QRCodeReader-ios",
|
||||||
|
"state": {
|
||||||
|
"branch": "feature/card_scan",
|
||||||
|
"revision": "ba9d3501198aa0a1d6d369d79ca41c8d4057ab0d",
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"package": "Reg",
|
||||||
|
"repositoryURL": "https://github.com/yhkaplan/Reg.git",
|
||||||
|
"state": {
|
||||||
|
"branch": null,
|
||||||
|
"revision": "c8f1f51bc088708b3b3ecf04523b5bedd6914222",
|
||||||
|
"version": "0.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"package": "SnapKit",
|
||||||
|
"repositoryURL": "https://github.com/SnapKit/SnapKit",
|
||||||
|
"state": {
|
||||||
|
"branch": null,
|
||||||
|
"revision": "d458564516e5676af9c70b4f4b2a9178294f1bc6",
|
||||||
|
"version": "5.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"package": "TableKit",
|
||||||
|
"repositoryURL": "https://github.com/maxsokolov/TableKit.git",
|
||||||
|
"state": {
|
||||||
|
"branch": null,
|
||||||
|
"revision": "8bf4840d9d0475a92352f02f368f88b74eced447",
|
||||||
|
"version": "2.11.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"version": 1
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"info" : {
|
"info" : {
|
||||||
"version" : 1,
|
"author" : "xcode",
|
||||||
"author" : "xcode"
|
"version" : 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "corners.pdf",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"preserves-vector-representation" : true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,155 @@
|
||||||
|
%PDF-1.7
|
||||||
|
|
||||||
|
1 0 obj
|
||||||
|
<< >>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
2 0 obj
|
||||||
|
<< /Length 3 0 R >>
|
||||||
|
stream
|
||||||
|
/DeviceRGB CS
|
||||||
|
/DeviceRGB cs
|
||||||
|
q
|
||||||
|
1.000000 0.000000 -0.000000 1.000000 300.000000 176.000000 cm
|
||||||
|
0.917647 0.254902 0.498039 scn
|
||||||
|
40.000000 43.000000 m
|
||||||
|
43.000000 43.000000 l
|
||||||
|
43.000000 46.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
40.000000 43.000000 l
|
||||||
|
h
|
||||||
|
0.000000 40.000000 m
|
||||||
|
40.000000 40.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
0.000000 46.000000 l
|
||||||
|
0.000000 40.000000 l
|
||||||
|
h
|
||||||
|
37.000000 43.000000 m
|
||||||
|
37.000000 3.000000 l
|
||||||
|
43.000000 3.000000 l
|
||||||
|
43.000000 43.000000 l
|
||||||
|
37.000000 43.000000 l
|
||||||
|
h
|
||||||
|
f
|
||||||
|
n
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
-1.000000 -0.000000 -0.000000 1.000000 43.000000 176.000000 cm
|
||||||
|
0.917647 0.254902 0.498039 scn
|
||||||
|
40.000000 43.000000 m
|
||||||
|
43.000000 43.000000 l
|
||||||
|
43.000000 46.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
40.000000 43.000000 l
|
||||||
|
h
|
||||||
|
0.000000 40.000000 m
|
||||||
|
40.000000 40.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
0.000000 46.000000 l
|
||||||
|
0.000000 40.000000 l
|
||||||
|
h
|
||||||
|
37.000000 43.000000 m
|
||||||
|
37.000000 3.000000 l
|
||||||
|
43.000000 3.000000 l
|
||||||
|
43.000000 43.000000 l
|
||||||
|
37.000000 43.000000 l
|
||||||
|
h
|
||||||
|
f
|
||||||
|
n
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1.000000 0.000000 -0.000000 -1.000000 300.000000 46.000000 cm
|
||||||
|
0.917647 0.254902 0.498039 scn
|
||||||
|
40.000000 43.000000 m
|
||||||
|
43.000000 43.000000 l
|
||||||
|
43.000000 46.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
40.000000 43.000000 l
|
||||||
|
h
|
||||||
|
0.000000 40.000000 m
|
||||||
|
40.000000 40.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
0.000000 46.000000 l
|
||||||
|
0.000000 40.000000 l
|
||||||
|
h
|
||||||
|
37.000000 43.000000 m
|
||||||
|
37.000000 3.000000 l
|
||||||
|
43.000000 3.000000 l
|
||||||
|
43.000000 43.000000 l
|
||||||
|
37.000000 43.000000 l
|
||||||
|
h
|
||||||
|
f
|
||||||
|
n
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
-1.000000 -0.000000 -0.000000 -1.000000 43.000000 46.000000 cm
|
||||||
|
0.917647 0.254902 0.498039 scn
|
||||||
|
40.000000 43.000000 m
|
||||||
|
43.000000 43.000000 l
|
||||||
|
43.000000 46.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
40.000000 43.000000 l
|
||||||
|
h
|
||||||
|
0.000000 40.000000 m
|
||||||
|
40.000000 40.000000 l
|
||||||
|
40.000000 46.000000 l
|
||||||
|
0.000000 46.000000 l
|
||||||
|
0.000000 40.000000 l
|
||||||
|
h
|
||||||
|
37.000000 43.000000 m
|
||||||
|
37.000000 3.000000 l
|
||||||
|
43.000000 3.000000 l
|
||||||
|
43.000000 43.000000 l
|
||||||
|
37.000000 43.000000 l
|
||||||
|
h
|
||||||
|
f
|
||||||
|
n
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
|
||||||
|
3 0 obj
|
||||||
|
1758
|
||||||
|
endobj
|
||||||
|
|
||||||
|
4 0 obj
|
||||||
|
<< /Annots []
|
||||||
|
/Type /Page
|
||||||
|
/MediaBox [ 0.000000 0.000000 343.000000 222.000000 ]
|
||||||
|
/Resources 1 0 R
|
||||||
|
/Contents 2 0 R
|
||||||
|
/Parent 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
5 0 obj
|
||||||
|
<< /Kids [ 4 0 R ]
|
||||||
|
/Count 1
|
||||||
|
/Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
6 0 obj
|
||||||
|
<< /Type /Catalog
|
||||||
|
/Pages 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
xref
|
||||||
|
0 7
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000010 00000 n
|
||||||
|
0000000034 00000 n
|
||||||
|
0000001848 00000 n
|
||||||
|
0000001871 00000 n
|
||||||
|
0000002046 00000 n
|
||||||
|
0000002120 00000 n
|
||||||
|
trailer
|
||||||
|
<< /ID [ (some) (id) ]
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 7
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
2179
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "light-disable.pdf",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"preserves-vector-representation" : true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
%PDF-1.7
|
||||||
|
|
||||||
|
1 0 obj
|
||||||
|
<< >>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
2 0 obj
|
||||||
|
<< /Length 3 0 R >>
|
||||||
|
stream
|
||||||
|
/DeviceRGB CS
|
||||||
|
/DeviceRGB cs
|
||||||
|
q
|
||||||
|
1.000000 0.000000 -0.000000 1.000000 5.511230 1.697998 cm
|
||||||
|
1.000000 1.000000 1.000000 scn
|
||||||
|
8.937988 15.096902 m
|
||||||
|
10.285645 13.739480 l
|
||||||
|
14.191895 13.739480 l
|
||||||
|
14.191895 13.680886 l
|
||||||
|
12.385254 11.346902 l
|
||||||
|
13.801270 9.930886 l
|
||||||
|
16.408691 13.280496 l
|
||||||
|
17.404785 14.550027 16.994629 15.702371 15.598145 15.702371 c
|
||||||
|
11.164551 15.702371 l
|
||||||
|
12.199707 22.352762 l
|
||||||
|
12.404785 23.807840 10.773926 24.325418 9.924316 23.270731 c
|
||||||
|
5.715332 17.967995 l
|
||||||
|
7.092285 16.591042 l
|
||||||
|
9.885254 20.155497 l
|
||||||
|
9.992676 20.135965 l
|
||||||
|
8.937988 15.096902 l
|
||||||
|
h
|
||||||
|
0.227051 19.452370 m
|
||||||
|
15.598145 4.091043 l
|
||||||
|
15.910645 3.788309 16.428223 3.778543 16.730957 4.091043 c
|
||||||
|
17.043457 4.393778 17.043457 4.911356 16.730957 5.223856 c
|
||||||
|
1.369629 20.575418 l
|
||||||
|
1.057129 20.887918 0.529785 20.887918 0.227051 20.575418 c
|
||||||
|
-0.075684 20.272684 -0.075684 19.755104 0.227051 19.452370 c
|
||||||
|
h
|
||||||
|
11.232910 6.688700 m
|
||||||
|
9.865723 8.065652 l
|
||||||
|
7.170410 4.667215 l
|
||||||
|
7.053223 4.686747 l
|
||||||
|
8.117676 9.735574 l
|
||||||
|
6.779785 11.083230 l
|
||||||
|
2.863770 11.083230 l
|
||||||
|
2.863770 11.141824 l
|
||||||
|
4.572754 13.348855 l
|
||||||
|
3.156738 14.774636 l
|
||||||
|
0.627441 11.542214 l
|
||||||
|
-0.378418 10.262918 0.041504 9.120339 1.437988 9.120339 c
|
||||||
|
5.871582 9.120339 l
|
||||||
|
4.836426 2.469950 l
|
||||||
|
4.621582 1.014872 6.252441 0.497293 7.111816 1.561747 c
|
||||||
|
11.232910 6.688700 l
|
||||||
|
h
|
||||||
|
f
|
||||||
|
n
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
|
||||||
|
3 0 obj
|
||||||
|
1258
|
||||||
|
endobj
|
||||||
|
|
||||||
|
4 0 obj
|
||||||
|
<< /Annots []
|
||||||
|
/Type /Page
|
||||||
|
/MediaBox [ 0.000000 0.000000 28.000000 28.000000 ]
|
||||||
|
/Resources 1 0 R
|
||||||
|
/Contents 2 0 R
|
||||||
|
/Parent 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
5 0 obj
|
||||||
|
<< /Kids [ 4 0 R ]
|
||||||
|
/Count 1
|
||||||
|
/Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
6 0 obj
|
||||||
|
<< /Type /Catalog
|
||||||
|
/Pages 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
xref
|
||||||
|
0 7
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000010 00000 n
|
||||||
|
0000000034 00000 n
|
||||||
|
0000001348 00000 n
|
||||||
|
0000001371 00000 n
|
||||||
|
0000001544 00000 n
|
||||||
|
0000001618 00000 n
|
||||||
|
trailer
|
||||||
|
<< /ID [ (some) (id) ]
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 7
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
1677
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "lightning.pdf",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"preserves-vector-representation" : true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
%PDF-1.7
|
||||||
|
|
||||||
|
1 0 obj
|
||||||
|
<< >>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
2 0 obj
|
||||||
|
<< /Length 3 0 R >>
|
||||||
|
stream
|
||||||
|
/DeviceRGB CS
|
||||||
|
/DeviceRGB cs
|
||||||
|
q
|
||||||
|
1.000000 0.000000 -0.000000 1.000000 0.000000 -1.143311 cm
|
||||||
|
1.000000 1.000000 1.000000 scn
|
||||||
|
7.081509 1.780159 m
|
||||||
|
16.349087 13.459846 l
|
||||||
|
17.354946 14.719612 16.925259 15.881721 15.538541 15.881721 c
|
||||||
|
11.095181 15.881721 l
|
||||||
|
12.130338 22.532112 l
|
||||||
|
12.335416 23.987190 10.821744 24.651253 9.854947 23.450081 c
|
||||||
|
0.558072 11.721565 l
|
||||||
|
-0.457553 10.452034 -0.027866 9.299690 1.368619 9.299690 c
|
||||||
|
5.811978 9.299690 l
|
||||||
|
4.776822 2.649300 l
|
||||||
|
4.571743 1.194221 6.114712 0.578987 7.081509 1.780159 c
|
||||||
|
h
|
||||||
|
6.983853 4.856331 m
|
||||||
|
8.145963 10.647346 l
|
||||||
|
8.233853 11.008675 8.126431 11.262581 7.716275 11.262581 c
|
||||||
|
2.784634 11.262581 l
|
||||||
|
2.784634 11.311409 l
|
||||||
|
9.815885 20.334846 l
|
||||||
|
9.933072 20.334846 l
|
||||||
|
8.761197 14.534065 l
|
||||||
|
8.673306 14.172737 8.780728 13.918831 9.181119 13.918831 c
|
||||||
|
14.112760 13.918831 l
|
||||||
|
14.112760 13.870003 l
|
||||||
|
7.101040 4.856331 l
|
||||||
|
6.983853 4.856331 l
|
||||||
|
h
|
||||||
|
f
|
||||||
|
n
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
|
||||||
|
3 0 obj
|
||||||
|
863
|
||||||
|
endobj
|
||||||
|
|
||||||
|
4 0 obj
|
||||||
|
<< /Annots []
|
||||||
|
/Type /Page
|
||||||
|
/MediaBox [ 0.000000 0.000000 16.900391 22.928955 ]
|
||||||
|
/Resources 1 0 R
|
||||||
|
/Contents 2 0 R
|
||||||
|
/Parent 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
5 0 obj
|
||||||
|
<< /Kids [ 4 0 R ]
|
||||||
|
/Count 1
|
||||||
|
/Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
6 0 obj
|
||||||
|
<< /Type /Catalog
|
||||||
|
/Pages 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
xref
|
||||||
|
0 7
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000010 00000 n
|
||||||
|
0000000034 00000 n
|
||||||
|
0000000953 00000 n
|
||||||
|
0000000975 00000 n
|
||||||
|
0000001148 00000 n
|
||||||
|
0000001222 00000 n
|
||||||
|
trailer
|
||||||
|
<< /ID [ (some) (id) ]
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 7
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
1281
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
//
|
||||||
|
// CardScanner.swift
|
||||||
|
// testapp
|
||||||
|
//
|
||||||
|
// Created by Vlad Suhomlinov on 24.04.2021.
|
||||||
|
// Copyright © 2021 touchin. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import TIUIElements
|
||||||
|
import QRCodeReader
|
||||||
|
import UIKit
|
||||||
|
import SnapKit
|
||||||
|
|
||||||
|
final class CardScanner: BaseInitializableView {
|
||||||
|
|
||||||
|
private let titleLabel = UILabel()
|
||||||
|
private let qrEdgeIconView = UIImageView(image: .corners)
|
||||||
|
private let focusView: FocusView = .init(cornerColor: .init(red: 234 / 255,
|
||||||
|
green: 65 / 255,
|
||||||
|
blue: 127 / 255,
|
||||||
|
alpha: 1),
|
||||||
|
cornerLength: 40,
|
||||||
|
cornerThickness: 6)
|
||||||
|
|
||||||
|
let scannerView = CardReaderView()
|
||||||
|
let flashlightButton = UIButton()
|
||||||
|
|
||||||
|
// MARK: - Configurable View
|
||||||
|
|
||||||
|
override func configureAppearance() {
|
||||||
|
super.configureAppearance()
|
||||||
|
|
||||||
|
backgroundColor = .black
|
||||||
|
|
||||||
|
titleLabel.textColor = .white
|
||||||
|
titleLabel.textAlignment = .center
|
||||||
|
titleLabel.numberOfLines = 0
|
||||||
|
|
||||||
|
updateFlashlightButtonAppearance(isTorchEnabled: false)
|
||||||
|
|
||||||
|
qrEdgeIconView.isHidden = true
|
||||||
|
}
|
||||||
|
|
||||||
|
override func addViews() {
|
||||||
|
super.addViews()
|
||||||
|
|
||||||
|
addSubviews(scannerView, titleLabel, flashlightButton)
|
||||||
|
|
||||||
|
qrEdgeIconView.addSubview(focusView)
|
||||||
|
scannerView.overlay.addSubview(qrEdgeIconView)
|
||||||
|
|
||||||
|
scannerView.overlay.focusView = focusView
|
||||||
|
}
|
||||||
|
|
||||||
|
override func configureLayout() {
|
||||||
|
super.configureLayout()
|
||||||
|
|
||||||
|
scannerView.snp.makeConstraints {
|
||||||
|
$0.edges.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
qrEdgeIconView.snp.makeConstraints {
|
||||||
|
$0.center.equalToSuperview()
|
||||||
|
$0.left.right.equalToSuperview().inset(16)
|
||||||
|
$0.height.equalTo(qrEdgeIconView.snp.width).multipliedBy(0.64)
|
||||||
|
}
|
||||||
|
|
||||||
|
focusView.snp.makeConstraints {
|
||||||
|
$0.edges.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
titleLabel.snp.makeConstraints {
|
||||||
|
$0.top.equalTo(qrEdgeIconView.snp.bottom).offset(28)
|
||||||
|
$0.centerX.equalToSuperview()
|
||||||
|
$0.left.right.equalToSuperview().inset(32)
|
||||||
|
}
|
||||||
|
|
||||||
|
flashlightButton.snp.makeConstraints {
|
||||||
|
$0.top.trailing.equalTo(safeAreaLayoutGuide).inset(16)
|
||||||
|
$0.size.equalTo(CGFloat.topButtonSize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func updateFlashlightButtonAppearance(isTorchEnabled: Bool) {
|
||||||
|
flashlightButton.setImage(isTorchEnabled ? .lightOff : .lightOn, for: .normal)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func localize() {
|
||||||
|
super.localize()
|
||||||
|
|
||||||
|
titleLabel.text = "Обязательно проверяйте номер карты после распознавания"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Constants
|
||||||
|
|
||||||
|
private extension CGFloat {
|
||||||
|
static let topButtonSize: CGFloat = 28
|
||||||
|
}
|
||||||
|
|
||||||
|
extension FocusView {
|
||||||
|
|
||||||
|
static let empty = FocusView(cornerColor: .clear,
|
||||||
|
cornerLength: 0,
|
||||||
|
cornerThickness: 0)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
//
|
||||||
|
// Images.swift
|
||||||
|
// testapp
|
||||||
|
//
|
||||||
|
// Created by Vlad Suhomlinov on 24.04.2021.
|
||||||
|
// Copyright © 2021 touchin. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIImage {
|
||||||
|
|
||||||
|
static var lightOn: UIImage {
|
||||||
|
#imageLiteral(resourceName: "lightning.pdf")
|
||||||
|
}
|
||||||
|
|
||||||
|
static var lightOff: UIImage {
|
||||||
|
#imageLiteral(resourceName: "light-disable")
|
||||||
|
}
|
||||||
|
|
||||||
|
static var corners: UIImage {
|
||||||
|
#imageLiteral(resourceName: "corners")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>NSCameraUsageDescription</key>
|
||||||
|
<string>Ну пожалуйста</string>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
|
|
|
||||||
|
|
@ -3,21 +3,21 @@
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CLIENT_ID</key>
|
<key>CLIENT_ID</key>
|
||||||
<string>1009875821676-2s1d4tjn9dojsp3ao31cicm174mjehc5.apps.googleusercontent.com</string>
|
<string>1084813714260-7qto2ituvflo73h8r2fttf0u6s0nc27h.apps.googleusercontent.com</string>
|
||||||
<key>REVERSED_CLIENT_ID</key>
|
<key>REVERSED_CLIENT_ID</key>
|
||||||
<string>com.googleusercontent.apps.1009875821676-2s1d4tjn9dojsp3ao31cicm174mjehc5</string>
|
<string>com.googleusercontent.apps.1084813714260-7qto2ituvflo73h8r2fttf0u6s0nc27h</string>
|
||||||
<key>API_KEY</key>
|
<key>API_KEY</key>
|
||||||
<string>AIzaSyDSUnGsmBO5kvfTeVDJywsyigcqqWSmuzY</string>
|
<string>AIzaSyBoYUwnZcWY_mxIAO1cxyrKlbW2ta67cQ8</string>
|
||||||
<key>GCM_SENDER_ID</key>
|
<key>GCM_SENDER_ID</key>
|
||||||
<string>1009875821676</string>
|
<string>1084813714260</string>
|
||||||
<key>PLIST_VERSION</key>
|
<key>PLIST_VERSION</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>BUNDLE_ID</key>
|
<key>BUNDLE_ID</key>
|
||||||
<string>ru.touchin.testapp</string>
|
<string>ru.touchin.testapp</string>
|
||||||
<key>PROJECT_ID</key>
|
<key>PROJECT_ID</key>
|
||||||
<string>ti-testapp</string>
|
<string>testproject-ac7fe</string>
|
||||||
<key>STORAGE_BUCKET</key>
|
<key>STORAGE_BUCKET</key>
|
||||||
<string>ti-testapp.appspot.com</string>
|
<string>testproject-ac7fe.appspot.com</string>
|
||||||
<key>IS_ADS_ENABLED</key>
|
<key>IS_ADS_ENABLED</key>
|
||||||
<false></false>
|
<false></false>
|
||||||
<key>IS_ANALYTICS_ENABLED</key>
|
<key>IS_ANALYTICS_ENABLED</key>
|
||||||
|
|
@ -29,8 +29,8 @@
|
||||||
<key>IS_SIGNIN_ENABLED</key>
|
<key>IS_SIGNIN_ENABLED</key>
|
||||||
<true></true>
|
<true></true>
|
||||||
<key>GOOGLE_APP_ID</key>
|
<key>GOOGLE_APP_ID</key>
|
||||||
<string>1:1009875821676:ios:3b95cafada68fd3a07a449</string>
|
<string>1:1084813714260:ios:096f9bb10bb971c6255ec1</string>
|
||||||
<key>DATABASE_URL</key>
|
<key>DATABASE_URL</key>
|
||||||
<string>https://ti-testapp.firebaseio.com</string>
|
<string>https://testproject-ac7fe.firebaseio.com</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
@ -7,15 +7,127 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import QRCodeReader
|
||||||
|
import Reg
|
||||||
|
import SnapKit
|
||||||
|
|
||||||
class ViewController: UIViewController {
|
class ViewController: UIViewController {
|
||||||
|
|
||||||
|
let cardScanner = CardReader(factory: CardFactoryImpl(), onUpdateRectOfInterest: nil)
|
||||||
|
let cardScannerView = CardScanner()
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
// Do any additional setup after loading the view.
|
|
||||||
|
view.addSubview(cardScannerView)
|
||||||
|
|
||||||
|
cardScanner.stopScanningWhenCodeIsFound = true
|
||||||
|
|
||||||
|
cardScannerView.scannerView.setReader(cardScanner)
|
||||||
|
|
||||||
|
cardScannerView.snp.makeConstraints {
|
||||||
|
$0.edges.equalToSuperview()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cardScanner.didFind = { [weak self] in
|
||||||
|
self?.handleResult(card: $0)
|
||||||
|
}
|
||||||
|
|
||||||
|
cardScannerView.flashlightButton.addTarget(self, action: #selector(toggleFlashlightAction), for: .touchUpInside)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
super.viewDidAppear(animated)
|
||||||
|
|
||||||
|
cardScanner.startScanning()
|
||||||
|
|
||||||
|
cardScannerView.layoutSubviews()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
super.viewWillDisappear(animated)
|
||||||
|
|
||||||
|
cardScanner.stopScanning()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc private func toggleFlashlightAction() {
|
||||||
|
|
||||||
|
cardScanner.isTorchEnabled.toggle()
|
||||||
|
cardScannerView.updateFlashlightButtonAppearance(isTorchEnabled: cardScanner.isTorchEnabled)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func handleResult(card: Card) {
|
||||||
|
|
||||||
|
let alert = UIAlertController(title: "Номер карты", message: card.number, preferredStyle: .alert)
|
||||||
|
let actionTrue = UIAlertAction(title: "Верно", style: .default, handler: { [weak self] _ in
|
||||||
|
self?.cardScanner.startScanning()
|
||||||
|
})
|
||||||
|
let actionErrors = UIAlertAction(title: "С ошибками", style: .default, handler: { [weak self] _ in
|
||||||
|
self?.cardScanner.startScanning()
|
||||||
|
})
|
||||||
|
let actionRetake = UIAlertAction(title: "Переделать", style: .default, handler: { [weak self] _ in
|
||||||
|
self?.cardScanner.startScanning()
|
||||||
|
})
|
||||||
|
|
||||||
|
alert.addAction(actionTrue)
|
||||||
|
alert.addAction(actionErrors)
|
||||||
|
alert.addAction(actionRetake)
|
||||||
|
|
||||||
|
present(alert, animated: true, completion: nil)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final class CardFactoryImpl: CardFactory {
|
||||||
|
let creditCardNumber: Regex = #"(?:\d[ -]*?){13,16}"#
|
||||||
|
|
||||||
|
func create(_ values: [String]) -> Card? {
|
||||||
|
values.map {
|
||||||
|
$0.replacingOccurrences(of: " ", with: "")
|
||||||
|
.replacingOccurrences(of: "-", with: "")
|
||||||
|
|
||||||
|
}
|
||||||
|
.first {
|
||||||
|
$0.count >= 15 && $0.count <= 19 && $0.isOnlyNumbers
|
||||||
|
}
|
||||||
|
.map { $0.inserting(separator: " ", every: 4) }
|
||||||
|
.map { Card(number: $0) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extension String {
|
||||||
|
var isOnlyNumbers: Bool {
|
||||||
|
return !isEmpty && range(of: "[^0-9]", options: .regularExpression) == nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Collection {
|
||||||
|
func unfoldSubSequences(limitedTo maxLength: Int) -> UnfoldSequence<SubSequence,Index> {
|
||||||
|
sequence(state: startIndex) { start in
|
||||||
|
guard start < self.endIndex else { return nil }
|
||||||
|
let end = self.index(start, offsetBy: maxLength, limitedBy: self.endIndex) ?? self.endIndex
|
||||||
|
defer { start = end }
|
||||||
|
return self[start..<end]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func every(n: Int) -> UnfoldSequence<Element,Index> {
|
||||||
|
sequence(state: startIndex) { index in
|
||||||
|
guard index < endIndex else { return nil }
|
||||||
|
defer { index = self.index(index, offsetBy: n, limitedBy: endIndex) ?? endIndex }
|
||||||
|
return self[index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var pairs: [SubSequence] { .init(unfoldSubSequences(limitedTo: 2)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
extension StringProtocol where Self: RangeReplaceableCollection {
|
||||||
|
mutating func insert<S: StringProtocol>(separator: S, every n: Int) {
|
||||||
|
for index in indices.every(n: n).dropFirst().reversed() {
|
||||||
|
insert(contentsOf: separator, at: index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func inserting<S: StringProtocol>(separator: S, every n: Int) -> Self {
|
||||||
|
.init(unfoldSubSequences(limitedTo: n).joined(separator: separator))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue