From 653a494c083681ac9314e5c7088ffb077b703c3b Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 2 Oct 2024 18:51:41 +0300 Subject: [PATCH] Updated projects --- .gitignore | 5 +- BasicSample/.gitignore | 95 +++ .../BasicSample.xcodeproj}/project.pbxproj | 262 +++--- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/xcschemes/Catalog.xcscheme | 18 +- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../BasicSample}/AppDelegate.swift | 6 +- .../Core/CatalogItem+Routing.swift | 4 +- .../Core/CatalogTableDataProvider.swift | 26 +- .../Core/CatalogViewController.swift | 4 +- .../Core/Extensions/UIColor+Hex.swift | 2 +- .../Core/Extensions/UIColor+Palette.swift | 2 +- .../Core/Extensions/UIView+Layout.swift | 2 +- .../BasicSample}/Core/ImagePicker.swift | 0 .../Core/ImagesPreviewViewController.swift | 4 +- .../Core/QualityResultsViewController.swift | 18 +- .../BasicSample}/Core/RFCCatalogItem.h | 2 +- .../BasicSample}/Core/RFCCatalogItem.m | 2 +- .../Core/Supplementary/ImageHelper.swift | 2 +- .../Core/Supplementary/ImagePicker.swift | 29 +- .../Supplementary/Views/CarouselView.swift | 2 +- .../Supplementary/Views/GalleryView.swift | 6 +- .../Items/Basic/DetectFacesItem.swift | 11 +- .../Items/Basic/FaceCaptureDefaultItem.swift | 4 +- .../Items/Basic/ImageQualityItem.swift | 13 +- .../Items/Basic/LivenessDefaultItem.swift | 4 +- .../Items/Basic/MatchFacesRequestItem.swift | 402 +++++++++ .../FaceCaptureCameraPositionItem.swift | 5 +- .../Features/FaceDeinitializationItem.swift | 30 + .../Features/FaceInitializationItem.swift | 31 + .../Features/LivenessAttemptsCountItem.swift | 4 +- .../Features/LivenessSessionTagItem.swift | 37 + ...LivenessSkipOnboardingAndSuccessItem.swift | 4 +- .../Items/Other/LocalizationHandlerItem.swift | 8 +- .../Other/URLRequestInterceptorItem.swift | 6 +- .../Other/VideoUploadingCompletionItem.swift | 43 + .../ViewCustomization/CustomUILayerItem.swift | 81 ++ ...aceCaptureHideCloseConfigurationItem.swift | 37 + .../FaceCaptureHideNotificationItem.swift | 53 ++ ...aceCaptureHideTorchConfigurationItem.swift | 10 +- .../FaceCaptureUIConfigurationItem.swift | 84 ++ .../LivenessHintPositionItem.swift | 6 +- .../LivenessNotificationItem.swift | 157 ++++ .../LivenessUIConfigurationItem.swift | 130 +++ .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin .../Icon-App-83.5x83.5@2x.png | Bin .../AppIcon.appiconset/iTunesArtwork@2x.png | Bin .../Resources/Assets.xcassets/Contents.json | 0 .../checkmark.imageset/Contents.json | 0 .../checkmark.imageset/checkmark.pdf | Bin .../close.imageset/Contents.json | 23 + .../Assets.xcassets/close.imageset/close.png | Bin 0 -> 1954 bytes .../close.imageset/close@2x.png | Bin 0 -> 2709 bytes .../close.imageset/close@3x.png | Bin 0 -> 3209 bytes .../flash.imageset/Contents.json | 23 + .../Assets.xcassets/flash.imageset/flash.png | Bin 0 -> 2543 bytes .../flash.imageset/flash@2x.png | Bin 0 -> 4342 bytes .../flash.imageset/flash@3x.png | Bin 0 -> 5769 bytes .../person_placeholder.imageset/Contents.json | 0 .../person_placeholder@2x.png | Bin .../person_placeholder@3x.png | Bin .../success.imageset/Contents.json | 23 + .../success.imageset/success.png | Bin 0 -> 4093 bytes .../success.imageset/success@2x.png | Bin 0 -> 8853 bytes .../success.imageset/success@3x.png | Bin 0 -> 13252 bytes .../swap_camera.imageset/Contents.json | 23 + .../swap_camera.imageset/swap_camera.png | Bin 0 -> 4327 bytes .../swap_camera.imageset/swap_camera@2x.png | Bin 0 -> 12038 bytes .../swap_camera.imageset/swap_camera@3x.png | Bin 0 -> 18383 bytes .../windsor.colorset/Contents.json | 0 .../Resources/Catalog-Bridging-Header.h | 0 .../Customization/Fonts/Roboto-Black.ttf | Bin 0 -> 168060 bytes .../Customization/Fonts/Roboto-Italic.ttf | Bin 0 -> 160736 bytes .../Resources/Customization/layer.json | 86 ++ .../Resources/Customization/notification.json | 29 + BasicSample/BasicSample/Resources/Info.plist | 66 ++ .../Resources/LaunchScreen.storyboard | 0 .../Resources/Samples/detect_face1.jpeg | Bin .../Resources/Samples/detect_face2.jpeg | Bin .../Resources/Samples/detect_face3.jpeg | Bin .../Resources/Samples/detect_face4.jpeg | Bin .../Samples/face_image_quality1.jpeg | Bin .../Samples/face_image_quality2.jpeg | Bin .../Samples/face_image_quality3.jpeg | Bin .../Samples/face_image_quality4.jpeg | Bin .../ar.lproj/CustomLocalization.strings | 0 .../cs.lproj/CustomLocalization.strings | 0 .../de.lproj/CustomLocalization.strings | 0 .../el.lproj/CustomLocalization.strings | 0 .../en.lproj/CustomLocalization.strings | 0 .../es-419.lproj/CustomLocalization.strings | 0 .../es.lproj/CustomLocalization.strings | 0 .../fi.lproj/CustomLocalization.strings | 0 .../fr-CA.lproj/CustomLocalization.strings | 0 .../he.lproj/CustomLocalization.strings | 0 .../hi.lproj/CustomLocalization.strings | 0 .../it.lproj/CustomLocalization.strings | 0 .../ja.lproj/CustomLocalization.strings | 0 .../ko-KR.lproj/CustomLocalization.strings | 0 .../ko.lproj/CustomLocalization.strings | 0 .../ms.lproj/CustomLocalization.strings | 0 .../pl.lproj/CustomLocalization.strings | 0 .../pt-BR.lproj/CustomLocalization.strings | 0 .../pt-PT.lproj/CustomLocalization.strings | 0 .../ru.lproj/CustomLocalization.strings | 0 .../sv.lproj/CustomLocalization.strings | 0 .../th.lproj/CustomLocalization.strings | 0 .../tr.lproj/CustomLocalization.strings | 0 .../vi.lproj/CustomLocalization.strings | 0 .../zh-Hans.lproj/CustomLocalization.strings | 0 .../BasicSample}/SceneDelegate.swift | 2 +- Podfile => BasicSample/Podfile | 2 +- BasicSample/README.md | 30 + .../Items/Basic/MatchFacesRequestItem.swift | 378 --------- Catalog/Items/Basic/PersonDatabaseItem.swift | 24 - .../FaceCaptureBackgroundColor.swift | 54 -- .../FaceCaptureUIConfiguration.swift | 46 -- .../LivenessHintViewAppearanceItem.swift | 58 -- .../ViewCustomization/LivenessLogoItem.swift | 56 -- .../LivenessToolbarAppearanceItem.swift | 51 -- .../LivenessToolbarCustomButtonItem.swift | 66 -- .../LivenessToolbarCustomColors.swift | 55 -- .../LivenessToolbarPositionItem.swift | 54 -- .../LivenessUIConfiguration.swift | 102 --- .../logo.imageset/Contents.json | 12 - .../Assets.xcassets/logo.imageset/logo.pdf | Bin 4719 -> 0 bytes .../project.pbxproj | 8 - .../Base.lproj/Main.storyboard | 84 +- .../DetectionCollectionViewCell.swift | 12 - .../FaceCertificatePinning/Info.plist | 2 + .../ViewController.swift | 81 +- .../FaceCertificatePinning/sample1.jpg | Bin 124218 -> 0 bytes FaceCertificatePinning/README.md | 3 +- .../project.pbxproj | 22 +- .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../Base.lproj/Main.storyboard | 28 +- .../MatchFacesViewController.swift | 761 ++++++++++-------- .../Supplementary/ImagePicker.swift | 92 +++ .../ImagesPreviewViewController.swift | 89 ++ FaceMatchOffline-sample/Podfile | 2 +- FaceMatchOffline-sample/README.md | 33 + .../project.pbxproj | 554 +++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../FaceSearchSample/AppDelegate.swift | 47 ++ .../AppIcon.appiconset/Contents.json | 122 +++ .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 804 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1659 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 2443 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1208 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 2343 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 3442 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1659 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 3190 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 4538 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 4538 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 6789 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 2985 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 5726 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 6252 bytes .../AppIcon.appiconset/iTunesArtwork@2x.png | Bin 0 -> 16489 bytes .../Assets.xcassets/Contents.json | 6 + .../person_placeholder.imageset/Contents.json | 22 + .../person_placeholder@2x.png | Bin 0 -> 23949 bytes .../person_placeholder@3x.png | Bin 0 -> 37226 bytes .../windsor.colorset/Contents.json | 38 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../FaceSearchSample}/Info.plist | 4 +- .../DatabaseCreatePersonViewController.swift | 7 +- .../DatabaseCreatePersonViewController.xib | 18 +- .../DatabaseGroupsViewController.swift | 30 +- .../DatabaseGroupsViewController.xib | 14 +- .../DatabasePersonsViewController.swift | 20 +- .../DatabasePersonsViewController.xib | 12 +- .../DatabaseSearchViewController.swift | 132 ++- .../DatabaseSearchViewController.xib | 114 +-- .../DatabaseUpdatePersonViewController.swift | 7 +- .../DatabaseUpdatePersonViewController.xib | 0 .../Extensions/Person+Metadata.swift | 2 +- .../Extensions/UIImageView+Load.swift | 2 +- .../Supplementary/ImageHelper.swift | 68 ++ .../Supplementary/ImagePicker.swift | 92 +++ .../ImagesPreviewViewController.swift | 90 +++ .../Supplementary/Views/DBButton.swift | 28 + .../Views}/PersonImageCell.swift | 2 +- .../Views}/SearchPersonHeader.swift | 6 +- .../Views}/SearchPersonImageCell.swift | 2 +- .../Views}/UpdatePersonCell.swift | 2 +- .../Supplementary/Views}/UpdatePersonCell.xib | 15 +- FaceSearchSample/FaceSearchSample/Podfile | 10 + .../FaceSearchSample/README.md | 0 .../FaceSearchSample/SceneDelegate.swift | 63 ++ FaceSearchSample/Podfile | 9 + FaceSearchSample/README.md | 30 + .../project.pbxproj | 62 ++ .../contents.xcworkspacedata | 10 + 214 files changed, 4006 insertions(+), 1843 deletions(-) create mode 100644 BasicSample/.gitignore rename {Catalog.xcodeproj => BasicSample/BasicSample.xcodeproj}/project.pbxproj (71%) rename {Catalog.xcodeproj => BasicSample/BasicSample.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {Catalog.xcodeproj => BasicSample/BasicSample.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {Catalog.xcodeproj => BasicSample/BasicSample.xcodeproj}/xcshareddata/xcschemes/Catalog.xcscheme (83%) rename {Catalog.xcworkspace => BasicSample/BasicSample.xcworkspace}/contents.xcworkspacedata (79%) rename {Catalog.xcworkspace => BasicSample/BasicSample.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {Catalog => BasicSample/BasicSample}/AppDelegate.swift (90%) rename {Catalog => BasicSample/BasicSample}/Core/CatalogItem+Routing.swift (95%) rename {Catalog => BasicSample/BasicSample}/Core/CatalogTableDataProvider.swift (87%) rename {Catalog => BasicSample/BasicSample}/Core/CatalogViewController.swift (98%) rename {Catalog => BasicSample/BasicSample}/Core/Extensions/UIColor+Hex.swift (98%) rename {Catalog => BasicSample/BasicSample}/Core/Extensions/UIColor+Palette.swift (93%) rename {Catalog => BasicSample/BasicSample}/Core/Extensions/UIView+Layout.swift (98%) rename {Catalog => BasicSample/BasicSample}/Core/ImagePicker.swift (100%) rename {Catalog => BasicSample/BasicSample}/Core/ImagesPreviewViewController.swift (97%) rename {Catalog => BasicSample/BasicSample}/Core/QualityResultsViewController.swift (91%) rename {Catalog => BasicSample/BasicSample}/Core/RFCCatalogItem.h (98%) rename {Catalog => BasicSample/BasicSample}/Core/RFCCatalogItem.m (95%) rename {Catalog => BasicSample/BasicSample}/Core/Supplementary/ImageHelper.swift (99%) rename {Catalog => BasicSample/BasicSample}/Core/Supplementary/ImagePicker.swift (68%) rename {Catalog => BasicSample/BasicSample}/Core/Supplementary/Views/CarouselView.swift (99%) rename {Catalog => BasicSample/BasicSample}/Core/Supplementary/Views/GalleryView.swift (98%) rename {Catalog => BasicSample/BasicSample}/Items/Basic/DetectFacesItem.swift (98%) rename {Catalog => BasicSample/BasicSample}/Items/Basic/FaceCaptureDefaultItem.swift (91%) rename {Catalog => BasicSample/BasicSample}/Items/Basic/ImageQualityItem.swift (98%) rename {Catalog => BasicSample/BasicSample}/Items/Basic/LivenessDefaultItem.swift (97%) create mode 100644 BasicSample/BasicSample/Items/Basic/MatchFacesRequestItem.swift rename {Catalog => BasicSample/BasicSample}/Items/Features/FaceCaptureCameraPositionItem.swift (93%) create mode 100644 BasicSample/BasicSample/Items/Features/FaceDeinitializationItem.swift create mode 100644 BasicSample/BasicSample/Items/Features/FaceInitializationItem.swift rename {Catalog => BasicSample/BasicSample}/Items/Features/LivenessAttemptsCountItem.swift (97%) create mode 100644 BasicSample/BasicSample/Items/Features/LivenessSessionTagItem.swift rename {Catalog => BasicSample/BasicSample}/Items/Features/LivenessSkipOnboardingAndSuccessItem.swift (97%) rename {Catalog => BasicSample/BasicSample}/Items/Other/LocalizationHandlerItem.swift (92%) rename {Catalog => BasicSample/BasicSample}/Items/Other/URLRequestInterceptorItem.swift (94%) create mode 100644 BasicSample/BasicSample/Items/Other/VideoUploadingCompletionItem.swift create mode 100644 BasicSample/BasicSample/Items/ViewCustomization/CustomUILayerItem.swift create mode 100644 BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideCloseConfigurationItem.swift create mode 100644 BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideNotificationItem.swift rename {Catalog/Items/Features => BasicSample/BasicSample/Items/ViewCustomization}/FaceCaptureHideTorchConfigurationItem.swift (77%) create mode 100644 BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureUIConfigurationItem.swift rename {Catalog => BasicSample/BasicSample}/Items/ViewCustomization/LivenessHintPositionItem.swift (92%) create mode 100644 BasicSample/BasicSample/Items/ViewCustomization/LivenessNotificationItem.swift create mode 100644 BasicSample/BasicSample/Items/ViewCustomization/LivenessUIConfigurationItem.swift rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/Contents.json (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/checkmark.imageset/Contents.json (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/checkmark.imageset/checkmark.pdf (100%) create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/Contents.json create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/close.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/close@2x.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/close@3x.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/flash.imageset/Contents.json create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/flash.imageset/flash.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/flash.imageset/flash@2x.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/flash.imageset/flash@3x.png rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/person_placeholder.imageset/Contents.json (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png (100%) create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/Contents.json create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/success.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/success@2x.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/success@3x.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/Contents.json create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/swap_camera.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/swap_camera@2x.png create mode 100644 BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/swap_camera@3x.png rename {Catalog => BasicSample/BasicSample}/Resources/Assets.xcassets/windsor.colorset/Contents.json (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Catalog-Bridging-Header.h (100%) create mode 100644 BasicSample/BasicSample/Resources/Customization/Fonts/Roboto-Black.ttf create mode 100644 BasicSample/BasicSample/Resources/Customization/Fonts/Roboto-Italic.ttf create mode 100644 BasicSample/BasicSample/Resources/Customization/layer.json create mode 100644 BasicSample/BasicSample/Resources/Customization/notification.json create mode 100644 BasicSample/BasicSample/Resources/Info.plist rename {Catalog => BasicSample/BasicSample}/Resources/LaunchScreen.storyboard (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/detect_face1.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/detect_face2.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/detect_face3.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/detect_face4.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/face_image_quality1.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/face_image_quality2.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/face_image_quality3.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/Samples/face_image_quality4.jpeg (100%) rename {Catalog => BasicSample/BasicSample}/Resources/ar.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/cs.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/de.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/el.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/en.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/es-419.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/es.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/fi.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/fr-CA.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/he.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/hi.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/it.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/ja.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/ko-KR.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/ko.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/ms.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/pl.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/pt-BR.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/pt-PT.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/ru.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/sv.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/th.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/tr.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/vi.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/Resources/zh-Hans.lproj/CustomLocalization.strings (100%) rename {Catalog => BasicSample/BasicSample}/SceneDelegate.swift (99%) rename Podfile => BasicSample/Podfile (84%) create mode 100644 BasicSample/README.md delete mode 100644 Catalog/Items/Basic/MatchFacesRequestItem.swift delete mode 100644 Catalog/Items/Basic/PersonDatabaseItem.swift delete mode 100644 Catalog/Items/ViewCustomization/FaceCaptureBackgroundColor.swift delete mode 100644 Catalog/Items/ViewCustomization/FaceCaptureUIConfiguration.swift delete mode 100644 Catalog/Items/ViewCustomization/LivenessHintViewAppearanceItem.swift delete mode 100644 Catalog/Items/ViewCustomization/LivenessLogoItem.swift delete mode 100644 Catalog/Items/ViewCustomization/LivenessToolbarAppearanceItem.swift delete mode 100644 Catalog/Items/ViewCustomization/LivenessToolbarCustomButtonItem.swift delete mode 100644 Catalog/Items/ViewCustomization/LivenessToolbarCustomColors.swift delete mode 100644 Catalog/Items/ViewCustomization/LivenessToolbarPositionItem.swift delete mode 100644 Catalog/Items/ViewCustomization/LivenessUIConfiguration.swift delete mode 100644 Catalog/Resources/Assets.xcassets/logo.imageset/Contents.json delete mode 100644 Catalog/Resources/Assets.xcassets/logo.imageset/logo.pdf delete mode 100644 FaceCertificatePinning/FaceCertificatePinning/DetectionCollectionViewCell.swift delete mode 100644 FaceCertificatePinning/FaceCertificatePinning/sample1.jpg create mode 100644 FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/contents.xcworkspacedata create mode 100644 FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 FaceMatchOffline-sample/FaceMatchOffline-sample/Supplementary/ImagePicker.swift create mode 100644 FaceMatchOffline-sample/FaceMatchOffline-sample/Supplementary/ImagesPreviewViewController.swift create mode 100644 FaceMatchOffline-sample/README.md create mode 100644 FaceSearchSample/FaceSearchSample.xcodeproj/project.pbxproj create mode 100644 FaceSearchSample/FaceSearchSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 FaceSearchSample/FaceSearchSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 FaceSearchSample/FaceSearchSample.xcworkspace/contents.xcworkspacedata create mode 100644 FaceSearchSample/FaceSearchSample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 FaceSearchSample/FaceSearchSample/AppDelegate.swift create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/Contents.json create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/Contents.json create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png create mode 100644 FaceSearchSample/FaceSearchSample/Assets.xcassets/windsor.colorset/Contents.json create mode 100644 FaceSearchSample/FaceSearchSample/Base.lproj/LaunchScreen.storyboard rename {Catalog/Resources => FaceSearchSample/FaceSearchSample}/Info.plist (92%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseCreatePersonViewController.swift (97%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseCreatePersonViewController.xib (94%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseGroupsViewController.swift (84%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseGroupsViewController.xib (90%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabasePersonsViewController.swift (90%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabasePersonsViewController.xib (91%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseSearchViewController.swift (63%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseSearchViewController.xib (53%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseUpdatePersonViewController.swift (98%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample}/PersonDatabase/DatabaseUpdatePersonViewController.xib (100%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample/PersonDatabase}/Extensions/Person+Metadata.swift (95%) rename {Catalog/Core => FaceSearchSample/FaceSearchSample/PersonDatabase}/Extensions/UIImageView+Load.swift (97%) create mode 100644 FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImageHelper.swift create mode 100644 FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagePicker.swift create mode 100644 FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagesPreviewViewController.swift create mode 100644 FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/DBButton.swift rename {Catalog/Core/PersonDatabase/Supplementary => FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views}/PersonImageCell.swift (98%) rename {Catalog/Core/PersonDatabase/Supplementary => FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views}/SearchPersonHeader.swift (85%) rename {Catalog/Core/PersonDatabase/Supplementary => FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views}/SearchPersonImageCell.swift (99%) rename {Catalog/Core/PersonDatabase/Supplementary => FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views}/UpdatePersonCell.swift (98%) rename {Catalog/Core/PersonDatabase/Supplementary => FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views}/UpdatePersonCell.xib (84%) create mode 100644 FaceSearchSample/FaceSearchSample/Podfile rename README.md => FaceSearchSample/FaceSearchSample/README.md (100%) create mode 100644 FaceSearchSample/FaceSearchSample/SceneDelegate.swift create mode 100644 FaceSearchSample/Podfile create mode 100644 FaceSearchSample/README.md create mode 100644 FaceSwiftUI-sample/FaceSwiftUI-sample.xcworkspace/contents.xcworkspacedata diff --git a/.gitignore b/.gitignore index ac51395..7e63faa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -# MacOS -.DS_Store - # Xcode # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore @@ -92,4 +89,4 @@ fastlane/test_output # After new code Injection tools there's a generated folder /iOSInjectionProject # https://github.com/johnno1962/injectionforxcode -iOSInjectionProject/ \ No newline at end of file +iOSInjectionProject/ diff --git a/BasicSample/.gitignore b/BasicSample/.gitignore new file mode 100644 index 0000000..ac51395 --- /dev/null +++ b/BasicSample/.gitignore @@ -0,0 +1,95 @@ +# MacOS +.DS_Store + +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +Pods/ +Podfile.lock + +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ \ No newline at end of file diff --git a/Catalog.xcodeproj/project.pbxproj b/BasicSample/BasicSample.xcodeproj/project.pbxproj similarity index 71% rename from Catalog.xcodeproj/project.pbxproj rename to BasicSample/BasicSample.xcodeproj/project.pbxproj index 106c99c..1c26993 100644 --- a/Catalog.xcodeproj/project.pbxproj +++ b/BasicSample/BasicSample.xcodeproj/project.pbxproj @@ -3,20 +3,16 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 5D13AA512A458C17005716F5 /* DatabaseUpdatePersonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D13AA4F2A458C17005716F5 /* DatabaseUpdatePersonViewController.swift */; }; - 5D13AA522A458C17005716F5 /* DatabaseUpdatePersonViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5D13AA502A458C17005716F5 /* DatabaseUpdatePersonViewController.xib */; }; - 5D3DB66B2A42DA0100B2AFAC /* DatabasePersonsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D3DB6692A42DA0100B2AFAC /* DatabasePersonsViewController.swift */; }; - 5D3DB66C2A42DA0100B2AFAC /* DatabasePersonsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5D3DB66A2A42DA0100B2AFAC /* DatabasePersonsViewController.xib */; }; - 5D3DB66F2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D3DB66D2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.swift */; }; - 5D3DB6702A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5D3DB66E2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.xib */; }; - 5DD62BE72A1259FD00F98A74 /* PersonImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD62BE62A1259FD00F98A74 /* PersonImageCell.swift */; }; - 5DD62BE92A125A3D00F98A74 /* SearchPersonHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD62BE82A125A3D00F98A74 /* SearchPersonHeader.swift */; }; - 5DD62BEB2A125A7D00F98A74 /* SearchPersonImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD62BEA2A125A7D00F98A74 /* SearchPersonImageCell.swift */; }; - 5DD62BED2A125B1D00F98A74 /* UIImageView+Load.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD62BEC2A125B1D00F98A74 /* UIImageView+Load.swift */; }; + 5D04516D2CA14E0F00F134F2 /* CustomUILayerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D04516C2CA14E0F00F134F2 /* CustomUILayerItem.swift */; }; + 5D04516F2CA153A000F134F2 /* layer.json in Resources */ = {isa = PBXBuildFile; fileRef = 5D04516E2CA153A000F134F2 /* layer.json */; }; + 5D1A1FDB2C944F1A001CE3F1 /* FaceCaptureHideCloseConfigurationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1A1FDA2C944F1A001CE3F1 /* FaceCaptureHideCloseConfigurationItem.swift */; }; + 5D1A1FDE2C948F53001CE3F1 /* FaceCaptureHideNotificationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1A1FDD2C948F53001CE3F1 /* FaceCaptureHideNotificationItem.swift */; }; + 5DF86CFC2C9DA64300426532 /* Roboto-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5DF86CFA2C9DA64300426532 /* Roboto-Italic.ttf */; }; + 5DF86CFF2C9DA9F200426532 /* Roboto-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5DF86CFE2C9DA9F200426532 /* Roboto-Black.ttf */; }; 8611D4442657A47000E4E700 /* ImagesPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8611D4432657A47000E4E700 /* ImagesPreviewViewController.swift */; }; 86133D43265646D600546D8A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 86133D42265646D600546D8A /* LaunchScreen.storyboard */; }; 86133D5126565DD600546D8A /* LivenessDefaultItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86133D5026565DD600546D8A /* LivenessDefaultItem.swift */; }; @@ -34,17 +30,16 @@ 86B6D2CA2653DD9C00794170 /* CatalogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86B6D2C92653DD9C00794170 /* CatalogViewController.swift */; }; 86B6D2D02653E68C00794170 /* CatalogTableDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86B6D2CF2653E68C00794170 /* CatalogTableDataProvider.swift */; }; 86B6D2EF26552E3700794170 /* CatalogItem+Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86B6D2EE26552E3700794170 /* CatalogItem+Routing.swift */; }; - 86B6D2F226552EF800794170 /* LivenessHintViewAppearanceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86B6D2F126552EF800794170 /* LivenessHintViewAppearanceItem.swift */; }; - 86C2559B2681E34D00067907 /* LivenessToolbarCustomColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86C2559A2681E34D00067907 /* LivenessToolbarCustomColors.swift */; }; 86C256932682204A00067907 /* CustomLocalization.strings in Resources */ = {isa = PBXBuildFile; fileRef = 86C256952682204A00067907 /* CustomLocalization.strings */; }; 86CED8F52664E123008CC8AA /* LivenessAttemptsCountItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86CED8F42664E123008CC8AA /* LivenessAttemptsCountItem.swift */; }; 86D5E285266116B80076D417 /* LivenessHintPositionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86D5E284266116B80076D417 /* LivenessHintPositionItem.swift */; }; - 86D5E289266118400076D417 /* LivenessToolbarAppearanceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86D5E288266118400076D417 /* LivenessToolbarAppearanceItem.swift */; }; - 86D5E28D26611A690076D417 /* LivenessToolbarPositionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86D5E28C26611A690076D417 /* LivenessToolbarPositionItem.swift */; }; - 86D5E29026611CFE0076D417 /* LivenessToolbarCustomButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86D5E28F26611CFE0076D417 /* LivenessToolbarCustomButtonItem.swift */; }; - 86D5E2A1266123480076D417 /* LivenessLogoItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86D5E2A0266123480076D417 /* LivenessLogoItem.swift */; }; - 86D5E2A7266128160076D417 /* FaceCaptureBackgroundColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86D5E2A6266128160076D417 /* FaceCaptureBackgroundColor.swift */; }; 86E7479A265D2AB500767F52 /* URLRequestInterceptorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86E74799265D2AB500767F52 /* URLRequestInterceptorItem.swift */; }; + 96991A9F2C3D4A3B00A0A1CD /* VideoUploadingCompletionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96991A9E2C3D4A3B00A0A1CD /* VideoUploadingCompletionItem.swift */; }; + 96A59B712C36983B0082B63E /* FaceInitializationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A59B702C36983B0082B63E /* FaceInitializationItem.swift */; }; + 96A59B732C3698480082B63E /* FaceDeinitializationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A59B722C3698480082B63E /* FaceDeinitializationItem.swift */; }; + 96A59B752C369C340082B63E /* LivenessSessionTagItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A59B742C369C340082B63E /* LivenessSessionTagItem.swift */; }; + 96A59B772C36CD040082B63E /* notification.json in Resources */ = {isa = PBXBuildFile; fileRef = 96A59B762C36CD040082B63E /* notification.json */; }; + 96A59B7A2C36CD3F0082B63E /* LivenessNotificationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A59B792C36CD3F0082B63E /* LivenessNotificationItem.swift */; }; 96AA51092A0108C700783B08 /* detect_face2.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 96AA51012A0108C700783B08 /* detect_face2.jpeg */; }; 96AA510A2A0108C700783B08 /* detect_face3.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 96AA51022A0108C700783B08 /* detect_face3.jpeg */; }; 96AA510B2A0108C700783B08 /* face_image_quality1.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 96AA51032A0108C700783B08 /* face_image_quality1.jpeg */; }; @@ -60,33 +55,23 @@ 96AA511D2A0109AC00783B08 /* DetectFacesItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96AA511B2A0109AC00783B08 /* DetectFacesItem.swift */; }; 96AA511E2A0109AC00783B08 /* ImageQualityItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96AA511C2A0109AC00783B08 /* ImageQualityItem.swift */; }; 96AA51202A010A2A00783B08 /* QualityResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96AA511F2A010A2A00783B08 /* QualityResultsViewController.swift */; }; - 9D0660742A3337D9000370EC /* LivenessUIConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D0660732A3337D9000370EC /* LivenessUIConfiguration.swift */; }; - 9D7EFC862A4D793B0016736B /* FaceCaptureUIConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D7EFC852A4D793B0016736B /* FaceCaptureUIConfiguration.swift */; }; - 96AA51262A01533D00783B08 /* PersonDatabaseItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96AA51252A01533D00783B08 /* PersonDatabaseItem.swift */; }; - 96F0CBB72A41A49100568D73 /* DatabaseGroupsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F0CBB52A41A49100568D73 /* DatabaseGroupsViewController.swift */; }; - 96F0CBB82A41A49100568D73 /* DatabaseGroupsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 96F0CBB62A41A49100568D73 /* DatabaseGroupsViewController.xib */; }; - 96F0CBBC2A41F3BB00568D73 /* DatabaseSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F0CBBA2A41F3BB00568D73 /* DatabaseSearchViewController.swift */; }; - 96F0CBBD2A41F3BB00568D73 /* DatabaseSearchViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 96F0CBBB2A41F3BB00568D73 /* DatabaseSearchViewController.xib */; }; - 96FDB8CD2A4AD63A00FA8582 /* UpdatePersonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FDB8CB2A4AD63A00FA8582 /* UpdatePersonCell.swift */; }; - 96FDB8CE2A4AD63A00FA8582 /* UpdatePersonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 96FDB8CC2A4AD63A00FA8582 /* UpdatePersonCell.xib */; }; - 96FDB8D22A4B7AC500FA8582 /* Person+Metadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FDB8D12A4B7AC500FA8582 /* Person+Metadata.swift */; }; + 9D0660742A3337D9000370EC /* LivenessUIConfigurationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D0660732A3337D9000370EC /* LivenessUIConfigurationItem.swift */; }; + 9D7EFC862A4D793B0016736B /* FaceCaptureUIConfigurationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D7EFC852A4D793B0016736B /* FaceCaptureUIConfigurationItem.swift */; }; 9DC35FC2298174D00043FBB1 /* LivenessSkipOnboardingAndSuccessItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DC35FC1298174D00043FBB1 /* LivenessSkipOnboardingAndSuccessItem.swift */; }; + 9DCF7A32504A33F2D6CCF037 /* Pods_BasicSample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12CB91E5CB5921DD9F43B30E /* Pods_BasicSample.framework */; }; 9DE86D922850820400FCC18C /* FaceCaptureHideTorchConfigurationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DE86D902850820400FCC18C /* FaceCaptureHideTorchConfigurationItem.swift */; }; - F1D3B0BD2ECCF5ED96E71FEB /* Pods_Catalog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1DBE93D03DA4D5B36021E6A /* Pods_Catalog.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 049A400C7B24D92447F2B5D5 /* Pods-Catalog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Catalog.debug.xcconfig"; path = "Target Support Files/Pods-Catalog/Pods-Catalog.debug.xcconfig"; sourceTree = ""; }; - 5D13AA4F2A458C17005716F5 /* DatabaseUpdatePersonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseUpdatePersonViewController.swift; sourceTree = ""; }; - 5D13AA502A458C17005716F5 /* DatabaseUpdatePersonViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DatabaseUpdatePersonViewController.xib; sourceTree = ""; }; - 5D3DB6692A42DA0100B2AFAC /* DatabasePersonsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabasePersonsViewController.swift; sourceTree = ""; }; - 5D3DB66A2A42DA0100B2AFAC /* DatabasePersonsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DatabasePersonsViewController.xib; sourceTree = ""; }; - 5D3DB66D2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseCreatePersonViewController.swift; sourceTree = ""; }; - 5D3DB66E2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DatabaseCreatePersonViewController.xib; sourceTree = ""; }; - 5DD62BE62A1259FD00F98A74 /* PersonImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersonImageCell.swift; sourceTree = ""; }; - 5DD62BE82A125A3D00F98A74 /* SearchPersonHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchPersonHeader.swift; sourceTree = ""; }; - 5DD62BEA2A125A7D00F98A74 /* SearchPersonImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchPersonImageCell.swift; sourceTree = ""; }; - 5DD62BEC2A125B1D00F98A74 /* UIImageView+Load.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImageView+Load.swift"; sourceTree = ""; }; + 12CB91E5CB5921DD9F43B30E /* Pods_BasicSample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BasicSample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29350583AA27FD1F48DF2E98 /* Pods-BasicSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasicSample.debug.xcconfig"; path = "Target Support Files/Pods-BasicSample/Pods-BasicSample.debug.xcconfig"; sourceTree = ""; }; + 5D04516C2CA14E0F00F134F2 /* CustomUILayerItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomUILayerItem.swift; sourceTree = ""; }; + 5D04516E2CA153A000F134F2 /* layer.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = layer.json; sourceTree = ""; }; + 5D1A1FDA2C944F1A001CE3F1 /* FaceCaptureHideCloseConfigurationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceCaptureHideCloseConfigurationItem.swift; sourceTree = ""; }; + 5D1A1FDD2C948F53001CE3F1 /* FaceCaptureHideNotificationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceCaptureHideNotificationItem.swift; sourceTree = ""; }; + 5DF86CFA2C9DA64300426532 /* Roboto-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Italic.ttf"; sourceTree = ""; }; + 5DF86CFE2C9DA9F200426532 /* Roboto-Black.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Black.ttf"; sourceTree = ""; }; 8611D4432657A47000E4E700 /* ImagesPreviewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagesPreviewViewController.swift; sourceTree = ""; }; 86133D42265646D600546D8A /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 86133D5026565DD600546D8A /* LivenessDefaultItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessDefaultItem.swift; sourceTree = ""; }; @@ -97,7 +82,7 @@ 86B2D27B2655568400D85D45 /* UIView+Layout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Layout.swift"; sourceTree = ""; }; 86B2D28526555AF200D85D45 /* FaceCaptureCameraPositionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceCaptureCameraPositionItem.swift; sourceTree = ""; }; 86B2D28A26555BCE00D85D45 /* LocalizationHandlerItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationHandlerItem.swift; sourceTree = ""; }; - 86B6D29A2653D50500794170 /* Catalog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Catalog.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 86B6D29A2653D50500794170 /* BasicSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BasicSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 86B6D29D2653D50500794170 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 86B6D29F2653D50500794170 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 86B6D2A62653D50600794170 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -108,8 +93,6 @@ 86B6D2C92653DD9C00794170 /* CatalogViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogViewController.swift; sourceTree = ""; }; 86B6D2CF2653E68C00794170 /* CatalogTableDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogTableDataProvider.swift; sourceTree = ""; }; 86B6D2EE26552E3700794170 /* CatalogItem+Routing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CatalogItem+Routing.swift"; sourceTree = ""; }; - 86B6D2F126552EF800794170 /* LivenessHintViewAppearanceItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessHintViewAppearanceItem.swift; sourceTree = ""; }; - 86C2559A2681E34D00067907 /* LivenessToolbarCustomColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessToolbarCustomColors.swift; sourceTree = ""; }; 86C256942682204A00067907 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/CustomLocalization.strings; sourceTree = ""; }; 86C256972682204D00067907 /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CA"; path = "fr-CA.lproj/CustomLocalization.strings"; sourceTree = ""; }; 86C256982682205000067907 /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "ko-KR.lproj/CustomLocalization.strings"; sourceTree = ""; }; @@ -137,12 +120,14 @@ 86D0D0E726835F6E000269B1 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/CustomLocalization.strings; sourceTree = ""; }; 86D0D0E826835F75000269B1 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/CustomLocalization.strings; sourceTree = ""; }; 86D5E284266116B80076D417 /* LivenessHintPositionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessHintPositionItem.swift; sourceTree = ""; }; - 86D5E288266118400076D417 /* LivenessToolbarAppearanceItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessToolbarAppearanceItem.swift; sourceTree = ""; }; - 86D5E28C26611A690076D417 /* LivenessToolbarPositionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessToolbarPositionItem.swift; sourceTree = ""; }; - 86D5E28F26611CFE0076D417 /* LivenessToolbarCustomButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessToolbarCustomButtonItem.swift; sourceTree = ""; }; - 86D5E2A0266123480076D417 /* LivenessLogoItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessLogoItem.swift; sourceTree = ""; }; - 86D5E2A6266128160076D417 /* FaceCaptureBackgroundColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceCaptureBackgroundColor.swift; sourceTree = ""; }; 86E74799265D2AB500767F52 /* URLRequestInterceptorItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLRequestInterceptorItem.swift; sourceTree = ""; }; + 87219532653B609FC5FABD6B /* Pods-BasicSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasicSample.release.xcconfig"; path = "Target Support Files/Pods-BasicSample/Pods-BasicSample.release.xcconfig"; sourceTree = ""; }; + 96991A9E2C3D4A3B00A0A1CD /* VideoUploadingCompletionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoUploadingCompletionItem.swift; sourceTree = ""; }; + 96A59B702C36983B0082B63E /* FaceInitializationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceInitializationItem.swift; sourceTree = ""; }; + 96A59B722C3698480082B63E /* FaceDeinitializationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceDeinitializationItem.swift; sourceTree = ""; }; + 96A59B742C369C340082B63E /* LivenessSessionTagItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessSessionTagItem.swift; sourceTree = ""; }; + 96A59B762C36CD040082B63E /* notification.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = notification.json; sourceTree = ""; }; + 96A59B792C36CD3F0082B63E /* LivenessNotificationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessNotificationItem.swift; sourceTree = ""; }; 96AA51012A0108C700783B08 /* detect_face2.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = detect_face2.jpeg; sourceTree = ""; }; 96AA51022A0108C700783B08 /* detect_face3.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = detect_face3.jpeg; sourceTree = ""; }; 96AA51032A0108C700783B08 /* face_image_quality1.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = face_image_quality1.jpeg; sourceTree = ""; }; @@ -158,19 +143,10 @@ 96AA511B2A0109AC00783B08 /* DetectFacesItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetectFacesItem.swift; sourceTree = ""; }; 96AA511C2A0109AC00783B08 /* ImageQualityItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageQualityItem.swift; sourceTree = ""; }; 96AA511F2A010A2A00783B08 /* QualityResultsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QualityResultsViewController.swift; sourceTree = ""; }; - 9D0660732A3337D9000370EC /* LivenessUIConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessUIConfiguration.swift; sourceTree = ""; }; - 9D7EFC852A4D793B0016736B /* FaceCaptureUIConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceCaptureUIConfiguration.swift; sourceTree = ""; }; - 96AA51252A01533D00783B08 /* PersonDatabaseItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersonDatabaseItem.swift; sourceTree = ""; }; - 96F0CBB52A41A49100568D73 /* DatabaseGroupsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseGroupsViewController.swift; sourceTree = ""; }; - 96F0CBB62A41A49100568D73 /* DatabaseGroupsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DatabaseGroupsViewController.xib; sourceTree = ""; }; - 96F0CBBA2A41F3BB00568D73 /* DatabaseSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseSearchViewController.swift; sourceTree = ""; }; - 96F0CBBB2A41F3BB00568D73 /* DatabaseSearchViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DatabaseSearchViewController.xib; sourceTree = ""; }; - 96FDB8CB2A4AD63A00FA8582 /* UpdatePersonCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdatePersonCell.swift; sourceTree = ""; }; - 96FDB8CC2A4AD63A00FA8582 /* UpdatePersonCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UpdatePersonCell.xib; sourceTree = ""; }; - 96FDB8D12A4B7AC500FA8582 /* Person+Metadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Person+Metadata.swift"; sourceTree = ""; }; + 9D0660732A3337D9000370EC /* LivenessUIConfigurationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessUIConfigurationItem.swift; sourceTree = ""; }; + 9D7EFC852A4D793B0016736B /* FaceCaptureUIConfigurationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceCaptureUIConfigurationItem.swift; sourceTree = ""; }; 9DC35FC1298174D00043FBB1 /* LivenessSkipOnboardingAndSuccessItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivenessSkipOnboardingAndSuccessItem.swift; sourceTree = ""; }; 9DE86D902850820400FCC18C /* FaceCaptureHideTorchConfigurationItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FaceCaptureHideTorchConfigurationItem.swift; sourceTree = ""; }; - D1DBE93D03DA4D5B36021E6A /* Pods_Catalog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Catalog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EE68E96211232EE8DBF2FE18 /* Pods-Catalog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Catalog.release.xcconfig"; path = "Target Support Files/Pods-Catalog/Pods-Catalog.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -179,17 +155,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F1D3B0BD2ECCF5ED96E71FEB /* Pods_Catalog.framework in Frameworks */, + 9DCF7A32504A33F2D6CCF037 /* Pods_BasicSample.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 5DF86CF92C9DA62D00426532 /* Fonts */ = { + isa = PBXGroup; + children = ( + 5DF86CFA2C9DA64300426532 /* Roboto-Italic.ttf */, + 5DF86CFE2C9DA9F200426532 /* Roboto-Black.ttf */, + ); + path = Fonts; + sourceTree = ""; + }; 7EC3410DBB354F50EEDFEF25 /* Frameworks */ = { isa = PBXGroup; children = ( - D1DBE93D03DA4D5B36021E6A /* Pods_Catalog.framework */, + 12CB91E5CB5921DD9F43B30E /* Pods_BasicSample.framework */, ); name = Frameworks; sourceTree = ""; @@ -202,7 +187,6 @@ 86133D6C26568D6B00546D8A /* MatchFacesRequestItem.swift */, 96AA511B2A0109AC00783B08 /* DetectFacesItem.swift */, 96AA511C2A0109AC00783B08 /* ImageQualityItem.swift */, - 96AA51252A01533D00783B08 /* PersonDatabaseItem.swift */, ); path = Basic; sourceTree = ""; @@ -210,10 +194,12 @@ 86133D6A26568CBE00546D8A /* Features */ = { isa = PBXGroup; children = ( - 9DE86D902850820400FCC18C /* FaceCaptureHideTorchConfigurationItem.swift */, 86CED8F42664E123008CC8AA /* LivenessAttemptsCountItem.swift */, 86B2D28526555AF200D85D45 /* FaceCaptureCameraPositionItem.swift */, 9DC35FC1298174D00043FBB1 /* LivenessSkipOnboardingAndSuccessItem.swift */, + 96A59B742C369C340082B63E /* LivenessSessionTagItem.swift */, + 96A59B702C36983B0082B63E /* FaceInitializationItem.swift */, + 96A59B722C3698480082B63E /* FaceDeinitializationItem.swift */, ); path = Features; sourceTree = ""; @@ -224,8 +210,6 @@ 86B2D27B2655568400D85D45 /* UIView+Layout.swift */, 86951B502657DF6B00FB23D8 /* UIColor+Palette.swift */, 86951B532657E30D00FB23D8 /* UIColor+Hex.swift */, - 5DD62BEC2A125B1D00F98A74 /* UIImageView+Load.swift */, - 96FDB8D12A4B7AC500FA8582 /* Person+Metadata.swift */, ); path = Extensions; sourceTree = ""; @@ -235,6 +219,7 @@ children = ( 86B2D28A26555BCE00D85D45 /* LocalizationHandlerItem.swift */, 86E74799265D2AB500767F52 /* URLRequestInterceptorItem.swift */, + 96991A9E2C3D4A3B00A0A1CD /* VideoUploadingCompletionItem.swift */, ); path = Other; sourceTree = ""; @@ -242,7 +227,7 @@ 86B6D2912653D50500794170 = { isa = PBXGroup; children = ( - 86B6D29C2653D50500794170 /* Catalog */, + 86B6D29C2653D50500794170 /* BasicSample */, 86B6D29B2653D50500794170 /* Products */, 8712E4B70091496B029BB5F0 /* Pods */, 7EC3410DBB354F50EEDFEF25 /* Frameworks */, @@ -252,12 +237,12 @@ 86B6D29B2653D50500794170 /* Products */ = { isa = PBXGroup; children = ( - 86B6D29A2653D50500794170 /* Catalog.app */, + 86B6D29A2653D50500794170 /* BasicSample.app */, ); name = Products; sourceTree = ""; }; - 86B6D29C2653D50500794170 /* Catalog */ = { + 86B6D29C2653D50500794170 /* BasicSample */ = { isa = PBXGroup; children = ( 86B6D2B72653D78400794170 /* Items */, @@ -266,7 +251,7 @@ 86B6D29F2653D50500794170 /* SceneDelegate.swift */, 86B6D2B32653D57F00794170 /* Resources */, ); - path = Catalog; + path = BasicSample; sourceTree = ""; }; 86B6D2B32653D57F00794170 /* Resources */ = { @@ -274,6 +259,7 @@ children = ( 96AA51002A0108C700783B08 /* Samples */, 86B6D2A62653D50600794170 /* Assets.xcassets */, + 96A59B782C36CD0C0082B63E /* Customization */, 86B6D2AB2653D50600794170 /* Info.plist */, 86B6D2BE2653DA7C00794170 /* Catalog-Bridging-Header.h */, 86133D42265646D600546D8A /* LaunchScreen.storyboard */, @@ -304,7 +290,6 @@ 86B6D2EE26552E3700794170 /* CatalogItem+Routing.swift */, 8611D4432657A47000E4E700 /* ImagesPreviewViewController.swift */, 96AA511F2A010A2A00783B08 /* QualityResultsViewController.swift */, - 96F0CBB42A41A46300568D73 /* PersonDatabase */, 96AA51112A01092400783B08 /* Supplementary */, ); path = Core; @@ -313,16 +298,14 @@ 86B6D2F62655306500794170 /* ViewCustomization */ = { isa = PBXGroup; children = ( - 9D0660732A3337D9000370EC /* LivenessUIConfiguration.swift */, - 9D7EFC852A4D793B0016736B /* FaceCaptureUIConfiguration.swift */, - 86B6D2F126552EF800794170 /* LivenessHintViewAppearanceItem.swift */, + 9D0660732A3337D9000370EC /* LivenessUIConfigurationItem.swift */, + 9D7EFC852A4D793B0016736B /* FaceCaptureUIConfigurationItem.swift */, + 96A59B792C36CD3F0082B63E /* LivenessNotificationItem.swift */, + 9DE86D902850820400FCC18C /* FaceCaptureHideTorchConfigurationItem.swift */, + 5D1A1FDA2C944F1A001CE3F1 /* FaceCaptureHideCloseConfigurationItem.swift */, + 5D1A1FDD2C948F53001CE3F1 /* FaceCaptureHideNotificationItem.swift */, 86D5E284266116B80076D417 /* LivenessHintPositionItem.swift */, - 86D5E288266118400076D417 /* LivenessToolbarAppearanceItem.swift */, - 86D5E28C26611A690076D417 /* LivenessToolbarPositionItem.swift */, - 86D5E28F26611CFE0076D417 /* LivenessToolbarCustomButtonItem.swift */, - 86C2559A2681E34D00067907 /* LivenessToolbarCustomColors.swift */, - 86D5E2A0266123480076D417 /* LivenessLogoItem.swift */, - 86D5E2A6266128160076D417 /* FaceCaptureBackgroundColor.swift */, + 5D04516C2CA14E0F00F134F2 /* CustomUILayerItem.swift */, ); path = ViewCustomization; sourceTree = ""; @@ -332,10 +315,22 @@ children = ( 049A400C7B24D92447F2B5D5 /* Pods-Catalog.debug.xcconfig */, EE68E96211232EE8DBF2FE18 /* Pods-Catalog.release.xcconfig */, + 29350583AA27FD1F48DF2E98 /* Pods-BasicSample.debug.xcconfig */, + 87219532653B609FC5FABD6B /* Pods-BasicSample.release.xcconfig */, ); path = Pods; sourceTree = ""; }; + 96A59B782C36CD0C0082B63E /* Customization */ = { + isa = PBXGroup; + children = ( + 5DF86CF92C9DA62D00426532 /* Fonts */, + 96A59B762C36CD040082B63E /* notification.json */, + 5D04516E2CA153A000F134F2 /* layer.json */, + ); + path = Customization; + sourceTree = ""; + }; 96AA51002A0108C700783B08 /* Samples */ = { isa = PBXGroup; children = ( @@ -370,42 +365,12 @@ path = Views; sourceTree = ""; }; - 96F0CBB42A41A46300568D73 /* PersonDatabase */ = { - isa = PBXGroup; - children = ( - 96F0CBB52A41A49100568D73 /* DatabaseGroupsViewController.swift */, - 96F0CBB62A41A49100568D73 /* DatabaseGroupsViewController.xib */, - 96F0CBBA2A41F3BB00568D73 /* DatabaseSearchViewController.swift */, - 96F0CBBB2A41F3BB00568D73 /* DatabaseSearchViewController.xib */, - 5D3DB6692A42DA0100B2AFAC /* DatabasePersonsViewController.swift */, - 5D3DB66A2A42DA0100B2AFAC /* DatabasePersonsViewController.xib */, - 5D3DB66D2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.swift */, - 5D3DB66E2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.xib */, - 5D13AA4F2A458C17005716F5 /* DatabaseUpdatePersonViewController.swift */, - 5D13AA502A458C17005716F5 /* DatabaseUpdatePersonViewController.xib */, - 96FDB8CA2A4AD60700FA8582 /* Supplementary */, - ); - path = PersonDatabase; - sourceTree = ""; - }; - 96FDB8CA2A4AD60700FA8582 /* Supplementary */ = { - isa = PBXGroup; - children = ( - 96FDB8CB2A4AD63A00FA8582 /* UpdatePersonCell.swift */, - 96FDB8CC2A4AD63A00FA8582 /* UpdatePersonCell.xib */, - 5DD62BE62A1259FD00F98A74 /* PersonImageCell.swift */, - 5DD62BE82A125A3D00F98A74 /* SearchPersonHeader.swift */, - 5DD62BEA2A125A7D00F98A74 /* SearchPersonImageCell.swift */, - ); - path = Supplementary; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 86B6D2992653D50500794170 /* Catalog */ = { + 86B6D2992653D50500794170 /* BasicSample */ = { isa = PBXNativeTarget; - buildConfigurationList = 86B6D2AE2653D50600794170 /* Build configuration list for PBXNativeTarget "Catalog" */; + buildConfigurationList = 86B6D2AE2653D50600794170 /* Build configuration list for PBXNativeTarget "BasicSample" */; buildPhases = ( 34BA8EAA2A8647BCC5C0A982 /* [CP] Check Pods Manifest.lock */, 86B6D2962653D50500794170 /* Sources */, @@ -417,9 +382,9 @@ ); dependencies = ( ); - name = Catalog; + name = BasicSample; productName = Catalog; - productReference = 86B6D29A2653D50500794170 /* Catalog.app */; + productReference = 86B6D29A2653D50500794170 /* BasicSample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -439,7 +404,7 @@ }; }; }; - buildConfigurationList = 86B6D2952653D50500794170 /* Build configuration list for PBXProject "Catalog" */; + buildConfigurationList = 86B6D2952653D50500794170 /* Build configuration list for PBXProject "BasicSample" */; compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; @@ -476,7 +441,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 86B6D2992653D50500794170 /* Catalog */, + 86B6D2992653D50500794170 /* BasicSample */, ); }; /* End PBXProject section */ @@ -486,22 +451,20 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5D04516F2CA153A000F134F2 /* layer.json in Resources */, 96AA510D2A0108C700783B08 /* face_image_quality3.jpeg in Resources */, 86B6D2A72653D50600794170 /* Assets.xcassets in Resources */, 86133D43265646D600546D8A /* LaunchScreen.storyboard in Resources */, 96AA510B2A0108C700783B08 /* face_image_quality1.jpeg in Resources */, - 5D3DB66C2A42DA0100B2AFAC /* DatabasePersonsViewController.xib in Resources */, - 5D13AA522A458C17005716F5 /* DatabaseUpdatePersonViewController.xib in Resources */, + 96A59B772C36CD040082B63E /* notification.json in Resources */, + 5DF86CFC2C9DA64300426532 /* Roboto-Italic.ttf in Resources */, 96AA51102A0108C700783B08 /* detect_face1.jpeg in Resources */, - 5D3DB6702A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.xib in Resources */, 96AA510A2A0108C700783B08 /* detect_face3.jpeg in Resources */, - 96FDB8CE2A4AD63A00FA8582 /* UpdatePersonCell.xib in Resources */, 96AA510E2A0108C700783B08 /* face_image_quality2.jpeg in Resources */, 96AA51092A0108C700783B08 /* detect_face2.jpeg in Resources */, 96AA510F2A0108C700783B08 /* face_image_quality4.jpeg in Resources */, + 5DF86CFF2C9DA9F200426532 /* Roboto-Black.ttf in Resources */, 96AA510C2A0108C700783B08 /* detect_face4.jpeg in Resources */, - 96F0CBB82A41A49100568D73 /* DatabaseGroupsViewController.xib in Resources */, - 96F0CBBD2A41F3BB00568D73 /* DatabaseSearchViewController.xib in Resources */, 86C256932682204A00067907 /* CustomLocalization.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -524,7 +487,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Catalog-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-BasicSample-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -537,15 +500,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Catalog/Pods-Catalog-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-BasicSample/Pods-BasicSample-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Catalog/Pods-Catalog-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-BasicSample/Pods-BasicSample-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Catalog/Pods-Catalog-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BasicSample/Pods-BasicSample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -559,49 +522,38 @@ 86951B512657DF6B00FB23D8 /* UIColor+Palette.swift in Sources */, 96AA511E2A0109AC00783B08 /* ImageQualityItem.swift in Sources */, 86B6D2CA2653DD9C00794170 /* CatalogViewController.swift in Sources */, - 5D3DB66F2A42ECAC00B2AFAC /* DatabaseCreatePersonViewController.swift in Sources */, 86133D5126565DD600546D8A /* LivenessDefaultItem.swift in Sources */, 86B6D2EF26552E3700794170 /* CatalogItem+Routing.swift in Sources */, - 5D13AA512A458C17005716F5 /* DatabaseUpdatePersonViewController.swift in Sources */, 9DC35FC2298174D00043FBB1 /* LivenessSkipOnboardingAndSuccessItem.swift in Sources */, + 96A59B752C369C340082B63E /* LivenessSessionTagItem.swift in Sources */, 86B2D27C2655568400D85D45 /* UIView+Layout.swift in Sources */, 86B6D2C12653DA7C00794170 /* RFCCatalogItem.m in Sources */, - 86D5E2A7266128160076D417 /* FaceCaptureBackgroundColor.swift in Sources */, - 9D0660742A3337D9000370EC /* LivenessUIConfiguration.swift in Sources */, - 9D7EFC862A4D793B0016736B /* FaceCaptureUIConfiguration.swift in Sources */, - 96AA51262A01533D00783B08 /* PersonDatabaseItem.swift in Sources */, - 86B6D2F226552EF800794170 /* LivenessHintViewAppearanceItem.swift in Sources */, + 5D1A1FDB2C944F1A001CE3F1 /* FaceCaptureHideCloseConfigurationItem.swift in Sources */, + 96991A9F2C3D4A3B00A0A1CD /* VideoUploadingCompletionItem.swift in Sources */, + 9D0660742A3337D9000370EC /* LivenessUIConfigurationItem.swift in Sources */, + 9D7EFC862A4D793B0016736B /* FaceCaptureUIConfigurationItem.swift in Sources */, 86D5E285266116B80076D417 /* LivenessHintPositionItem.swift in Sources */, - 5DD62BEB2A125A7D00F98A74 /* SearchPersonImageCell.swift in Sources */, - 86D5E2A1266123480076D417 /* LivenessLogoItem.swift in Sources */, + 96A59B7A2C36CD3F0082B63E /* LivenessNotificationItem.swift in Sources */, 86133D5426565E2B00546D8A /* FaceCaptureDefaultItem.swift in Sources */, + 5D04516D2CA14E0F00F134F2 /* CustomUILayerItem.swift in Sources */, + 96A59B712C36983B0082B63E /* FaceInitializationItem.swift in Sources */, 86B2D28B26555BCE00D85D45 /* LocalizationHandlerItem.swift in Sources */, - 96F0CBBC2A41F3BB00568D73 /* DatabaseSearchViewController.swift in Sources */, - 5DD62BE72A1259FD00F98A74 /* PersonImageCell.swift in Sources */, 86E7479A265D2AB500767F52 /* URLRequestInterceptorItem.swift in Sources */, 86CED8F52664E123008CC8AA /* LivenessAttemptsCountItem.swift in Sources */, - 5DD62BED2A125B1D00F98A74 /* UIImageView+Load.swift in Sources */, - 5D3DB66B2A42DA0100B2AFAC /* DatabasePersonsViewController.swift in Sources */, 86B6D29E2653D50500794170 /* AppDelegate.swift in Sources */, 96AA51172A01092400783B08 /* ImagePicker.swift in Sources */, - 86C2559B2681E34D00067907 /* LivenessToolbarCustomColors.swift in Sources */, - 96F0CBB72A41A49100568D73 /* DatabaseGroupsViewController.swift in Sources */, 96AA51192A01092400783B08 /* GalleryView.swift in Sources */, + 5D1A1FDE2C948F53001CE3F1 /* FaceCaptureHideNotificationItem.swift in Sources */, 86B6D2A02653D50500794170 /* SceneDelegate.swift in Sources */, 9DE86D922850820400FCC18C /* FaceCaptureHideTorchConfigurationItem.swift in Sources */, - 96FDB8CD2A4AD63A00FA8582 /* UpdatePersonCell.swift in Sources */, - 96FDB8D22A4B7AC500FA8582 /* Person+Metadata.swift in Sources */, 86951B542657E30D00FB23D8 /* UIColor+Hex.swift in Sources */, - 5DD62BE92A125A3D00F98A74 /* SearchPersonHeader.swift in Sources */, - 86D5E28D26611A690076D417 /* LivenessToolbarPositionItem.swift in Sources */, 8611D4442657A47000E4E700 /* ImagesPreviewViewController.swift in Sources */, - 86D5E29026611CFE0076D417 /* LivenessToolbarCustomButtonItem.swift in Sources */, 96AA511D2A0109AC00783B08 /* DetectFacesItem.swift in Sources */, 96AA511A2A01092400783B08 /* CarouselView.swift in Sources */, + 96A59B732C3698480082B63E /* FaceDeinitializationItem.swift in Sources */, 96AA51182A01092400783B08 /* ImageHelper.swift in Sources */, 86133D6D26568D6B00546D8A /* MatchFacesRequestItem.swift in Sources */, 86B2D28626555AF200D85D45 /* FaceCaptureCameraPositionItem.swift in Sources */, - 86D5E289266118400076D417 /* LivenessToolbarAppearanceItem.swift in Sources */, 96AA51202A010A2A00783B08 /* QualityResultsViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -764,21 +716,21 @@ }; 86B6D2AF2653D50600794170 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 049A400C7B24D92447F2B5D5 /* Pods-Catalog.debug.xcconfig */; + baseConfigurationReference = 29350583AA27FD1F48DF2E98 /* Pods-BasicSample.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = TCL8G4Q85M; - INFOPLIST_FILE = Catalog/Resources/Info.plist; + DEVELOPMENT_TEAM = H6WR54S268; + INFOPLIST_FILE = BasicSample/Resources/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = com.regula.facesdk.catalog; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Catalog/Resources/Catalog-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "BasicSample/Resources/Catalog-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -787,21 +739,21 @@ }; 86B6D2B02653D50600794170 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EE68E96211232EE8DBF2FE18 /* Pods-Catalog.release.xcconfig */; + baseConfigurationReference = 87219532653B609FC5FABD6B /* Pods-BasicSample.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = TCL8G4Q85M; - INFOPLIST_FILE = Catalog/Resources/Info.plist; + DEVELOPMENT_TEAM = H6WR54S268; + INFOPLIST_FILE = BasicSample/Resources/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = com.regula.facesdk.catalog; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Catalog/Resources/Catalog-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "BasicSample/Resources/Catalog-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -810,7 +762,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 86B6D2952653D50500794170 /* Build configuration list for PBXProject "Catalog" */ = { + 86B6D2952653D50500794170 /* Build configuration list for PBXProject "BasicSample" */ = { isa = XCConfigurationList; buildConfigurations = ( 86B6D2AC2653D50600794170 /* Debug */, @@ -819,7 +771,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 86B6D2AE2653D50600794170 /* Build configuration list for PBXNativeTarget "Catalog" */ = { + 86B6D2AE2653D50600794170 /* Build configuration list for PBXNativeTarget "BasicSample" */ = { isa = XCConfigurationList; buildConfigurations = ( 86B6D2AF2653D50600794170 /* Debug */, diff --git a/Catalog.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/BasicSample/BasicSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Catalog.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to BasicSample/BasicSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Catalog.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/BasicSample/BasicSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Catalog.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to BasicSample/BasicSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Catalog.xcodeproj/xcshareddata/xcschemes/Catalog.xcscheme b/BasicSample/BasicSample.xcodeproj/xcshareddata/xcschemes/Catalog.xcscheme similarity index 83% rename from Catalog.xcodeproj/xcshareddata/xcschemes/Catalog.xcscheme rename to BasicSample/BasicSample.xcodeproj/xcshareddata/xcschemes/Catalog.xcscheme index dd426d7..6cea85f 100644 --- a/Catalog.xcodeproj/xcshareddata/xcschemes/Catalog.xcscheme +++ b/BasicSample/BasicSample.xcodeproj/xcshareddata/xcschemes/Catalog.xcscheme @@ -15,9 +15,9 @@ + BuildableName = "BasicSample.app" + BlueprintName = "BasicSample" + ReferencedContainer = "container:BasicSample.xcodeproj"> @@ -45,9 +45,9 @@ + BuildableName = "BasicSample.app" + BlueprintName = "BasicSample" + ReferencedContainer = "container:BasicSample.xcodeproj"> @@ -62,9 +62,9 @@ + BuildableName = "BasicSample.app" + BlueprintName = "BasicSample" + ReferencedContainer = "container:BasicSample.xcodeproj"> diff --git a/Catalog.xcworkspace/contents.xcworkspacedata b/BasicSample/BasicSample.xcworkspace/contents.xcworkspacedata similarity index 79% rename from Catalog.xcworkspace/contents.xcworkspacedata rename to BasicSample/BasicSample.xcworkspace/contents.xcworkspacedata index 48f1c5b..1427222 100644 --- a/Catalog.xcworkspace/contents.xcworkspacedata +++ b/BasicSample/BasicSample.xcworkspace/contents.xcworkspacedata @@ -2,7 +2,7 @@ + location = "group:BasicSample.xcodeproj"> diff --git a/Catalog.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/BasicSample/BasicSample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Catalog.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to BasicSample/BasicSample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Catalog/AppDelegate.swift b/BasicSample/BasicSample/AppDelegate.swift similarity index 90% rename from Catalog/AppDelegate.swift rename to BasicSample/BasicSample/AppDelegate.swift index 5db28a8..481c355 100644 --- a/Catalog/AppDelegate.swift +++ b/BasicSample/BasicSample/AppDelegate.swift @@ -1,6 +1,6 @@ // // AppDelegate.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/18/21. // @@ -41,4 +41,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } + + func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { + .portrait + } } diff --git a/Catalog/Core/CatalogItem+Routing.swift b/BasicSample/BasicSample/Core/CatalogItem+Routing.swift similarity index 95% rename from Catalog/Core/CatalogItem+Routing.swift rename to BasicSample/BasicSample/Core/CatalogItem+Routing.swift index 916b9b0..87a82e5 100644 --- a/Catalog/Core/CatalogItem+Routing.swift +++ b/BasicSample/BasicSample/Core/CatalogItem+Routing.swift @@ -1,6 +1,6 @@ // -// CatalogItem+Routing.swift -// Catalog +// BasicSampleItem+Routing.swift +// BasicSample // // Created by Pavel Kondrashkov on 5/19/21. // Copyright © 2021 Regula. All rights reserved. diff --git a/Catalog/Core/CatalogTableDataProvider.swift b/BasicSample/BasicSample/Core/CatalogTableDataProvider.swift similarity index 87% rename from Catalog/Core/CatalogTableDataProvider.swift rename to BasicSample/BasicSample/Core/CatalogTableDataProvider.swift index 0239ac7..da33976 100644 --- a/Catalog/Core/CatalogTableDataProvider.swift +++ b/BasicSample/BasicSample/Core/CatalogTableDataProvider.swift @@ -1,6 +1,6 @@ // -// CatalogDataProvider.swift -// Catalog +// BasicSampleDataProvider.swift +// BasicSample // // Created by Pavel Kondrashkov on 5/18/21. // Copyright © 2021 Regula. All rights reserved. @@ -28,25 +28,25 @@ final class CatalogTableDataProvider { MatchFacesRequestItem(), DetectFacesItem(), ImageQualityItem(), - PersonDatabaseItem(), LivenessAttemptsCountItem(), FaceCaptureCameraPositionItem(), - FaceCaptureHideTorchConfigurationItem(), LivenessSkipOnboardingAndSuccessItem(), - + LivenessSessionTagItem(), + FaceInitializationItem(), + FaceDeinitializationItem(), + LivenessUIConfigurationItem(), FaceCaptureUIConfigurationItem(), - LivenessHintViewAppearanceItem(), + LivenessNotificationItem(), + FaceCaptureCloseTorchConfigurationItem(), + FaceCaptureHideTorchConfigurationItem(), + FaceCaptureHideNotificationItem(), LivenessHintPositionItem(), - LivenessToolbarAppearanceItem(), - LivenessToolbarPositionItem(), - LivenessToolbarCustomButtonItem(), - LivenessToolbarCustomColors(), - LivenessLogoItem(), - FaceCaptureBackgroundColor(), + CustomUILayerItem(), LocalizationHandlerItem(), URLRequestInterceptorItem(), + VideoUploadingCompletionItem(), ] }() @@ -100,7 +100,7 @@ private extension CatalogTableDataProvider { case .feature: return "Feature Customization" case .viewCustomization: - return "View Customization" + return "UI Customization" case .other: return "Other" @unknown default: diff --git a/Catalog/Core/CatalogViewController.swift b/BasicSample/BasicSample/Core/CatalogViewController.swift similarity index 98% rename from Catalog/Core/CatalogViewController.swift rename to BasicSample/BasicSample/Core/CatalogViewController.swift index 95653d5..514d99a 100644 --- a/Catalog/Core/CatalogViewController.swift +++ b/BasicSample/BasicSample/Core/CatalogViewController.swift @@ -1,6 +1,6 @@ // -// CatalogViewController.swift -// Catalog +// BasicSampleViewController.swift +// BasicSample // // Created by Pavel Kondrashkov on 5/18/21. // Copyright © 2021 Regula. All rights reserved. diff --git a/Catalog/Core/Extensions/UIColor+Hex.swift b/BasicSample/BasicSample/Core/Extensions/UIColor+Hex.swift similarity index 98% rename from Catalog/Core/Extensions/UIColor+Hex.swift rename to BasicSample/BasicSample/Core/Extensions/UIColor+Hex.swift index c1270f0..bf766c6 100644 --- a/Catalog/Core/Extensions/UIColor+Hex.swift +++ b/BasicSample/BasicSample/Core/Extensions/UIColor+Hex.swift @@ -1,6 +1,6 @@ // // UIColor+Hex.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/21/21. // Copyright © 2021 Regula. All rights reserved. diff --git a/Catalog/Core/Extensions/UIColor+Palette.swift b/BasicSample/BasicSample/Core/Extensions/UIColor+Palette.swift similarity index 93% rename from Catalog/Core/Extensions/UIColor+Palette.swift rename to BasicSample/BasicSample/Core/Extensions/UIColor+Palette.swift index 1823a5e..16efa64 100644 --- a/Catalog/Core/Extensions/UIColor+Palette.swift +++ b/BasicSample/BasicSample/Core/Extensions/UIColor+Palette.swift @@ -1,6 +1,6 @@ // // UIColor+Palette.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/21/21. // Copyright © 2021 Regula. All rights reserved. diff --git a/Catalog/Core/Extensions/UIView+Layout.swift b/BasicSample/BasicSample/Core/Extensions/UIView+Layout.swift similarity index 98% rename from Catalog/Core/Extensions/UIView+Layout.swift rename to BasicSample/BasicSample/Core/Extensions/UIView+Layout.swift index f74b64b..82c9b80 100644 --- a/Catalog/Core/Extensions/UIView+Layout.swift +++ b/BasicSample/BasicSample/Core/Extensions/UIView+Layout.swift @@ -1,6 +1,6 @@ // // UIView+Layout.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/19/21. // Copyright © 2021 Regula. All rights reserved. diff --git a/Catalog/Core/ImagePicker.swift b/BasicSample/BasicSample/Core/ImagePicker.swift similarity index 100% rename from Catalog/Core/ImagePicker.swift rename to BasicSample/BasicSample/Core/ImagePicker.swift diff --git a/Catalog/Core/ImagesPreviewViewController.swift b/BasicSample/BasicSample/Core/ImagesPreviewViewController.swift similarity index 97% rename from Catalog/Core/ImagesPreviewViewController.swift rename to BasicSample/BasicSample/Core/ImagesPreviewViewController.swift index a83b741..6649e71 100644 --- a/Catalog/Core/ImagesPreviewViewController.swift +++ b/BasicSample/BasicSample/Core/ImagesPreviewViewController.swift @@ -1,6 +1,6 @@ // // ImagesPreviewViewController.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/21/21. // Copyright © 2021 Regula. All rights reserved. @@ -64,7 +64,7 @@ final class ImagesPreviewViewController: UIViewController { nextButton.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -40), ]) - nextButton.isHidden = images.isEmpty + nextButton.isHidden = images.count < 2 } override func viewDidLoad() { diff --git a/Catalog/Core/QualityResultsViewController.swift b/BasicSample/BasicSample/Core/QualityResultsViewController.swift similarity index 91% rename from Catalog/Core/QualityResultsViewController.swift rename to BasicSample/BasicSample/Core/QualityResultsViewController.swift index 737fe70..c722c38 100644 --- a/Catalog/Core/QualityResultsViewController.swift +++ b/BasicSample/BasicSample/Core/QualityResultsViewController.swift @@ -1,6 +1,6 @@ // // ImageQualityResultsViewController.swift -// Catalog +// BasicSample // // Created by Deposhe on 31.08.22. // Copyright © 2022 Regula. All rights reserved. @@ -56,21 +56,10 @@ class QualityResultsViewController: UIViewController { tableView.estimatedRowHeight = UITableView.automaticDimension view.addSubview(tableView) - let resultBarButton = UIBarButtonItem(title: "Detections", style: .plain, target: self, action: #selector(didPressResultsButton(_:))) - navigationItem.setRightBarButton(resultBarButton, animated: true) - setupConstraints() selectedDetection = detections.first } - @IBAction private func didPressResultsButton(_ sender: Any) { - let detectedFacesImages = detections.compactMap({ $0.crop }) - guard !detectedFacesImages.isEmpty else { return } - - let previewVC = ImagesPreviewViewController(images: detectedFacesImages) - navigationController?.pushViewController(previewVC, animated: true) - } - private func updateSelection(oldValue: DetectFaceResult?) { guard selectedDetection != oldValue else { return } sections = groupAndSortQualityResults() @@ -112,9 +101,10 @@ class QualityResultsViewController: UIViewController { let sectionScore = "\(badge) \(succededQualitiesCount)/\(allQualitiesCount)" return "\(groupDescription) \(sectionScore)" } - + private func resultDescription(for result: ImageQualityResult) -> String { - "VALUE: \(result.value) \nEXPECTED RANGE: [\(result.range.min):\(result.range.max)]" + let value = (result.value.floatValue * 10000).rounded() / 10000 + return "VALUE: \(value) \nEXPECTED RANGE: [\(result.range.min):\(result.range.max)]" } private func groupAndSortQualityResults() -> [Section] { diff --git a/Catalog/Core/RFCCatalogItem.h b/BasicSample/BasicSample/Core/RFCCatalogItem.h similarity index 98% rename from Catalog/Core/RFCCatalogItem.h rename to BasicSample/BasicSample/Core/RFCCatalogItem.h index c2f8e8e..5d19118 100644 --- a/Catalog/Core/RFCCatalogItem.h +++ b/BasicSample/BasicSample/Core/RFCCatalogItem.h @@ -1,6 +1,6 @@ // // RFCCatalogItem.h -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/18/21. // Copyright © 2021 Regula. All rights reserved. diff --git a/Catalog/Core/RFCCatalogItem.m b/BasicSample/BasicSample/Core/RFCCatalogItem.m similarity index 95% rename from Catalog/Core/RFCCatalogItem.m rename to BasicSample/BasicSample/Core/RFCCatalogItem.m index c225a59..bcd1dbd 100644 --- a/Catalog/Core/RFCCatalogItem.m +++ b/BasicSample/BasicSample/Core/RFCCatalogItem.m @@ -1,6 +1,6 @@ // // RFCCatalogItem.m -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/18/21. // Copyright © 2021 Regula. All rights reserved. diff --git a/Catalog/Core/Supplementary/ImageHelper.swift b/BasicSample/BasicSample/Core/Supplementary/ImageHelper.swift similarity index 99% rename from Catalog/Core/Supplementary/ImageHelper.swift rename to BasicSample/BasicSample/Core/Supplementary/ImageHelper.swift index 9bb2bce..b8ae660 100644 --- a/Catalog/Core/Supplementary/ImageHelper.swift +++ b/BasicSample/BasicSample/Core/Supplementary/ImageHelper.swift @@ -1,6 +1,6 @@ // // ImageHelper.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 30.08.22. // Copyright © 2022 Regula. All rights reserved. diff --git a/Catalog/Core/Supplementary/ImagePicker.swift b/BasicSample/BasicSample/Core/Supplementary/ImagePicker.swift similarity index 68% rename from Catalog/Core/Supplementary/ImagePicker.swift rename to BasicSample/BasicSample/Core/Supplementary/ImagePicker.swift index 3d876c7..6c139bd 100644 --- a/Catalog/Core/Supplementary/ImagePicker.swift +++ b/BasicSample/BasicSample/Core/Supplementary/ImagePicker.swift @@ -1,6 +1,6 @@ // // ImagePicker.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 26.08.22. // Copyright © 2022 Regula. All rights reserved. @@ -8,9 +8,10 @@ import Foundation import UIKit +import FaceSDK protocol ImagePickerDelegate: AnyObject { - func didPickImage(delegate: ImagePicker, image: UIImage) + func didPickImage(delegate: ImagePicker, image: UIImage, sourceType: UIImagePickerController.SourceType) } final class ImagePicker: NSObject, UINavigationControllerDelegate { @@ -42,16 +43,30 @@ final class ImagePicker: NSObject, UINavigationControllerDelegate { } } - func presentDefaultActions(from sourceView: UIView) { + private func actionSDK(title: String) -> UIAlertAction? { + guard FaceSDK.service.isInitialized else { return nil } + let action = UIAlertAction(title: title, style: .default) { [weak self] _ in + guard let self = self else { return } + FaceSDK.service.presentFaceCaptureViewController(from: self.presenter, animated: true) { response in + if let image = response.image?.image { + self.delegate.didPickImage(delegate: self, image: image, sourceType: .camera) + self.presenter.dismiss(animated: true) + } + } + } + return action + } + + func presentPickerActions(from sourceView: UIView) { let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) - if let action = self.action(for: .camera, title: "Take photo") { + if let action = actionSDK(title: "Regula FaceCaptureUI") { alertController.addAction(action) } - if let action = self.action(for: .savedPhotosAlbum, title: "Camera roll") { + if let action = self.action(for: .photoLibrary, title: "Gallery") { alertController.addAction(action) } - if let action = self.action(for: .photoLibrary, title: "Photo library") { + if let action = self.action(for: .camera, title: "Camera Shot") { alertController.addAction(action) } @@ -71,7 +86,7 @@ extension ImagePicker: UIImagePickerControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { guard let image = info[.editedImage] as? UIImage else { return } - delegate.didPickImage(delegate: self, image: image) + delegate.didPickImage(delegate: self, image: image, sourceType: .photoLibrary) presenter.dismiss(animated: true) } } diff --git a/Catalog/Core/Supplementary/Views/CarouselView.swift b/BasicSample/BasicSample/Core/Supplementary/Views/CarouselView.swift similarity index 99% rename from Catalog/Core/Supplementary/Views/CarouselView.swift rename to BasicSample/BasicSample/Core/Supplementary/Views/CarouselView.swift index 109620b..f5a17b4 100644 --- a/Catalog/Core/Supplementary/Views/CarouselView.swift +++ b/BasicSample/BasicSample/Core/Supplementary/Views/CarouselView.swift @@ -1,6 +1,6 @@ // // CarouselView.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 6.09.22. // Copyright © 2022 Regula. All rights reserved. diff --git a/Catalog/Core/Supplementary/Views/GalleryView.swift b/BasicSample/BasicSample/Core/Supplementary/Views/GalleryView.swift similarity index 98% rename from Catalog/Core/Supplementary/Views/GalleryView.swift rename to BasicSample/BasicSample/Core/Supplementary/Views/GalleryView.swift index 813a286..fa6e3c8 100644 --- a/Catalog/Core/Supplementary/Views/GalleryView.swift +++ b/BasicSample/BasicSample/Core/Supplementary/Views/GalleryView.swift @@ -1,6 +1,6 @@ // // GalleryView.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 6.09.22. // Copyright © 2022 Regula. All rights reserved. @@ -45,7 +45,7 @@ class GalleryView: UIView { } private var models: [DetectImageModel] = [] - private(set) var selectedIndex: Int = 0 { + var selectedIndex: Int = 0 { didSet { updateSelection(); notifySelection() } } @@ -69,7 +69,7 @@ class GalleryView: UIView { } private func setup() { - backgroundColor = .cyan + backgroundColor = .white previewImageView.backgroundColor = .white previewImageView.contentMode = .scaleAspectFit previewImageView.clipsToBounds = true diff --git a/Catalog/Items/Basic/DetectFacesItem.swift b/BasicSample/BasicSample/Items/Basic/DetectFacesItem.swift similarity index 98% rename from Catalog/Items/Basic/DetectFacesItem.swift rename to BasicSample/BasicSample/Items/Basic/DetectFacesItem.swift index aa2b1d0..f3a36a5 100644 --- a/Catalog/Items/Basic/DetectFacesItem.swift +++ b/BasicSample/BasicSample/Items/Basic/DetectFacesItem.swift @@ -1,6 +1,6 @@ // // DetectFacesItem.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 25.08.22. // Copyright © 2022 Regula. All rights reserved. @@ -183,7 +183,6 @@ class DetectFacesViewController: UIViewController, UINavigationControllerDelegat request = DetectFacesRequest.cropAllFacesRequest(for: image) case .customScenario1: let outputImageParams = OutputImageParams() - outputImageParams.backgroundColor = .lightGray outputImageParams.crop = .init(type: .ratio4x5) let config = DetectFacesConfiguration() config.onlyCentralFace = true @@ -191,7 +190,6 @@ class DetectFacesViewController: UIViewController, UINavigationControllerDelegat request = DetectFacesRequest(image: image, configuration: config) case .customScenario2: let outputImageParams = OutputImageParams() - outputImageParams.backgroundColor = .black let preferredSize = CGSize(width: 500, height: 600) outputImageParams.crop = .init(type: .ratio2x3, size: preferredSize, padColor: .black, returnOriginalRect: true) let config = DetectFacesConfiguration() @@ -240,7 +238,7 @@ class DetectFacesViewController: UIViewController, UINavigationControllerDelegat } @objc private func didPressPickPhoto( _ sender: Any) { - imagePicker.presentDefaultActions(from: galleryView) + imagePicker.presentPickerActions(from: galleryView) } private func updateScenarioSelection() { @@ -289,7 +287,7 @@ class DetectFacesViewController: UIViewController, UINavigationControllerDelegat detection: detection, color: .green, lineWidth: lineWidth, - pointSize: pointSize) ?? UIImage() + pointSize: pointSize) ?? image } model.detailImage?(imageWithDetectionMarks) } @@ -347,10 +345,11 @@ class DetectFacesViewController: UIViewController, UINavigationControllerDelegat } extension DetectFacesViewController: ImagePickerDelegate { - func didPickImage(delegate: ImagePicker, image: UIImage) { + func didPickImage(delegate: ImagePicker, image: UIImage, sourceType: UIImagePickerController.SourceType) { let model = DetectionModel(image: image) models.append(model) galleryView.images = models.map { $0.image } + galleryView.selectedIndex = models.count - 1 } } diff --git a/Catalog/Items/Basic/FaceCaptureDefaultItem.swift b/BasicSample/BasicSample/Items/Basic/FaceCaptureDefaultItem.swift similarity index 91% rename from Catalog/Items/Basic/FaceCaptureDefaultItem.swift rename to BasicSample/BasicSample/Items/Basic/FaceCaptureDefaultItem.swift index e3afea0..25d88b7 100644 --- a/Catalog/Items/Basic/FaceCaptureDefaultItem.swift +++ b/BasicSample/BasicSample/Items/Basic/FaceCaptureDefaultItem.swift @@ -1,6 +1,6 @@ // // FaceCaptureDefaultItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/20/21. // Copyright © 2021 Regula. All rights reserved. @@ -13,7 +13,7 @@ final class FaceCaptureDefaultItem: CatalogItem { super.init() title = "FaceCapture" - itemDescription = "Automaticlly captures face photo." + itemDescription = "Automaticlly captures face photo" category = .basic } diff --git a/Catalog/Items/Basic/ImageQualityItem.swift b/BasicSample/BasicSample/Items/Basic/ImageQualityItem.swift similarity index 98% rename from Catalog/Items/Basic/ImageQualityItem.swift rename to BasicSample/BasicSample/Items/Basic/ImageQualityItem.swift index 328ea50..e1490f6 100644 --- a/Catalog/Items/Basic/ImageQualityItem.swift +++ b/BasicSample/BasicSample/Items/Basic/ImageQualityItem.swift @@ -1,6 +1,6 @@ // // ImageQualityItem.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 26.08.22. // Copyright © 2022 Regula. All rights reserved. @@ -202,8 +202,8 @@ class ImageQualityViewController: UIViewController { ImageQualityGroup.Image.imageHeight(withRange: [600, 800]), ImageQualityGroup.Image.imageWidth(withRange: [800, 1000]), ImageQualityGroup.FaceImage.blurLevel(), - ImageQualityGroup.HeadOcclusion.headphones().withCustomValue(0), - ImageQualityGroup.HeadOcclusion.headCovering().withCustomValue(0), + ImageQualityGroup.HeadOcclusion.headphones().withCustomRange([0.0, 0.1]), + ImageQualityGroup.HeadOcclusion.headCovering().withCustomRange([0.0, 0.1]), ImageQualityGroup.Background.backgroundColorMatch(with: .white) ] let outputImageParams = OutputImageParams() @@ -271,7 +271,7 @@ class ImageQualityViewController: UIViewController { } @objc private func didPressPickPhoto(_ sender: Any) { - imagePicker.presentDefaultActions(from: galleryView) + imagePicker.presentPickerActions(from: galleryView) } private func updateComplianceStatusLabel() { @@ -326,7 +326,7 @@ class ImageQualityViewController: UIViewController { detection: detection, color: .green, lineWidth: lineWidth, - pointSize: pointSize) ?? UIImage() + pointSize: pointSize) ?? image } model.detailImage?(imageWithDetectionMarks) } @@ -384,10 +384,11 @@ class ImageQualityViewController: UIViewController { } extension ImageQualityViewController: ImagePickerDelegate { - func didPickImage(delegate: ImagePicker, image: UIImage) { + func didPickImage(delegate: ImagePicker, image: UIImage, sourceType: UIImagePickerController.SourceType) { let model = QualityDetectionModel(image: image) models.append(model) galleryView.images = models.map { $0.image } + galleryView.selectedIndex = models.count - 1 } } diff --git a/Catalog/Items/Basic/LivenessDefaultItem.swift b/BasicSample/BasicSample/Items/Basic/LivenessDefaultItem.swift similarity index 97% rename from Catalog/Items/Basic/LivenessDefaultItem.swift rename to BasicSample/BasicSample/Items/Basic/LivenessDefaultItem.swift index c3b9498..f9ed84e 100644 --- a/Catalog/Items/Basic/LivenessDefaultItem.swift +++ b/BasicSample/BasicSample/Items/Basic/LivenessDefaultItem.swift @@ -1,6 +1,6 @@ // // LivenessDefaultItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/20/21. // Copyright © 2021 Regula. All rights reserved. @@ -13,7 +13,7 @@ final class LivenessDefaultItem: CatalogItem { super.init() title = "Liveness" - itemDescription = "Detects if a person on camera is alive." + itemDescription = "Detects if a person on camera is alive" category = .basic } diff --git a/BasicSample/BasicSample/Items/Basic/MatchFacesRequestItem.swift b/BasicSample/BasicSample/Items/Basic/MatchFacesRequestItem.swift new file mode 100644 index 0000000..8da51a9 --- /dev/null +++ b/BasicSample/BasicSample/Items/Basic/MatchFacesRequestItem.swift @@ -0,0 +1,402 @@ +// +// MatchFacesRequestItem.swift +// BasicSample +// +// Created by Pavel Kondrashkov on 5/20/21. +// Copyright © 2021 Regula. All rights reserved. +// + +import FaceSDK +import UIKit + +final class MatchFacesRequestItem: CatalogItem { + override init() { + super.init() + + title = "MatchFacesRequest" + itemDescription = "Checks the likelihood that two faces belong to the same person" + category = .basic + } + + override func onItemSelected(from viewController: UIViewController) { + let example = MatchFacesRequestViewController() + viewController.show(example, sender: nil) + } +} + +final class MatchFacesRequestViewController: UIViewController { + private enum Position { + case first + case second + } + + private lazy var firstImageView: UIImageView = { + let view = UIImageView() + let tapGestureFirst = UITapGestureRecognizer(target: self, action: #selector(self.handleFirstImageTap)) + view.addGestureRecognizer(tapGestureFirst) + view.contentMode = .scaleAspectFit + view.isUserInteractionEnabled = true + view.backgroundColor = .lightGray + return view + }() + private lazy var firstImageDetectAllSwitch = UISwitch() + private lazy var secondImageView: UIImageView = { + let view = UIImageView() + let tapGestureFirst = UITapGestureRecognizer(target: self, action: #selector(self.handleSecondImageTap)) + view.addGestureRecognizer(tapGestureFirst) + view.contentMode = .scaleAspectFit + view.isUserInteractionEnabled = true + view.backgroundColor = .lightGray + return view + }() + private lazy var secondImageDetectAllSwitch = UISwitch() + + private var selectedFirstImageType: ImageType? { + didSet { updateImageTypeTitle(position: .first) } + } + private var selectedSecondImageType: ImageType? { + didSet { updateImageTypeTitle(position: .second) } + } + + private lazy var matchFacesButton: UIButton = { + let button = UIButton(type: .system) + button.addTarget(self, action: #selector(handleMatchButtonPress), for: .touchUpInside) + button.setTitle("MATCH FACES", for: .normal) + button.setTitleColor(.white, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 15) + button.backgroundColor = .windsor + button.contentEdgeInsets = UIEdgeInsets(top: 16, left: 0, bottom: 16, right: 0) + button.layer.cornerRadius = 5 + button.clipsToBounds = false + return button + }() + + private lazy var clearButton: UIButton = { + let button = UIButton(type: .system) + button.addTarget(self, action: #selector(handleClearButtonPress), for: .touchUpInside) + button.setTitle("CLEAR", for: .normal) + button.setTitleColor(.white, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 15) + button.backgroundColor = .windsor + button.contentEdgeInsets = UIEdgeInsets(top: 16, left: 0, bottom: 16, right: 0) + button.layer.cornerRadius = 5 + button.clipsToBounds = false + return button + }() + + private lazy var firstImageTypeButton: UIButton = { + let button = UIButton(type: .system) + button.translatesAutoresizingMaskIntoConstraints = false + button.addTarget(self, action: #selector(didPressImageTypeButton), for: .touchUpInside) + button.tag = 0 + button.setTitle(imageTypeLabelDefaultText, for: .normal) + return button + }() + + private lazy var secondImageTypeButton: UIButton = { + let button = UIButton(type: .system) + button.translatesAutoresizingMaskIntoConstraints = false + button.addTarget(self, action: #selector(didPressImageTypeButton), for: .touchUpInside) + button.tag = 1 + button.setTitle(imageTypeLabelDefaultText, for: .normal) + return button + }() + + private lazy var similarityLabel: UILabel = { + let label = UILabel() + label.text = similarityLabelDefaultText + label.font = .preferredFont(forTextStyle: .title3) + label.numberOfLines = 0 + return label + }() + + private lazy var detectionsButton: UIButton = { + let button = UIButton(type: .system) + button.addTarget(self, action: #selector(didPressDetectionsButton), for: .touchUpInside) + button.isHidden = true + button.titleLabel?.font = .systemFont(ofSize: 15) + return button + }() + + private var lastDetections: [MatchFacesDetection] = [] { + didSet { updateDetectionAppearance() } + } + + private lazy var firstImagePicker: ImagePicker = ImagePicker(presenter: self, delegate: self) + private lazy var secondImagePicker: ImagePicker = ImagePicker(presenter: self, delegate: self) + + private let similarityLabelDefaultText = "Similarity: null." + private let imageTypeLabelDefaultText = "ImageType" + + override func loadView() { + view = UIView() + if #available(iOS 13.0, *) { + view.backgroundColor = .systemBackground + } else { + view.backgroundColor = .white + } + + let root = UIStackView() + root.spacing = 15 + root.axis = .vertical + + view.addSubview(root) + root.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + root.topAnchor.constraint(equalTo: view.safeTopAnchor, constant: 20), + root.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40), + root.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40), + root.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -40), + ]) + + let imagesContainer = UIStackView() + imagesContainer.axis = .vertical + imagesContainer.distribution = .fillEqually + imagesContainer.spacing = 45 + imagesContainer.addArrangedSubview(firstImageView) + + func makeOptionLabel(text: String) -> UILabel { + let label = UILabel() + label.text = text + label.font = .preferredFont(forTextStyle: .body) + return label + } + + func makeOptionsRow(text: String, switchView: UISwitch) -> UIView { + let row = UIStackView() + row.spacing = 5 + row.axis = .horizontal + row.addArrangedSubview(makeOptionLabel(text: text)) + row.addArrangedSubview(switchView) + return row + } + + let firstDetectAllRow = makeOptionsRow(text: "DetectAll", switchView: firstImageDetectAllSwitch) + firstImageView.addSubview(firstDetectAllRow) + firstDetectAllRow.translatesAutoresizingMaskIntoConstraints = false + + firstImageTypeButton.translatesAutoresizingMaskIntoConstraints = false + firstImageView.addSubview(firstImageTypeButton) + + + NSLayoutConstraint.activate([ + firstImageTypeButton.leadingAnchor.constraint(equalTo: firstImageView.leadingAnchor, constant: 5.0), + firstImageTypeButton.bottomAnchor.constraint(equalTo: firstImageView.bottomAnchor), + + firstDetectAllRow.trailingAnchor.constraint(equalTo: firstImageView.trailingAnchor), + firstDetectAllRow.bottomAnchor.constraint(equalTo: firstImageView.bottomAnchor) + ]) + + imagesContainer.addArrangedSubview(secondImageView) + let secondDetectAllRow = makeOptionsRow(text: "DetectAll", switchView: secondImageDetectAllSwitch) + secondImageView.addSubview(secondDetectAllRow) + secondDetectAllRow.translatesAutoresizingMaskIntoConstraints = false + + secondImageTypeButton.translatesAutoresizingMaskIntoConstraints = false + secondImageView.addSubview(secondImageTypeButton) + + NSLayoutConstraint.activate([ + secondImageTypeButton.leadingAnchor.constraint(equalTo: secondImageView.leadingAnchor, constant: 5.0), + secondImageTypeButton.bottomAnchor.constraint(equalTo: secondImageView.bottomAnchor), + + secondDetectAllRow.trailingAnchor.constraint(equalTo: secondImageView.trailingAnchor), + secondDetectAllRow.bottomAnchor.constraint(equalTo: secondImageView.bottomAnchor) + ]) + + let resultsStackView = UIStackView() + resultsStackView.axis = .horizontal + resultsStackView.spacing = 15 + resultsStackView.distribution = .fillEqually + resultsStackView.addArrangedSubview(similarityLabel) + resultsStackView.addArrangedSubview(detectionsButton) + + root.addArrangedSubview(imagesContainer) + root.addArrangedSubview(matchFacesButton) + root.addArrangedSubview(clearButton) + root.addArrangedSubview(resultsStackView) + } + + override func viewDidLoad() { + super.viewDidLoad() + if #available(iOS 11.0, *) { + navigationItem.largeTitleDisplayMode = .never + } + } + + @objc private func handleFirstImageTap() { + similarityLabel.text = similarityLabelDefaultText + firstImagePicker.presentPickerActions(from: firstImageView) + } + + @objc private func handleSecondImageTap() { + similarityLabel.text = similarityLabelDefaultText + secondImagePicker.presentPickerActions(from: secondImageView) + } + + @objc private func didPressImageTypeButton(_ sender: UIButton) { + let position = sender.tag == 0 ? Position.first : Position.second + showImageTypePicker(for: position) + } + + @objc private func didPressDetectionsButton(_ sender: Any) { + let detections = lastDetections + .flatMap({ $0.faces.compactMap { $0.crop } }) + if detections.count > 0 { + let controller = ImagesPreviewViewController(images: detections) + navigationController?.pushViewController(controller, animated: true) + } + } + + private func detectAllOptionValueFor(position: Position) -> Bool { + switch position { + case .first: return firstImageDetectAllSwitch.isOn + case .second: return secondImageDetectAllSwitch.isOn + } + } + + @objc private func handleMatchButtonPress() { + guard let firstPickedImage = firstImageView.image, let secondPickedImage = secondImageView.image else { + let alert = UIAlertController(title: "Having both images is required", message: nil, preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + present(alert, animated: true, completion: nil) + return + } + + let firstImage = MatchFacesImage(image: firstPickedImage, + imageType: selectedFirstImageType ?? .printed, + detectAll: detectAllOptionValueFor(position: .first)) + let secondImage = MatchFacesImage(image: secondPickedImage, + imageType: selectedSecondImageType ?? .printed, + detectAll: detectAllOptionValueFor(position: .second)) + + let request = MatchFacesRequest(images: [firstImage, secondImage]) + + let outputImageParams = OutputImageParams() + outputImageParams.crop = .init(type: .ratio3x4) + outputImageParams.backgroundColor = .white + request.outputImageParams = outputImageParams + + similarityLabel.text = "Processing..." + matchFacesButton.isEnabled = false + clearButton.isEnabled = false + + FaceSDK.service.matchFaces(request, completion: { [weak self](response: MatchFacesResponse) in + self?.matchFacesButton.isEnabled = true + self?.clearButton.isEnabled = true + + self?.handleMatchFacesResponse(response: response) + }) + } + + @objc private func handleClearButtonPress(sender: UIButton) { + firstImageView.image = nil + selectedFirstImageType = nil + + secondImageView.image = nil + selectedSecondImageType = nil + + lastDetections = [] + similarityLabel.text = similarityLabelDefaultText + } + + private func handleMatchFacesResponse(response: MatchFacesResponse) { + if let error = response.error { + self.similarityLabel.text = "Error: \(error.localizedDescription)" + self.lastDetections = [] + return + } + + if let firstPair = response.results.first { + let similarityValue = firstPair.similarity?.doubleValue ?? 0.0 + let similarityRounded = (similarityValue * 100 * 100).rounded() / 100 + similarityLabel.text = "Similarity: \(similarityRounded)%" + } else { + similarityLabel.text = "Similarity: no matched pair found" + } + lastDetections = response.detections + } + + private func showImageTypePicker(for position: Position) { + func pick(type: ImageType, forPosition position: Position) { + switch position { + case .first: selectedFirstImageType = type + case .second: selectedSecondImageType = type + } + } + func isImageTypeSelected(type: ImageType, position: Position) -> Bool{ + switch position { + case .first: selectedFirstImageType == type + case .second: selectedSecondImageType == type + } + } + + let controller = UIAlertController(title: "Image Type", message: nil, preferredStyle: .actionSheet) + let types: [ImageType] = [.printed, .RFID, .live, .documentWithLive, .external, .ghostPortrait, .barcode] + + for type in types { + let actionPrinted = UIAlertAction(title: title(for: type), style: .default) { action in + print(type.rawValue) + pick(type: type, forPosition: position) + } + actionPrinted.setValue(isImageTypeSelected(type: type, position: position), forKey: "checked") + controller.addAction(actionPrinted) + } + controller.addAction(.init(title: "Cancel", style: .cancel, handler: nil)) + + present(controller, animated: true) + } + + private func title(for imageType: ImageType) -> String { + switch imageType { + case .printed: return "Printed" + case .RFID: return "RFID" + case .live: return "Live" + case .documentWithLive: return "Document with live" + case .external: return "External" + case .ghostPortrait: return "Ghost portrait" + case .barcode: return "Barcode" + @unknown default: return "" + } + } + + private func updateImageTypeTitle(position: Position) { + let imageType: ImageType? + var title: String = "ImageType" + let button: UIButton + + switch position { + case .first: + imageType = selectedFirstImageType + button = firstImageTypeButton + case .second: + imageType = selectedSecondImageType + button = secondImageTypeButton + } + + if let selectedFirstImageType = imageType { + title.append(": \(self.title(for: selectedFirstImageType))") + } + button.setTitle(title, for: .normal) + } + + private func updateDetectionAppearance() { + detectionsButton.isHidden = lastDetections.isEmpty + let faces = lastDetections.reduce(0) { $0 + $1.faces.count } + detectionsButton.setTitle("DETECTIONS (\(faces))", for: .normal) + } +} + +extension MatchFacesRequestViewController: ImagePickerDelegate { + func didPickImage(delegate: ImagePicker, image: UIImage, sourceType: UIImagePickerController.SourceType) { + + switch delegate { + case firstImagePicker: + firstImageView.image = image + selectedFirstImageType = sourceType == .camera ? .live : .printed + case secondImagePicker: + secondImageView.image = image + selectedSecondImageType = sourceType == .camera ? .live : .printed + default: break + } + } +} diff --git a/Catalog/Items/Features/FaceCaptureCameraPositionItem.swift b/BasicSample/BasicSample/Items/Features/FaceCaptureCameraPositionItem.swift similarity index 93% rename from Catalog/Items/Features/FaceCaptureCameraPositionItem.swift rename to BasicSample/BasicSample/Items/Features/FaceCaptureCameraPositionItem.swift index e3941a5..2b42176 100644 --- a/Catalog/Items/Features/FaceCaptureCameraPositionItem.swift +++ b/BasicSample/BasicSample/Items/Features/FaceCaptureCameraPositionItem.swift @@ -1,6 +1,6 @@ // // FaceCaptureCameraPositionItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/19/21. // Copyright © 2021 Regula. All rights reserved. @@ -13,12 +13,13 @@ final class FaceCaptureCameraPositionItem: CatalogItem { super.init() title = "Face Capture camera position" - itemDescription = "Changes default camera position to back." + itemDescription = "Changes default camera position to back" category = .feature } override func onItemSelected(from viewController: UIViewController) { let configuration = FaceCaptureConfiguration { + $0.isCameraSwitchButtonEnabled = true $0.cameraPosition = .back } FaceSDK.service.presentFaceCaptureViewController( diff --git a/BasicSample/BasicSample/Items/Features/FaceDeinitializationItem.swift b/BasicSample/BasicSample/Items/Features/FaceDeinitializationItem.swift new file mode 100644 index 0000000..b1e3a6a --- /dev/null +++ b/BasicSample/BasicSample/Items/Features/FaceDeinitializationItem.swift @@ -0,0 +1,30 @@ +// +// FaceDeinitializationItem.swift +// BasicSample +// +// Created by Serge Rylko on 4.07.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import Foundation +import FaceSDK + +final class FaceDeinitializationItem: CatalogItem { + + override init() { + super.init() + + title = "Deinitialization SDK" + itemDescription = "Deinitialization FaceSDK resources" + category = .feature + } + + override func onItemSelected(from viewController: UIViewController) { + + FaceSDK.service.deinitialize() + + if FaceSDK.service.isInitialized { + print("FaceSDK deinitialized") + } + } +} diff --git a/BasicSample/BasicSample/Items/Features/FaceInitializationItem.swift b/BasicSample/BasicSample/Items/Features/FaceInitializationItem.swift new file mode 100644 index 0000000..b4f206e --- /dev/null +++ b/BasicSample/BasicSample/Items/Features/FaceInitializationItem.swift @@ -0,0 +1,31 @@ +// +// FaceInitializationItem.swift +// BasicSample +// +// Created by Serge Rylko on 4.07.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import Foundation +import FaceSDK + +final class FaceInitializationItem: CatalogItem { + override init() { + super.init() + + title = "Initialization SDK" + itemDescription = "Initialization FaceSDK resources" + category = .feature + } + + override func onItemSelected(from viewController: UIViewController) { + + FaceSDK.service.initialize { success, error in + if success { + print("FaceSDK initialized") + } else if let error = error { + print("FaceSDK initialization failure: \(error.localizedDescription)") + } + } + } +} diff --git a/Catalog/Items/Features/LivenessAttemptsCountItem.swift b/BasicSample/BasicSample/Items/Features/LivenessAttemptsCountItem.swift similarity index 97% rename from Catalog/Items/Features/LivenessAttemptsCountItem.swift rename to BasicSample/BasicSample/Items/Features/LivenessAttemptsCountItem.swift index 1a7a1a8..1e85ce1 100644 --- a/Catalog/Items/Features/LivenessAttemptsCountItem.swift +++ b/BasicSample/BasicSample/Items/Features/LivenessAttemptsCountItem.swift @@ -1,6 +1,6 @@ // // LivenessAttemptsCountItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/31/21. // Copyright © 2021 Regula. All rights reserved. @@ -13,7 +13,7 @@ final class LivenessAttemptsCountItem: CatalogItem { super.init() title = "Limit Liveness attempts count" - itemDescription = "Liveness is limited to the number of retries." + itemDescription = "Liveness is limited to the number of retries" category = .feature } diff --git a/BasicSample/BasicSample/Items/Features/LivenessSessionTagItem.swift b/BasicSample/BasicSample/Items/Features/LivenessSessionTagItem.swift new file mode 100644 index 0000000..e0ef116 --- /dev/null +++ b/BasicSample/BasicSample/Items/Features/LivenessSessionTagItem.swift @@ -0,0 +1,37 @@ +// +// LivenessSessionTagItem.swift +// BasicSample +// +// Created by Serge Rylko on 4.07.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import Foundation +import FaceSDK + +final class LivenessSessionTagItem: CatalogItem { + override init() { + super.init() + + title = "Liveness Session Tag" + itemDescription = "Setup session tag for liveness" + category = .feature + } + + override func onItemSelected(from viewController: UIViewController) { + let configuration = LivenessConfiguration { + $0.tag = UUID().uuidString + } + + FaceSDK.service.startLiveness( + from: viewController, + animated: true, + configuration: configuration, + onLiveness: { [weak self, weak viewController] response in + guard let self = self, let viewController = viewController else { return } + self.showLivenessResult(response, from: viewController) + }, + completion: nil + ) + } +} diff --git a/Catalog/Items/Features/LivenessSkipOnboardingAndSuccessItem.swift b/BasicSample/BasicSample/Items/Features/LivenessSkipOnboardingAndSuccessItem.swift similarity index 97% rename from Catalog/Items/Features/LivenessSkipOnboardingAndSuccessItem.swift rename to BasicSample/BasicSample/Items/Features/LivenessSkipOnboardingAndSuccessItem.swift index 1cf057f..10cd11c 100644 --- a/Catalog/Items/Features/LivenessSkipOnboardingAndSuccessItem.swift +++ b/BasicSample/BasicSample/Items/Features/LivenessSkipOnboardingAndSuccessItem.swift @@ -1,6 +1,6 @@ // // LivenessSkipOnboardingAndSuccessItem.swift -// Catalog +// BasicSample // // Created by Dmitry Evglevsky on 25.01.23. // Copyright © 2023 Regula. All rights reserved. @@ -13,7 +13,7 @@ final class LivenessSkipOnboardingAndSuccessItem: CatalogItem { super.init() title = "Skip Onboarding & Success steps" - itemDescription = "Liveness will not show onboarding & success screens." + itemDescription = "Liveness will not show onboarding & success screens" category = .feature } diff --git a/Catalog/Items/Other/LocalizationHandlerItem.swift b/BasicSample/BasicSample/Items/Other/LocalizationHandlerItem.swift similarity index 92% rename from Catalog/Items/Other/LocalizationHandlerItem.swift rename to BasicSample/BasicSample/Items/Other/LocalizationHandlerItem.swift index 774cf00..22f42fd 100644 --- a/Catalog/Items/Other/LocalizationHandlerItem.swift +++ b/BasicSample/BasicSample/Items/Other/LocalizationHandlerItem.swift @@ -1,6 +1,6 @@ // // LocalizationHandlerItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/19/21. // Copyright © 2021 Regula. All rights reserved. @@ -13,7 +13,7 @@ final class LocalizationHandlerItem: CatalogItem { super.init() title = "Custom localization" - itemDescription = "Localization hook example." + itemDescription = "Localization hook example" category = .other } @@ -49,5 +49,9 @@ final class LocalizationHandlerItem: CatalogItem { completion: nil ) } + + deinit { + FaceSDK.service.localizationHandler = nil + } } diff --git a/Catalog/Items/Other/URLRequestInterceptorItem.swift b/BasicSample/BasicSample/Items/Other/URLRequestInterceptorItem.swift similarity index 94% rename from Catalog/Items/Other/URLRequestInterceptorItem.swift rename to BasicSample/BasicSample/Items/Other/URLRequestInterceptorItem.swift index 7d44456..b9049fc 100644 --- a/Catalog/Items/Other/URLRequestInterceptorItem.swift +++ b/BasicSample/BasicSample/Items/Other/URLRequestInterceptorItem.swift @@ -1,6 +1,6 @@ // // URLRequestInterceptorItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/25/21. // Copyright © 2021 Regula. All rights reserved. @@ -12,8 +12,8 @@ final class URLRequestInterceptorItem: CatalogItem { override init() { super.init() - title = "URLRequestInterceptingDelegate" - itemDescription = "Adds custom http fields to the outgoing requests." + title = "Network interceptor" + itemDescription = "Adds custom http fields to the outgoing requests" category = .other } diff --git a/BasicSample/BasicSample/Items/Other/VideoUploadingCompletionItem.swift b/BasicSample/BasicSample/Items/Other/VideoUploadingCompletionItem.swift new file mode 100644 index 0000000..e9b3f0f --- /dev/null +++ b/BasicSample/BasicSample/Items/Other/VideoUploadingCompletionItem.swift @@ -0,0 +1,43 @@ +// +// VideoUploadingCompletionItem.swift +// BasicSample +// +// Created by Serge Rylko on 9.07.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import Foundation + +import FaceSDK + +final class VideoUploadingCompletionItem: CatalogItem { + override init() { + super.init() + + title = "Video completion about uploading liveness video to service" + itemDescription = "Video completion" + category = .other + } + + override func onItemSelected(from viewController: UIViewController) { + let service = FaceSDK.service + service.videoUploadingDelegate = self + + service.startLiveness( + from: viewController, + animated: true, + onLiveness: { [weak self, weak service, weak viewController] response in + guard let self = self, let viewController = viewController else { return } + self.showLivenessResult(response, from: viewController) + service?.videoUploadingDelegate = nil + }, + completion: nil + ) + } +} + +extension VideoUploadingCompletionItem: VideoUploadingDelegate { + func videoUploading(forTransactionId transactionId: String, didFinishedWithSuccess success: Bool) { + print("transactionId: \(transactionId), success: \(success)") + } +} diff --git a/BasicSample/BasicSample/Items/ViewCustomization/CustomUILayerItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/CustomUILayerItem.swift new file mode 100644 index 0000000..1be2170 --- /dev/null +++ b/BasicSample/BasicSample/Items/ViewCustomization/CustomUILayerItem.swift @@ -0,0 +1,81 @@ +// +// CustomUILayerItem.swift +// BasicSample +// +// Created by Serge Rylko on 23.09.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import FaceSDK + +final class CustomUILayerItem: CatalogItem { + + override init() { + super.init() + + title = "Custom UI layer" + itemDescription = "Custom labels, images and buttons to the camera screen" + category = .viewCustomization + } + + override func onItemSelected(from viewController: UIViewController) { + let configuration = LivenessConfiguration { + $0.isCloseButtonEnabled = false + } + FaceSDK.service.customization.customUILayerJSON = customLayer() + FaceSDK.service.customization.actionDelegate = self + FaceSDK.service.livenessDelegate = self + + FaceSDK.service.startLiveness( + from: viewController, + animated: true, + configuration: configuration, + onLiveness: { [weak self, weak viewController] response in + guard let self = self, let viewController = viewController else { return } + self.showLivenessResult(response, from: viewController) + FaceSDK.service.customization.customUILayerJSON = nil + }, + completion: nil + ) + } + + private func customLayer() -> [String: Any]? { + guard + let jsonURL = Bundle.main.url(forResource: "layer.json", withExtension: nil), + let data = try? Data(contentsOf: jsonURL), + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { return nil } + return json + } + + private func updateCustomLayer() { + guard let layerJSON = customLayer() else { return } + FaceSDK.service.customization.customUILayerJSON = layerJSON + } + + @objc private func animateCustomView() { + guard let customLayerJSON = customLayer() else { return } + let updatedJSON = JSONHelper.updateJSON(json: customLayerJSON, + objectKey: "image", + newField: "alpha", + newFieldValue: 0) + + UIView.animateKeyframes(withDuration: 1, delay: 0, options: [.autoreverse, .repeat]) { + FaceSDK.service.customization.customUILayerJSON = updatedJSON + } + } +} + +extension CustomUILayerItem: FaceSDK.CustomizationActionDelegate { + func onFaceCustomButtonTapped(withTag tag: Int) { + guard tag == FaceSDK.CustomButtonTag.close.rawValue else { return } + print("Custom close button tapped") + } +} + +extension CustomUILayerItem: LivenessDelegate { + func processStatusChanged(_ status: LivenessProcessStatus, result: LivenessResponse?) { + if status == .newSession { + animateCustomView() + } + } +} diff --git a/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideCloseConfigurationItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideCloseConfigurationItem.swift new file mode 100644 index 0000000..0bc8007 --- /dev/null +++ b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideCloseConfigurationItem.swift @@ -0,0 +1,37 @@ +// +// FaceCaptureHideCloseConfigurationItem.swift +// BasicSample +// +// Created by Serge Rylko on 13.09.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import FaceSDK + +final class FaceCaptureCloseTorchConfigurationItem: CatalogItem { + override init() { + super.init() + + title = "Hide close button" + itemDescription = "Hide close button using default UI" + category = .viewCustomization + } + + override func onItemSelected(from viewController: UIViewController) { + let configuration = FaceCaptureConfiguration { + $0.isCloseButtonEnabled = false + } + FaceSDK.service.presentFaceCaptureViewController( + from: viewController, + animated: true, + configuration: configuration, + onCapture: { [weak self, weak viewController] response in + guard let self = self, let viewController = viewController else { return } + self.showFaceCaptureResult(response, from: viewController) + }, + completion: nil + ) + } +} + + diff --git a/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideNotificationItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideNotificationItem.swift new file mode 100644 index 0000000..4867e68 --- /dev/null +++ b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideNotificationItem.swift @@ -0,0 +1,53 @@ +// +// LivenessHideNotificationItem.swift +// BasicSample +// +// Created by Serge Rylko on 13.09.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import FaceSDK + +final class FaceCaptureHideNotificationItem: CatalogItem { + + private class CustomCaptureContentView: FaceCaptureContentView { + override init(frame: CGRect) { + super.init(frame: frame) + + hintView.setBackgroundColor(.clear, for: .rear) + hintView.setBackgroundColor(.clear, for: .front) + hintView.setTextColor(.clear, for: .rear) + hintView.setTextColor(.clear, for: .front) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + } + + override init() { + super.init() + + title = "Hide notification text view" + itemDescription = "Hide notification text view using default UI" + category = .viewCustomization + } + + override func onItemSelected(from viewController: UIViewController) { + let configuration = FaceCaptureConfiguration { + $0.isCameraSwitchButtonEnabled = true + $0.registerClass(CustomCaptureContentView.self, forBaseClass: FaceCaptureContentView.self) + } + FaceSDK.service.presentFaceCaptureViewController( + from: viewController, + animated: true, + configuration: configuration, + onCapture: { [weak self, weak viewController] response in + guard let self = self, let viewController = viewController else { return } + self.showFaceCaptureResult(response, from: viewController) + }, + completion: nil + ) + } +} + diff --git a/Catalog/Items/Features/FaceCaptureHideTorchConfigurationItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideTorchConfigurationItem.swift similarity index 77% rename from Catalog/Items/Features/FaceCaptureHideTorchConfigurationItem.swift rename to BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideTorchConfigurationItem.swift index 51da71a..ef1b6fd 100644 --- a/Catalog/Items/Features/FaceCaptureHideTorchConfigurationItem.swift +++ b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureHideTorchConfigurationItem.swift @@ -1,6 +1,6 @@ // // FaceCaptureHideTorchConfigurationItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 7/5/21. // Copyright © 2021 Regula. All rights reserved. @@ -12,15 +12,13 @@ final class FaceCaptureHideTorchConfigurationItem: CatalogItem { override init() { super.init() - title = "FaceCapture CameraToolbarView hide torch button" - itemDescription = "FaceCaptureConfiguration usage example." - category = .feature + title = "Hide flash button" + itemDescription = "Hide flash button using default UI" + category = .viewCustomization } override func onItemSelected(from viewController: UIViewController) { let configuration = FaceCaptureConfiguration { - $0.cameraPosition = .back - $0.isCameraSwitchButtonEnabled = true $0.isTorchButtonEnabled = false } FaceSDK.service.presentFaceCaptureViewController( diff --git a/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureUIConfigurationItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureUIConfigurationItem.swift new file mode 100644 index 0000000..af43916 --- /dev/null +++ b/BasicSample/BasicSample/Items/ViewCustomization/FaceCaptureUIConfigurationItem.swift @@ -0,0 +1,84 @@ +// +// FaceCaptureUIConfiguration.swift +// BasicSample +// +// Created by Dmitry Evglevsky on 29.06.23. +// Copyright © 2023 Regula. All rights reserved. +// + +import FaceSDK + +final class FaceCaptureUIConfigurationItem: CatalogItem { + + private enum Colors { + static let title = UIColor(hex: "#469597") + static let message = UIColor(hex: "#5BA199") + static let background = UIColor(hex: "#E5E3E4") + static let image = UIColor(hex: "#DDBEAA") + static let lightGray = UIColor(hex: "#BBC6C8") + static let text = UIColor(hex: "#663399") + static let button = UIColor(hex: "#E5E3E4") + } + + private enum Images { + static var close: UIImage { UIImage(named: "close")! } + static var swap: UIImage { UIImage(named: "swap_camera")! } + static var torch: UIImage { UIImage(named: "flash")! } + } + + private enum Fonts { +// static let title = UIFont(name: "Roboto-Italic", size: 35)! +// static let subtitle = UIFont(name: "Roboto-Italic", size: 30)! + static let message = UIFont(name: "Roboto-Black", size: 25)! +// static let button = UIFont(name: "Roboto-Black", size: 40)! + } + + override init() { + super.init() + + title = "Face Capture Configuration" + itemDescription = "Interface customization" + category = .viewCustomization + } + + override func onItemSelected(from viewController: UIViewController) { + + let interfaceConfiguration = UIConfiguration(builderBlock: { + $0.setColor(Colors.title, forItem: CustomizationColor.CameraScreenFrontHintLabelText) + $0.setColor(Colors.background, forItem: CustomizationColor.CameraScreenFrontHintLabelBackground) + + $0.setColor(Colors.title, forItem: .CameraScreenBackHintLabelText) + $0.setColor(Colors.background, forItem: .CameraScreenBackHintLabelBackground) + + $0.setColor(Colors.title, forItem: .CameraScreenLightToolbarTint) + $0.setColor(Colors.lightGray, forItem: .CameraScreenDarkToolbarTint) + + $0.setColor(Colors.lightGray, forItem: .CameraScreenStrokeActive) + $0.setColor(Colors.image, forItem: .CameraScreenStrokeNormal) + + $0.setImage(Images.close, forItem: .CameraScreenCloseButton) + $0.setImage(Images.swap, forItem: .CameraScreenSwitchButton) + $0.setImage(Images.torch, forItem: .CameraScreenLightOnButton) + $0.setImage(Images.torch, forItem: .CameraScreenLightOffButton) + + $0.setFont(Fonts.message, forItem: .CameraScreenHintLabel) + $0.setFont(Fonts.message, forItem: .ProcessingScreenLabel) + }) + FaceSDK.service.customization.configuration = interfaceConfiguration + + let faceCaptureConfig = FaceCaptureConfiguration { + $0.isCameraSwitchButtonEnabled = true + } + FaceSDK.service.presentFaceCaptureViewController( + from: viewController, + animated: true, + configuration: faceCaptureConfig, + onCapture: { [weak self, weak viewController] response in + FaceSDK.service.customization.configuration = nil + guard let self = self, let viewController = viewController else { return } + self.showFaceCaptureResult(response, from: viewController) + }, + completion: nil) + } +} + diff --git a/Catalog/Items/ViewCustomization/LivenessHintPositionItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/LivenessHintPositionItem.swift similarity index 92% rename from Catalog/Items/ViewCustomization/LivenessHintPositionItem.swift rename to BasicSample/BasicSample/Items/ViewCustomization/LivenessHintPositionItem.swift index 078ad99..e946983 100644 --- a/Catalog/Items/ViewCustomization/LivenessHintPositionItem.swift +++ b/BasicSample/BasicSample/Items/ViewCustomization/LivenessHintPositionItem.swift @@ -1,6 +1,6 @@ // // LivenessHintPositionItem.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/28/21. // Copyright © 2021 Regula. All rights reserved. @@ -30,8 +30,8 @@ final class LivenessHintPositionItem: CatalogItem { override init() { super.init() - title = "Liveness HintView position" - itemDescription = "Overriden ContenView layout. Changed HintView position." + title = "Notification text view position" + itemDescription = "Change notification view position using default UI" category = .viewCustomization } diff --git a/BasicSample/BasicSample/Items/ViewCustomization/LivenessNotificationItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/LivenessNotificationItem.swift new file mode 100644 index 0000000..5a96242 --- /dev/null +++ b/BasicSample/BasicSample/Items/ViewCustomization/LivenessNotificationItem.swift @@ -0,0 +1,157 @@ +// +// LivenessNotificationItem.swift +// BasicSample +// +// Created by Serge Rylko on 4.07.24. +// Copyright © 2024 Regula. All rights reserved. +// + +import Foundation +import FaceSDK + +final class LivenessNotificationItem: CatalogItem { + override init() { + super.init() + + title = "Liveness Notification" + itemDescription = "Get liveness processing status" + category = .viewCustomization + } + + override func onItemSelected(from viewController: UIViewController) { + FaceSDK.service.livenessDelegate = self + FaceSDK.service.startLiveness( + from: viewController, + animated: true, + onLiveness: { [weak self, weak viewController] response in + guard let self = self, let viewController = viewController else { return } + self.showLivenessResult(response, from: viewController) + FaceSDK.service.livenessDelegate = nil + }, + completion: nil + ) + } + + private func notification() -> [String: Any]? { + guard + let jsonURL = Bundle.main.url(forResource: "notification.json", withExtension: nil), + let data = try? Data(contentsOf: jsonURL), + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { return nil } + return json + } + + private func updateStatus(name: String) { + guard let notificationJSON = notification() else { return } + let updatedJSON = JSONHelper.updateJSON(json: notificationJSON, targetKey: "text", newValue: name) + FaceSDK.service.customization.customUILayerJSON = updatedJSON + } + + deinit { + FaceSDK.service.customization.customUILayerJSON = nil + } +} + +extension LivenessNotificationItem: LivenessDelegate { + func processStatusChanged(_ status: LivenessProcessStatus, result: LivenessResponse?) { + updateStatus(name: status.name) + } +} + +extension LivenessProcessStatus { + fileprivate var name: String { + switch self { + case .start: return "START" + case .preparing: return "PREPARING" + case .newSession: return "START" + case .progress: return "PROGRESS" + case .nextStage: return "NEXT_STAGE" + case .sectorChanged: return "SECTOR_CHANGED" + case .processing: return "PROCESSING" + case .lowBrightness: return "LOW_BRIGHTNESS" + case .fitFace: return "FIT_FACE" + case .moveAway: return "MOVE_AWAY" + case .moveCloser: return "MOVE_CLOSER" + case .turnHead: return "TURN_HEAD" + case .failed: return "FAILED" + case .retry: return "RETRY" + case .success: return "SUCCESS" + @unknown default: return "UNKNOWN" + } + } +} + +final class JSONHelper { + static func updateJSON(json: [String: Any], targetKey: String, newValue: Any) -> [String: Any] { + var jsonResult = [String: Any]() + json.forEach { (key, value) in + if key == targetKey { + jsonResult[key] = newValue + } else { + if let value = value as? [String: Any] { + jsonResult[key] = updateJSON(json: value, targetKey: targetKey, newValue: newValue) + } else if let value = value as? [Any] { + jsonResult[key] = updateJSONArray(array: value, targetKey: targetKey, newValue: newValue) + } else { + jsonResult[key] = value + } + } + } + return jsonResult + } + + static func updateJSONArray(array: [Any], targetKey: String, newValue: Any) -> [Any] { + var resultArray = [Any]() + + array.forEach { value in + if let value = value as? [String: Any] { + let newValue = updateJSON(json: value, targetKey: targetKey, newValue: newValue) + resultArray.append(newValue) + } + } + return resultArray + } + static func updateJSON(json: [String: Any], + objectKey: String, + newField: String, + newFieldValue: Any) -> [String: Any] { + var jsonResult = [String: Any]() + json.forEach { (key, value) in + if key == objectKey { + if var value = value as? [String: Any] { + value[newField] = newFieldValue + jsonResult[key] = value + } + } else { + if let value = value as? [String: Any] { + jsonResult[key] = updateJSON(json: value, + objectKey: objectKey, + newField: newField, + newFieldValue: newFieldValue) + } else if let value = value as? [Any] { + jsonResult[key] = updateJSONArray(array: value, + objectKey: objectKey, + newField: newField, + newFieldValue: newFieldValue) + } else { + jsonResult[key] = value + } + } + } + return jsonResult + } + + static func updateJSONArray(array: [Any], objectKey: String, newField: String, newFieldValue: Any) -> [Any] { + var resultArray = [Any]() + + array.forEach { value in + if let value = value as? [String: Any] { + let newValue = updateJSON(json: value, + objectKey: objectKey, + newField: newField, + newFieldValue: newFieldValue) + resultArray.append(newValue) + } + } + return resultArray + } +} diff --git a/BasicSample/BasicSample/Items/ViewCustomization/LivenessUIConfigurationItem.swift b/BasicSample/BasicSample/Items/ViewCustomization/LivenessUIConfigurationItem.swift new file mode 100644 index 0000000..7b718c8 --- /dev/null +++ b/BasicSample/BasicSample/Items/ViewCustomization/LivenessUIConfigurationItem.swift @@ -0,0 +1,130 @@ +// +// LivenessUIConfiguration.swift +// BasicSample +// +// Created by Dmitry Evglevsky on 9.06.23. +// Copyright © 2023 Regula. All rights reserved. +// + +import FaceSDK + +final class LivenessUIConfigurationItem: CatalogItem { + + private enum Colors { + static let title = UIColor(hex: "#469597") + static let message = UIColor(hex: "#5BA199") + static let background = UIColor(hex: "#E5E3E4") + static let image = UIColor(hex: "#DDBEAA") + static let lightGray = UIColor(hex: "#BBC6C8") + static let text = UIColor(hex: "#663399") + static let button = UIColor(hex: "#E5E3E4") + } + + private enum Images { + static var close: UIImage { UIImage(named: "close")! } + static var success: UIImage { UIImage(named: "success")! } + } + + private enum Fonts { + static let title = UIFont(name: "Roboto-Italic", size: 35)! + static let subtitle = UIFont(name: "Roboto-Italic", size: 30)! + static let message = UIFont(name: "Roboto-Black", size: 25)! + static let button = UIFont(name: "Roboto-Black", size: 40)! + } + + override init() { + super.init() + + title = "Liveness Screen Configuration" + itemDescription = "Interface customization" + category = .viewCustomization + } + + override func onItemSelected(from viewController: UIViewController) { + let interfaceConfiguration = UIConfiguration { + // Onboarding + $0.setColor(Colors.background, forItem: .OnboardingScreenBackground) + $0.setColor(Colors.message, forItem: .OnboardingScreenStartButtonBackground) + $0.setColor(Colors.background, forItem: .OnboardingScreenStartButtonTitle) + $0.setColor(Colors.title, forItem: .OnboardingScreenTitleLabelText) + $0.setColor(Colors.lightGray, forItem: .OnboardingScreenSubtitleLabelText) + $0.setColor(Colors.message, forItem: .OnboardingScreenMessageLabelsText) + + $0.setImage(Images.close, forItem: .OnboardingScreenCloseButton) + if #available(iOS 16.0, *) { + $0.setImage(UIImage(systemName: "sun.max.trianglebadge.exclamationmark")!.withTintColor(.black, renderingMode: .alwaysOriginal), + forItem: .OnboardingScreenIllumination) + $0.setImage(UIImage(systemName: "eyeglasses")!.withTintColor(.black, renderingMode: .alwaysOriginal), + forItem: .OnboardingScreenAccessories) + $0.setImage(UIImage(systemName: "camera.viewfinder")!.withTintColor(.black, renderingMode: .alwaysOriginal), + forItem: .OnboardingScreenCameraLevel) + } else { + // Use your image assets. + } + $0.setFont(Fonts.title, forItem: .OnboardingScreenTitleLabel) + $0.setFont(Fonts.subtitle, forItem: .OnboardingScreenSubtitleLabel) + $0.setFont(Fonts.message, forItem: .OnboardingScreenMessageLabels) + $0.setFont(Fonts.button, forItem: .OnboardingScreenStartButton) + + // Camera + $0.setColor(Colors.title, forItem: .CameraScreenFrontHintLabelText) + $0.setColor(Colors.background, forItem: .CameraScreenFrontHintLabelBackground) + $0.setColor(Colors.title, forItem: .CameraScreenLightToolbarTint) + + $0.setColor(Colors.lightGray, forItem: .CameraScreenSectorActive) + $0.setColor(Colors.title, forItem: .CameraScreenSectorTarget) + $0.setColor(Colors.lightGray, forItem: .CameraScreenStrokeActive) + $0.setColor(Colors.image, forItem: .CameraScreenStrokeNormal) + + $0.setImage(Images.close, forItem: .CameraScreenCloseButton) + + $0.setFont(Fonts.message, forItem: .CameraScreenHintLabel) + + $0.setColor(Colors.lightGray, forItem: .ProcessingScreenBackground) + $0.setColor(Colors.title, forItem: .ProcessingScreenTitleLabel) + $0.setColor(Colors.message, forItem: .ProcessingScreenProgress) + $0.setFont(Fonts.subtitle, forItem: .ProcessingScreenLabel) + + // Retry screen + $0.setImage(Images.close, forItem: .RetryScreenCloseButton) + if #available(iOS 16.0, *) { + let retryEnvImage = UIImage(systemName: "sun.max.trianglebadge.exclamationmark")! + .withTintColor(.black, renderingMode: .alwaysOriginal) + $0.setImage(retryEnvImage, forItem: .RetryScreenHintEnvironment) + let retryHintImage = UIImage(systemName: "face.smiling")! + .withTintColor(.black, renderingMode: .alwaysOriginal) + $0.setImage(retryHintImage, forItem: .RetryScreenHintSubject) + } else { + // Use your image assets. + } + $0.setColor(Colors.background, forItem: .RetryScreenBackground) + $0.setColor(Colors.title, forItem: .RetryScreenTitleLabelText) + $0.setColor(Colors.lightGray, forItem: .RetryScreenSubtitleLabelText) + $0.setColor(Colors.message, forItem: .RetryScreenHintLabelsText) + $0.setColor(Colors.title, forItem: .RetryScreenRetryButtonBackground) + $0.setColor(Colors.image, forItem: .RetryScreenRetryButtonTitle) + + $0.setFont(Fonts.title, forItem: .RetryScreenTitleLabel) + $0.setFont(Fonts.subtitle, forItem: .RetryScreenSubtitleLabel) + $0.setFont(Fonts.message, forItem: .RetryScreenHintLabels) + $0.setFont(Fonts.button, forItem: .RetryScreenRetryButton) + + // Success screen + $0.setImage(Images.success, forItem: .SuccessScreenImage) + $0.setColor(Colors.lightGray, forItem: .SuccessScreenBackground) + } + + + FaceSDK.service.customization.configuration = interfaceConfiguration + + FaceSDK.service.startLiveness( + from: viewController, + animated: true, + onLiveness: { [weak self, weak viewController] response in + FaceSDK.service.customization.configuration = nil + guard let self = self, let viewController = viewController else { return } + self.showLivenessResult(response, from: viewController) + }, + completion: nil) + } +} diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png diff --git a/Catalog/Resources/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png diff --git a/Catalog/Resources/Assets.xcassets/Contents.json b/BasicSample/BasicSample/Resources/Assets.xcassets/Contents.json similarity index 100% rename from Catalog/Resources/Assets.xcassets/Contents.json rename to BasicSample/BasicSample/Resources/Assets.xcassets/Contents.json diff --git a/Catalog/Resources/Assets.xcassets/checkmark.imageset/Contents.json b/BasicSample/BasicSample/Resources/Assets.xcassets/checkmark.imageset/Contents.json similarity index 100% rename from Catalog/Resources/Assets.xcassets/checkmark.imageset/Contents.json rename to BasicSample/BasicSample/Resources/Assets.xcassets/checkmark.imageset/Contents.json diff --git a/Catalog/Resources/Assets.xcassets/checkmark.imageset/checkmark.pdf b/BasicSample/BasicSample/Resources/Assets.xcassets/checkmark.imageset/checkmark.pdf similarity index 100% rename from Catalog/Resources/Assets.xcassets/checkmark.imageset/checkmark.pdf rename to BasicSample/BasicSample/Resources/Assets.xcassets/checkmark.imageset/checkmark.pdf diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/Contents.json b/BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/Contents.json new file mode 100644 index 0000000..940a6d1 --- /dev/null +++ b/BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "close.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "close@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "close@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/close.png b/BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/close.png new file mode 100644 index 0000000000000000000000000000000000000000..c8cfa7962d4728a1980ed02988f3998bc3778c8d GIT binary patch literal 1954 zcmZ`)2~bm46#ZdQ2t^H>2r|SEg9s%FU{yjA!9=#Q84!b@Ccp6(LAboEy8XfGm>Z!8|tOftb7UK|dAgy=7^GcWk5=-4B9NY#=Br7lLMi zDr*da5(yCWoC!h1lMu9?SJ||O1PsR!hIh1|A7lq)9Y`Bx0BHgV1s(`x2C1U~3GzXi zFUfS2BcuUz7%=xs*pSwu4+rdE=rX|qFblhT6gL9FddIV35IVw&N(MH~YSaggYKn$5NBv#PK{e3L=S# zK#WI3EUY-5lOQCD$?&`f5y)ya9>&hQh~mgF!!Hm^5ABTnr zBL!@ph|NvFs^hXExQQY%46BKj#zLNmnEin%LAY2JC=jo<;2m)U{HI_dcJyapYRhL~ z;Ea~a`X8B?#ajT)AI3tCBy|SFK(-j+gwojYNP-a5LveH>kmhsy$nv4OWk|+nk;^PA zkyI{+D+uDTA`yz?BH1$4GH-RULf8&tnjIU$>SvN79j>`KZ?iuL)KiWZf{Yq{KJ|JK20^2D$XvPOET1=CRfsNbjK{=?4m0~gCL(grrG&dI5@Kc8h@A5t6>`=o7> z8lwI#WlA*voVBK3wfDyS7|?32BG>ta+IBO{$08@t{=u(eilEpToN8@&ZjCdoS~EEe z^X7csz~oK7+2htH<~d|nlZSW66UT#?q>lFAWE!4l{nw9AY0VPP^dCMUe=ySP)17*E zyR3>Yom}m_tKKumu+fm$l$jr48tZ1Lo7 zMR8tIWQ$Vjsc;^>B&KNb_if>QZx`UI zJYW~?e$e_>AH_{GK>sFN(Y5JST;3S|rAPJ}i%i*rAw7Kf9Qqk;>J3_MBVG4SQfBFD zeWUQQnM}6Fg)(Ua4-fHjhU*w~qtellzG|7RbYDe{>5*VwRo6~J(XqIiZ+d)J<<|;& zR5e~h{U^!`H$^l>y$F*3tAb0Dg#Pt)`uuPGZ~3}J?D#5duzhC%q4z!(%4MtnGv2%X KX|i3+?Ee6P&&*r^ literal 0 HcmV?d00001 diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/close@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/close.imageset/close@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3b39f31e9e6d89159dd506944feb3d9c24847279 GIT binary patch literal 2709 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 XCXL=!z8iH<@*Cr5>ughQ$o3 ziPuZA)W|k5mj9@}xBl<-eb2d`bKmE_f4_S<&vVYX&Q0@+`fSYn%m4te85-zbqDk|E zd6;ns{&yQJ)M<|EC|g4hQ&T{arXL0vK%4-Wrh#Y&0OAJ@qR}+K2z25f{Srw0Cx#9H zZlD4BpBQ_ZJQxPFdBFK0!3CgS5ew-4L7NwVf9VIb*6}|~XoAV#z%CE~SdJY`5RiSB z7XawG(N?xNTT>HNH>|HL(jDuHlEwS_AFu#*yedugMd6UbcwZmCKvld3f6AYM3}zbX_O5)vXC zq9}_E@Px|4U@)kh0#rdkhK7&{4E4hy@iKmar+x(aPaIuTpj!aiABV>J2_M8ox?+QH z8W6}qqJPGZI&o-^Uzz*@f3`(y5PIN&%FD_@{~Ha3NB|1)_`m!yeWNotKH7+S5saDqlE24Ix%n|d7xJoT?YKl>U zJ!JZvFtga_`;p@%Y-JbdFA#N^9{l0c-r^9^FQ?D%GC}Ekf7PR^;xAjXwk~`uh!^#@FDi5v4Mesyf+>vSOjoFH8SU=c`Aw*zPyS$bYJLP_)g!@ zJ>#jdCn)0-o43I(mnYaZNgqB97N0CwTw2Ol@$Q{pyVS0VUvvS3W4lbm)`*FX8z=Sm z7P`Jnl}vuz_De`k?9WkwUY+esUT_?wlUg*F8>Ea{x4elZOioU|xIxJ1%T>#;+PAis z^%mh|?7Isa<`dV#oK*4}n0AysE=FDbig%n2df$ANlC<6&IDgymg1G)CAdc{@sMZJaG%zAg0knnj3SEdp|T^?Lb)HvM6T(bKPk+Q0J!1Y>lhI?ZKx%Y__^a4tFdJ-?zLnJTkI=3PQ#gxr#||%G-u!5T1cn zVz--vKii8Z+xX_3QUWwuu=L9g*DY=G3oR1s)>a9#8RUm{H6O=Y2-L;4bwVN7D@^F2 zZ7ey5ajOC0Vk=urOf=;z@Eh*elz8SnD(U%Wd=WCY%@wiyw$cHXIiNM`bnTLnUmKm- zn7d(Os>2@76a~BbhKsCY?9>!>l$j`A@I>OATYJ1vYy6{Q>a*1IhIi+vyd_++GuyjV zN}@50EzhP)Zpy(k8Um&BG|N-J>D*;qR5i;nN;z6Elbf4+!}^gk!C~2<&d07SnWQHC zmT&CChrFb%r%#`TB~E`$>Cs#Qi;D6-jMQV=B*f(SL!i^q*_6;%!&jF8+M<%=h1R#3 zw2Taw2)v?RQ(p<|UpM2prM}E4E14&M(>xUgpHo7KZl2T(`_@=ZMisfH_ZNQCn;Qo&~Ht~MT#HI*h)IzM0Aa~M%Ym1vnWXl z%imc%%^|3c&kAqI)G|=;;?9DGtLkw&4`gXW<9X#FZ`^%ulupNOe_ku*W^6#^#BJrf z+DAEV+Mydc9{kzMA((AiN$ip zBy`}lv?w+#g1JplGptPVWmdZ+DfHfp;*y&yqVN8?PXOs(b;|rK+>4jOh#!x9SZKvi z!1Y(>^3;oc*!A7VV;vUoobc35N6RxC{tR}#w$r=2v}a#!baQKMouhdysIyMv>L!kp6+Cx`yXJL5(_~`^S&)PH=;+y5opO)s za9p>_N9h(fn7-U3MJg+{Ec2R2E3Px?4;kHRPl*S!)K)w-Yi?MRt73})K#<;Bf`|1U96wz?et6z*?L`QTBij>eQGX<7mf!k z@{>oG9ml!_W?ncBSK^t3%Vy+5o^pOmn)5T{)-Nl&Tvm2&Y+kzQ&Kdzvd&%nfwK^s* z@Pp_;1~-^K2dIYce4|L*bB63-+C|Mzl>W_sH;pWM88!*j^BZ?7si@eo4#SwX2S?wixY=tq*6;~Cl|K2T!q+T?AJC${iCPm zI^mX*B)<<$TT-=1%v_%eaebjWv2#KaWToTE49kJmVyG*&H<>BQu`AbYj`T=Lq(I3W z2FzSr$4+1DE&jNxbyIP##Jx>Bq9jpuD6ZgHT9aT_+H_9ykR-`|_o8K*&)8b=qhv%z z8t960FI6#8V;aSv%@r@tOTX?2p2x1%gSO7XU!+Gq?A{upzipP~L9Ji+c%tNA|M67? z$pLKgNGR?_(s?Uk`A=9lusx_Xo0W=3j+9vlwYDNZRemA#l-{DM^3M86>#1!x*gH6w zjWY{;XbF=yR}qefRB?Oof=0x|(yZ9ZQhvvwT$5y64-RC8X`knj zvBw#d8c!egeP)d~wwZ9dpM^V>_5nH*C$2u&e2*WfwZ9)wc}sWSbiBu@CG1_+&Wgmv z=^k(9f+AJU<1rjUd#uZt7>zzjI6~(AiRVtG6&(V>)s`EPm3YH_9AXy-fK!8{)t`AJrIux&449PH`7$&v*T+ zxvlwENeUPCy*>>TW~12OQ24HSztPfXPtEhwQuI7k&>tA%X)y!feY#RaJwdX*m?s5} z`?cIg?hdFOI0s6^ROIaB)ouCVxY;Lhli|zQuV>gY)Y>@hoUXmjwfH7` z0h#48jk2(lRn!e4QdoFmHA9Za`efwnmRlM#b`xenSk{*buXbkl>FT+@bh$QMsorK4 zqv}6%WSJy~4zh|=Q`)_!`m+=}&~$55et>=cUYtlQliD1A?=HvOc>f4*jo!r^i@gVY z;5Rx0sSk$@+}vBVH>~?IVhB0#Du#C!+)s-ykw~msHKLjP_>`Az0$Ii@o<|(X#141u z#_ltkJ^6Y(XPby`nYFUYbzsCCNg$eNQ_V?UbIhJ@xd@@~*Xmq2rLh+Q;6PG76Lr44 zVrO47R7ewBd8bp?MlCNdi?D5r#~TiDMv<0IM<@?3)h)L8V-UU%@H|@W649^1dgwZ9 z$64(X7sCHs91k`ubbO+UE^llU16Ezs1*&6T-Z6Arm%eFD=?0ZWUqBA z)buCIlkOViDkdV=7Q3w+Hv0r@N2DdY$Sj~=-qvQ&qcg93V$13nV9G8I5XzH_#|K0f zJZHmB1evAw(`TeS<^jBK#VRJ4?Ww%hXOliQ>Q=cOaX5!m=|G7VW5I7BeI+I-pQNkm_i34of#L;LLbV1( z&O_HmDJ3dQk&Mwsr3rTFcN@>$H>)<5;N8R~gFo%56!Ln&a=XuOZ_phn4N@E|Cr7+d zpK{?o`<~j`e#)O}0scg+B~UlT#?IJDup%~+K$|G!{eYH;_s=i8(=y!3Hp~xy$aH0E-*v_SV@jS}k5gOO(>s75MwH+@0?t6LCkY@+&W(EAl_Ys<^xH@~M&zGD33Di@p;^NHm@US#qGJ+LOf78st8yWTru!QS zWjyUva66fjEPo{8ko99}P)U})JG?zhKu#ZC^tuo_=2LGNnZt1Uh0(}rLnp5RWOKDjq;FL9V z%DRdq$-M!&+Za3?!aFYr*Wx{ysm!fw5cl`meE&I)wU#!|-F11`)Uz#8u9L`{ZP%C9 z0(yxvfg-G2c!6lU8V~f^tQ=FJsL^eecjHAI{U_jnvtWPA<9r) zP0GgIRlv&D-5M$2@9J?`1<3eIT|ieP%8K3J)y2(Q%3qe_FNV|wz6?V+*#DxSoMkx- z)wS3kx_cqn#RQ-NP!2f?c6N3dFIzh)9Yy7T$}e`Z91bXyhZF?j=jSKjCoJIZWe*XQ zl$3-(g&;yg{1*&Kup}~T^oFBG$THcA6{n& zZ#XxkJuQe7aAcmFR=nd%h=}4ac|h8YbD+GZJf;sdJQ&nd;1xqR#V%ARs580RG&FT9 z#6GGN66gr+tJuYcwA+8rlw);Y=J%8Ii+Voq*X*}@l(TgBCuGg<;vG`g`@mjl(p=^H zG4;-lNt4Trp@D(;yT(RQs+qK;ltt}_o9pWm>8gcQMlBwn!_xQ+?#{I3W5z`9=5)pn zW{De6&b!VvB@WvPEk%VLYko<%ul(e;`bv3dk2=8=rwY9w?nQ#gA%T#}y|UjX+&Z2n z!NI|VxGXpqjkPUEGx{LoV0L!4jh0*EtpNhjh-fXd9?BB078aoh{MhG6u8f`d^h)-P z>*?`+LEaO6`{K`x({`q*mWUQ2dTsEckl*)t@o8>qHo0tEWXba}8X5l|mT-3^AD?{! zE?Zj@lPnE00s}ls-egCGEf~LqlEOY@JlLMmm9^=)GM2tB)Bml4=uu#XfZ43-oHR=; zmUuN*GnFC(V9%leCU^Gxt9VK194fE1RWi26w@2QC#`5O9k{12h#W1LwFA`ap!0RJ!ns0zJAvAmM zBaJ&rYM^F#M_Xp3$kY0v#x3r*5=Vk-vf5qy(KGYK#l@N9l4P0D=yhg4(U(EAWL93>Ko7w!!X%wpKl#Jp?9#U1V;Hkic=O@$u`J_2xZdUx&MB9UM}KEV$>fJf z85e^xzLmyoY>EciW4=aQm4i08%r zHAzVgyuPlJice)7c}Ar$Qaixo6?(Y4HuDNRp>^e%_;HzM_w*v(VxNU8%>$`K?pHA-f(5fe40|vr@Kw$$@`9 zy-8j)Doh_vTT>vOj&I)lK#L;0E%{Dfb^NMtsfjI`LSEnG1Q|v2`lh7UH)zGW$U>pk ztc8Cn`;hVN2XRdB>z{Et8c1@4*EWj!cXLHn^hz>oUwu=Z&x0j5<<{}1a55pGmiI98 zYrz!n4#|?LxrZ$tnboI_pHr)c@2peePUzc|G`pa1MTa9s3hJHeJjzmj{Pm?XZo+47 zHd7;c51;e%^S{fFz1E>xlK<#`>;d3>1-fMj06rYr6f1 zc$t`(=;E8+*4FO1@}gT`Dd~a@R?c+p?@iA9rUfm+X-&`nz%bn(;9>~ z)u~hx*w-cgj{Y$RJuRPR=Irq-idKH*)CQzE-CY>|c@+|nnPDp$G<>j4kY)*o?CHCj zG`nGGzHSC4kRieEUHvf8$!Gq{rFK+KGtDn!&DBz#trLSPOVX5)6Fp{9WQs_?xg9z=x+FOmKjl1Csfve z$7(!yMcHl|D2sMwBwm4^=|eaYKHk6-wu>CL<^mdT_a{x7s50a6Ny#=51jK0;ZmnND zsv2dTYS0$Z(<)Ik&zE>Cc z{$07?1>J#7PG2D%y+pj5is(7$VFQU3nJY51?vA03^MZ3peq26e!6;nf!GHQ@3)|G3POvgiZDBf)x+pT3*3*%}j_o~V zApyTgL4qobRfT%!d*cOJ8lbVWi-Dj|<|I)wCgEPgKC*{s+2)ga*{mSVVa3dQ^<>F- z^hak{bvU90rr=v(Z0f`+dkC~ubd@F>v|Em7Z{p-H- z?#6^m-TVNr!Q@Gt+*9)akv6SCpU|LGMiKf`8aB3jnb&#AKEfa;jbD2b%cZ@(#cXV? zgn!}0+6U94`W|7BBuWM|2i-=((gW)2&;hv-(}l?KGZox`oxe|dFF`9psKdI5W~cvJ z(o)Fbf*%{0k8&*DZ4^9^*v3vC`{PGd zh$|A_c)~`ys*+H$!K;FWc1){k=UdAYaiFJW~fRc6LMTI;Z>+jXOC2* zj+m&ni?V3J12Hnww81v_Q?NbHE=44H;WhnrVJFri^(?!@m$An&q;MRw>P(5=PD1ch ze)`g~f1}W$NL(R2gX2*i^mZT4QBo0}lF_Re*_HfZ9*SnGB-1JudwoiQIjnINkO|~i z>SncE#i4~9fLr8kFVxiUVX ze{cL(w|RxXw6+%LLMZpg*ep!ImYN5euH-P8Q655BBc@$>K{vmZfX*1H>i9J}PBL0ebbZN#CZ)3siIMisf&n zOWB*2KIktkYi-!wu|)^cY7W^eB@k87`upb#T(56Do^`G`W5wx zH}J_@WHmP0!#2cFd4qtm+4RxsVDx$)Z<~$uQTFz(OmtMN=^kGM`y#EL>(%hdc|WJJ z1Rn>r5dsJ-qsJ=Zo-SIhsU!HRt5s1>%j!rUGD-GXCDA~*op7Q+u14xrbdz?v%Qe~s zp}_lQHFNeu*#YlG{V>GBOL8%@uOP2;tJU|$y{_r&lj@YiZQfyqPrRwzMnrWRU|<~= zP?H%~CCk-fZc>rHYB_hRJw#>0ZoEyH19eI*Vzh}Rn)((~=iZ%H@wnX?Iy0e)m|f#2 z>7TB8^_daKUrAkZO*Af4;Lux?1--v#lzxt56+9Yzzr9|ksAPOuvdWGQmEVG!g1#Sp zr{P5rgnU-jYp{O(IK{Hfm}w2MUfyQ*=xOMzx$mUYRG}fpkl@OgXq?SU^(luqu;~zS z4Mae7aS6U&37CH5m3T51v=jXnC8)uZ4$SQe#Et?%nFpad>8R58HAoee_V<_rwvB}b z?D0=Oqur^Xd|0hm9Y)OR58X|}?SWMD&FDMq?{R(t=K)!x7<$mt)9N1%nbtAAsmjy&J z^?fz{6#2oLJk+ZTskSUt7IHQB`y{0im5MR~OvN|qu4|eI?(*l_^%6@fWMOZpaOWRQ zVbd`RDamMMlINa{Q}-mEenIO2`DOZ|(1`;ck|;v38)!L{ElK(|C4WS}lZTyP=$*&uP1M6}GJ z)R0N;{&fzY&!90Hm0KUY`5A>%76bQ#Pc19>c4KmgOdt$8(%Q8jxr|1-(;p5<>jjX^ zc6qN21$UYRS80avtBr->HGt=rJl3jyAl-TEVw^W+KW4CVoYZc zADlyFdY{=paz38E1D2gK+2}k)UFabeSMXA3dcDsM5OY>JKuoxFLZT!OGW!lDJ2(^% z6u6GUX^uOLea!Gnorg3@0b?4rnEe^La<^2fh61V_48k>5SO1$*9Hc(^k+RUFnB$=7f&cdpXbtc!4n zr>x5@1^!Gl%%z$iW$ikB8<<^$X}{JVWGJzIbK{^Db_n1Z_3*`>f=&_;_dE10^R(}G z2pFGD{4yMTy+>xydXgZG`W(aec(QS!pF>&$xC6rBBgkXEXly&Va#jm^Nv29!QkyHwGe}7U_+7avq&OzaW`%KZ zU%bEnJpLjN)n^8#w$$FcOw8kOKkt6;n|Ocyqxyl$24cp>$`+JFFh90vpx#TE?Qp-q zOI7sO{S)}>6>#H^_KMY(==QRj!Xn|9dYkd#kE!=vSo-kD-si*jt}Z_g{!P6~=SZL3 zTZ?96RDX3iPp z#JcHSOiYs6axJddWpXC#&v`?fW%Xe(_7^Wx>BNJx}`-4rMNCqVa9x(b;)AvkEG)B0cj;3>;$^ zaYd*|B?$}YJR6%9-%dXia+)z62M+>)3N z%h(c^c<40!+TG84#GBP})<9a`aw;MnS%D1ZBR72#Ew`J)OFPP%x*g&!y0*OK%M4~j zrWbrstv;n+_EnmBLwAd({OGOIP-N4|{DxatC+L9NOd)!D^jx?3AZ=wXw= dqrJ-CY(YxGfPYh4*X0jZxRQoqm4apX{{Zjcua5u# literal 0 HcmV?d00001 diff --git a/Catalog/Resources/Assets.xcassets/person_placeholder.imageset/Contents.json b/BasicSample/BasicSample/Resources/Assets.xcassets/person_placeholder.imageset/Contents.json similarity index 100% rename from Catalog/Resources/Assets.xcassets/person_placeholder.imageset/Contents.json rename to BasicSample/BasicSample/Resources/Assets.xcassets/person_placeholder.imageset/Contents.json diff --git a/Catalog/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png diff --git a/Catalog/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png similarity index 100% rename from Catalog/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png rename to BasicSample/BasicSample/Resources/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/Contents.json b/BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/Contents.json new file mode 100644 index 0000000..858785f --- /dev/null +++ b/BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "success.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "success@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "success@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/success.png b/BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/success.png new file mode 100644 index 0000000000000000000000000000000000000000..d38617c60e9ff1d7b8e14cfbea0063823c02913d GIT binary patch literal 4093 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 literal 0 HcmV?d00001 diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/success@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/success.imageset/success@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..79e4dcd32f758c876272da58dabd0c5b12e2af10 GIT binary patch literal 8853 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 IqK1k5KMI0kHUIzs literal 0 HcmV?d00001 diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/swap_camera@2x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/swap_camera@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9eb5cf2c35ec28e2ec2d8883e16b253b79bd7f GIT binary patch literal 12038 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 literal 0 HcmV?d00001 diff --git a/BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/swap_camera@3x.png b/BasicSample/BasicSample/Resources/Assets.xcassets/swap_camera.imageset/swap_camera@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6db733a7411f1d70c1ab987512fcec932b51236a GIT binary patch literal 18383 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 literal 0 HcmV?d00001 diff --git a/Catalog/Resources/Assets.xcassets/windsor.colorset/Contents.json b/BasicSample/BasicSample/Resources/Assets.xcassets/windsor.colorset/Contents.json similarity index 100% rename from Catalog/Resources/Assets.xcassets/windsor.colorset/Contents.json rename to BasicSample/BasicSample/Resources/Assets.xcassets/windsor.colorset/Contents.json diff --git a/Catalog/Resources/Catalog-Bridging-Header.h b/BasicSample/BasicSample/Resources/Catalog-Bridging-Header.h similarity index 100% rename from Catalog/Resources/Catalog-Bridging-Header.h rename to BasicSample/BasicSample/Resources/Catalog-Bridging-Header.h diff --git a/BasicSample/BasicSample/Resources/Customization/Fonts/Roboto-Black.ttf b/BasicSample/BasicSample/Resources/Customization/Fonts/Roboto-Black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0112e7da626ca2f959eca850c806779ba55dbfbd GIT binary patch literal 168060 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
TJYyt(6q>rW4S(W4gHIq&3$utU3y8!9=k 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 WVelBb2)1!{_R^~ms-+tiJp5mlrotHj literal 0 HcmV?d00001 diff --git a/BasicSample/BasicSample/Resources/Customization/Fonts/Roboto-Italic.ttf b/BasicSample/BasicSample/Resources/Customization/Fonts/Roboto-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9f49ffd869194a92c2e71895169488cb4d037a00 GIT binary patch literal 160736 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
    UOkX{JeL^_MR|z{(Zd%5AEK&*Y!7b{pb0P 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 Z9SQN7PxcvOCZ)&Yip?AcdH822_&*YtObh@3 literal 0 HcmV?d00001 diff --git a/BasicSample/BasicSample/Resources/Customization/layer.json b/BasicSample/BasicSample/Resources/Customization/layer.json new file mode 100644 index 0000000..6ab5eb7 --- /dev/null +++ b/BasicSample/BasicSample/Resources/Customization/layer.json @@ -0,0 +1,86 @@ +{ + "objects": [ + { + "button": { + "title": "Close", + "tag": 1001, + "style": "FaceSdkButtonStyle", + "position": { + "v": 1.6, + "h": 1 + }, + "padding": { + "start": 25, + "end": 25 + }, + "image": { + "name": "ic_cross", + "placement": "start", + "padding": 15 + } + } + }, + { + "label": { + "text": "Text With Start & End Margins, Center Text Alignment, 10% Offset From Bottom", + "fontStyle": "normal", + "fontColor": "#FF000000", + "fontSize": 16, + "fontName": "Arial", + "alignment": "center", + "background": "#CAC9C9C9", + "borderRadius": 8, + "margin": { + "start": 24, + "end": 24 + }, + "padding": { + "start": 8, + "end": 8, + "top": 8, + "bottom": 8 + }, + "position": { + "v": 1.8 + } + } + }, + { + "label": { + "text": "Center your face, turn your head", + "fontStyle": "normal", + "fontColor": "#FF000000", + "fontSize": 16, + "fontName": "Arial", + "alignment": "center", + "margin": { + "start": 70, + "top": 30 + } + } + }, + { + "image": { + "data": "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", + "background": "#FF0000", + "borderRadius": 5, + "contentMode": "fill", + "padding": { + "start": 10, + "end": 10, + "top": 10, + "bottom": 10 + }, + "size": { + "width": 60, + "height": 60 + }, + "margin": { + "start": 10, + "top": 10 + } + } + } + ], + "version": "1.0" +} diff --git a/BasicSample/BasicSample/Resources/Customization/notification.json b/BasicSample/BasicSample/Resources/Customization/notification.json new file mode 100644 index 0000000..49f53b5 --- /dev/null +++ b/BasicSample/BasicSample/Resources/Customization/notification.json @@ -0,0 +1,29 @@ +{ + "objects": [ + { + "label": { + "text": "", + "fontStyle": "normal", + "fontColor": "#FF000000", + "background": "#FFFF8080", + "fontSize": 16, + "fontName": "Arial", + "alignment": "center", + "borderRadius": 5, + "padding": { + "start": 8, + "end": 8, + "top": 8, + "bottom": 8 + }, + "margin": { + "top": 20 + }, + "position": { + "h": 1 + } + } + } + ], + "version": "1.0" +} diff --git a/BasicSample/BasicSample/Resources/Info.plist b/BasicSample/BasicSample/Resources/Info.plist new file mode 100644 index 0000000..aedf966 --- /dev/null +++ b/BasicSample/BasicSample/Resources/Info.plist @@ -0,0 +1,66 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSCameraUsageDescription + BasicSample requires access to your phone’s camera. + NSPhotoLibraryUsageDescription + BasicSample requires access to your photos. + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UIRequiresFullScreen + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIAppFonts + + Roboto-Italic.ttf + Roboto-Black.ttf + + + diff --git a/Catalog/Resources/LaunchScreen.storyboard b/BasicSample/BasicSample/Resources/LaunchScreen.storyboard similarity index 100% rename from Catalog/Resources/LaunchScreen.storyboard rename to BasicSample/BasicSample/Resources/LaunchScreen.storyboard diff --git a/Catalog/Resources/Samples/detect_face1.jpeg b/BasicSample/BasicSample/Resources/Samples/detect_face1.jpeg similarity index 100% rename from Catalog/Resources/Samples/detect_face1.jpeg rename to BasicSample/BasicSample/Resources/Samples/detect_face1.jpeg diff --git a/Catalog/Resources/Samples/detect_face2.jpeg b/BasicSample/BasicSample/Resources/Samples/detect_face2.jpeg similarity index 100% rename from Catalog/Resources/Samples/detect_face2.jpeg rename to BasicSample/BasicSample/Resources/Samples/detect_face2.jpeg diff --git a/Catalog/Resources/Samples/detect_face3.jpeg b/BasicSample/BasicSample/Resources/Samples/detect_face3.jpeg similarity index 100% rename from Catalog/Resources/Samples/detect_face3.jpeg rename to BasicSample/BasicSample/Resources/Samples/detect_face3.jpeg diff --git a/Catalog/Resources/Samples/detect_face4.jpeg b/BasicSample/BasicSample/Resources/Samples/detect_face4.jpeg similarity index 100% rename from Catalog/Resources/Samples/detect_face4.jpeg rename to BasicSample/BasicSample/Resources/Samples/detect_face4.jpeg diff --git a/Catalog/Resources/Samples/face_image_quality1.jpeg b/BasicSample/BasicSample/Resources/Samples/face_image_quality1.jpeg similarity index 100% rename from Catalog/Resources/Samples/face_image_quality1.jpeg rename to BasicSample/BasicSample/Resources/Samples/face_image_quality1.jpeg diff --git a/Catalog/Resources/Samples/face_image_quality2.jpeg b/BasicSample/BasicSample/Resources/Samples/face_image_quality2.jpeg similarity index 100% rename from Catalog/Resources/Samples/face_image_quality2.jpeg rename to BasicSample/BasicSample/Resources/Samples/face_image_quality2.jpeg diff --git a/Catalog/Resources/Samples/face_image_quality3.jpeg b/BasicSample/BasicSample/Resources/Samples/face_image_quality3.jpeg similarity index 100% rename from Catalog/Resources/Samples/face_image_quality3.jpeg rename to BasicSample/BasicSample/Resources/Samples/face_image_quality3.jpeg diff --git a/Catalog/Resources/Samples/face_image_quality4.jpeg b/BasicSample/BasicSample/Resources/Samples/face_image_quality4.jpeg similarity index 100% rename from Catalog/Resources/Samples/face_image_quality4.jpeg rename to BasicSample/BasicSample/Resources/Samples/face_image_quality4.jpeg diff --git a/Catalog/Resources/ar.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/ar.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/ar.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/ar.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/cs.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/cs.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/cs.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/cs.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/de.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/de.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/de.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/de.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/el.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/el.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/el.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/el.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/en.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/en.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/en.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/en.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/es-419.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/es-419.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/es-419.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/es-419.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/es.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/es.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/es.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/es.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/fi.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/fi.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/fi.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/fi.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/fr-CA.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/fr-CA.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/fr-CA.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/fr-CA.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/he.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/he.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/he.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/he.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/hi.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/hi.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/hi.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/hi.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/it.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/it.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/it.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/it.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/ja.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/ja.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/ja.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/ja.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/ko-KR.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/ko-KR.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/ko-KR.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/ko-KR.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/ko.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/ko.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/ko.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/ko.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/ms.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/ms.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/ms.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/ms.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/pl.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/pl.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/pl.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/pl.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/pt-BR.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/pt-BR.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/pt-BR.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/pt-BR.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/pt-PT.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/pt-PT.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/pt-PT.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/pt-PT.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/ru.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/ru.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/ru.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/ru.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/sv.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/sv.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/sv.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/sv.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/th.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/th.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/th.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/th.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/tr.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/tr.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/tr.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/tr.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/vi.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/vi.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/vi.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/vi.lproj/CustomLocalization.strings diff --git a/Catalog/Resources/zh-Hans.lproj/CustomLocalization.strings b/BasicSample/BasicSample/Resources/zh-Hans.lproj/CustomLocalization.strings similarity index 100% rename from Catalog/Resources/zh-Hans.lproj/CustomLocalization.strings rename to BasicSample/BasicSample/Resources/zh-Hans.lproj/CustomLocalization.strings diff --git a/Catalog/SceneDelegate.swift b/BasicSample/BasicSample/SceneDelegate.swift similarity index 99% rename from Catalog/SceneDelegate.swift rename to BasicSample/BasicSample/SceneDelegate.swift index b8e670b..c6c00ba 100644 --- a/Catalog/SceneDelegate.swift +++ b/BasicSample/BasicSample/SceneDelegate.swift @@ -1,6 +1,6 @@ // // SceneDelegate.swift -// Catalog +// BasicSample // // Created by Pavel Kondrashkov on 5/18/21. // diff --git a/Podfile b/BasicSample/Podfile similarity index 84% rename from Podfile rename to BasicSample/Podfile index a9061c8..132e81e 100644 --- a/Podfile +++ b/BasicSample/Podfile @@ -3,7 +3,7 @@ platform :ios, '11.0' use_frameworks! -target 'Catalog' do +target 'BasicSample' do pod 'FaceSDK', '~> 6.2' pod 'FaceCoreBasic', '~> 6.2' end diff --git a/BasicSample/README.md b/BasicSample/README.md new file mode 100644 index 0000000..f3c30f0 --- /dev/null +++ b/BasicSample/README.md @@ -0,0 +1,30 @@ +# FaceSDK Catalog for iOS + +[![Version](https://img.shields.io/cocoapods/v/FaceSDK.svg?style=flat)](http://cocoapods.org/pods/FaceSDK) +[![Platform](https://img.shields.io/cocoapods/p/FaceSDK.svg?style=flat)](http://cocoapods.org/pods/FaceSDK) + +The FaceSDK Catalog is an example app for [FaceSDK iOS](https://docs.regulaforensics.com/develop/face-sdk/mobile?utm_source=github). This project contains various code examples of how to customize and setup FaceSDK for your usecases. + +## Regula FaceSDK +FaceSDK is a framework that is used for face matching, recognition, and liveness detection. + +## Requirements +1. The latest [Xcode](https://developer.apple.com/xcode/download); +2. [Cocoapods](https://guides.cocoapods.org/using/getting-started.html). + +## Setup +1. Download or clone the repository using the command; +``` +git clone https://github.com/regulaforensics/FaceSDK-iOS.git +``` +2. Install Pods; +```bash +pod install +``` +3. Open the `BasicSample.xcworkspace` and run `BasicSample` target. + +## Documentation +Take a look at our [Documentation](https://docs.regulaforensics.com/develop/face-sdk/mobile?utm_source=github) for the API. + +## Additional information +If you have any technical questions, feel free to [contact](mailto:support@regulaforensics.com) us or create issues [here](https://github.com/regulaforensics/FaceSDK-iOS/issues). diff --git a/Catalog/Items/Basic/MatchFacesRequestItem.swift b/Catalog/Items/Basic/MatchFacesRequestItem.swift deleted file mode 100644 index 09ad7c7..0000000 --- a/Catalog/Items/Basic/MatchFacesRequestItem.swift +++ /dev/null @@ -1,378 +0,0 @@ -// -// MatchFacesRequestItem.swift -// Catalog -// -// Created by Pavel Kondrashkov on 5/20/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK -import Photos -import UIKit - -final class MatchFacesRequestItem: CatalogItem { - override init() { - super.init() - - title = "MatchFacesRequest" - itemDescription = "Checks the likelihood that two faces belong to the same person." - category = .basic - } - - override func onItemSelected(from viewController: UIViewController) { - let example = MatchFacesRequestViewController() - viewController.show(example, sender: nil) - } -} - -final class MatchFacesRequestViewController: UIViewController { - private enum Position { - case first - case second - } - - lazy var firstImageView: UIImageView = { - let view = UIImageView() - let tapGestureFirst = UITapGestureRecognizer(target: self, action: #selector(self.handleFirstImageTap)) - view.addGestureRecognizer(tapGestureFirst) - view.contentMode = .scaleAspectFit - view.isUserInteractionEnabled = true - view.backgroundColor = .lightGray - return view - }() - - let firstImageDetectAllSwitch = UISwitch() - - lazy var secondImageView: UIImageView = { - let view = UIImageView() - let tapGestureFirst = UITapGestureRecognizer(target: self, action: #selector(self.handleSecondImageTap)) - view.addGestureRecognizer(tapGestureFirst) - view.contentMode = .scaleAspectFit - view.isUserInteractionEnabled = true - view.backgroundColor = .lightGray - return view - }() - - let secondImageDetectAllSwitch = UISwitch() - let cropSwitch = UISwitch() - - private var firstImage: MatchFacesImage? - private var secondImage: MatchFacesImage? - - private lazy var matchFacesButton: UIButton = { - let button = UIButton(type: .system) - button.addTarget(self, action: #selector(self.handleMatchButtonPress), for: .touchUpInside) - button.setTitle("Match Faces", for: .normal) - button.setTitleColor(.white, for: .normal) - button.titleLabel?.font = .systemFont(ofSize: 15) - button.backgroundColor = .windsor - button.contentEdgeInsets = UIEdgeInsets(top: 16, left: 0, bottom: 16, right: 0) - button.layer.cornerRadius = 5 - button.clipsToBounds = false - return button - }() - - private lazy var clearButton: UIButton = { - let button = UIButton(type: .system) - button.addTarget(self, action: #selector(self.handleClearButtonPress), for: .touchUpInside) - button.setTitle("Clear", for: .normal) - button.setTitleColor(.white, for: .normal) - button.titleLabel?.font = .systemFont(ofSize: 15) - button.backgroundColor = .windsor - button.contentEdgeInsets = UIEdgeInsets(top: 16, left: 0, bottom: 16, right: 0) - button.layer.cornerRadius = 5 - button.clipsToBounds = false - return button - }() - - private lazy var similarityLabel: UILabel = { - let label = UILabel() - label.text = similarityLabelDefaultText - label.font = .preferredFont(forTextStyle: .title3) - return label - }() - - private let similarityLabelDefaultText = "Similarity: Select Photos." - - override func loadView() { - view = UIView() - if #available(iOS 13.0, *) { - view.backgroundColor = .systemBackground - } else { - view.backgroundColor = .white - } - - let root = UIStackView() - root.spacing = 25 - root.axis = .vertical - - view.addSubview(root) - root.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - root.topAnchor.constraint(equalTo: view.safeTopAnchor, constant: 20), - root.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40), - root.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40), - root.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -40), - ]) - - let imagesContainer = UIStackView() - imagesContainer.axis = .vertical - imagesContainer.distribution = .fillEqually - imagesContainer.spacing = 45 - imagesContainer.addArrangedSubview(firstImageView) - - func makeOptionLabel(text: String) -> UILabel { - let label = UILabel() - label.text = text - label.font = .preferredFont(forTextStyle: .body) - return label - } - - func makeOptionsRow(text: String, switchView: UISwitch) -> UIView { - let row = UIStackView() - row.spacing = 5 - row.axis = .horizontal - row.addArrangedSubview(makeOptionLabel(text: text)) - row.addArrangedSubview(switchView) - return row - } - - let firstDetectAllRow = makeOptionsRow(text: "DetectAll", switchView: firstImageDetectAllSwitch) - firstImageView.addSubview(firstDetectAllRow) - firstDetectAllRow.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - firstDetectAllRow.trailingAnchor.constraint(equalTo: firstImageView.trailingAnchor), - firstDetectAllRow.bottomAnchor.constraint(equalTo: firstImageView.bottomAnchor) - ]) - - imagesContainer.addArrangedSubview(secondImageView) - let secondDetectAllRow = makeOptionsRow(text: "DetectAll", switchView: secondImageDetectAllSwitch) - secondImageView.addSubview(secondDetectAllRow) - secondDetectAllRow.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - secondDetectAllRow.trailingAnchor.constraint(equalTo: secondImageView.trailingAnchor), - secondDetectAllRow.bottomAnchor.constraint(equalTo: secondImageView.bottomAnchor) - ]) - - root.addArrangedSubview(similarityLabel) - root.addArrangedSubview(imagesContainer) - root.addArrangedSubview(makeOptionsRow(text: "Return cropped images", switchView: cropSwitch)) - root.addArrangedSubview(matchFacesButton) - root.addArrangedSubview(clearButton) - } - - override func viewDidLoad() { - super.viewDidLoad() - if #available(iOS 11.0, *) { - navigationItem.largeTitleDisplayMode = .never - } - } - - @objc private func handleFirstImageTap() { - similarityLabel.text = similarityLabelDefaultText - - createImageForPosition(.first) { [weak self] (image) in - self?.firstImageView.image = image?.image - self?.firstImage = image - } - } - - @objc private func handleSecondImageTap() { - similarityLabel.text = similarityLabelDefaultText - - createImageForPosition(.second) { [weak self] (image) in - self?.secondImageView.image = image?.image - self?.secondImage = image - } - } - - private func detectAllOptionValueFor(position: Position) -> Bool { - switch position { - case .first: - return firstImageDetectAllSwitch.isOn - case .second: - return secondImageDetectAllSwitch.isOn - } - } - - private func createImageForPosition(_ position: Position, completion: @escaping (MatchFacesImage?) -> Void) { - let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) - alert.addAction(UIAlertAction(title: "Regula FaceCaptureUI", style: .default, handler: { _ in - FaceSDK.service.presentFaceCaptureViewController( - from: self, - animated: true, - onCapture: { response in - let image = response.image.map { - MatchFacesImage( - rfsImage: $0, - detectAll: self.detectAllOptionValueFor(position: position) - ) - } - completion(image) - }, - completion: nil - ) - })) - alert.addAction(UIAlertAction(title: "Gallery", style: .default, handler: { _ in - self.pickImage(sourceType: .photoLibrary) { image in - let result = image.map { - MatchFacesImage( - image: $0, - imageType: .printed, - detectAll: self.detectAllOptionValueFor(position: position) - ) - } - completion(result) - } - })) - alert.addAction(UIAlertAction(title: "Camera Shoot", style: .default, handler: { _ in - self.pickImage(sourceType: .camera) { image in - let result = image.map { - MatchFacesImage( - image: $0, - imageType: .live, - detectAll: self.detectAllOptionValueFor(position: position) - ) - } - completion(result) - } - })) - alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { _ in - completion(nil) - })) - - - let imageView: UIImageView - switch position { - case .first: - imageView = firstImageView - case .second: - imageView = secondImageView - } - - if let popoverPresentationController = alert.popoverPresentationController { - popoverPresentationController.sourceView = view - popoverPresentationController.sourceRect = CGRect( - x: imageView.frame.midX, - y: imageView.frame.midY, - width: 0, - height: 0 - ) - } - self.present(alert, animated: true, completion: nil) - } - - @objc private func handleMatchButtonPress() { - guard let firstImage = firstImage, let secondImage = secondImage else { - let alert = UIAlertController(title: "Having both images is required", message: nil, preferredStyle: .alert) - alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) - self.present(alert, animated: true, completion: nil) - return - } - - let request = MatchFacesRequest(images: [firstImage, secondImage]) - - if (cropSwitch.isOn) { - let outputImageParams = OutputImageParams() - outputImageParams.crop = .init(type: .ratio4x5) - request.outputImageParams = outputImageParams - } - - self.similarityLabel.text = "Processing..." - self.matchFacesButton.isEnabled = false - self.clearButton.isEnabled = false - - FaceSDK.service.matchFaces(request, completion: { (response: MatchFacesResponse) in - self.matchFacesButton.isEnabled = true - self.clearButton.isEnabled = true - - if let error = response.error { - self.similarityLabel.text = "Similarity: \(error.localizedDescription)" - return - } - - if let firstPair = response.results.first { - let similarity = String(format: "%.5f", firstPair.similarity?.doubleValue ?? 0.0) - self.similarityLabel.text = "Similarity: \(similarity)" - } else { - self.similarityLabel.text = "Similarity: no matched pair found" - } - }) - } - - @objc private func handleClearButtonPress(sender: UIButton) { - self.firstImageView.image = nil - self.firstImage = nil - - self.secondImageView.image = nil - self.secondImage = nil - - self.similarityLabel.text = similarityLabelDefaultText - } - - private var imagePickerCompletion: ((UIImage?) -> Void)? - - private func pickImage(sourceType: UIImagePickerController.SourceType, completion: @escaping ((UIImage?) -> Void)) { - PHPhotoLibrary.requestAuthorization { (status) in - DispatchQueue.main.async { - switch status { - case .authorized: - if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) { - self.imagePickerCompletion = completion - let imagePicker = UIImagePickerController() - imagePicker.delegate = self - imagePicker.sourceType = sourceType - imagePicker.allowsEditing = false - imagePicker.navigationBar.tintColor = .black - self.present(imagePicker, animated: true, completion: nil) - - } else { - completion(nil) - } - case .denied: - let message = NSLocalizedString("Application doesn't have permission to use the camera, please change privacy settings", comment: "Alert message when the user has denied access to the gallery") - let alertController = UIAlertController(title: NSLocalizedString("Gallery Unavailable", comment: "Alert eror title"), message: message, preferredStyle: .alert) - alertController.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Alert manager, OK button tittle"), style: .cancel, handler: nil)) - alertController.addAction(UIAlertAction(title: NSLocalizedString("Settings", comment: "Alert button to open Settings"), style: .default, handler: { action in - guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } - if #available(iOS 10.0, *) { - UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil) - } else { - UIApplication.shared.openURL(settingsURL) - } - })) - self.present(alertController, animated: true, completion: nil) - print("PHPhotoLibrary status: denied") - completion(nil) - case .notDetermined: - print("PHPhotoLibrary status: notDetermined") - completion(nil) - case .restricted: - print("PHPhotoLibrary status: restricted") - completion(nil) - case .limited: - print("PHPhotoLibrary status: Limited") - completion(nil) - @unknown default: - fatalError() - } - } - } - } -} - -extension MatchFacesRequestViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { - func imagePickerController(_ picker: UIImagePickerController, - didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { - if let image = info[.originalImage] as? UIImage { - picker.dismiss(animated: true, completion: { - self.imagePickerCompletion?(image) - }) - } else { - picker.dismiss(animated: true, completion: { - self.imagePickerCompletion?(nil) - }) - print("Something went wrong") - } - } -} diff --git a/Catalog/Items/Basic/PersonDatabaseItem.swift b/Catalog/Items/Basic/PersonDatabaseItem.swift deleted file mode 100644 index 7116271..0000000 --- a/Catalog/Items/Basic/PersonDatabaseItem.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// PersonDatabaseItem.swift -// Catalog -// -// Created by Serge Rylko on 2.05.23. -// Copyright © 2023 Regula. All rights reserved. -// - -import Foundation - -class PersonDatabaseItem: CatalogItem { - - override init() { - super.init() - self.title = "Search Person" - self.itemDescription = "Search Person in database by image" - self.category = .basic - } - - override func onItemSelected(from viewController: UIViewController) { - let vc = DatabaseGroupsViewController() - viewController.show(vc, sender: nil) - } -} diff --git a/Catalog/Items/ViewCustomization/FaceCaptureBackgroundColor.swift b/Catalog/Items/ViewCustomization/FaceCaptureBackgroundColor.swift deleted file mode 100644 index 7f5332b..0000000 --- a/Catalog/Items/ViewCustomization/FaceCaptureBackgroundColor.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// FaceCaptureBackgroundColor.swift -// Catalog -// -// Created by Pavel Kondrashkov on 5/28/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK - -final class FaceCaptureBackgroundColor: CatalogItem { - override init() { - super.init() - - title = "Face Capture background color" - itemDescription = "Changes default background color of the overlay. Only for FaceCapture." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - // Note: This appearance modification can not be applied to the FaceCapture Liveness Module - // because of the security and accuracy constraints. - - let appearance = FaceCaptureContentView.appearance() - appearance.setBackgroundColor(.init(hex: "#FEE9FF"), for: .front) - appearance.setBackgroundColor(.init(hex: "#6F5685"), for: .rear) - - let configuration = FaceCaptureConfiguration { - $0.isCameraSwitchButtonEnabled = true - } - FaceSDK.service.presentFaceCaptureViewController( - from: viewController, - animated: true, - configuration: configuration, - onCapture: { [weak self, weak viewController] response in - guard let self = self, let viewController = viewController else { return } - self.showFaceCaptureResult(response, from: viewController) - - // This call is only for demo. - // Restoring original appearance so other examples are not affected. - self.applyOriginalAppearance() - }, - completion: nil) - } -} - -extension FaceCaptureBackgroundColor { - /// Restorins original appearance. - private func applyOriginalAppearance() { - let appearance = FaceCaptureContentView.appearance() - appearance.setBackgroundColor(.white, for: .front) - appearance.setBackgroundColor(.black, for: .rear) - } -} diff --git a/Catalog/Items/ViewCustomization/FaceCaptureUIConfiguration.swift b/Catalog/Items/ViewCustomization/FaceCaptureUIConfiguration.swift deleted file mode 100644 index a25ae82..0000000 --- a/Catalog/Items/ViewCustomization/FaceCaptureUIConfiguration.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// FaceCaptureUIConfiguration.swift -// Catalog -// -// Created by Dmitry Evglevsky on 29.06.23. -// Copyright © 2023 Regula. All rights reserved. -// - -import FaceSDK - -final class FaceCaptureUIConfigurationItem: CatalogItem { - override init() { - super.init() - - title = "FaceCapture UI Configuration" - itemDescription = "Interface customization." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - let titleFont = UIFont(name: "Copperplate", size: 26)! - - let interfaceConfiguration = UIConfiguration { - // Camera screen colors. - $0.setColor(.systemYellow, forItem: .CameraScreenStrokeActive) - $0.setColor(.systemYellow, forItem: .CameraScreenStrokeNormal) - $0.setColor(.systemYellow, forItem: .CameraScreenFrontHintLabelBackground) - $0.setColor(.black, forItem: .CameraScreenFrontHintLabelText) - - // Camera screen fonts. - $0.setFont(titleFont, forItem: .CameraScreenHintLabel) - } - FaceSDK.service.customization.configuration = interfaceConfiguration - - FaceSDK.service.presentFaceCaptureViewController( - from: viewController, - animated: true, - onCapture: { [weak self, weak viewController] response in - FaceSDK.service.customization.configuration = nil - guard let self = self, let viewController = viewController else { return } - self.showFaceCaptureResult(response, from: viewController) - }, - completion: nil) - } -} - diff --git a/Catalog/Items/ViewCustomization/LivenessHintViewAppearanceItem.swift b/Catalog/Items/ViewCustomization/LivenessHintViewAppearanceItem.swift deleted file mode 100644 index a1dcf05..0000000 --- a/Catalog/Items/ViewCustomization/LivenessHintViewAppearanceItem.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// LivenessHintViewAppearanceItem.swift -// Catalog -// -// Created by Pavel Kondrashkov on 5/19/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK - -final class LivenessHintViewAppearanceItem: CatalogItem { - override init() { - super.init() - - title = "Liveness HintView appearance" - itemDescription = "UIAppearance usage example for HintView." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - let hintViewAppearance = HintView.appearance(whenContainedInInstancesOf: [LivenessContentView.self]) - hintViewAppearance.cornerRadius = 20 - hintViewAppearance.setBackgroundColor(.yellow, for: .front) - hintViewAppearance.setTextColor(.black, for: .front) - - let hintLabelAppearance = UILabel.appearance(whenContainedInInstancesOf: [HintView.self, LivenessContentView.self]) - hintLabelAppearance.font = UIFont(name: "ChalkboardSE-Regular", size: 40) - - FaceSDK.service.startLiveness( - from: viewController, - animated: true, - onLiveness: { [weak self, weak viewController] response in - guard let self = self, let viewController = viewController else { return } - self.showLivenessResult(response, from: viewController) - - // This call is only for demo. - // Restoring original appearance so other examples are not affected. - self.applyOriginalAppearance() - }, - completion: nil - ) - } -} - -private extension LivenessHintViewAppearanceItem { - /// Restorins original appearance of the HintView. - private func applyOriginalAppearance() { - let lightGrayColor = UIColor(white: 0.91, alpha: 1.0) - - let hintViewAppearance = HintView.appearance(whenContainedInInstancesOf: [LivenessContentView.self]) - hintViewAppearance.cornerRadius = 8 - hintViewAppearance.setBackgroundColor(lightGrayColor, for: .front) - hintViewAppearance.setTextColor(.black, for: .front) - - let hintLabelAppearance = UILabel.appearance(whenContainedInInstancesOf: [HintView.self, LivenessContentView.self]) - hintLabelAppearance.font = .preferredFont(forTextStyle: .title2) - } -} diff --git a/Catalog/Items/ViewCustomization/LivenessLogoItem.swift b/Catalog/Items/ViewCustomization/LivenessLogoItem.swift deleted file mode 100644 index c7a4e71..0000000 --- a/Catalog/Items/ViewCustomization/LivenessLogoItem.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// LivenessLogoItem.swift -// Catalog -// -// Created by Pavel Kondrashkov on 5/28/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK - -final class LivenessLogoItem: CatalogItem { - override init() { - super.init() - - title = "Your logo example" - itemDescription = "Subclass ContentView and add your subviews." - category = .viewCustomization - } - - final class ContentView: LivenessContentView { - lazy var logoImageView: UIImageView = { - let view = UIImageView() - view.image = UIImage(named: "logo") - return view - }() - - override func setupConstraints() { - super.setupConstraints() - addSubview(logoImageView) - logoImageView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - logoImageView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), - logoImageView.bottomAnchor.constraint(equalTo: toolbarView.topAnchor, constant: -20), - logoImageView.heightAnchor.constraint(equalTo: logoImageView.widthAnchor, multiplier: 1 / 1.88), - logoImageView.widthAnchor.constraint(equalToConstant: 150), - ]) - } - } - - override func onItemSelected(from viewController: UIViewController) { - let configuration = LivenessConfiguration { - $0.registerClass(ContentView.self, forBaseClass: LivenessContentView.self) - } - - FaceSDK.service.startLiveness( - from: viewController, - animated: true, - configuration: configuration, - onLiveness: { [weak self, weak viewController] response in - guard let self = self, let viewController = viewController else { return } - self.showLivenessResult(response, from: viewController) - }, - completion: nil - ) - } -} diff --git a/Catalog/Items/ViewCustomization/LivenessToolbarAppearanceItem.swift b/Catalog/Items/ViewCustomization/LivenessToolbarAppearanceItem.swift deleted file mode 100644 index 60725b5..0000000 --- a/Catalog/Items/ViewCustomization/LivenessToolbarAppearanceItem.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// LivenessToolbarAppearanceItem.swift -// Catalog -// -// Created by Pavel Kondrashkov on 5/28/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK - -final class LivenessToolbarAppearanceItem: CatalogItem { - override init() { - super.init() - - title = "Liveness CameraToolbarView appearance" - itemDescription = "UIAppearance usage example for CameraToolbarView." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - let toolbarAppearance = CameraToolbarView.appearance(whenContainedInInstancesOf: [LivenessContentView.self]) - toolbarAppearance.backgroundColor = .windsor - toolbarAppearance.setTintColor(.init(hex: "#84B1CB"), for: .front) - - FaceSDK.service.startLiveness( - from: viewController, - animated: true, - onLiveness: { [weak self, weak viewController] response in - guard let self = self, let viewController = viewController else { return } - self.showLivenessResult(response, from: viewController) - - // This call is only for demo. - // Restoring original appearance so other examples are not affected. - self.applyOriginalAppearance() - }, - completion: nil - ) - } -} - -private extension LivenessToolbarAppearanceItem { - /// Restorins original appearance. - private func applyOriginalAppearance() { - let toolbarAppearance = CameraToolbarView.appearance(whenContainedInInstancesOf: [LivenessContentView.self]) - toolbarAppearance.backgroundColor = .clear - - let toolbarButtonAppearance = UIButton.appearance(whenContainedInInstancesOf: [CameraToolbarView.self, LivenessContentView.self]) - toolbarButtonAppearance.backgroundColor = nil - toolbarButtonAppearance.tintColor = .white - } -} diff --git a/Catalog/Items/ViewCustomization/LivenessToolbarCustomButtonItem.swift b/Catalog/Items/ViewCustomization/LivenessToolbarCustomButtonItem.swift deleted file mode 100644 index 19dd0da..0000000 --- a/Catalog/Items/ViewCustomization/LivenessToolbarCustomButtonItem.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// LivenessToolbarCustomButtonItem.swift -// Catalog -// -// Created by Pavel Kondrashkov on 5/28/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK - -final class LivenessToolbarCustomButtonItem: CatalogItem { - final class Toolbar: CameraToolbarView { - let customCloseButton = UIButton() - - override var torchButton: UIButton? { return nil } - override var switchCameraButton: UIButton? { return nil } - override var closeButton: UIButton? { return customCloseButton } - - override init(frame: CGRect) { - super.init(frame: frame) - customCloseButton.backgroundColor = .windsor - customCloseButton.setTitle("CLOSE", for: .normal) - customCloseButton.titleLabel?.font = UIFont(name: "AmericanTypewriter", size: 30) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func setupConstraints() { - if let closeButton = closeButton { - closeButton.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - closeButton.topAnchor.constraint(equalTo: self.safeTopAnchor), - closeButton.centerXAnchor.constraint(equalTo: self.centerXAnchor), - closeButton.bottomAnchor.constraint(equalTo: self.safeBottomAnchor), - ]) - } - } - } - - override init() { - super.init() - - title = "Liveness CameraToolbarView custom close button" - itemDescription = "Overriden CameraToolbarView class." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - let configuration = LivenessConfiguration { - $0.registerClass(Toolbar.self, forBaseClass: CameraToolbarView.self) - } - - FaceSDK.service.startLiveness( - from: viewController, - animated: true, - configuration: configuration, - onLiveness: { [weak self, weak viewController] response in - guard let self = self, let viewController = viewController else { return } - self.showLivenessResult(response, from: viewController) - }, - completion: nil - ) - } -} diff --git a/Catalog/Items/ViewCustomization/LivenessToolbarCustomColors.swift b/Catalog/Items/ViewCustomization/LivenessToolbarCustomColors.swift deleted file mode 100644 index 658fd22..0000000 --- a/Catalog/Items/ViewCustomization/LivenessToolbarCustomColors.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// LivenessToolbarCustomColors.swift -// Catalog -// -// Created by Pavel Kondrashkov on 6/22/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK - -final class LivenessToolbarCustomColors: CatalogItem { - final class Toolbar: CameraToolbarView { - override func updateState(_ state: CameraToolbarViewState) { - switch state { - case .front: - self.backgroundColor = .windsor - self.torchButton?.tintColor = .white - self.switchCameraButton?.tintColor = .white - self.closeButton?.tintColor = .white - case .rear: - self.backgroundColor = .white - self.torchButton?.tintColor = .windsor - self.switchCameraButton?.tintColor = .windsor - self.closeButton?.tintColor = .windsor - @unknown default: - fatalError("Unexpected state") - } - } - } - - override init() { - super.init() - - title = "Liveness CameraToolbarView custom colors" - itemDescription = "Overriden CameraToolbarView class reacts to Camera state changes." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - let configuration = LivenessConfiguration { - $0.registerClass(Toolbar.self, forBaseClass: CameraToolbarView.self) - } - - FaceSDK.service.startLiveness( - from: viewController, - animated: true, - configuration: configuration, - onLiveness: { [weak self, weak viewController] response in - guard let self = self, let viewController = viewController else { return } - self.showLivenessResult(response, from: viewController) - }, - completion: nil - ) - } -} diff --git a/Catalog/Items/ViewCustomization/LivenessToolbarPositionItem.swift b/Catalog/Items/ViewCustomization/LivenessToolbarPositionItem.swift deleted file mode 100644 index df653e5..0000000 --- a/Catalog/Items/ViewCustomization/LivenessToolbarPositionItem.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// LivenessToolbarPositionItem.swift -// Catalog -// -// Created by Pavel Kondrashkov on 5/28/21. -// Copyright © 2021 Regula. All rights reserved. -// - -import FaceSDK - -final class LivenessToolbarPositionItem: CatalogItem { - final class ContentView: LivenessContentView { - override func setupConstraints() { - // Overrides layout with constraints. - toolbarView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - toolbarView.leadingAnchor.constraint(equalTo: leadingAnchor), - toolbarView.trailingAnchor.constraint(equalTo: trailingAnchor), - toolbarView.topAnchor.constraint(equalTo: bottomAnchor, constant: -200), - ]) - - hintView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - hintView.centerXAnchor.constraint(equalTo: self.centerXAnchor), - hintView.bottomAnchor.constraint(equalTo: self.centerYAnchor), - ]) - } - } - - override init() { - super.init() - - title = "Liveness CameraToolbarView position" - itemDescription = "Overriden ContenView layout. Changed CameraToolbarView position." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - let configuration = LivenessConfiguration { - $0.registerClass(ContentView.self, forBaseClass: LivenessContentView.self) - } - - FaceSDK.service.startLiveness( - from: viewController, - animated: true, - configuration: configuration, - onLiveness: { [weak self, weak viewController] response in - guard let self = self, let viewController = viewController else { return } - self.showLivenessResult(response, from: viewController) - }, - completion: nil - ) - } -} diff --git a/Catalog/Items/ViewCustomization/LivenessUIConfiguration.swift b/Catalog/Items/ViewCustomization/LivenessUIConfiguration.swift deleted file mode 100644 index aa38d18..0000000 --- a/Catalog/Items/ViewCustomization/LivenessUIConfiguration.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// LivenessUIConfiguration.swift -// Catalog -// -// Created by Dmitry Evglevsky on 9.06.23. -// Copyright © 2023 Regula. All rights reserved. -// - -import FaceSDK - -final class LivenessUIConfigurationItem: CatalogItem { - override init() { - super.init() - - title = "Liveness UI Configuration" - itemDescription = "Interface customization." - category = .viewCustomization - } - - override func onItemSelected(from viewController: UIViewController) { - let messageFont = UIFont(name: "Copperplate", size: 18)! - let titleFont = UIFont(name: "Copperplate", size: 26)! - - let interfaceConfiguration = UIConfiguration { - // Onboarding screen colors. - $0.setColor(.systemYellow, forItem: .OnboardingScreenBackground) - $0.setColor(.black, forItem: .OnboardingScreenStartButtonBackground) - - // Onboarding screen fonts. - $0.setFont(messageFont, forItem: .OnboardingScreenMessageLabels) - $0.setFont(titleFont, forItem: .OnboardingScreenTitleLabel) - $0.setFont(titleFont, forItem: .OnboardingScreenStartButton) - - // Onboarding screen images. - if #available(iOS 16.0, *) { - $0.setImage(UIImage(systemName: "sun.max.trianglebadge.exclamationmark")!.withTintColor(.black, renderingMode: .alwaysOriginal), - forItem: .OnboardingScreenIllumination) - $0.setImage(UIImage(systemName: "eyeglasses")!.withTintColor(.black, renderingMode: .alwaysOriginal), - forItem: .OnboardingScreenAccessories) - $0.setImage(UIImage(systemName: "camera.viewfinder")!.withTintColor(.black, renderingMode: .alwaysOriginal), - forItem: .OnboardingScreenCameraLevel) - } else { - // Use your image assets. - } - - // Camera screen colors. - $0.setColor(.systemYellow, forItem: .CameraScreenStrokeActive) - $0.setColor(.systemYellow, forItem: .CameraScreenStrokeNormal) - $0.setColor(.systemYellow, forItem: .CameraScreenSectorActive) - $0.setColor(.systemYellow.withAlphaComponent(0.35), forItem: .CameraScreenSectorTarget) - $0.setColor(.systemYellow, forItem: .CameraScreenFrontHintLabelBackground) - $0.setColor(.black, forItem: .CameraScreenFrontHintLabelText) - - // Camera screen fonts. - $0.setFont(titleFont, forItem: .CameraScreenHintLabel) - - // Processing screen colors. - $0.setColor(.systemYellow, forItem: .ProcessingScreenBackground) - $0.setColor(.black, forItem: .ProcessingScreenProgress) - $0.setColor(.black, forItem: .ProcessingScreenTitleLabel) - - // Processing screen fonts. - $0.setFont(titleFont, forItem: .ProcessingScreenLabel) - - // Retry screen colors. - $0.setColor(.systemYellow, forItem: .RetryScreenBackground) - $0.setColor(.black, forItem: .RetryScreenRetryButtonBackground) - - // Retry screen fonts. - $0.setFont(messageFont, forItem: .RetryScreenHintLabels) - $0.setFont(titleFont, forItem: .RetryScreenTitleLabel) - $0.setFont(titleFont, forItem: .RetryScreenRetryButton) - - // Retry screen images. - if #available(iOS 16.0, *) { - $0.setImage(UIImage(systemName: "sun.max.trianglebadge.exclamationmark")!.withTintColor(.black, renderingMode: .alwaysOriginal), - forItem: .RetryScreenHintEnvironment) - $0.setImage(UIImage(systemName: "face.smiling")!.withTintColor(.black, renderingMode: .alwaysOriginal), - forItem: .RetryScreenHintSubject) - } else { - // Use your image assets. - } - - // Success screen colors. - $0.setColor(.systemYellow, forItem: .SuccessScreenBackground) - - // Success screen images. - $0.setImage(UIImage(named: "checkmark")!, forItem: .SuccessScreenImage) - } - FaceSDK.service.customization.configuration = interfaceConfiguration - - FaceSDK.service.startLiveness( - from: viewController, - animated: true, - onLiveness: { [weak self, weak viewController] response in - FaceSDK.service.customization.configuration = nil - guard let self = self, let viewController = viewController else { return } - self.showLivenessResult(response, from: viewController) - }, - completion: nil) - } -} diff --git a/Catalog/Resources/Assets.xcassets/logo.imageset/Contents.json b/Catalog/Resources/Assets.xcassets/logo.imageset/Contents.json deleted file mode 100644 index 7856228..0000000 --- a/Catalog/Resources/Assets.xcassets/logo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "logo.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Catalog/Resources/Assets.xcassets/logo.imageset/logo.pdf b/Catalog/Resources/Assets.xcassets/logo.imageset/logo.pdf deleted file mode 100644 index f86be6d981b6e28e6ed6743073594814a0497c52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4719 zcmb7|OK&8%6@~ZpE4UfJUbvc z&9q@ltI}!KCGYFpQ+)OI&9`63oTo{QHK!l`H5v2em*%Ulro-`_{yVuXzWdAJ`2OjG z@qjnF>iqP0xP6#*Zw~*x+aGTJ_>Fn}-S)rzdHT;Jvu%IIULL;aPoMrKb`B*3pUnPY z;`#EbyF8@j;k-Xij-&gUy*I*B6koh~m|WmF`e=>#Ii}=lH7?DiWGC53o+U~3Zi8V* z#JlLtei|!XnUjQMqj7dFS*-KMV^LyEL2Y|yYYiK0KgBs`TT|YE-PdL>=8#4pFf1YZ z9N4(8!*Z@(QZ)D2i!Q{{T=^6nuWwemI6IePO{UHqIg2;!Y_l!0J@vr$6ER6rT+W-7 z*iP!S7z|3vl3N@u*fwH)C3bAA-gDeMvvaAUaas?~lg%-ww81oD(Z%dZOkcP-)4(Mt zE)xn;Y@_v3*6@7xq5`ox?GkOEO_Dz6KWzkSm^|8=FuP zgfD8c2Y5fZ%!U#~U(VGAOPJ%FT=Lly`Q%)U)ZLW|#o!h6e)=%|I31_I|K5%fsk0MX zeKGWmx0D@a^qW1yThR%BhCUHrD|PlTZBVjV!L|AX$3qS-XPpY=jy3tvh!-Pp<<^y1icVAL|@U!a0) z21+#+j$AqE?5ore&2X5Gwxy;*3l5OJEaHMC2udfs6eCBy0*)vWuPd?rHT1)T!xWk$ zrX1M@8jwU3qANA#fl*YU_@u>5tP@G@NDGi@H-La z5_x5yJUO_DV&>P?;0DuVtve62pRgH(2Fq|`?A*QGzqI6w_G!|3Y!&Zp!t>v*_(Vk~ zji6SHPca0o_>Mwal53$j!c59x1U+@~p|%)}ySo$$A4^1$n(@l3BJZJ4cNm?Pzv-< zs||>%wpJT)GmfF461+{CZ6;ZCTVf$NInxLmthEya6zj8<>Xi#BK;{rhUgK2N4~(gx z^QAI$8U#GED|5gySlTqYOp`0ABrsP{t*xy>s^~tcGro=P{fmPKovVzY3 zJ(Rr;QrHRUjRZzfL)pw1tt#Mcas3)P zR2r_(U?D{mf0t>HZU+|urgc!57>HY)7%JU>7@}z1LUJ!cO+n%u8Fk?z)F43^2Wg?4 zvWi0@(=h_K2sMr{&>_Eu!40^-od)%0p${qDb966k%va(NJJ&i(Fy zZW?zAyRVPO)6>~}|4;51_}l&CfB!z1-P_yuhZXqi;oaTsH>aP?_oEAYJ4(=jq<>~S zT}<5^&ZnOq_lL95YmA%K-s{ux>2PFA%CUoQZy&)7V!lC}n+}Eg4an}#ckei>Q5SB^ zWuMolpLkb3ao`NHv4qUpSW*wqeZ%4T>)WT>`_ud9um1da_;Io(Pm8b3-=vor26+7w zK2F;Y#||+moqHCV53c{%W2trJM3b0>tFr&q83@V9S&0eHi&YXATM diff --git a/FaceCertificatePinning/FaceCertificatePinning.xcodeproj/project.pbxproj b/FaceCertificatePinning/FaceCertificatePinning.xcodeproj/project.pbxproj index 533169c..ac5d4ee 100644 --- a/FaceCertificatePinning/FaceCertificatePinning.xcodeproj/project.pbxproj +++ b/FaceCertificatePinning/FaceCertificatePinning.xcodeproj/project.pbxproj @@ -14,8 +14,6 @@ 5D8824DB2AD9786D00872CCE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D8824D92AD9786D00872CCE /* Main.storyboard */; }; 5D8824DD2AD9786F00872CCE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5D8824DC2AD9786F00872CCE /* Assets.xcassets */; }; 5D8824E02AD9786F00872CCE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D8824DE2AD9786F00872CCE /* LaunchScreen.storyboard */; }; - 5D8824E82AD9825E00872CCE /* sample1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 5D8824E72AD9825E00872CCE /* sample1.jpg */; }; - 5D8824EA2AD985F400872CCE /* DetectionCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8824E92AD985F400872CCE /* DetectionCollectionViewCell.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -28,8 +26,6 @@ 5D8824DC2AD9786F00872CCE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 5D8824DF2AD9786F00872CCE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 5D8824E12AD9786F00872CCE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5D8824E72AD9825E00872CCE /* sample1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = sample1.jpg; sourceTree = ""; }; - 5D8824E92AD985F400872CCE /* DetectionCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetectionCollectionViewCell.swift; sourceTree = ""; }; E18772D994B423C0DA66A9DF /* Pods-FaceCertificatePinning.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaceCertificatePinning.release.xcconfig"; path = "Target Support Files/Pods-FaceCertificatePinning/Pods-FaceCertificatePinning.release.xcconfig"; sourceTree = ""; }; F0758A1A93024D9C7CA01A6E /* Pods_FaceCertificatePinning.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaceCertificatePinning.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -70,9 +66,7 @@ 5D8824D32AD9786D00872CCE /* AppDelegate.swift */, 5D8824D52AD9786D00872CCE /* SceneDelegate.swift */, 5D8824D72AD9786D00872CCE /* ViewController.swift */, - 5D8824E92AD985F400872CCE /* DetectionCollectionViewCell.swift */, 5D8824D92AD9786D00872CCE /* Main.storyboard */, - 5D8824E72AD9825E00872CCE /* sample1.jpg */, 5D8824DC2AD9786F00872CCE /* Assets.xcassets */, 5D8824DE2AD9786F00872CCE /* LaunchScreen.storyboard */, 5D8824E12AD9786F00872CCE /* Info.plist */, @@ -157,7 +151,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5D8824E82AD9825E00872CCE /* sample1.jpg in Resources */, 5D8824E02AD9786F00872CCE /* LaunchScreen.storyboard in Resources */, 5D8824DD2AD9786F00872CCE /* Assets.xcassets in Resources */, 5D8824DB2AD9786D00872CCE /* Main.storyboard in Resources */, @@ -215,7 +208,6 @@ files = ( 5D8824D82AD9786D00872CCE /* ViewController.swift in Sources */, 5D8824D42AD9786D00872CCE /* AppDelegate.swift in Sources */, - 5D8824EA2AD985F400872CCE /* DetectionCollectionViewCell.swift in Sources */, 5D8824D62AD9786D00872CCE /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/FaceCertificatePinning/FaceCertificatePinning/Base.lproj/Main.storyboard b/FaceCertificatePinning/FaceCertificatePinning/Base.lproj/Main.storyboard index 5a77d69..025af50 100644 --- a/FaceCertificatePinning/FaceCertificatePinning/Base.lproj/Main.storyboard +++ b/FaceCertificatePinning/FaceCertificatePinning/Base.lproj/Main.storyboard @@ -1,12 +1,11 @@ - + - + - @@ -18,89 +17,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - diff --git a/FaceCertificatePinning/FaceCertificatePinning/DetectionCollectionViewCell.swift b/FaceCertificatePinning/FaceCertificatePinning/DetectionCollectionViewCell.swift deleted file mode 100644 index 63b976b..0000000 --- a/FaceCertificatePinning/FaceCertificatePinning/DetectionCollectionViewCell.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// DetectionCollectionViewCell.swift -// FaceCertificatePinning -// -// Created by Serge Rylko on 13.10.23. -// - -import UIKit - -class DetectionCollectionViewCell: UICollectionViewCell { - @IBOutlet weak var imageView: UIImageView! -} diff --git a/FaceCertificatePinning/FaceCertificatePinning/Info.plist b/FaceCertificatePinning/FaceCertificatePinning/Info.plist index d03d45b..09b93b1 100644 --- a/FaceCertificatePinning/FaceCertificatePinning/Info.plist +++ b/FaceCertificatePinning/FaceCertificatePinning/Info.plist @@ -39,5 +39,7 @@ + NSCameraUsageDescription + Camera is required to capture face image diff --git a/FaceCertificatePinning/FaceCertificatePinning/ViewController.swift b/FaceCertificatePinning/FaceCertificatePinning/ViewController.swift index 05f57ff..11f5f27 100644 --- a/FaceCertificatePinning/FaceCertificatePinning/ViewController.swift +++ b/FaceCertificatePinning/FaceCertificatePinning/ViewController.swift @@ -8,31 +8,16 @@ import UIKit import FaceSDK -enum Section { - case main -} - -typealias ResultsDataSource = UICollectionViewDiffableDataSource class ViewController: UIViewController { - @IBOutlet private weak var imageView: UIImageView! - @IBOutlet private weak var detectButton: UIButton! - @IBOutlet private weak var collectionView: UICollectionView! - @IBOutlet private weak var activityIndicator: UIActivityIndicatorView! - private let image = UIImage(named: "sample1.jpg") - private lazy var dataSource = makeDataSource() - override func viewDidLoad() { super.viewDidLoad() - imageView.image = image prepareFaceSDK() } - + private func prepareFaceSDK() { - showLoading(loading: true) FaceSDK.service.initialize { success, error in - self.showLoading(loading: false) if success { print("FaceSDK initialized") } else if let error = error { @@ -40,57 +25,29 @@ class ViewController: UIViewController { } } } - - @IBAction func didPressDetectFacesButton(_ sender: Any) { - guard let image = image else { return } - let config = DetectFacesConfiguration() - let outpupImageParams = OutputImageParams() - outpupImageParams.crop = OutputImageCrop(type: .ratio4x5) - config.outputImageParams = outpupImageParams - config.onlyCentralFace = false - let request = DetectFacesRequest(image: image, configuration: config) - - showLoading(loading: true) - - FaceSDK.service.detectFaces(by: request) { [weak self] response in - guard let self = self else { return } - self.showLoading(loading: false) - if let detections = response.allDetections { - var snapshot = NSDiffableDataSourceSnapshot() - snapshot.appendSections([.main]) - snapshot.appendItems(detections) - self.dataSource.apply(snapshot) + + @IBAction private func didPressStartButton(_ sender: Any) { + FaceSDK.service.startLiveness(from: self, animated: true) { [weak self] response in + if response.liveness == .passed { + print("LivenessPassed") } else if let error = response.error { - print(error.localizedDescription) + self?.handle(error: error) } } } - - private func makeDataSource() -> ResultsDataSource { - let dataSource = ResultsDataSource(collectionView: collectionView, cellProvider: { collectionView, indexPath, result in - guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "DetectionCollectionViewCell", for: indexPath) as? DetectionCollectionViewCell else { fatalError() } - cell.imageView.image = result.crop - return cell - }) - - return dataSource - } - - private func showLoading(loading: Bool) { - if loading { - activityIndicator.startAnimating() - } else { - activityIndicator.stopAnimating() + + private func handle(error: Error) { + if case LivenessError.cancelled = error { + return } - detectButton.isEnabled = !loading - } -} + let title = "Liveness Error" + let message = error.localizedDescription + -extension ViewController: UICollectionViewDelegateFlowLayout { - - func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { - let width = collectionView.bounds.width / 3 - let height = width * 5 / 4 - return .init(width: width, height: height) + let controller = UIAlertController(title: title, + message: message, + preferredStyle: .alert) + controller.addAction(.init(title: "OK", style: .cancel)) + present(controller, animated: true) } } diff --git a/FaceCertificatePinning/FaceCertificatePinning/sample1.jpg b/FaceCertificatePinning/FaceCertificatePinning/sample1.jpg deleted file mode 100644 index 5e4e95423c361b4f4c9444d17128c512379b21a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124218 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

    fE%t}bTiRiv zd=Q~{&_f#JAaN#ofUIXZ&uVcHI;TJOdc=}rsR1u%!_3(!Svlj;gQDYd{Z#XoT?|`f zI?Fh4n3%#N71v_}6J;7tR?b^=W&(z1W^9wG9rhj*^YbW4w@t`V`_!T@{b(N-A!0fK z2>{08!EO@|tqlI%m}?fJgAXn7jqW?=O;74uR8ietE0H>7zLq`WU4!4s7fDZv$4`8m zyM{m-8WPe=tON%p%5i?LA3NVsXNty4=i$x^rx?ZCPfkEhX}rF{dca&j3vi2I*$I1b zIPX;waU=7Ud^+|!9@kkY{BrC8#6>Lc)wL{_64WOf9yb-itag`vQn{VgN!#Y@^!pXk zo6dvT4H~?mQ{lpRFP><8ma=W|uEkNkwUWekjJ<5nFo8=#kw(?H!c@F=>omC)anp64 zxT$1+R>3fT1!fsRNH`S{j+o_gnIm6KG|!fBnGoK~s+up2#*O~$4WGzK$0;QX>CKFR zsamTxk7YlE%zpDuunh>fnZwFCAh+>&saUwmbBIC*9fOQ`mo(VpIJ%JFK5>&VV#E_& z27$~&<3Mw<1qkr9z2pK899$+XmyUd<-(PN7YA3A5kxCvI{ZNx#_by>UmmautTzhVH zUcq@#wx@;>9fQ|R3s#1Ln2l~VK9D29QK#(?bxXxsgHhf>G+dClkb>?#!mDm?iJff| zdxOsAhwi8hylzHh^wpJ0U3_54&6_db8K3SgwB{Oe1xP!zqfP5nYcV@k(y8oXY7$`; z>lSK86<&+#ylXgx9}Azx(bIr-eBc)rL_7YBHv9TH(J6Q1K`;BMY>|nQ1g2Zw)$jp5 zYurjk;Aaz}Jk^HX>)b@SN!!W2jJ`-uylxS2f9koPLHh3^8!(Lj(nk2?8-Oso^sc{y z$(T@pGT6#Nbd1Vnt$EtWTfHPKqEaj4zHVX%N^jSQ1#XRqy)OfStIB6_L;$Qvsfvr= zO(@y=`g^A*h5c%z>$(8v{oS>gdcV~QZ;+kSQa{Uu<6*8i4H*K)$!Y@`Kn3ouX3NlL zrz+POKQ$Fc8ft~7*{U4;tkQ7cb^NQxry@ynv(^4b*rnd!khs%M-o4B-eGa5ol( z)1i3V)gZ+)i^(#h;xQISwX7;pw2nQ2m+$UL!r-=NX=&*Z|4)+>jg;o$~O`wbLbs7hN+!N zJkwmuHvPydL1ufveH?p8Z19!yiH+P)zU&G>3O>3EPKPC3hZBZ*U?ACc(S=5XNgmmL zRsv6b=YyLBH;zP7mR1UjuP(01V>{1I4_5mY(z^4u&$h;kqrc7B zck&1j&;h#KeMT^Sjoj}5c`8R!t=YT!t2>rn#+bvxxp6KgE@aBJQV*`z<0h?!o-s*& z*CHy7k@rFzlc`gZg$l@9{8Yo=G~)5N{<7{r-$BtNJ$Ag&KD3Y08pjWUiObBk|#U+ zL1GmuuR45`MKyQT!w|p{PpPkJejDXqUGX*yhbE?>ZZ)h)l53CaDnDm0(78vCxP4-|!X^z)!bgSgpe*1Qcf zv_g^qX(eO#>|M9bz)QkTylk5+Jz5674K0n%jE87mumko7%qI^pK#UQ@Bv$w9r5J zI$rnF(Cf&%G%*Tba`hbAuY%ehfd=nez^$O&@oI}~CG+P zkObTXURgSkE3vs>eVlTN$q5+S^?3K<8yh_jR(fQr&UXz7mh=Jm@dE6~N0Sg)B$zcO zON7EBF6o17=XyH@My%DUjz^CqQMAx_Jp3Af-d3ZgXO3{E8O1ML*al*mbyhGa$U(Q< zlg57Kr3CAl8jD#mWFXd~A1hB(bGIJg^g?(&d}AFG*8-WeFw9|KW(Y2^geeZhM&g#p z;#pEPD4fHXldoSxbD{G)A_#&Urqwk)ubnukN`uBNkswOf6I0;f#LbUgTuRz16Opd+ zwEMojpm9XSU^p%S6>=v7mObY<5Xz1fqE|3tf?@<1Mq44uSJE^D!f*EtkIXxA-(NKu z66_q3>`VqgeKdKM_l1P?m2a(#xt69Jkl}!O0nnq6NL{Fu=E2ASq}bMiu3~xIM;2m$ zS!jS#DIXHJ*05Vw)4I2fODXg!*tv#AkQzl0QO$YRE=34h&oo*z0HzYP`D?>`y#g2I zBO^^8oLjK|#rJkR9+v7?L;RG3p-7MeaR4u(UVTl7z$aHwWV%i05wRxAl$uVrcc6f* z;ysQadLDPcFHj8rxN6Y2k!--N0x}CKu-0oigt5pd4{0h~H%E#HduZ7K?g^Z(fS5We zYrpc*@2D1By!FH=XTa#BMmtMkVf4QWyih^E%{T#1U0ll8#L&$d%ev)_D2?E4NaVl? zpfpq{JPabl{47+lu~l-AFD0rrUSl_eX;>d?#VepR&%pBIlZfWZ$Yqn|jbY3Y0)Q~J zQ#)DAXu^>kA%c+s&M>0%h@d58tMUiYS-%oZ7`NfmW%&f~7@+16Cxl=N4%-z|G zf;Xje<{QnEZBlY1478AJ0w7N&fW%cE_PwT%$bJfeLtgbXktfk$O3P(G*F1fVjG(TE z^7N(!4&(j82V+rxFujdZ&qTwR4N$X&x8JCIW2Xn3F{T2d^!t4&yOrWdC z{?d?OW{r>iTUt^d;MXb>tLjN0)3OMdY>g^i-w1f(d&}pn6k7lSFoN8}KCUwVsKB z6v6ejg){Z6esE=Q?V2`7(n1lL^l%WZ0iG2h3}Ec@C%Us$xC zD>dMCLy*^w2c#av$^i+gHtg1<%JPYm_!3A3BIS>3sLBRp+E$k4&?8HQN7U?*feK`J zz4e#chzDeYHT9el3d;F zk+Yr*lPd?21;WPia{RHeh&HSwefg6G+Lv$RSQ2xPr|s9n54 z2$3(6%C1`$3Jt;BN9lg?J=P6SPN72W21#&cPW>vYoDz8=qn8q1OfM+1@R7&aal0|G zRz*%{B?H1p)s`7BR^pNTSPu2dWYJ&=(CLDmFxOkQfXfSg>goASPUH{>s)YlXllxeb z0;hGR?XbNpI=FHu;2ZTo9Et%u2dVYN$G+9dQaN4bZOfj-0sR zd~lISSy?JEVN(REW?7;OfHh@o8ccw?YRBq)O^N~6xZkpPXWa>?5p@f~sy_A9rvPb+ zUl>*)8T-DriydxZL;zTi%D%fyOpVFlz=S-`${gV599FK5Ln2FYA_nOBZy5SPY{pK0$>W?4*WI;Glk2YNWurw1(KPBWBtJIS}^bT3NNgN zyT%e!FsdsY*UUKh#MP9KW@8GRcXp%^vJ!PTpdhP!(lxF$?+K!pi7HV$7Y1w>-;zZo zB&9gK4Oc{Qt@#y*kJg~jmyG8`zULB=`!$W}>wY*K^{(^<(u=;Phj4112xlKI$c#E;qW(Rzjp*QwG7t5~|5A{sXrRwNP6dG$)O>4;|{hqfaMo z1_D_mL54QTtj`kC@H$K@SC4yyIbW_;ZC1Erge$`ug?EL%+HGE;#rxJZEuG9b24u|5 zgUk}{XU*?95(>SAZ>p+{sDHpfKbm2pr*h;&_=T3Um#~~feF}=gD8{ds((jttx5_WZ z08h19UEqAXLq7EhnbmZ&9N5o|J7DiK)o@l&P$KC}rJd~nKf9PH;K0jfwp5YeOP-pm zoTU&-usMIeNnFsG2akT#)`}{1LE~#Pusfm{i*emDf^=vQb(E+3kz_};gP^2#QGu6d zt}BoZReR}Dbhtibl7pM3bN0N(kpChd4nU-?=*UzjgDkh4kzs;&UqG$(g4t~P%QYph z<@t7%<1Kv$&E)`uM&cA}{PT_f{^BR&NtyA^{n&@$yg)MmapTF-|3qx&5J0>kA#(vm zx7E&Yk|B>a>r5FlQBsZ*zVJXv3@zS!KZ@=$D>wBB$lZFww;ck%{d;i2-oJz6SJCjagN?s-sP zexu7m&xcH5kCyz}+Ed1~+L_n^uNrdXWZo^h>~kIGSIFaCCf`62OJ&Pre3WM*@g4~P zgs0L#-^IUqMi-C3UB8r>$*c3bIO*ykJCYIY>t#fxWm@l?pTK)@rLdLb_^U-S6vt@A zdkbb(+Jo!?x`FyifjAeXOoLZ6!;e6&H1|Ts0_|KFEzv)-M1tz|OUCz35pvcJklv!? zxuWE(oxMGiZMeFHi$jkyK$;F)BTAV1Z(@MZQVc@SVt20b)Gh4F(qd$qkvN<5V7V#@ zuYzZj)YZ7;g?5hE>f$2Jj4 z^0FzZ?Gf@SG`nG?Es6h_--A|4lkL4lnjU1Keteqf9B^}6-h#c`1s9_#3J60@d{|Qk zzz~=#e@5eOgYDa;OYGi6D~pjNs)QcFQAXHv{1^hgF%zw@Jjb6yTlqho4Orr17w++= zp}lpb1^SwgyMOCz-X{Us{$#lcb$+ErK$Qx&e$@semgyi(Mm=4DYEFHnkUz zLs(Kh5ITwhM?qX^#V*bc7x^@O zOg&M3vyf~rf&Fs4FPVG6^7Is7W*@%}^-tVkCELY<>D_I!;I}n5LxZN|TCbJ$#}C7{eB`uyx$0XNfSOfiNSkTq zMiB~%WdhPmXCD0*=E4DxxK9F~$mrPzOuDguQSp@+y+xK8A+Y2LkdBh#gP6y1*OwI! zMi=hhycK=#(6k&SO#D!{0G%KmZ^INZeBFy~{l}0I7zR~OX~;1(k=cO-S&zN+$Pmkr z^WrI+O;Y|3Q`u&E`eFiZRwm6Xfiw}$C9bPtVq_ZooKI*ji0l@py;z-FJ z!tY&F0NVD}LR|oyOa`~bE7pCE$8r8Kd%R+vEH*4~sRX2{xh1J?gPWV1XYi8KR!)`) zrs7>4Od5ds{RrqIKS~a01Y+?3%PR(I9nfQv^lfi6@KyW92Fp_zT_Ngg!G|b4F6s%Z zEeg~I)ChmeZS1|7_t{z?HZ`wZ54eMmpr*&4et%Qa6a_XNqN<%N7H_bZ%$J!f313`$ z+ZL7uDD-tE7G&klJ_O|l2Hwv%bmWL&&`>;Zx@pnG`Il&7*y6Xiy;^2xvkVa87;;1R zmeB7C7*mWRv0AFMeTl{^S5NBIBD>R~G&FoTXVf8=_rbt2i$e#bH<5^5of?B2LJcdX zMfV;B1&0u%7pOrc*~WYlvnJdIJ7T2$ZlgZZi@4x>7cGG3v#<{b)Ha0H^>sViKz?PN zr@YNkFEX9T=mUJAVLBAvXPhVl_DhV}Ar4KgEA!1h0s0e(tzQ?@(JB>3OnByPU@I>4 zsy{uDU5I4m_*=6EkQV38>y1ttBR|0kBof=J>bk9T$sF?sH4KM;L^~~i2+)>b2 zQY59+API#k}xl+dg z2arz-eaDYYfg=v&Ossw7*yDvg0KXuiXNEUs(ZYEk7#YG6f2_JnhM_12Bn;M(J(_w0 z#!YLnMK!p77KuPKj5|SMmz@I~0Y4%0n@;7n-5OWZK(dt;wHI?UI9a(;3T&Hu<)v`%|I1tmd*j(l4Y&{xFZd+fn1EvoNyfJ)o;-&;B4ntplV5&YUt4@2mUi^wU?G*uVt_&!=&Il~fPrQoTKA}MB>+4m`dMmql-OQjRe8!;zx50<$lhl%x)z*C0z#rMzqmRqK;)qz|)~&CQ>+4MTcz7ga zv+IgbM%?*fcv??^Dzfwds(B02*ym(>dtdT9rXo6wq;0)E7=3vU;(R8VPgRy}NSB2Z{(HA*>y-_8)@178wsftnOGiBS z^rwjt#qu=v{FobGDT}wJID2f)vclT;iI0mfb;5J6mT6lnS;^`{pgxF(9sqsKe}{~9 zdwxlGXzZ#o(zNSY823&;SI|#Y6h3*U=PCjvx6#x(LwEhM$XA#QgAAo=MI?P zI*nqgE3>0NH&$Qq51?IpDcE+7VCB~$Ft`69#$N|=#)2j%ngJtdc*|h-Im%rwXe|_r z>haqpR-wJLWX=_Wy{~6lL>8U{goA5U-}1LN*jol(87+zRTrRI{QIN?xnV^h4b_A-D zJfa(42&|}fN!~|~-^6J-qiOfpC9&26yg%5j&JO*0mA#?kKDmkYyDop^-B^>>Z`QbCC_lCnNQ+J{yo()zh5|4#?eFvGaHVT& zC@oK(L}J~PvIEF8)$)s#TWgT$if1$j2#!=i=jTsN_^R{|L>IqQQUbXVp3NwC$JQ^q z_Q#2?CTz7#uW)({zSHAEp36bYQG8e$j&e2&$)h)#_eI@8&&=vSNg_>8%i?`hOdF+* z5eBhTJ-a$2Eh3OCNCSP=>Ul&s(6lWY^!sRN5WX`%!N0rHv-klQ(8-1`-i^%78L8jM zH-6en$UO^9yL(9;*(tw@h((BORYmD#f`8$I3QI)Yz8T(J(idJx%xW``1$)b&utGl0 zy;Z8tFf<;RUM8QXu5G4TIYNqh7jzOKTXc)jgJF_)HvPVT@-~^+TPP;Q_U~=XFB5)& z58+V^MCbh+EHhESv^d2DYLVHe*JhvIIJRDapq=iFm^ISzYhe0qzT|Qux!D;F`V~aG zK@b^tnzj4bC_#PmlkZFKp(Y*TJ|of0Uy1ROW{!WmW$)rtxlc#(mD0b!RnbpJPj+Uw zwJpyPqTfU+2NJk-YDi`racbjOuY#c(An&V!Unjc1^ub#QT|N8tvADd&yL>O-BWh;y zCoEvT3kATWHwHhx=qA1euzkru3R<;Q_S6jP0|U{uWg$Eu-FRzzb=p6JGtPVSRyh2` z!#058MGOJ3e8k8e@uZ_Zoljpi9Dh0&vTuE|_ZD|MB%sJIw5p6@o?!jc9<%XdrcZGS z;L5t_l{jJKd3a&)zh#R}($`?bvFbP(vOOHHr091ETw;L4EO)6bV820_RCHM7yvUq$ zZ~<{2xkBE^P4iY!aSdF+r7j2P+Wh)V+{qK%E+hc4GIh~NaKd=TIP%htx5)W%T?P8I zAx-T`_;K8|G-a!{AH!|3YWw87ehka+iGk=b5Z#o1AQdi)@@|`t*FAh*DIovT<1F>M z9DGa73uT{Zw=kp?RFq>-q9{qGn5<5K5~O{0$wEu6aV#@kxzcaezVMfy=w`N#h(yJ^ zuuxJxNJ_#H0L4KY%#BQQ=@IIxIUGK?eKgiW;jxVC{PTgP!>r9ST}~i7{}Etic(xf+ zMlZKJw;QaJPgsA>0hq{7^ZMAg1y^DPt?S)nQ^j9r+-*Z+lc(3W-%kc1M5wEhp}D%# zHiAq#b&YeL2d}7Yj=iq@_Gev&=G=dFl4KoS7tVW$enEk8;AMXwkYMeMmkF2Q(~#K3kB+RtN1fyTATPY(v)V;(>=E^<0NRpAweFU$Ri@` z$(A1DKKjvTO`K8Qu4dbu}Kd# zlZAq#H?uYN23bO7Vg~D%3C0$b(@@bEA$LqcMoN|C~lQZk5BV>M-)$-8bHdS(qit@6YQb(;afYE3i7K^82H`^V2m zv4vw>cfE2X>`NxXf1ZKINsQl<7`#zL|JMD^=$Mc8v8p$=ErNsYMQ7SM9By8;CD~v= zJ@GU!XLe~}bT|Eo>N0L{s_@g}g_6V>RPW1lRjF#tZw?444foigpMJ+EuFdkCvBAgN zlc6n=#ClG2K1Y>D5qv|Fw+~jQ-SS%cv$o0)J2H1hM-C;K-Sc=1u}^(eTslR}*5QfU~! zOZco9-<&r+@+ZD$TG!Tp{HW~ZSSk`pVYgR3{nK6C(gLUu6 z^dYGCHv^Bd%}6rk<{#}vGjO(^W%3?-Gyd5(Aa(W-{@A#9q4>xn(%7Nzs`8NTMyW_j zXtB=3rka~Ss~y2b2Xf8yrsYvL4RaQEO)lxK>Wx6lwW-op?p})) z$=yRoPJk4NeIY*3dep3Pr=N_)ZZHK2`!Ygp^+w8ow$@=zf8@1zKxvf6NzDq@rc2o@ zOAT~BTg-s=g2>btc5(PidX1(TNNq?w3nrxb&HlEhi_z!4U1^v!YhpwNH|(Q56FZ0ruDkDXwc}BtJE>_fC4pda_{x^ZY{II~W)p*fyOs_@5OfKtk zu~RDsGJUh5F@+5>H80p;v;KA$E0;dT<}&`&v}N8Xb%!p^a*>cMsIQraLRBHhE$&fQ zt>zo-($>=Z($O|Itl=jldFI3xo)sfuab8%Nbpb%y zLhBmG{rMY}^!eekD4nJyqP`V6uMdOu`tnQae&bxnKX~6R-Twg9cXAbzog_D)Efo86 zbZOWjM-G#=k9i^581{G-_z!it?R$<+K*L_ysx`4!*fr|nnZMRWOWF0|rzSo2Vza0D zy?Lj?SJTUOT|hB{Ca7{kf!0?|nL=^-g{b$hi{Q2^8WXzOt}vimh?ho38o5IvDc$v0 zr$&1@sT<=xEghmUba{8!$Ef`DLpDZ8WLHTPZC%5;KKjd`2&~<~qZljCn4!|?`MjOR zi;D}#EZOdtevds}mRuX|4lR3JgMQOmxgzJ+I>wP4KbvI<{~cSCMyPf-axp;)=3b{P#HT;zWq6Wjwy7DbjC)#_v*IbP*RA$l|4adW{9DnZUH2Hq18aiA z;OSGk(#ehBiVl;vRI2m}a4vF%(wJ9=J!*bXLc~SEX2463$Rjaa1&@*l^ldgOB$T9R zGk6q>)awN_68<#1SWPy$rleLO@hENh9zq_b%dJ6orvFa$dDG+L#fCeQg7Qy~UQ#8^ zI5h6asZ-n(N8MDpdrF;nP2(iV*4K=dt27D*2@BUp5Fz?p0BRBenVo;HB!^8RedS)4 z%jK4iwG$CRv@pqa`f0Xk^jh+3_-@nn`8Kuk-H8@`RP>2HLdB3t(7WJ#EEYj!tuw=| zp45G~lJvr)yP9BI+Pflo1BSDU=_fLc^#&#N>jBdYP*;EmWd=^C{N&P5=L&a^HCV4g z(+CJnyy3o3*%>1qSXo|JRuHP|vX0m@r`G^>=AovcI|+wTLsf;toY2q!S<9V0phLqL z#=a&RTRy(vLWr|O7r@9y_{vg2_M)wh+k9uzGz896j2H=_B_?+Pf6lCX|0Ri1uLW%+ zS#A$E#i4UK&P_PsK>B#}&8|gXQY4(mCSdy1xv5kk`opdvq9AX;zbtt8neQuEJ-}2I zSKVlx`_uyie$=yjw{URe`)xH`SGg{h1*b4OuuH)Ekz;$|F} z$@oI@(P=#>m)WUcGo8;R>T;=&k}O_vWXd1~zdP(@SYc5^pX0Xh{gNiU*L3(;#21I> z8a>lBvt?^d@Cp39Xbk;c7r|7Hg?!EL&7tWis`~z!<+9woFYn14gL;au*N#PVjcVHg zTDo*9B!VqgSu&5xQh1*jb;R#Pj}~v-S#byYTZFHocxWz zT3VgTK43}@CiR98^4nbDbrT~vCa-q&)Y&YWd^vby8=SqeWFi8dTsS7I9?TS)AJr<# zxlWJ;S4#GN{$x5X;C$JqfZKlwlH8K<&nHY4KfTl$!VCG-FWR52ew3_K`Tb@VSRWU< z?2v)pywM6CJ@rPC2Is<|Ri~@#%4^YFmllTAgNtdL+r1X@xmUJ?as0`!Thn&mDn4O7 zdtpxvth^ywgkQCPtC~|&*;s=DZhUF%uH@1|JK5A4&+^IdJsvhhvDy9dxI%M6PQXuk zNbGH0=iYc`E8LIze5^q9n5a7E(-lA!y>YaTtJ zJ*7J^zVgxQES-S3+ZoubNjZ*ielluAB7ufy^_jsr;)O_;OZ? zRdvY@KQUzmKW2o)l>WXy8;Xkv()VJUg%-a_7Q6QHty2Zw?&oiUTBkeq%yK?D+kWht z`@NA!D3nU3O@0X^<$b+*=LXYg*G{CoH`*Fv{sZ+M2E~P;;nh!1g!GFj%yEJ%rGrzB zVkv56*?tU>Y5l6*+AEk<=`b+>bd>HdNeaDr(yQ(Ee~!mTNQt3#o~AqV&*Yu)iv*%R zkZ_#mYZk$?7;{3^X_WNe)$wB5rIiqV!OM2LIzP^dh7mbeR-w;!!e*7rerE zaJSWV zKgxuivX-WW_bo)nZvheJ?PRR<_b6w@0@?BJx1h;qTmlEu8LOfJ4hG8qCaH;FJC(YU>%5%C5 z%x`kz_{IVb-bsB%?9mc>qdr?`nX+db#oN(%#04Qx2gn$3NSyn` zxl+%=9=X(#qUhB;n{cu0>m*@9t<_}0-115L>KVJ*xy|a5ZDvsT^mkv@5lUJCJ?z`o zVscs&0!48x8i}WJRMn+wvqY>(o$$D5lP;h!DkPDZceHUBd;bFSKQpe!d=3FTG# zyO>`=jwNquS?AsCQojTi!yBP;n$<+`*SW^fs~D-y8C>bjP|e^qb*&=JX)M?wty=tv z0(lZ4=dVgnY`!W9Rn6nvB6aqsKaMT9u5O}-oS4%2jE4s62lr%`UDo>h1@{hp7Jgo@ zd(E$V`PuWd&oD=1+r?)}FRiSY_h_9L6chwJ**&@<%ZQd&^d_jdRU*ycJG0W)^>=BU z@G(S^l&%Kcb!QJ*v&QS0`5otf)F*wqlo!D*`q(iZl50dVq(?5YWpbY?f;j#_UU?&V z@F@{vfF>#rL41F#-Ai_AMDPw4nn9cn1~%q1q{Ry*KNH=Y3h9|IyFua|regrBH&rzskgPX5tA=5ZBkcWKtH% zgfEr`fJVG?HBVjED0hk@fW8v>*?t<~QoY)V;-b!ri8f@IvTf?<6cC2Ww$@Ayf*cIDaDkIg!hL%XQXULbH zfTHu;UCN-W-*gCU8#5c`?8gy!TuW%o`pfh^x-P#y(ZKVADNCzzA$1l!Hs#IUy5{5I z7z@q7BMBybWDr!Jc*VTc1!y)JWpYmxC@_+XqAC?y9ic+5UYQ@oUs&du3 zb$H;AtCbeTvaPdGN86jq)g}y>2x4g5>_s><*(N-OT}Z04SF6Ic)_X6sC?q|Sx$_W2x& z7zg1TbOWI=$Ylo-H_VYA96>ey<{S3g-ZH#|(r4-}Ow_TK2P%Y1PZYWKITs24?TG@D zs*b}G>D+@??F%04msiieN?QoLYU1us)#N`#dr+7YWa-?qK*IHRgupfw2%E8JvaXq5dKG0#dX^G2Qah!Qj} z{1t@Ybe}f2c!H;}*h|LrJ~@Y-OW)7O@%?hUVLM}6f@or`JwpD@Upq(`8mKc~s8u{3 zEgSB;2NKC*PNwjhTxD8tXbyA=N|SXCWSj*|q%(V#d>?**{Ivy=D14lIv&E~K1&sGS z0204{s)x~OGb3u&G5Byo@2A0;f}$}q{+UQ{11A&ZcD|L@ZYVqY?{5U)9fdYGwjpcj zO#JbpO9g|c4_MXoFxHK8AbG+T&z`kAtoVB|WoZ=5*$I3+FA=Ey93Ar4kI|@Npp3Bk z>F0kaBXSchM+5zpF&OGCtej4)oUqSo+BMl#(>lz41`ey-UiM1OAt`r|Km3LXg5{-g zLs6>EE=l{wXaS1`>L3Bk@^s4077A9-r;xl3bG)sj6kpx4701DW0X0i!Ow^ar|1Jj} zIV=QX5uIDOXN|TI3-m)Mqg@s4JR;88gI|2qpYoZ9VlMmb$CfcVl%-9MjDp^7SXY`D!^ABz-FWq| z;7GsBKFrPx0Dt}*zz^Uq+v67wToe$V`&$5D<_+-^6Bn&4p4z2i#xcL}HR{V8p1jA7 zBdPP9RDQbPCCNX(dy1hu#L}y;k#KB7Bod$>vJ;Tu&O>deoBln^;K=}Q=Ef|&?LPfoY zuNuyj|7}Q&0m?~&;B?W>simc5IVCxHU*bCs4_Zeb+RoWSCNZWBlf)F>OG7L(fs8+3 zQ^Yt@IgXtDmHIh*Zj`g0s&BiHWwDh(U8_RPy=S^hgMpp?io%>H2N z$M&|*BA^!d0NT#Nu=7YghTppUYdKZ);_r{Djag5IdiZ{LCDapidQq)bQU2SuZjtFNDXF}v{TRd?e2Xa54*q%i?LHK948 zs-`QyprAalqW`ioq8=|HO>$9+qI`TuDnsV8REA+cYu$#`ceMWwC-7R*Pu~F@Z%_jX z5b#yV=QGGBCwXAp=x)zDdC0EZp(gD`;6(T6$3IKULI(?@v~qqg@}B1n`HpU%bCB{H zTHbdhMa8jbDiNXFuLsh-5Tc*LFO~i{2Jk=#{URS}bC9yuMVrFe7jj2)ei*~S<-kYU zhbnU|NN?Nc7Lq-j%SSeCg_0Z3Q&VZ>CI4Fpa^#_$+5Ct-9ZHhG5~9+%E$cwN424v=#BHh=_d8)JGs3J|*Pm4t^i`kN3}liC z8X`nw|9Gh?ynRFY^4!CIfCKf{OJi|)y2s(e^70IsAih=b{(V!J+;fk=d{$l2y#da;Ua3MOzBrZ8?l98bYeeBYFQpgdpZa&hPD{dbd7|4bYb%z>81$oG?5 z5fT#4sGO9zre=+qk_&5c-`XwvQ-Fr!$@|VTo{|K^e^tGj>HBS7&i+KX5}`}_dy23! z2AVE?y<*7piH}zDLE4889~4XPr3i{|zR7>4E#~`cpHqFgHT#%jC)0f1T*u$(`AXiI7ecOr{-SKJPig+|j~c%1sGRRCc7pKlAtt5{Zw z_O8}V7&ML^P#caqV zWsnd-fB%%lWpi4;^h??tDOok|pPB=xZ~nlmpjR&ac|PwjW^^snBlsz9TvXYtFDRQM zlvKXvW_Pu(xd@Ma`5wxDVI^K22F%pYvDtkHXdP$^-=V@92yYUZA1%Dydw+J0Fe2Tx zsjKJFw7T2Om+*|@|D8w1yDW`Ox$+o(y49>6!8!_@0!(h=q~A4DE)c(> zv|3@KJ`eO+E~9dr%j8mj`Sxm}S(sNGGIOzLV0(o=5#I5uHNDd-xtZvUm#`V7vJ2D>|NKxHqnn(x zN^^;)`-F;|{I)iwV#8UX7mG#Ry#(8f)4kgF%^EJu_QKD2Ht|87`JY|pM7Az`t5Kj_ zf7O_<=sO4A5V#Q;)BSqcD`lrJAX!)+5A&R@bzC4L6(wt@X%voiSZDh8k%X|o&UZid zdj;8f-S(Ad2ste?;eLgfy#NZ29;E)ZM?~Ih?_mT3_PX)EUqG`lAPj8j`uD!{2>RF$ z{rcs(^gNG=#eidu9mzlKy=~3vHN`(?hy)tNETL}(44wmDm{?Y%V8&GRlb~5|OyjLU zVQ~L8kVrXyKR8F0-*l^p#~b&5yMzRj#>c2^Ci>ZIj5#=S`G)1Ems-|tTe>=ag0TA! zj9r65%_mi3OMLQP9(Cm6Q!t!Wf`9XKWrXFsYRSFrnX9?(Br#ERWqZn|H_!QGK1U9o zH(H?LbJe3cJ(4Ji^X{K*W+8)x9VM)*`MZ02Hwf|Y@Gzt9lqi_XKV70zZda>GB4>Lp zN<)7dGiOxwGeYFwIB+P9KHqu>DD%&_-4v?2Fw(Ky#r2X|4btrQeP{U5_HlqZ`S)GI zCseh6lL% z7@d)56%d&<1%P13GX6lFiH*fR!LGEi%dJV$xOZ{*rs6;2ij2YW23ln^s69|Ho6SD( zN_r4=ry9;~vh?|lH@bbonhL+=^XCp)jT1fx?`x!HUSLu+-T8a$0MAIiEvj*Pcv!Xk zXhJsb2?N_2c$S!`KQY15`EYS@F~)|`3x)BJIsS*!?tkgPQ%qUe2BtjvPhX1!-z4D5 zYpO;?MLqexo2l>oHSTdpReaS&4E=Zj}F}*C3 z;X(ajf9k^;&Yp{|fw=Ae-EB=wS=&THWcS#^;;IEwekS*3q6=)gB7KJks$IQ5=Gn~3 z<753<-8(7fvVb=B-^;)vgzQ6q{JvcGL;KS`wVC1r@ekXj9T1DE+1xdiUH3=^a)Tq~ zPSJl8qlrO*Rj#Y`!cJK^89qAO*_AxcA+;1HU?nFc!ym}HBwP(z`k`Ki{qKS%-`(el z!0~ZRcz;=^OA*!RtEx^VKc(Ry&sZL-mfl{?6yM;H9L?GfxLdzxlzkhMH;LQCSbe@X z#h#j)I@%5M3tY-*@p+=Uae2zMjRp1iYPI6lywRhO`=tL|i35|Vig8LgK?3f`$mEA5 zS%wu(dK4{=#3pua+qy^peQIE!i&pM|IJvR^*(y1>-`8bBg3l;!y_ITu)w}QT>X5|) zpv4E{rOYz#k={}z!yV>8U?<`Uj-I?4<)^+q$7m=yS|}Wz(XuLPJrSOIbOQZ?juUBe|8gO zU-HnwCaTcp>i7NFK$FZB{>^|xxmg!2@AI7YXEu@}e9~%r2ZzB!X0zsXFYQavHT-v5 zXs)!JuN*haeH0~+Sq_<505hAMSO3dwuD+}Q3vE}KHiU5*Jo)+eV;E$iLC*cP=_x6% zE%MrRJB>7@GCUz~I>%Wkm0-?zUg z#aaBYA-Uk+Y@jrxDB`g$XUC$;Gm(*z~~ zd03D#K;W(38TU%gHF zF)Gz$^RY{>Y!)s;7WV#t(L!EU>I8@qxSO71(tM>+|3B6PRY)1AcM0nQy%FDDKd0Gh zfvE7Uw5UFT#HnWS`5toM;1ue!Q=l$-|9$!kR+N(?xoE*>O0sd)_z4a!j%Wut2G z4p&-XNb>Qw;1oN?&kz1P{j#Bf83~^vt8v@sdrx+CV-KTl_rBL%`|;z4d-eHU_i~$U zD;sa<%Yc7|0qi`n5>x_s)})V)LkLJyr0Dz4g9*4>b=eVN7DbA~QGh_ejK29gqx4l_=nh%Ba zLPv6Tpip`6BEoY5w~okZRaV;O_3cs24ym_Ub@!@aXikJo&()zLU`n zoBD4N7~J5Wcrh_{R??r}>X)8mO*_t1S&s(1`npzgU?Q}X2mONnzlh5_rDp2J*(t@^vE+Z z>Sdx!Zr;Zk+R;LIM)&AhC%{CHfJXrg7g&TysuY5XGEa9KKMH%b3w@JlV>4=QWb2wZ8;vMLX;yg2M9svoroyl?R9yi3*$%L$msy~v z`y)=*Ms~;jh+db#&$&XH%~7f&}%H^MqrKE`Yv%89YVdwaxtc@~n3#-lV<_GNiffz&Hy**`@L!2BQb(k-W)Cq9RZWS_Glg!d3RUIm+h$CJPKMK??~!W z;k*`R!5>}7T)aV^O4x3RP0ok^)Y7Kbve1yZiRxUqE9Q6WH1xcH`$txmza-Ak#!cYr z^>tnOK~teh$t^n>trLc4VX2(1+z(2NIgP^}kR8@vQ!%5&r~fnf;8b%cLYH_55^uMD zM;)xW`V?GNA8>PRZhj&mux`i(dF#3KMsv4M>35j7I08wEGk4l7K8&KnSDm7fso7U1 kF4Xw&KZCmRrtJo`(4!$l>h6c + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Catalog/Resources/Info.plist b/FaceSearchSample/FaceSearchSample/Info.plist similarity index 92% rename from Catalog/Resources/Info.plist rename to FaceSearchSample/FaceSearchSample/Info.plist index eee02dd..cd70999 100644 --- a/Catalog/Resources/Info.plist +++ b/FaceSearchSample/FaceSearchSample/Info.plist @@ -26,9 +26,9 @@ NSCameraUsageDescription - Catalog requires access to your phone’s camera. + FaceSearchSample requires access to your phone’s camera. NSPhotoLibraryUsageDescription - Catalog requires access to your photos. + FaceSearchSample requires access to your photos. UIApplicationSceneManifest UIApplicationSupportsMultipleScenes diff --git a/Catalog/Core/PersonDatabase/DatabaseCreatePersonViewController.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseCreatePersonViewController.swift similarity index 97% rename from Catalog/Core/PersonDatabase/DatabaseCreatePersonViewController.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseCreatePersonViewController.swift index b3355f5..b55e6ca 100644 --- a/Catalog/Core/PersonDatabase/DatabaseCreatePersonViewController.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseCreatePersonViewController.swift @@ -1,6 +1,6 @@ // // DatabaseCreatePersonViewController.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 21.06.23. // Copyright © 2023 Regula. All rights reserved. @@ -95,7 +95,7 @@ class DatabaseCreatePersonViewController: UIViewController { //MARK: Actions @IBAction private func didTapAddPersonImage(_ sender: Any) { - imagePicker.presentDefaultActions(from: view) + imagePicker.presentPickerActions(from: view) } @IBAction private func didTapCreatePerson(_ sender: Any) { @@ -190,8 +190,7 @@ extension DatabaseCreatePersonViewController: UICollectionViewDataSource { } extension DatabaseCreatePersonViewController: ImagePickerDelegate { - - func didPickImage(delegate: ImagePicker, image: UIImage) { + func didPickImage(delegate: ImagePicker, image: UIImage, sourceType: UIImagePickerController.SourceType) { images.append(image) collectionView.reloadData() } diff --git a/Catalog/Core/PersonDatabase/DatabaseCreatePersonViewController.xib b/FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseCreatePersonViewController.xib similarity index 94% rename from Catalog/Core/PersonDatabase/DatabaseCreatePersonViewController.xib rename to FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseCreatePersonViewController.xib index 0740154..4fe97e3 100644 --- a/Catalog/Core/PersonDatabase/DatabaseCreatePersonViewController.xib +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseCreatePersonViewController.xib @@ -1,16 +1,16 @@ - + - + - + @@ -51,8 +51,9 @@ - - + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + - + - - - @@ -95,10 +110,11 @@ + - + @@ -115,7 +131,7 @@ diff --git a/Catalog/Core/PersonDatabase/DatabaseUpdatePersonViewController.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseUpdatePersonViewController.swift similarity index 98% rename from Catalog/Core/PersonDatabase/DatabaseUpdatePersonViewController.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseUpdatePersonViewController.swift index ce3a693..2f8ba90 100644 --- a/Catalog/Core/PersonDatabase/DatabaseUpdatePersonViewController.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseUpdatePersonViewController.swift @@ -1,6 +1,6 @@ // // DatabaseUpdatePersonViewController.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 23.06.23. // Copyright © 2023 Regula. All rights reserved. @@ -259,7 +259,7 @@ class DatabaseUpdatePersonViewController: UIViewController { //MARK: - Actions @IBAction private func didTapAddPersonImage(_ sender: Any) { - imagePicker.presentDefaultActions(from: view) + imagePicker.presentPickerActions(from: view) } @IBAction private func didTapUpdatePerson(_ sender: Any) { @@ -358,8 +358,7 @@ extension DatabaseUpdatePersonViewController: UICollectionViewDataSource { } extension DatabaseUpdatePersonViewController: ImagePickerDelegate { - - func didPickImage(delegate: ImagePicker, image: UIImage) { + func didPickImage(delegate: ImagePicker, image: UIImage, sourceType: UIImagePickerController.SourceType) { pickedImages.append(image) collectionView.reloadData() } diff --git a/Catalog/Core/PersonDatabase/DatabaseUpdatePersonViewController.xib b/FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseUpdatePersonViewController.xib similarity index 100% rename from Catalog/Core/PersonDatabase/DatabaseUpdatePersonViewController.xib rename to FaceSearchSample/FaceSearchSample/PersonDatabase/DatabaseUpdatePersonViewController.xib diff --git a/Catalog/Core/Extensions/Person+Metadata.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Extensions/Person+Metadata.swift similarity index 95% rename from Catalog/Core/Extensions/Person+Metadata.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/Extensions/Person+Metadata.swift index f1542a2..d2be431 100644 --- a/Catalog/Core/Extensions/Person+Metadata.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Extensions/Person+Metadata.swift @@ -1,6 +1,6 @@ // // Person+Metadata.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 27.06.23. // Copyright © 2023 Regula. All rights reserved. diff --git a/Catalog/Core/Extensions/UIImageView+Load.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Extensions/UIImageView+Load.swift similarity index 97% rename from Catalog/Core/Extensions/UIImageView+Load.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/Extensions/UIImageView+Load.swift index 1803ba2..0dc17a1 100644 --- a/Catalog/Core/Extensions/UIImageView+Load.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Extensions/UIImageView+Load.swift @@ -1,6 +1,6 @@ // // UIImageView+Load.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 15.05.23. // Copyright © 2023 Regula. All rights reserved. diff --git a/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImageHelper.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImageHelper.swift new file mode 100644 index 0000000..b8ae660 --- /dev/null +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImageHelper.swift @@ -0,0 +1,68 @@ +// +// ImageHelper.swift +// BasicSample +// +// Created by Serge Rylko on 30.08.22. +// Copyright © 2022 Regula. All rights reserved. +// + +import Foundation +import UIKit +import FaceSDK + +class ImageHelper { + + static func drawFaceDetection(onImage image: UIImage, + detection: DetectFaceResult, + color: UIColor, + lineWidth: CGFloat = 9, + pointSize: CGFloat = 14) -> UIImage? { + drawFaceDetection(onImage: image, + faceRect: detection.faceRect, + landmarks: detection.landmarks ?? [], + color: color, + lineWidth: lineWidth, + pointSize: pointSize) + } + + static func drawFaceDetection(onImage image: UIImage, + searchDetection: PersonDatabase.SearchPersonDetection, + color: UIColor, + lineWidth: CGFloat = 9, + pointSize: CGFloat = 14) -> UIImage? { + drawFaceDetection(onImage: image, + faceRect: searchDetection.rect, + landmarks: searchDetection.landmarks, + color: color, + lineWidth: lineWidth, + pointSize: pointSize) + } + + private static func drawFaceDetection(onImage image: UIImage, + faceRect: CGRect, + landmarks: [Point], + color: UIColor, + lineWidth: CGFloat = 9, + pointSize: CGFloat = 14) -> UIImage? { + UIGraphicsBeginImageContextWithOptions(image.size, false, 0) + guard let ctx = UIGraphicsGetCurrentContext() else { return nil } + ctx.saveGState() + ctx.setLineWidth(lineWidth) + image.draw(at: .zero) + + ctx.setStrokeColor(color.cgColor) + ctx.setFillColor(color.cgColor) + ctx.stroke(faceRect) + + landmarks.forEach({ landmark in + let landmarkPointSize: CGFloat = pointSize + let size = CGSize(width: landmarkPointSize, height: landmarkPointSize) + ctx.fillEllipse(in: CGRect(origin: landmark.cgPoint, size: size)) + }) + + ctx.restoreGState() + let img = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return img + } +} diff --git a/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagePicker.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagePicker.swift new file mode 100644 index 0000000..d0243a6 --- /dev/null +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagePicker.swift @@ -0,0 +1,92 @@ +// +// ImagePicker.swift +// BasicSample +// +// Created by Serge Rylko on 26.08.22. +// Copyright © 2022 Regula. All rights reserved. +// + +import Foundation +import UIKit +import FaceSDK + +protocol ImagePickerDelegate: AnyObject { + func didPickImage(delegate: ImagePicker, image: UIImage, sourceType: UIImagePickerController.SourceType) +} + +final class ImagePicker: NSObject, UINavigationControllerDelegate { + + private let pickerController = UIImagePickerController() + private unowned let presenter: UIViewController + private unowned let delegate: ImagePickerDelegate + + init(presenter: UIViewController, delegate: ImagePickerDelegate) { + self.presenter = presenter + self.delegate = delegate + super.init() + setup() + } + + private func setup() { + pickerController.delegate = self + pickerController.allowsEditing = true + } + + private func action(for type: UIImagePickerController.SourceType, title: String) -> UIAlertAction? { + guard UIImagePickerController.isSourceTypeAvailable(type) else { + return nil + } + + return UIAlertAction(title: title, style: .default) { [unowned self] _ in + self.pickerController.sourceType = type + self.presenter.present(self.pickerController, animated: true) + } + } + + private func actionSDK(title: String) -> UIAlertAction? { + guard FaceSDK.service.isInitialized else { return nil } + let action = UIAlertAction(title: title, style: .default) { [weak self] _ in + guard let self = self else { return } + FaceSDK.service.presentFaceCaptureViewController(from: self.presenter, animated: true) { response in + if let image = response.image?.image { + self.delegate.didPickImage(delegate: self, image: image, sourceType: .camera) + self.presenter.dismiss(animated: true) + } + } + } + return action + } + + func presentPickerActions(from sourceView: UIView) { + let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) + + if let action = actionSDK(title: "Regula FaceCaptureUI") { + alertController.addAction(action) + } + if let action = self.action(for: .photoLibrary, title: "Gallery") { + alertController.addAction(action) + } + if let action = self.action(for: .camera, title: "Camera Shot") { + alertController.addAction(action) + } + + alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) + + if UIDevice.current.userInterfaceIdiom == .pad { + alertController.popoverPresentationController?.sourceView = sourceView + alertController.popoverPresentationController?.sourceRect = sourceView.bounds + alertController.popoverPresentationController?.permittedArrowDirections = [.down, .up] + } + + presenter.present(alertController, animated: true) + } +} + +extension ImagePicker: UIImagePickerControllerDelegate { + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + guard let image = info[.editedImage] as? UIImage else { return } + + delegate.didPickImage(delegate: self, image: image, sourceType: .photoLibrary) + presenter.dismiss(animated: true) + } +} diff --git a/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagesPreviewViewController.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagesPreviewViewController.swift new file mode 100644 index 0000000..87fac34 --- /dev/null +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/ImagesPreviewViewController.swift @@ -0,0 +1,90 @@ +// +// ImagesPreviewViewController.swift +// BasicSample +// +// Created by Pavel Kondrashkov on 5/21/21. +// Copyright © 2021 Regula. All rights reserved. +// + +import UIKit + +final class ImagesPreviewViewController: UIViewController { + private let images: [UIImage] + + private let imageView: UIImageView = { + let view = UIImageView() + view.contentMode = .scaleAspectFit + return view + }() + + private lazy var nextButton: UIButton = { + let view = UIButton(type: .system) + view.setTitle("Next", for: .normal) + view.setTitleColor(.white, for: .normal) + view.backgroundColor = .windsor + view.contentEdgeInsets = UIEdgeInsets(top: 5, left: 16, bottom: 6, right: 16) + view.layer.cornerRadius = 5 + view.clipsToBounds = false + view.addTarget(self, action: #selector(self.handleNextButtonPress), for: .touchUpInside) + return view + }() + + var currentImageIndex = -1 + + init(images: [UIImage]) { + self.images = images + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func loadView() { + view = UIView() + if #available(iOS 13.0, *) { + view.backgroundColor = .systemBackground + } else { + view.backgroundColor = .white + } + + view.addSubview(imageView) + imageView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + imageView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor), + imageView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor), + imageView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor), + imageView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor), + ]) + + view.addSubview(nextButton) + nextButton.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + nextButton.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: -40), + nextButton.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -40), + ]) + + nextButton.isHidden = images.count < 2 + } + + override func viewDidLoad() { + super.viewDidLoad() + imageView.image = nextImage() + } + + private func nextImage() -> UIImage? { + guard !images.isEmpty else { return nil } + currentImageIndex += 1 + currentImageIndex %= images.count + + self.navigationItem.title = "image: \(currentImageIndex + 1)" + + guard images.indices.contains(currentImageIndex) else { return nil } + return images[currentImageIndex] + } + + @objc func handleNextButtonPress() { + imageView.image = nextImage() + } +} + diff --git a/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/DBButton.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/DBButton.swift new file mode 100644 index 0000000..c173657 --- /dev/null +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/DBButton.swift @@ -0,0 +1,28 @@ +// +// DBButton.swift +// FaceSearchSample +// +// Created by Serge Rylko on 18.07.24. +// + +import UIKit + +class DBButton: UIButton { + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setup() + } + + private func setup() { + self.backgroundColor = UIColor(named: "windsor") + self.layer.cornerRadius = 5.0 + self.layer.masksToBounds = true + self.setTitleColor(.white, for: .normal) + } +} diff --git a/Catalog/Core/PersonDatabase/Supplementary/PersonImageCell.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/PersonImageCell.swift similarity index 98% rename from Catalog/Core/PersonDatabase/Supplementary/PersonImageCell.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/PersonImageCell.swift index cf43044..3f95607 100644 --- a/Catalog/Core/PersonDatabase/Supplementary/PersonImageCell.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/PersonImageCell.swift @@ -1,6 +1,6 @@ // // PersonImageCell.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 15.05.23. // Copyright © 2023 Regula. All rights reserved. diff --git a/Catalog/Core/PersonDatabase/Supplementary/SearchPersonHeader.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/SearchPersonHeader.swift similarity index 85% rename from Catalog/Core/PersonDatabase/Supplementary/SearchPersonHeader.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/SearchPersonHeader.swift index e46594a..7b482c8 100644 --- a/Catalog/Core/PersonDatabase/Supplementary/SearchPersonHeader.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/SearchPersonHeader.swift @@ -1,6 +1,6 @@ // // SearchPersonHeader.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 15.05.23. // Copyright © 2023 Regula. All rights reserved. @@ -26,12 +26,12 @@ class SearchPersonHeader: UICollectionReusableView { private func setup() { addSubview(headerLabel) + headerLabel.textAlignment = .left } override func layoutSubviews() { super.layoutSubviews() - headerLabel.frame = bounds - headerLabel.textAlignment = .center + headerLabel.frame = bounds.insetBy(dx: 20, dy: 0) } } diff --git a/Catalog/Core/PersonDatabase/Supplementary/SearchPersonImageCell.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/SearchPersonImageCell.swift similarity index 99% rename from Catalog/Core/PersonDatabase/Supplementary/SearchPersonImageCell.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/SearchPersonImageCell.swift index eef9040..c14b2d2 100644 --- a/Catalog/Core/PersonDatabase/Supplementary/SearchPersonImageCell.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/SearchPersonImageCell.swift @@ -1,6 +1,6 @@ // // SearchPersonImageCell.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 15.05.23. // Copyright © 2023 Regula. All rights reserved. diff --git a/Catalog/Core/PersonDatabase/Supplementary/UpdatePersonCell.swift b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/UpdatePersonCell.swift similarity index 98% rename from Catalog/Core/PersonDatabase/Supplementary/UpdatePersonCell.swift rename to FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/UpdatePersonCell.swift index 8c223e9..ee6fa7f 100644 --- a/Catalog/Core/PersonDatabase/Supplementary/UpdatePersonCell.swift +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/UpdatePersonCell.swift @@ -1,6 +1,6 @@ // // UpdatePersonCell.swift -// Catalog +// BasicSample // // Created by Serge Rylko on 27.06.23. // Copyright © 2023 Regula. All rights reserved. diff --git a/Catalog/Core/PersonDatabase/Supplementary/UpdatePersonCell.xib b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/UpdatePersonCell.xib similarity index 84% rename from Catalog/Core/PersonDatabase/Supplementary/UpdatePersonCell.xib rename to FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/UpdatePersonCell.xib index 988c346..54154d7 100644 --- a/Catalog/Core/PersonDatabase/Supplementary/UpdatePersonCell.xib +++ b/FaceSearchSample/FaceSearchSample/PersonDatabase/Supplementary/Views/UpdatePersonCell.xib @@ -1,17 +1,16 @@ - + - - + - + @@ -21,13 +20,10 @@ -

    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�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 diff --git a/FaceCertificatePinning/README.md b/FaceCertificatePinning/README.md index bd9d6b9..91b13b0 100644 --- a/FaceCertificatePinning/README.md +++ b/FaceCertificatePinning/README.md @@ -1,6 +1,5 @@ # Regula Document Reader (iOS version) -The sample project for working with the -[Mobile document authenticator Regula 1120](https://regulaforensics.com/en/products/machine_verification/1120/). +The sample project for FaceSDK usage with identity pinning # Content * [How to build the demo application](#how-to-build-the-demo-application) diff --git a/FaceMatchOffline-sample/FaceMatchOffline-sample.xcodeproj/project.pbxproj b/FaceMatchOffline-sample/FaceMatchOffline-sample.xcodeproj/project.pbxproj index 2b91d8f..9e9b20d 100644 --- a/FaceMatchOffline-sample/FaceMatchOffline-sample.xcodeproj/project.pbxproj +++ b/FaceMatchOffline-sample/FaceMatchOffline-sample.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 5DDFD67F2C417A3300B633C2 /* ImagePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDFD67E2C417A3300B633C2 /* ImagePicker.swift */; }; + 5DDFD6822C417B5000B633C2 /* ImagesPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDFD6812C417B5000B633C2 /* ImagesPreviewViewController.swift */; }; 9D3A46F52B21F44400E9CDD6 /* regula.license in Resources */ = {isa = PBXBuildFile; fileRef = 9D3A46F42B21F44400E9CDD6 /* regula.license */; }; 9DC3ED4E2B21E9E100036A7B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DC3ED4D2B21E9E100036A7B /* AppDelegate.swift */; }; 9DC3ED522B21E9E100036A7B /* MatchFacesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DC3ED512B21E9E100036A7B /* MatchFacesViewController.swift */; }; @@ -19,6 +21,8 @@ /* Begin PBXFileReference section */ 22E290F2097F0C619F5AB9DB /* Pods_FaceMatchOffline_sample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FaceMatchOffline_sample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45BE38723E4EBB7EF922AB6F /* Pods-FaceMatchOffline-sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FaceMatchOffline-sample.debug.xcconfig"; path = "Target Support Files/Pods-FaceMatchOffline-sample/Pods-FaceMatchOffline-sample.debug.xcconfig"; sourceTree = ""; }; + 5DDFD67E2C417A3300B633C2 /* ImagePicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImagePicker.swift; sourceTree = ""; }; + 5DDFD6812C417B5000B633C2 /* ImagesPreviewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImagesPreviewViewController.swift; sourceTree = ""; }; 9D3A46F42B21F44400E9CDD6 /* regula.license */ = {isa = PBXFileReference; lastKnownFileType = file; path = regula.license; sourceTree = ""; }; 9DC3ED4A2B21E9E100036A7B /* FaceMatchOffline-sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "FaceMatchOffline-sample.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 9DC3ED4D2B21E9E100036A7B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -42,6 +46,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 5DDFD6802C417A3700B633C2 /* Supplementary */ = { + isa = PBXGroup; + children = ( + 5DDFD67E2C417A3300B633C2 /* ImagePicker.swift */, + 5DDFD6812C417B5000B633C2 /* ImagesPreviewViewController.swift */, + ); + path = Supplementary; + sourceTree = ""; + }; 670DDC73882ECAE0C2C59565 /* Pods */ = { isa = PBXGroup; children = ( @@ -83,6 +96,7 @@ 9D3A46F42B21F44400E9CDD6 /* regula.license */, 9DC3ED4D2B21E9E100036A7B /* AppDelegate.swift */, 9DC3ED512B21E9E100036A7B /* MatchFacesViewController.swift */, + 5DDFD6802C417A3700B633C2 /* Supplementary */, 9DC3ED532B21E9E100036A7B /* Main.storyboard */, 9DC3ED562B21E9E300036A7B /* Assets.xcassets */, 9DC3ED582B21E9E300036A7B /* LaunchScreen.storyboard */, @@ -207,6 +221,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5DDFD67F2C417A3300B633C2 /* ImagePicker.swift in Sources */, + 5DDFD6822C417B5000B633C2 /* ImagesPreviewViewController.swift in Sources */, 9DC3ED522B21E9E100036A7B /* MatchFacesViewController.swift in Sources */, 9DC3ED4E2B21E9E100036A7B /* AppDelegate.swift in Sources */, ); @@ -286,7 +302,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -343,7 +359,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; @@ -372,6 +388,7 @@ INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -404,6 +421,7 @@ INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/contents.xcworkspacedata b/FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..764a4d4 --- /dev/null +++ b/FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/FaceMatchOffline-sample/FaceMatchOffline-sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/FaceMatchOffline-sample/FaceMatchOffline-sample/Base.lproj/Main.storyboard b/FaceMatchOffline-sample/FaceMatchOffline-sample/Base.lproj/Main.storyboard index ff20ae2..815a7a4 100644 --- a/FaceMatchOffline-sample/FaceMatchOffline-sample/Base.lproj/Main.storyboard +++ b/FaceMatchOffline-sample/FaceMatchOffline-sample/Base.lproj/Main.storyboard @@ -1,8 +1,9 @@ - + - + + @@ -17,10 +18,10 @@ - + Jxg*^Cn^JwhJK? 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 literal 0 HcmV?d00001 diff --git a/FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a3fd431ca614c08c6e4861568548953c1aa13e GIT binary patch literal 6252 zcmb_h=Q|u?DO}dt^L7>?_=QJcc zh341Jgh}e}lL7}l%gLqPTe#`pdX%ZA!WJ8OO!T-CbLFQWj(kd?e8~>TB)~K3fH4yFilsKIXxI)4l`itDBQwXmiET!jg7MS?Y z=qJm-QG*Vmxg zy4P2{Mj=AHqDw))LK3|St|_4R2U&p*2kraA;5bKbbCM{8xh+#%xiRc_Bn#M^rQAxA zZgTTguf>*pFY`FLry~=m-=a)TV)lu-&s*$v@oso@)#z^1$1Ew$UU8Qkmk*cGfWKQlUHiP%{-QyuYgiP|)J_LhF71oJ` zt~!i^?E3>gU2f%XFD_AxMyL&vE=f3GN7#X?l0*SYnc*_jJWkv>azMb&8%ZRQczXc( z3mY)7IG!^+?IQyXqS4sfM|yx_zs1~)PU8B7%#-@L2=hR?h$8B+hp;h)^|TEMf#`5U zkc+%~kF=OM~S%lB=-?EF{4 zVRsDjXE1FQc@Oh=k0`&M(4{&kI@|^N!|hwog>T&YzcHKmT#B!RAFBVYNB0PmjScTC zmilqWt%M!weLBNFac0$&{B=^A_4U`ow|X1TbJ=|BbCdJB6=~#B))JYgCVdniRJa>6 z-)=?Zc-v}A;MU+3FYm~wE{Knxmh3d4(7_rQio|~*&Sv9WZek~Qr~}SNc|ysah4_e| zP7doavSQKPD06<1^PSfWdKH6CaF*DZROD``=;bd>JmHh)L%u%LOeaH}b-js&HQIu# z;pM=ID_;^dH!}JLN^vV?;CZMM@QYDcKiRGjINt*b1)z>stAo~B^Nb*(*rz>l-Vc>UtV&zp9Uoi+30*BiLe7D+kO_ z|D=+gD{EQQA(?I?EQDo5-BxFB>3nIkhiEIQiz*-yhsZw$+sn+PwQ2mX1h5WFgwuir zC_hNS-84Vnrj$9qhQhA4rxStd#fVHir+(A|ME{vqFj$jO^LR!^>3Ax2rYP9_VZuwc z=puZ-gB=X!ybh+~N^lflY2^aW$EFY}QLi_U+Gq;03K|$L9f+5j5cO4R6(dgHhxIcH zxiY0YN}EiRG$5@7P{%1|6gPjLX)Z{?&`C8qJg&c-&bx_tT)E9R=ylpP!qZ0dy_;Yv zg=8z9Nysx8KYZhp=yZ*S=c73)}fK2FiSJ?<1-}d_5B|ra|i`FAo9)8gMZ86*P+_g|5sknHdEArGGD z=z_uPw#nc$of)^46@!qv5hpP2oirRQI z!bxd}`H8-Y))(Mm1bT(%t;^*aG73}fI(PrsRg*86X&+g2>(8ZYl+8@A9V z?>a2=DLhRx6$S5I$YetHj_f1o3FK|QftJ~napXr`djeEN@WhK zKcuG|@I)fZ90Q|Cp&toskLnW$7 z5B-ZA_7PP^yjRi}M=8d~37$5)mA8SFP#v@sEy1VTulw6>Ng&!OYvxQB2EqnPemG~u zRTvUdceCe)Yu76wwivIpym&NR8xGppXf^oSeTyP{x|KYjCTiTcn{7e4_7-nOxszhQ zGZ?~%&e7KQXuWIXfA%tzf&f(5xexD@g`YZl&5KPQNpyc=vLEvh#N$La#ndg1p8(szlBb$HDQLSh3R}#hknzve%%}&2 z-*G+$ExDUM!6Jj;P9_qgZ$J~ zlpT}kBZmh=(p3?2YofSHCp#1$wr70Pw};hyEeuB$2te$=3q7OKn{@x+d)*fr9lvC# z5Bp4&>u@_ba$gfFm*}9JWRWzmUS2=iEFe(yhqz?_OwyjMbw!mk(@E~>oR)0*cy=wzjUa+t`N)m+(#GAQ2aosb~K*WC~PTSc(Kdv`SUzczRd;&cfF=;dRy4uN98-x7N>iEH(x*8_^hMD585mbVBFm-{@n zOqnVd@O{*cROWB*=^rO)iCb2+C@_85)|o%Mk98^@Y^=bH9FkX)lF%(zGp~^+{2c2};%z@iHt>9*0~XD2MxL z-oz*Gy=?ud^5)ZQ`G^lWu=DKfUA+?Vl0niP7k$G@%!3vVe@Y2;0R9%6KZfUxyr*a* z0@Dm2*$N*sm}pSqzaee?G~FRK8euJkl_q(Z{vdp=sYx!i9)p_}zo$7*aY|wSOh$s; zjHUi?1|?S*i&F;2=9_~Jys$*2*@o)b*X114h?9XH&MAtMnh;<`A@aw_CJ!RY z<66wh4_-?D^3vQ+&HUCt2)v@mn%W7}1oR>2ug4v1Ihd zg0WIDHwjzQMwT4fxZe@QfcHo>^QDN+4)i{r-Q zQsd8!x_OtCWuSkhSV8JDxK#sntAB4Tjngt`+k`=^#d@XuTqV?XH##NlX~S={*|p`r znbrQhE2js)A@MCH-{fLAw7mCyaxSNjb6oRkabwA{eB%$tQrRA#le~LkgGT?sE5Z%~ z4L@^px1-RIrqe-IsE=Ss-sE7etsRj^dMEu5`%Y8>`Q2 zXW^_8SWrU-`antHp8}-3Z)7^h&!ela13I&Md;b|~OniP(NREtn6Vnzuzi&9Eks5hw_ z$-H#+>xg(U@7>hBfgiyW&KHD#XzY!Abfaaij*D-+YeL<4zD%Pg+;q}K&Wiq!^il@gTkMg(C!24F89rRY$whV3+F?67;LjS*x-W~a zHOaJBpM89^vMl?OAzv(%>TEms-8(kE*~(aRiq@61p3^siTC z#=eYL9$hXKN@lw->^M*-UUtbQ5`PtFetiT7Wnvi$X}6(1?8RC9M(NJubhj@;8A25$-s zJ8ZlC#|(>E6V~81|)xT^w*XJb|2OZEu@@ z6L%`*56_;_!pX{2%`+ZfYPJJ-q>Pe4V_#sjZ_i*JZi}{6v$PCC*!DZ^oN+v>akc(X z;AGrCQEe`+s)LrrzK&!zHHOyvvDQqV6XzvBOOI`HXm?RPk*{`1ImWS7IRt}#y7Q0pdp4v* ztteMns{#b30R$?A*6xX9UilfFS!GyTG>CoZv#3YA=QGWCvWMIiKjR-0X=Km!+-uE@ zi~USja@H7)!_ZcUB&V4eWX$-tcz$wX)(IS^8+{P;Tx{ppU%5xR58Mn|rBXGAcGLmD zwGvnuQwq8RsHD|1Ve~G z;f_8gvvJ<%jWIEcZ~NVEw_lG@#32<_x$*FYxhe6p*YZ3O8i@RqG zSWCezmxkdvuj`{%HRs9Ddx-dP_$?x15@XIEbudf&isb0@-S4CAoB|CM*GR+1z(`>* zgxaa(@H38YS_|eA4#WQ4bI7<%q%|3`0O9DE&G16!jI}Cmo5*W)jb;~MM%tGGiEw(=b6JyMHNcRBnjd0T=_WzOpD5yk zob`|_)n;zm#*e5xF21lCoOOzTQwgU5kB^mchBdCU+dsFhL4f6~7aW)CG+0i>`%h+j zA70|>sY<=4kW8o)JTb|k?ZQR6qzwdIs>zX$nh#Y!9cCch{?7c}}&e0Q|QcBuC>Yw{C zG-cR9!t^ebveTIt74^rD^1o)T#CsnUv;k-D)?)zCe!N#Qb|0M+I11kM8=BJhDb?@w zi=^I}I*igx9HrYC`DD|Dz*VLN)!2-{yRq6{H_V%>yEJ(as7)AtAfh;a-$xzx=!`tA47N+iSd(YEM;afX1)3n`dOqDi}{_mYzO zFS5{%u!q76;msJHi$7sDDgA+?Y9$gP3pL_Oy6*u}wHHH*#|ukKov$*C31EB1S$6-0 z6drAX)O0r%v$Fs@CT+ppubZ>y_FsSIb7kZd;7FFXLE9+t*?Buf19ll)Lgar5(n;2^ z`!AsBb2U3Z5ZBdD;36u@inO4dMIAt`+Wkmy-nW`YXXF>a^s?ddFA@h^BK|v-*eojU zCmlEw+H$pJzgf1Pwinn+RK}{w@3`7r(UM5z(}8;g7_!Sl3-ub)$SHpAz!00ic0hub zBEqO#Z}dZO-^kukwn%3HBVR=+t+1BKli9e2(>%^tgn3;v4VW|(pB=JKh!g&WbDNve zvEs$pEEa(gStN>rX>okl=dbvtg!NrmCw`mqWZ@$mZGOGy;*II@HJml!(=}vPwoB%r zJ$t?tD}KtUs{=087!m?=XR_mV#{M{8CQS#sWWnlXn6o+4yloND6mL|a$ZIO~a<(wa?VDHGDVFkxSnj`6LB*Bn z$F+m{&<+ql+!Jv*Tae<61Y{!^m%4b$TPD2Pcp^qyRPgXJ-!D~SPXW>Kq}l({jo@8D zvW-IP4D*+qUfo%^fZ)T{l1GF3P^AL90<%V_lZ{HRX&eCm%wymCS$pd`w~1VTV)FO>rvu#LB2sJz0(Ds zZ*=;PafoWS(g0j{0oI*ieC#{ip|%!mNNci?D7F9`D#i(dUGMY6&m;s@SnAxz1-NEs z>rA@(scS*oG`qMc1|!`rGQml}HIc)9T6Jx*=qGE!Gww&O_ihz?S|#Ab=|R-~C_-k% zNKXS0jn|={^i(g(g$O5j<@1^E^IkTI=#QEx$Kk?}NZ=j9Y2Gk}Yd%L)F*opXZ!yAG zz__5KTYzfVL321aaf{sGcSf7VOCRx$zgFn5`5ynI9hjcGZ>6Ba%w?5blnwQ!WHj@UPDJpc^~`RRAm^0#Dud-|Nm0-|C_{T-;t)RGSWZKs}I5bMZnY1)Q8nUZ6p5& DlQY4P literal 0 HcmV?d00001 diff --git a/FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png b/FaceSearchSample/FaceSearchSample/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cfad8375b834503fe7a07bb0efb4dcc3eae165 GIT binary patch literal 16489 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 literal 0 HcmV?d00001 diff --git a/FaceSearchSample/FaceSearchSample/Assets.xcassets/Contents.json b/FaceSearchSample/FaceSearchSample/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/FaceSearchSample/FaceSearchSample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/Contents.json b/FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/Contents.json new file mode 100644 index 0000000..c9824af --- /dev/null +++ b/FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "person_placeholder@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "person_placeholder@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png b/FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/person_placeholder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac6e6d3fbdda51b8675ac7100d7a215c3c73966 GIT binary patch literal 23949 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 literal 0 HcmV?d00001 diff --git a/FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png b/FaceSearchSample/FaceSearchSample/Assets.xcassets/person_placeholder.imageset/person_placeholder@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd14c0f11ce9c2677e14655170757811e7474a7 GIT binary patch literal 37226 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