@vppos/react-native-nfc 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/NFCSDK.podspec +40 -0
- package/android/build.gradle +85 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +31 -0
- package/android/src/main/AndroidManifestNew.xml +30 -0
- package/android/src/main/java/com/nfcsdk/ChipReader.kt +237 -0
- package/android/src/main/java/com/nfcsdk/NFCSDKModule.kt +78 -0
- package/android/src/main/java/com/nfcsdk/NFCSDKPackage.kt +17 -0
- package/android/src/main/java/com/nfcsdk/NFCScanActivity.kt +299 -0
- package/android/src/main/java/com/nfcsdk/utils/Dg13Parser.kt +278 -0
- package/android/src/main/java/com/nfcsdk/utils/FaceExtractor.kt +40 -0
- package/android/src/main/java/com/nfcsdk/utils/MrzUtils.kt +75 -0
- package/android/src/main/res/drawable/bg_nfc_bottom_sheet.xml +13 -0
- package/android/src/main/res/drawable/bg_nfc_sheet_handle.xml +9 -0
- package/android/src/main/res/layout/activity_nfc.xml +110 -0
- package/android/src/main/res/values/styles.xml +10 -0
- package/android/src/main/res/xml/nfc_tech_filter.xml +8 -0
- package/ios/ChipReader.swift +258 -0
- package/ios/NFCSDK-Bridging-Header.h +2 -0
- package/ios/NFCSDK.mm +9 -0
- package/ios/NFCSDK.swift +112 -0
- package/ios/NFCSDKSession.swift +5 -0
- package/ios/utils/DG13Parser.swift +302 -0
- package/ios/utils/MrzUtils.swift +49 -0
- package/lib/module/errors.js +9 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/index.js +118 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/errors.d.ts +4 -0
- package/lib/typescript/src/errors.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +80 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +45 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +155 -0
- package/src/errors.ts +6 -0
- package/src/index.tsx +141 -0
- package/src/types.ts +45 -0
- package/vendor/ios-passport-reader/CHANGELOG +362 -0
- package/vendor/ios-passport-reader/CODE_OF_CONDUCT.md +77 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/AppDelegate.swift +39 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Info.plist +77 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/PassportUtils.swift +76 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/SettingsStore.swift +107 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/SceneDelegate.swift +57 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/DetailsView.swift +197 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MainView.swift +214 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportView.swift +73 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/SettingsView.swift +63 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/StoredPassportView.swift +152 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/masterList.pem +32 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/readme.md +10 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/project.pbxproj +695 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/contents.xcworkspacedata +10 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/DataGroupParsingTests.swift +189 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/Info.plist +22 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/PACETests.swift +112 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile +22 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile.lock +35 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/README.md +2 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/AppDelegate.swift +39 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Info.plist +79 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/PassportUtils.swift +99 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStore.swift +98 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStoreCAN.swift +75 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/LICENSE +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/PreviewView.swift +34 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/StringUtils.swift +160 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/ViewController.swift +320 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/VisionViewController.swift +163 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/SceneDelegate.swift +58 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/CanKeyView.swift +251 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/MRZEntryViewCanKey.swift +65 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/PassportViewCAN.swift +73 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/DetailsView.swift +193 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MainView.swift +264 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportView.swift +73 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/SettingsView.swift +47 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/StoredPassportView.swift +149 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/masterList.pem +32 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/readme.md +10 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.pbxproj +683 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +25 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/DataGroupParsingTests.swift +190 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/Info.plist +22 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/PACETests.swift +112 -0
- package/vendor/ios-passport-reader/LICENSE +21 -0
- package/vendor/ios-passport-reader/NFCPassportReader.podspec +27 -0
- package/vendor/ios-passport-reader/Package.swift +29 -0
- package/vendor/ios-passport-reader/README.md +141 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/AES_3DES_DESEncryption.swift +377 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/BACHandler.swift +194 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/ChipAuthenticationHandler.swift +224 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupHash.swift +16 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupParser.swift +36 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ActiveAuthenticationInfo.swift +69 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/COM.swift +61 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/CardAccess.swift +38 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationInfo.swift +135 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationPublicKeyInfo.swift +53 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup.swift +103 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup1.swift +111 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup11.swift +66 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup12.swift +75 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup14.swift +37 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup15.swift +46 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup2.swift +163 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup7.swift +46 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroupId.swift +105 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/NotImplementedDG.swift +16 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/PACEInfo.swift +415 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SOD.swift +240 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SecurityInfo.swift +136 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Errors.swift +148 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Logging.swift +32 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Models/FaceImageInfo.swift +161 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCPassportModel.swift +540 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCViewDisplayMessage.swift +60 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/OpenSSLUtils.swift +705 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/PACEHandler.swift +627 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/PassportReader.swift +387 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Resources/PrivacyInfo.xcprivacy +14 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/ResponseAPDU.swift +25 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessaging.swift +301 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessagingSessionKeyGenerator.swift +156 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/SimpleASN1DumpParser.swift +173 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/TagReader.swift +374 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Utils.swift +430 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/X509Wrapper.swift +168 -0
- package/vendor/ios-passport-reader/scripts/README.md +45 -0
- package/vendor/ios-passport-reader/scripts/extract.py +197 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ExportPassportView.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 11/02/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import SwiftUI
|
|
10
|
+
import NFCPassportReader
|
|
11
|
+
|
|
12
|
+
struct MultipleSelectionRow: View {
|
|
13
|
+
var title: String
|
|
14
|
+
var isSelected: Bool
|
|
15
|
+
var action: () -> Void
|
|
16
|
+
|
|
17
|
+
var body: some View {
|
|
18
|
+
Button(action: self.action) {
|
|
19
|
+
HStack {
|
|
20
|
+
Text(self.title)
|
|
21
|
+
if self.isSelected {
|
|
22
|
+
Spacer()
|
|
23
|
+
Image(systemName: "checkmark")
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
.foregroundColor(.primary)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
struct ExportPassportView: View {
|
|
32
|
+
@EnvironmentObject var settings: SettingsStore
|
|
33
|
+
|
|
34
|
+
@State var items: [DataGroupId] = []
|
|
35
|
+
@State var selections: [DataGroupId] = []
|
|
36
|
+
@State var isAASupported : Bool = false
|
|
37
|
+
@State var includeAA : Bool = false
|
|
38
|
+
|
|
39
|
+
var body: some View {
|
|
40
|
+
Form {
|
|
41
|
+
Section(header: Text("Select Passport items to export"), footer:Text("* contains personal information")) {
|
|
42
|
+
List {
|
|
43
|
+
ForEach(items, id: \.self) { item in
|
|
44
|
+
MultipleSelectionRow(title: dgToText(item), isSelected: self.selections.contains(item)) {
|
|
45
|
+
if self.selections.contains(item) {
|
|
46
|
+
self.selections.removeAll(where: { $0 == item })
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
self.selections.append(item)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if isAASupported {
|
|
55
|
+
Toggle("Include Active Authentication Challenge/Response?", isOn: $includeAA)
|
|
56
|
+
.foregroundColor(.primary)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
Button(action: {
|
|
60
|
+
sharePassport()
|
|
61
|
+
}, label: {
|
|
62
|
+
Text("Export selected passport details")
|
|
63
|
+
.font(.title3)
|
|
64
|
+
})
|
|
65
|
+
.foregroundColor(.primary)
|
|
66
|
+
}
|
|
67
|
+
.navigationTitle("Export passport")
|
|
68
|
+
.onAppear() {
|
|
69
|
+
if let passport = settings.passport {
|
|
70
|
+
items = [.SOD, .COM]
|
|
71
|
+
items.append(contentsOf: DataGroupId.allCases.filter { passport.dataGroupsAvailable.contains($0) } )
|
|
72
|
+
|
|
73
|
+
// Default select only the DGs that contain no personal info.
|
|
74
|
+
selections = [.SOD, .COM, .DG14, .DG15]
|
|
75
|
+
isAASupported = passport.activeAuthenticationSupported
|
|
76
|
+
if isAASupported {
|
|
77
|
+
includeAA = true
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
extension ExportPassportView {
|
|
85
|
+
func sharePassport() {
|
|
86
|
+
do {
|
|
87
|
+
let dict = settings.passport!.dumpPassportData( selectedDataGroups:selections,includeActiveAuthenticationData: includeAA)
|
|
88
|
+
let data = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
|
|
89
|
+
|
|
90
|
+
let temporaryURL = URL(fileURLWithPath: NSTemporaryDirectory() + "passport.json")
|
|
91
|
+
try data.write(to: temporaryURL)
|
|
92
|
+
|
|
93
|
+
let av = UIActivityViewController(activityItems: [temporaryURL], applicationActivities: nil)
|
|
94
|
+
|
|
95
|
+
let keyWindow = UIApplication.shared.connectedScenes
|
|
96
|
+
.filter({$0.activationState == .foregroundActive})
|
|
97
|
+
.map({$0 as? UIWindowScene})
|
|
98
|
+
.compactMap({$0})
|
|
99
|
+
.first?.windows
|
|
100
|
+
.filter({$0.isKeyWindow}).first
|
|
101
|
+
|
|
102
|
+
keyWindow?.rootViewController?.present(av, animated: true, completion: nil)
|
|
103
|
+
} catch {
|
|
104
|
+
print( "ERROR - \(error)" )
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
func dgToText( _ dg : DataGroupId ) -> String {
|
|
109
|
+
switch ( dg ) {
|
|
110
|
+
case .SOD:
|
|
111
|
+
return "SOD - Document Security Object"
|
|
112
|
+
case .COM:
|
|
113
|
+
return "COM - Header and DG Presence"
|
|
114
|
+
case .DG1:
|
|
115
|
+
return "DG1* - MRZ Info"
|
|
116
|
+
case .DG2:
|
|
117
|
+
return "DG2* - Face image"
|
|
118
|
+
case .DG3:
|
|
119
|
+
return "DG3* - Fingerprints"
|
|
120
|
+
case .DG4:
|
|
121
|
+
return "DG4* - Iris"
|
|
122
|
+
case .DG5:
|
|
123
|
+
return "DG5* - Displayed portrait"
|
|
124
|
+
case .DG6:
|
|
125
|
+
return "DG6 - Reserved"
|
|
126
|
+
case .DG7:
|
|
127
|
+
return "DG7* - Signature"
|
|
128
|
+
case .DG8:
|
|
129
|
+
return "DG8* - Data features"
|
|
130
|
+
case .DG9:
|
|
131
|
+
return "DG9* - Structure features"
|
|
132
|
+
case .DG10:
|
|
133
|
+
return "DG10* - Substance features"
|
|
134
|
+
case .DG11:
|
|
135
|
+
return "DG11* - Additional personal info"
|
|
136
|
+
case .DG12:
|
|
137
|
+
return "DG12* - Additional document info"
|
|
138
|
+
case .DG13:
|
|
139
|
+
return "DG13* - Optional details"
|
|
140
|
+
case .DG14:
|
|
141
|
+
return "DG14 - Security options"
|
|
142
|
+
case .DG15:
|
|
143
|
+
return "DG15 - Active Auth PubKey"
|
|
144
|
+
case .DG16:
|
|
145
|
+
return "DG16 - Person(s) to notify"
|
|
146
|
+
default:
|
|
147
|
+
return "Unknown"
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
struct ExportPassportView_Previews: PreviewProvider {
|
|
155
|
+
static var previews: some View {
|
|
156
|
+
let settings = SettingsStore()
|
|
157
|
+
settings.passport = NFCPassportModel()
|
|
158
|
+
|
|
159
|
+
return NavigationView {
|
|
160
|
+
ExportPassportView()
|
|
161
|
+
}
|
|
162
|
+
.environmentObject(settings)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//
|
|
2
|
+
// CheckBoxView.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 10/02/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import SwiftUI
|
|
10
|
+
|
|
11
|
+
struct CheckBoxButtonStyle: ButtonStyle {
|
|
12
|
+
|
|
13
|
+
func makeBody(configuration: Self.Configuration) -> some View {
|
|
14
|
+
configuration.label
|
|
15
|
+
.foregroundColor(.secondary)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
struct CheckBoxView: View {
|
|
21
|
+
@Binding var checked: Bool
|
|
22
|
+
var text : String
|
|
23
|
+
|
|
24
|
+
var body: some View {
|
|
25
|
+
HStack() {
|
|
26
|
+
|
|
27
|
+
Button(action: {
|
|
28
|
+
withAnimation {
|
|
29
|
+
self.checked.toggle()
|
|
30
|
+
}
|
|
31
|
+
}) {
|
|
32
|
+
HStack(alignment: .center, spacing: 10) {
|
|
33
|
+
Text(text)
|
|
34
|
+
Image(systemName:self.checked ? "checkmark.square.fill" : "square")
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
.frame(height: 44, alignment: .center)
|
|
38
|
+
.padding(.trailing)
|
|
39
|
+
.buttonStyle(CheckBoxButtonStyle())
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
struct CheckBoxView_Previews: PreviewProvider {
|
|
45
|
+
static var previews: some View {
|
|
46
|
+
CheckBoxView( checked: .constant(true), text:"Are you on?")
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ViewExt.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 11/02/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import SwiftUI
|
|
10
|
+
import UIKit
|
|
11
|
+
|
|
12
|
+
extension View {
|
|
13
|
+
func hideKeyboard() {
|
|
14
|
+
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
func visibility(hidden: Binding<Bool>) -> some View {
|
|
18
|
+
modifier(VisibilityStyle(hidden: hidden))
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ViewModifiers.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 10/02/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import SwiftUI
|
|
10
|
+
|
|
11
|
+
struct ClearButton: ViewModifier {
|
|
12
|
+
@Binding var text: String
|
|
13
|
+
|
|
14
|
+
public func body(content: Content) -> some View {
|
|
15
|
+
HStack {
|
|
16
|
+
content
|
|
17
|
+
if !text.isEmpty {
|
|
18
|
+
Button(action: { self.text = "" },
|
|
19
|
+
label: {
|
|
20
|
+
Image(systemName: "delete.left")
|
|
21
|
+
.foregroundColor(Color(UIColor.opaqueSeparator))
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
struct VisibilityStyle: ViewModifier {
|
|
30
|
+
|
|
31
|
+
@Binding var hidden: Bool
|
|
32
|
+
func body(content: Content) -> some View {
|
|
33
|
+
Group {
|
|
34
|
+
if hidden {
|
|
35
|
+
content.hidden()
|
|
36
|
+
} else {
|
|
37
|
+
content
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MRZEntryView.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 10/02/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import SwiftUI
|
|
10
|
+
|
|
11
|
+
// This will be removed once DatePicker inline works correctly
|
|
12
|
+
struct DateView : View {
|
|
13
|
+
@Binding var date : Date
|
|
14
|
+
var title : String
|
|
15
|
+
|
|
16
|
+
var body : some View {
|
|
17
|
+
VStack {
|
|
18
|
+
Text(title)
|
|
19
|
+
.font(.largeTitle)
|
|
20
|
+
Spacer()
|
|
21
|
+
DatePicker("Date of birth", selection:$date, displayedComponents: .date)
|
|
22
|
+
.environment(\.timeZone, TimeZone(secondsFromGMT: 0)!)
|
|
23
|
+
.datePickerStyle(WheelDatePickerStyle())
|
|
24
|
+
.labelsHidden()
|
|
25
|
+
Spacer()
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// This should be a nice simple inline DatePicker here
|
|
31
|
+
// BUT there are bugs when you select dates it changes the date format
|
|
32
|
+
// from DD MMM YYYY to DD/MM/YYYY!)
|
|
33
|
+
// Will update when/if this gets fixed!
|
|
34
|
+
struct MRZEntryView : View {
|
|
35
|
+
@EnvironmentObject var settings: SettingsStore
|
|
36
|
+
|
|
37
|
+
// These will be removed once DatePicker inline works correctly
|
|
38
|
+
@State private var editDOB = false
|
|
39
|
+
@State private var editDOE = false
|
|
40
|
+
@State private var editDateTitle : String = ""
|
|
41
|
+
|
|
42
|
+
var body : some View {
|
|
43
|
+
let passportNrBinding = Binding<String>(get: {
|
|
44
|
+
settings.passportNumber
|
|
45
|
+
}, set: {
|
|
46
|
+
settings.passportNumber = $0.uppercased()
|
|
47
|
+
})
|
|
48
|
+
VStack {
|
|
49
|
+
NavigationLink( destination: DateView(date:$settings.dateOfBirth, title:editDateTitle), isActive: $editDOB) { Text("") }
|
|
50
|
+
NavigationLink( destination: DateView(date:$settings.dateOfExpiry, title:editDateTitle), isActive: $editDOE) { Text("") }
|
|
51
|
+
|
|
52
|
+
TextField("Passport number", text: passportNrBinding)
|
|
53
|
+
.textCase(.uppercase)
|
|
54
|
+
.modifier(ClearButton(text: passportNrBinding))
|
|
55
|
+
.textContentType(.name)
|
|
56
|
+
.foregroundColor(Color.primary)
|
|
57
|
+
.padding([.leading, .trailing])
|
|
58
|
+
.ignoresSafeArea(.keyboard, edges: .all)
|
|
59
|
+
|
|
60
|
+
Divider()
|
|
61
|
+
|
|
62
|
+
// Replace with DatePicker once it works correctly
|
|
63
|
+
HStack {
|
|
64
|
+
VStack {
|
|
65
|
+
Text( "Date of birth" )
|
|
66
|
+
Button(formatDate(settings.dateOfBirth)) {
|
|
67
|
+
editDateTitle = "Select date of birth"
|
|
68
|
+
editDOB = true
|
|
69
|
+
}
|
|
70
|
+
.padding(.horizontal, 15)
|
|
71
|
+
.padding(.vertical, 8)
|
|
72
|
+
.background(Color.black.opacity(0.07))
|
|
73
|
+
.cornerRadius(8)
|
|
74
|
+
}
|
|
75
|
+
Spacer()
|
|
76
|
+
VStack {
|
|
77
|
+
Text( "Passport expiry date" )
|
|
78
|
+
Button(formatDate(settings.dateOfExpiry)) {
|
|
79
|
+
editDateTitle = "Select passport expiry date"
|
|
80
|
+
editDOE = true
|
|
81
|
+
}
|
|
82
|
+
.padding(.horizontal, 15)
|
|
83
|
+
.padding(.vertical, 8)
|
|
84
|
+
.background(Color.black.opacity(0.07))
|
|
85
|
+
.cornerRadius(8)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
.padding([.leading, .trailing])
|
|
89
|
+
|
|
90
|
+
Divider()
|
|
91
|
+
}
|
|
92
|
+
.ignoresSafeArea(.keyboard, edges: .bottom)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// This will be removed once DatePicker inline works correctly
|
|
97
|
+
extension MRZEntryView {
|
|
98
|
+
|
|
99
|
+
func formatDate( _ date : Date ) -> String {
|
|
100
|
+
let df = DateFormatter()
|
|
101
|
+
df.timeZone = TimeZone.init(secondsFromGMT: 0)
|
|
102
|
+
df.dateFormat = "dd MMM yyyy"
|
|
103
|
+
let dateStr = df.string(from:date)
|
|
104
|
+
return dateStr
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
#if DEBUG
|
|
109
|
+
struct MRZEntryView_Previews : PreviewProvider {
|
|
110
|
+
|
|
111
|
+
static var previews: some View {
|
|
112
|
+
let settings = SettingsStore()
|
|
113
|
+
|
|
114
|
+
return
|
|
115
|
+
Group {
|
|
116
|
+
NavigationView {
|
|
117
|
+
MRZEntryView()
|
|
118
|
+
}
|
|
119
|
+
.environmentObject(settings)
|
|
120
|
+
.environment( \.colorScheme, .light)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
#endif
|
|
125
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MRZScannerViewController.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 17/02/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import UIKit
|
|
10
|
+
import SwiftUI
|
|
11
|
+
import QKMRZScanner
|
|
12
|
+
|
|
13
|
+
// Wraps the QKMRZScanner component in a simple UIView that allows a scan of the MRZ area from a Passport/ID Card
|
|
14
|
+
struct MRZScanner: UIViewControllerRepresentable {
|
|
15
|
+
let completionHandler: (String,Date,Date) -> Void
|
|
16
|
+
|
|
17
|
+
func makeUIViewController(context: Context) -> MRZScannerViewController {
|
|
18
|
+
let vc = MRZScannerViewController()
|
|
19
|
+
vc.mrzScannerView.delegate = context.coordinator
|
|
20
|
+
return vc
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
func updateUIViewController(_ uiViewController: MRZScannerViewController, context: Context) {
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func makeCoordinator() -> Coordinator {
|
|
28
|
+
return Coordinator(completionHandler: completionHandler)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
final class Coordinator: NSObject, QKMRZScannerViewDelegate {
|
|
32
|
+
let completionHandler: (String,Date,Date) -> Void
|
|
33
|
+
|
|
34
|
+
init(completionHandler: @escaping (String,Date,Date) -> Void) {
|
|
35
|
+
self.completionHandler = completionHandler
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
func mrzScannerView(_ mrzScannerView: QKMRZScannerView, didFind scanResult: QKMRZScanResult) {
|
|
39
|
+
print(scanResult)
|
|
40
|
+
if let dob = scanResult.birthDate, let doe = scanResult.expiryDate {
|
|
41
|
+
completionHandler(scanResult.documentNumber, dob, doe)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// MARK: UIViewController implementation
|
|
48
|
+
class MRZScannerViewController: UIViewController {
|
|
49
|
+
let mrzScannerView = QKMRZScannerView()
|
|
50
|
+
|
|
51
|
+
override func viewDidLoad() {
|
|
52
|
+
super.viewDidLoad()
|
|
53
|
+
self.title = "Scan Passport"
|
|
54
|
+
self.navigationController?.title = "Scan passport"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
let lbl = UILabel()
|
|
58
|
+
lbl.text = "Please scan the Machine Readable Zone."
|
|
59
|
+
lbl.numberOfLines = 0
|
|
60
|
+
self.view.addSubview(mrzScannerView)
|
|
61
|
+
self.view.addSubview(lbl)
|
|
62
|
+
|
|
63
|
+
mrzScannerView.translatesAutoresizingMaskIntoConstraints = false
|
|
64
|
+
mrzScannerView.topAnchor.constraint(equalTo: view.topAnchor, constant:50).isActive = true
|
|
65
|
+
mrzScannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
|
|
66
|
+
mrzScannerView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
|
|
67
|
+
mrzScannerView.heightAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
|
|
68
|
+
|
|
69
|
+
lbl.translatesAutoresizingMaskIntoConstraints = false
|
|
70
|
+
lbl.leadingAnchor.constraint(equalTo: mrzScannerView.leadingAnchor, constant: 10).isActive = true
|
|
71
|
+
lbl.topAnchor.constraint(equalTo: mrzScannerView.bottomAnchor, constant: 10).isActive = true
|
|
72
|
+
lbl.trailingAnchor.constraint(equalTo: mrzScannerView.trailingAnchor, constant: 10).isActive = true
|
|
73
|
+
}
|
|
74
|
+
override func viewWillAppear(_ animated: Bool) {
|
|
75
|
+
super.viewWillAppear(animated)
|
|
76
|
+
mrzScannerView.startScanning()
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
override func viewWillDisappear(_ animated: Bool) {
|
|
80
|
+
super.viewWillDisappear(animated)
|
|
81
|
+
mrzScannerView.stopScanning()
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
extension MRZScannerViewController : QKMRZScannerViewDelegate {
|
|
86
|
+
func mrzScannerView(_ mrzScannerView: QKMRZScannerView, didFind scanResult: QKMRZScanResult) {
|
|
87
|
+
print(scanResult)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|