@regulaforensics/face-sdk 6.3.3-beta
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/README.md +23 -0
- package/RNFaceSDK.podspec +21 -0
- package/android/CVDFaceSDK.kt +34 -0
- package/android/build.gradle +48 -0
- package/android/cordova.gradle +18 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/com/regula/plugin/facesdk/Config.kt +165 -0
- package/android/src/main/java/com/regula/plugin/facesdk/JSONConstructor.kt +904 -0
- package/android/src/main/java/com/regula/plugin/facesdk/Main.kt +370 -0
- package/android/src/main/java/com/regula/plugin/facesdk/RNFaceApiModule.kt +54 -0
- package/android/src/main/java/com/regula/plugin/facesdk/RNFaceApiPackage.kt +11 -0
- package/android/src/main/java/com/regula/plugin/facesdk/Utils.kt +287 -0
- package/examples/capacitor/.browserslistrc +6 -0
- package/examples/capacitor/.eslintrc.js +17 -0
- package/examples/capacitor/README.md +27 -0
- package/examples/capacitor/android/app/build.gradle +54 -0
- package/examples/capacitor/android/app/capacitor.build.gradle +22 -0
- package/examples/capacitor/android/app/proguard-rules.pro +21 -0
- package/examples/capacitor/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
- package/examples/capacitor/android/app/src/main/AndroidManifest.xml +43 -0
- package/examples/capacitor/android/app/src/main/java/com/regula/faceapi/MainActivity.java +5 -0
- package/examples/capacitor/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/examples/capacitor/android/app/src/main/res/drawable/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/examples/capacitor/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/examples/capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/examples/capacitor/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
- package/examples/capacitor/android/app/src/main/res/values/strings.xml +7 -0
- package/examples/capacitor/android/app/src/main/res/values/styles.xml +22 -0
- package/examples/capacitor/android/app/src/main/res/xml/file_paths.xml +5 -0
- package/examples/capacitor/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
- package/examples/capacitor/android/build.gradle +30 -0
- package/examples/capacitor/android/capacitor.settings.gradle +15 -0
- package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/examples/capacitor/android/gradle.properties +22 -0
- package/examples/capacitor/android/gradlew +244 -0
- package/examples/capacitor/android/gradlew.bat +92 -0
- package/examples/capacitor/android/settings.gradle +5 -0
- package/examples/capacitor/android/variables.gradle +16 -0
- package/examples/capacitor/capacitor.config.ts +12 -0
- package/examples/capacitor/cypress/e2e/test.cy.ts +6 -0
- package/examples/capacitor/cypress/fixtures/example.json +5 -0
- package/examples/capacitor/cypress/support/commands.ts +37 -0
- package/examples/capacitor/cypress/support/e2e.ts +20 -0
- package/examples/capacitor/cypress.config.ts +10 -0
- package/examples/capacitor/index.html +106 -0
- package/examples/capacitor/ionic.config.json +7 -0
- package/examples/capacitor/ios/App/App/App.entitlements +5 -0
- package/examples/capacitor/ios/App/App/AppDelegate.swift +49 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Contents.json +6 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
- package/examples/capacitor/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
- package/examples/capacitor/ios/App/App/Base.lproj/Main.storyboard +19 -0
- package/examples/capacitor/ios/App/App/Info.plist +53 -0
- package/examples/capacitor/ios/App/App.xcodeproj/project.pbxproj +410 -0
- package/examples/capacitor/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/examples/capacitor/ios/App/App.xcworkspace/contents.xcworkspacedata +10 -0
- package/examples/capacitor/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/examples/capacitor/ios/App/Podfile +27 -0
- package/examples/capacitor/package.json +64 -0
- package/examples/capacitor/public/assets/.gitkeep +0 -0
- package/examples/capacitor/public/assets/img/id.png +0 -0
- package/examples/capacitor/public/assets/img/portrait.png +0 -0
- package/examples/capacitor/public/favicon.png +0 -0
- package/examples/capacitor/public/manifest.json +21 -0
- package/examples/capacitor/src/App.test.tsx +8 -0
- package/examples/capacitor/src/App.tsx +42 -0
- package/examples/capacitor/src/components/ExploreContainer.css +24 -0
- package/examples/capacitor/src/components/ExploreContainer.tsx +14 -0
- package/examples/capacitor/src/main.tsx +11 -0
- package/examples/capacitor/src/pages/Home.tsx +159 -0
- package/examples/capacitor/src/setupTests.ts +14 -0
- package/examples/capacitor/src/theme/variables.css +242 -0
- package/examples/capacitor/src/vite-env.d.ts +1 -0
- package/examples/capacitor/tsconfig.json +21 -0
- package/examples/capacitor/tsconfig.node.json +9 -0
- package/examples/capacitor/vite.config.ts +16 -0
- package/examples/cordova/.vscode/launch.json +28 -0
- package/examples/cordova/config.xml +37 -0
- package/examples/cordova/jsconfig.json +1 -0
- package/examples/cordova/package.json +40 -0
- package/examples/cordova/www/css/index.css +107 -0
- package/examples/cordova/www/img/id.png +0 -0
- package/examples/cordova/www/img/logo.png +0 -0
- package/examples/cordova/www/img/portrait.png +0 -0
- package/examples/cordova/www/index.html +94 -0
- package/examples/cordova/www/js/index.js +154 -0
- package/examples/ionic/angular.json +187 -0
- package/examples/ionic/browserslist +12 -0
- package/examples/ionic/config.xml +114 -0
- package/examples/ionic/e2e/protractor.conf.js +28 -0
- package/examples/ionic/e2e/src/app.e2e-spec.ts +14 -0
- package/examples/ionic/e2e/src/app.po.ts +11 -0
- package/examples/ionic/e2e/tsconfig.json +13 -0
- package/examples/ionic/ionic.config.json +7 -0
- package/examples/ionic/karma.conf.js +31 -0
- package/examples/ionic/package.json +97 -0
- package/examples/ionic/resources/README.md +8 -0
- package/examples/ionic/resources/android/icon/drawable-hdpi-icon.png +0 -0
- package/examples/ionic/resources/android/icon/drawable-ldpi-icon.png +0 -0
- package/examples/ionic/resources/android/icon/drawable-mdpi-icon.png +0 -0
- package/examples/ionic/resources/android/icon/drawable-xhdpi-icon.png +0 -0
- package/examples/ionic/resources/android/icon/drawable-xxhdpi-icon.png +0 -0
- package/examples/ionic/resources/android/icon/drawable-xxxhdpi-icon.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-land-hdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-land-ldpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-land-mdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-land-xhdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-land-xxhdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-land-xxxhdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-port-hdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-port-ldpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-port-mdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-port-xhdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-port-xxhdpi-screen.png +0 -0
- package/examples/ionic/resources/android/splash/drawable-port-xxxhdpi-screen.png +0 -0
- package/examples/ionic/resources/android/xml/network_security_config.xml +6 -0
- package/examples/ionic/resources/icon.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-1024.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-20.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-20@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-20@3x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-24@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-27.5@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-29.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-29@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-29@3x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-40.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-40@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-40@3x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-44@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-50.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-50@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-60.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-60@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-60@3x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-72.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-72@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-76.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-76@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-83.5@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-86@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-98@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-small.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-small@2x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon-small@3x.png +0 -0
- package/examples/ionic/resources/ios/icon/icon.png +0 -0
- package/examples/ionic/resources/ios/icon/icon@2x.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-2436h.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-667h.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-736h.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Landscape-2436h.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Landscape-736h.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Landscape~ipad.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
- package/examples/ionic/resources/ios/splash/Default-Portrait~ipad.png +0 -0
- package/examples/ionic/resources/ios/splash/Default@2x~iphone.png +0 -0
- package/examples/ionic/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
- package/examples/ionic/resources/ios/splash/Default~iphone.png +0 -0
- package/examples/ionic/resources/splash.png +0 -0
- package/examples/ionic/src/app/app-routing.module.ts +15 -0
- package/examples/ionic/src/app/app.component.html +3 -0
- package/examples/ionic/src/app/app.component.scss +0 -0
- package/examples/ionic/src/app/app.component.spec.ts +47 -0
- package/examples/ionic/src/app/app.component.ts +27 -0
- package/examples/ionic/src/app/app.module.ts +23 -0
- package/examples/ionic/src/app/home/home.module.ts +29 -0
- package/examples/ionic/src/app/home/home.page.html +75 -0
- package/examples/ionic/src/app/home/home.page.scss +1 -0
- package/examples/ionic/src/app/home/home.page.spec.ts +24 -0
- package/examples/ionic/src/app/home/home.page.ts +166 -0
- package/examples/ionic/src/assets/icon/favicon.png +0 -0
- package/examples/ionic/src/assets/img/portrait.png +0 -0
- package/examples/ionic/src/assets/shapes.svg +1 -0
- package/examples/ionic/src/environments/environment.prod.ts +3 -0
- package/examples/ionic/src/environments/environment.ts +16 -0
- package/examples/ionic/src/global.scss +31 -0
- package/examples/ionic/src/index.html +25 -0
- package/examples/ionic/src/main.ts +12 -0
- package/examples/ionic/src/polyfills.ts +66 -0
- package/examples/ionic/src/test.ts +20 -0
- package/examples/ionic/src/theme/variables.scss +77 -0
- package/examples/ionic/src/zone-flags.ts +5 -0
- package/examples/ionic/tsconfig.app.json +14 -0
- package/examples/ionic/tsconfig.json +26 -0
- package/examples/ionic/tsconfig.spec.json +19 -0
- package/examples/ionic/tslint.json +88 -0
- package/examples/react-native/.vscode/launch.json +26 -0
- package/examples/react-native/.watchmanconfig +1 -0
- package/examples/react-native/App.tsx +206 -0
- package/examples/react-native/Gemfile +8 -0
- package/examples/react-native/Gemfile.lock +134 -0
- package/examples/react-native/android/app/build.gradle +123 -0
- package/examples/react-native/android/app/debug.keystore +0 -0
- package/examples/react-native/android/app/proguard-rules.pro +10 -0
- package/examples/react-native/android/app/src/debug/AndroidManifest.xml +9 -0
- package/examples/react-native/android/app/src/main/AndroidManifest.xml +27 -0
- package/examples/react-native/android/app/src/main/assets/.gitkeep +0 -0
- package/examples/react-native/android/app/src/main/java/com/regula/face/api/MainActivity.kt +22 -0
- package/examples/react-native/android/app/src/main/java/com/regula/face/api/MainApplication.kt +43 -0
- package/examples/react-native/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
- package/examples/react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/examples/react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/examples/react-native/android/app/src/main/res/values/strings.xml +3 -0
- package/examples/react-native/android/app/src/main/res/values/styles.xml +9 -0
- package/examples/react-native/android/build.gradle +21 -0
- package/examples/react-native/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/examples/react-native/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/examples/react-native/android/gradle.properties +39 -0
- package/examples/react-native/android/gradlew +249 -0
- package/examples/react-native/android/gradlew.bat +92 -0
- package/examples/react-native/android/settings.gradle +6 -0
- package/examples/react-native/images/portrait.png +0 -0
- package/examples/react-native/index.js +4 -0
- package/examples/react-native/ios/.xcode.env +11 -0
- package/examples/react-native/ios/FaceSDK/AppDelegate.h +6 -0
- package/examples/react-native/ios/FaceSDK/AppDelegate.mm +31 -0
- package/examples/react-native/ios/FaceSDK/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
- package/examples/react-native/ios/FaceSDK/Images.xcassets/Contents.json +6 -0
- package/examples/react-native/ios/FaceSDK/Info.plist +51 -0
- package/examples/react-native/ios/FaceSDK/LaunchScreen.storyboard +47 -0
- package/examples/react-native/ios/FaceSDK/PrivacyInfo.xcprivacy +38 -0
- package/examples/react-native/ios/FaceSDK/main.m +10 -0
- package/examples/react-native/ios/FaceSDK.xcodeproj/project.pbxproj +719 -0
- package/examples/react-native/ios/FaceSDK.xcodeproj/xcshareddata/xcschemes/FaceSDK.xcscheme +88 -0
- package/examples/react-native/ios/FaceSDK.xcworkspace/contents.xcworkspacedata +10 -0
- package/examples/react-native/ios/FaceSDK.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/examples/react-native/ios/FaceSDKTests/FaceSDKTests.m +66 -0
- package/examples/react-native/ios/FaceSDKTests/Info.plist +24 -0
- package/examples/react-native/ios/Podfile +40 -0
- package/examples/react-native/ios/Podfile.lock +1822 -0
- package/examples/react-native/ios/license/.gitkeep +0 -0
- package/examples/react-native/metro.config.js +15 -0
- package/examples/react-native/package-lock.json +13098 -0
- package/examples/react-native/package.json +42 -0
- package/ios/CVDFaceSDK.h +7 -0
- package/ios/CVDFaceSDK.m +34 -0
- package/ios/RFSWConfig.h +27 -0
- package/ios/RFSWConfig.m +189 -0
- package/ios/RFSWJSONConstructor.h +134 -0
- package/ios/RFSWJSONConstructor.m +977 -0
- package/ios/RFSWMain.h +23 -0
- package/ios/RFSWMain.m +352 -0
- package/ios/RNFaceSDK.h +8 -0
- package/ios/RNFaceSDK.m +42 -0
- package/ios-ci/.gitlab-ci.yml +41 -0
- package/ios-ci/.sample-env +22 -0
- package/ios-ci/README.md +97 -0
- package/ios-ci/RegulaDanger/Package.swift +34 -0
- package/ios-ci/RegulaDanger/Sources/RegulaDanger/RegulaDanger.swift +44 -0
- package/ios-ci/RegulaDanger/Tests/LinuxMain.swift +7 -0
- package/ios-ci/RegulaDanger/Tests/RegulaDangerTests/RegulaDangerTests.swift +15 -0
- package/ios-ci/RegulaDanger/Tests/RegulaDangerTests/XCTestManifests.swift +9 -0
- package/ios-ci/install.sh +9 -0
- package/ios-ci/ios_ci/__init__.py +8 -0
- package/ios-ci/ios_ci/cli.py +408 -0
- package/ios-ci/ios_ci/common/__init__.py +0 -0
- package/ios-ci/ios_ci/common/build_index.py +70 -0
- package/ios-ci/ios_ci/common/clean_cocoapod.sh +13 -0
- package/ios-ci/ios_ci/common/dependency.py +466 -0
- package/ios-ci/ios_ci/common/ftp.py +314 -0
- package/ios-ci/ios_ci/common/searchpod.sh +6 -0
- package/ios-ci/ios_ci/common/wait_for_cocopod.sh +21 -0
- package/ios-ci/ios_ci/inject.py +145 -0
- package/ios-ci/ios_ci/podspec/__init__.py +0 -0
- package/ios-ci/ios_ci/podspec/podspec.py +88 -0
- package/ios-ci/ios_ci/podspec/templates/BTDevice.podspec +17 -0
- package/ios-ci/ios_ci/podspec/templates/Core.podspec +17 -0
- package/ios-ci/ios_ci/podspec/templates/DocumentReader.podspec +19 -0
- package/ios-ci/ios_ci/podspec/templates/FaceCore.podspec +17 -0
- package/ios-ci/ios_ci/podspec/templates/FaceSDK.podspec +18 -0
- package/ios-ci/ios_ci/podspec/templates/IRS.podspec +17 -0
- package/ios-ci/ios_ci/podspec/templates/RegulaCommon.podspec +17 -0
- package/ios-ci/ios_ci/resolve_podfile_common.py +76 -0
- package/ios-ci/ios_ci/spm/AppleRootCA-G3.cer +0 -0
- package/ios-ci/ios_ci/spm/AppleWWDRCAG3.cer +0 -0
- package/ios-ci/ios_ci/spm/SwiftPackageGenerator+Common.sh +48 -0
- package/ios-ci/ios_ci/spm/SwiftPackageGenerator.sh +33 -0
- package/ios-ci/ios_ci/spm/XcodeSPMCollection.json +29 -0
- package/ios-ci/ios_ci/spm/__init__.py +0 -0
- package/ios-ci/ios_ci/spm/askpass.py +19 -0
- package/ios-ci/ios_ci/spm/spm.py +227 -0
- package/ios-ci/ios_ci/upload_build.py +158 -0
- package/ios-ci/ios_ci/version.py +14 -0
- package/ios-ci/poetry.lock +342 -0
- package/ios-ci/pyproject.toml +26 -0
- package/ios-ci/scripts.py +9 -0
- package/ios-ci/tests/__init__.py +0 -0
- package/ios-ci/tests/podspec/fixtures/BTDevice.podspec +17 -0
- package/ios-ci/tests/podspec/fixtures/BTDeviceBeta.podspec +17 -0
- package/ios-ci/tests/podspec/fixtures/DocumentReaderBeta_RegulaCommon_Beta.podspec +19 -0
- package/ios-ci/tests/podspec/fixtures/DocumentReaderBeta_RegulaCommon_Release.podspec +19 -0
- package/ios-ci/tests/podspec/fixtures/DocumentReaderFullRFID.podspec +17 -0
- package/ios-ci/tests/podspec/fixtures/DocumentReaderFullRFIDBeta.podspec +17 -0
- package/ios-ci/tests/podspec/fixtures/DocumentReader_RegulaCommon_Beta.podspec +19 -0
- package/ios-ci/tests/podspec/fixtures/DocumentReader_RegulaCommon_Release.podspec +19 -0
- package/ios-ci/tests/podspec/fixtures/FaceSDK.podspec +18 -0
- package/ios-ci/tests/podspec/fixtures/FaceSDKBeta.podspec +18 -0
- package/ios-ci/tests/podspec/fixtures/IRS.podspec +17 -0
- package/ios-ci/tests/podspec/fixtures/IRSBeta.podspec +17 -0
- package/ios-ci/tests/podspec/fixtures/RegulaCommon.podspec +17 -0
- package/ios-ci/tests/podspec/fixtures/RegulaCommonBeta.podspec +17 -0
- package/ios-ci/tests/podspec/test_podspec.py +188 -0
- package/ios-ci/tests/test_build_index.py +117 -0
- package/ios-ci/tests/test_dependency.py +139 -0
- package/ios-ci/tests/test_ios_ci.py +5 -0
- package/package.json +36 -0
- package/plugin.xml +48 -0
- package/www/capacitor/customization/camera_position.js +4 -0
- package/www/capacitor/customization/customization.js +66 -0
- package/www/capacitor/customization/customization_colors.js +233 -0
- package/www/capacitor/customization/customization_fonts.js +106 -0
- package/www/capacitor/customization/customization_images.js +129 -0
- package/www/capacitor/customization/font.js +23 -0
- package/www/capacitor/customization/screen_orientation.js +4 -0
- package/www/capacitor/detect_faces/detect_face_result.js +38 -0
- package/www/capacitor/detect_faces/detect_faces_attribute.js +15 -0
- package/www/capacitor/detect_faces/detect_faces_attribute_result.js +20 -0
- package/www/capacitor/detect_faces/detect_faces_backend_exception.js +23 -0
- package/www/capacitor/detect_faces/detect_faces_config.js +14 -0
- package/www/capacitor/detect_faces/detect_faces_exception.js +30 -0
- package/www/capacitor/detect_faces/detect_faces_request.js +67 -0
- package/www/capacitor/detect_faces/detect_faces_response.js +24 -0
- package/www/capacitor/detect_faces/detect_faces_scenario.js +10 -0
- package/www/capacitor/face_capture/face_capture_config.js +28 -0
- package/www/capacitor/face_capture/face_capture_exception.js +25 -0
- package/www/capacitor/face_capture/face_capture_image.js +26 -0
- package/www/capacitor/face_capture/face_capture_response.js +17 -0
- package/www/capacitor/image_params/output_image_crop.js +21 -0
- package/www/capacitor/image_params/output_image_params.js +9 -0
- package/www/capacitor/image_params/point.js +14 -0
- package/www/capacitor/image_params/rect.js +18 -0
- package/www/capacitor/image_params/size.js +9 -0
- package/www/capacitor/image_quality/image_quality_characteristic.js +24 -0
- package/www/capacitor/image_quality/image_quality_characteristic_name.js +58 -0
- package/www/capacitor/image_quality/image_quality_group.js +332 -0
- package/www/capacitor/image_quality/image_quality_range.js +26 -0
- package/www/capacitor/image_quality/image_quality_result.js +40 -0
- package/www/capacitor/index.js +219 -0
- package/www/capacitor/init/face_sdk_version.js +16 -0
- package/www/capacitor/init/init_config.js +9 -0
- package/www/capacitor/init/init_exception.js +29 -0
- package/www/capacitor/init/license_exception.js +29 -0
- package/www/capacitor/internal/bridge.js +39 -0
- package/www/capacitor/internal/cordova.js +17 -0
- package/www/capacitor/internal/webpack.config.js +11 -0
- package/www/capacitor/liveness/liveness_backend_exception.js +38 -0
- package/www/capacitor/liveness/liveness_config.js +54 -0
- package/www/capacitor/liveness/liveness_exception.js +35 -0
- package/www/capacitor/liveness/liveness_notification.js +34 -0
- package/www/capacitor/liveness/liveness_response.js +30 -0
- package/www/capacitor/match_faces/compared_face.js +21 -0
- package/www/capacitor/match_faces/compared_faces_pair.js +23 -0
- package/www/capacitor/match_faces/compared_faces_split.js +22 -0
- package/www/capacitor/match_faces/match_faces_backend_exception.js +14 -0
- package/www/capacitor/match_faces/match_faces_config.js +12 -0
- package/www/capacitor/match_faces/match_faces_detection.js +25 -0
- package/www/capacitor/match_faces/match_faces_detection_face.js +28 -0
- package/www/capacitor/match_faces/match_faces_exception.js +30 -0
- package/www/capacitor/match_faces/match_faces_image.js +25 -0
- package/www/capacitor/match_faces/match_faces_request.js +13 -0
- package/www/capacitor/match_faces/match_faces_response.js +28 -0
- package/www/capacitor/person_database/edit_group_persons_request.js +9 -0
- package/www/capacitor/person_database/image_upload.js +16 -0
- package/www/capacitor/person_database/pageable_item_list.js +22 -0
- package/www/capacitor/person_database/person.js +22 -0
- package/www/capacitor/person_database/person_database.js +145 -0
- package/www/capacitor/person_database/person_group.js +18 -0
- package/www/capacitor/person_database/person_image.js +22 -0
- package/www/capacitor/person_database/search_person.js +31 -0
- package/www/capacitor/person_database/search_person_detection.js +22 -0
- package/www/capacitor/person_database/search_person_image.js +26 -0
- package/www/capacitor/person_database/search_person_request.js +17 -0
- package/www/cordova.js +3738 -0
- package/www/react-native/customization/camera_position.js +4 -0
- package/www/react-native/customization/customization.js +66 -0
- package/www/react-native/customization/customization_colors.js +233 -0
- package/www/react-native/customization/customization_fonts.js +106 -0
- package/www/react-native/customization/customization_images.js +129 -0
- package/www/react-native/customization/font.js +23 -0
- package/www/react-native/customization/screen_orientation.js +4 -0
- package/www/react-native/detect_faces/detect_face_result.js +38 -0
- package/www/react-native/detect_faces/detect_faces_attribute.js +15 -0
- package/www/react-native/detect_faces/detect_faces_attribute_result.js +20 -0
- package/www/react-native/detect_faces/detect_faces_backend_exception.js +23 -0
- package/www/react-native/detect_faces/detect_faces_config.js +14 -0
- package/www/react-native/detect_faces/detect_faces_exception.js +30 -0
- package/www/react-native/detect_faces/detect_faces_request.js +67 -0
- package/www/react-native/detect_faces/detect_faces_response.js +24 -0
- package/www/react-native/detect_faces/detect_faces_scenario.js +10 -0
- package/www/react-native/face_capture/face_capture_config.js +28 -0
- package/www/react-native/face_capture/face_capture_exception.js +25 -0
- package/www/react-native/face_capture/face_capture_image.js +26 -0
- package/www/react-native/face_capture/face_capture_response.js +17 -0
- package/www/react-native/image_params/output_image_crop.js +21 -0
- package/www/react-native/image_params/output_image_params.js +9 -0
- package/www/react-native/image_params/point.js +14 -0
- package/www/react-native/image_params/rect.js +18 -0
- package/www/react-native/image_params/size.js +9 -0
- package/www/react-native/image_quality/image_quality_characteristic.js +24 -0
- package/www/react-native/image_quality/image_quality_characteristic_name.js +58 -0
- package/www/react-native/image_quality/image_quality_group.js +332 -0
- package/www/react-native/image_quality/image_quality_range.js +26 -0
- package/www/react-native/image_quality/image_quality_result.js +40 -0
- package/www/react-native/index.js +219 -0
- package/www/react-native/init/face_sdk_version.js +16 -0
- package/www/react-native/init/init_config.js +9 -0
- package/www/react-native/init/init_exception.js +29 -0
- package/www/react-native/init/license_exception.js +29 -0
- package/www/react-native/internal/bridge.js +39 -0
- package/www/react-native/liveness/liveness_backend_exception.js +38 -0
- package/www/react-native/liveness/liveness_config.js +54 -0
- package/www/react-native/liveness/liveness_exception.js +35 -0
- package/www/react-native/liveness/liveness_notification.js +34 -0
- package/www/react-native/liveness/liveness_response.js +30 -0
- package/www/react-native/match_faces/compared_face.js +21 -0
- package/www/react-native/match_faces/compared_faces_pair.js +23 -0
- package/www/react-native/match_faces/compared_faces_split.js +22 -0
- package/www/react-native/match_faces/match_faces_backend_exception.js +14 -0
- package/www/react-native/match_faces/match_faces_config.js +12 -0
- package/www/react-native/match_faces/match_faces_detection.js +25 -0
- package/www/react-native/match_faces/match_faces_detection_face.js +28 -0
- package/www/react-native/match_faces/match_faces_exception.js +30 -0
- package/www/react-native/match_faces/match_faces_image.js +25 -0
- package/www/react-native/match_faces/match_faces_request.js +13 -0
- package/www/react-native/match_faces/match_faces_response.js +28 -0
- package/www/react-native/person_database/edit_group_persons_request.js +9 -0
- package/www/react-native/person_database/image_upload.js +16 -0
- package/www/react-native/person_database/pageable_item_list.js +22 -0
- package/www/react-native/person_database/person.js +22 -0
- package/www/react-native/person_database/person_database.js +145 -0
- package/www/react-native/person_database/person_group.js +18 -0
- package/www/react-native/person_database/person_image.js +22 -0
- package/www/react-native/person_database/search_person.js +31 -0
- package/www/react-native/person_database/search_person_detection.js +22 -0
- package/www/react-native/person_database/search_person_image.js +26 -0
- package/www/react-native/person_database/search_person_request.js +17 -0
- package/www/types/customization/camera_position.d.ts +4 -0
- package/www/types/customization/customization.d.ts +24 -0
- package/www/types/customization/customization_colors.d.ts +31 -0
- package/www/types/customization/customization_fonts.d.ts +17 -0
- package/www/types/customization/customization_images.d.ts +18 -0
- package/www/types/customization/font.d.ts +14 -0
- package/www/types/customization/screen_orientation.d.ts +4 -0
- package/www/types/detect_faces/detect_face_result.d.ts +16 -0
- package/www/types/detect_faces/detect_faces_attribute.d.ts +15 -0
- package/www/types/detect_faces/detect_faces_attribute_result.d.ts +11 -0
- package/www/types/detect_faces/detect_faces_backend_exception.d.ts +15 -0
- package/www/types/detect_faces/detect_faces_config.d.ts +19 -0
- package/www/types/detect_faces/detect_faces_exception.d.ts +21 -0
- package/www/types/detect_faces/detect_faces_request.d.ts +27 -0
- package/www/types/detect_faces/detect_faces_response.d.ts +12 -0
- package/www/types/detect_faces/detect_faces_scenario.d.ts +10 -0
- package/www/types/face_capture/face_capture_config.d.ts +30 -0
- package/www/types/face_capture/face_capture_exception.d.ts +17 -0
- package/www/types/face_capture/face_capture_image.d.ts +15 -0
- package/www/types/face_capture/face_capture_response.d.ts +9 -0
- package/www/types/image_params/output_image_crop.d.ts +25 -0
- package/www/types/image_params/output_image_params.d.ts +13 -0
- package/www/types/image_params/point.d.ts +6 -0
- package/www/types/image_params/rect.d.ts +8 -0
- package/www/types/image_params/size.d.ts +6 -0
- package/www/types/image_quality/image_quality_characteristic.d.ts +4 -0
- package/www/types/image_quality/image_quality_characteristic_name.d.ts +58 -0
- package/www/types/image_quality/image_quality_group.d.ts +155 -0
- package/www/types/image_quality/image_quality_range.d.ts +8 -0
- package/www/types/image_quality/image_quality_result.d.ts +30 -0
- package/www/types/index.d.ts +159 -0
- package/www/types/init/face_sdk_version.d.ts +7 -0
- package/www/types/init/init_config.d.ts +7 -0
- package/www/types/init/init_exception.d.ts +20 -0
- package/www/types/init/license_exception.d.ts +21 -0
- package/www/types/liveness/liveness_backend_exception.d.ts +30 -0
- package/www/types/liveness/liveness_config.d.ts +56 -0
- package/www/types/liveness/liveness_exception.d.ts +26 -0
- package/www/types/liveness/liveness_notification.d.ts +28 -0
- package/www/types/liveness/liveness_response.d.ts +18 -0
- package/www/types/match_faces/compared_face.d.ts +11 -0
- package/www/types/match_faces/compared_faces_pair.d.ts +12 -0
- package/www/types/match_faces/compared_faces_split.d.ts +8 -0
- package/www/types/match_faces/match_faces_backend_exception.d.ts +6 -0
- package/www/types/match_faces/match_faces_config.d.ts +14 -0
- package/www/types/match_faces/match_faces_detection.d.ts +12 -0
- package/www/types/match_faces/match_faces_detection_face.d.ts +13 -0
- package/www/types/match_faces/match_faces_exception.d.ts +21 -0
- package/www/types/match_faces/match_faces_image.d.ts +16 -0
- package/www/types/match_faces/match_faces_request.d.ts +18 -0
- package/www/types/match_faces/match_faces_response.d.ts +12 -0
- package/www/types/person_database/edit_group_persons_request.d.ts +8 -0
- package/www/types/person_database/image_upload.d.ts +6 -0
- package/www/types/person_database/pageable_item_list.d.ts +7 -0
- package/www/types/person_database/person.d.ts +10 -0
- package/www/types/person_database/person_database.d.ts +92 -0
- package/www/types/person_database/person_group.d.ts +8 -0
- package/www/types/person_database/person_image.d.ts +10 -0
- package/www/types/person_database/search_person.d.ts +15 -0
- package/www/types/person_database/search_person_detection.d.ts +11 -0
- package/www/types/person_database/search_person_image.d.ts +12 -0
- package/www/types/person_database/search_person_request.d.ts +15 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import datetime
|
|
3
|
+
from typing import Tuple
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
from urllib.parse import urlparse
|
|
7
|
+
from getpass import getpass
|
|
8
|
+
from ftplib import FTP
|
|
9
|
+
from dateutil import parser
|
|
10
|
+
|
|
11
|
+
from ios_ci.common.dependency import DependencyBuildType
|
|
12
|
+
from ios_ci.common.dependency import Dependency
|
|
13
|
+
from ios_ci.common.build_index import BuildIndex
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def connect(ftp_host: str):
|
|
17
|
+
is_public_ftp = ftp_host == "pods.regulaforensics.com"
|
|
18
|
+
|
|
19
|
+
if is_public_ftp:
|
|
20
|
+
username_env_key = "PUBLIC_UPLOAD_FTP_USERNAME"
|
|
21
|
+
password_env_key = "PUBLIC_UPLOAD_FTP_PASSWORD"
|
|
22
|
+
else:
|
|
23
|
+
username_env_key = "PRIVATE_UPLOAD_FTP_USERNAME"
|
|
24
|
+
password_env_key = "PRIVATE_UPLOAD_FTP_PASSWORD"
|
|
25
|
+
|
|
26
|
+
ftp_username = os.environ.get(username_env_key)
|
|
27
|
+
if ftp_username is None:
|
|
28
|
+
ftp_username = input(f"{username_env_key}: ")
|
|
29
|
+
ftp_password = os.environ.get(password_env_key)
|
|
30
|
+
if ftp_password is None:
|
|
31
|
+
ftp_password = getpass(f"{password_env_key}: ")
|
|
32
|
+
|
|
33
|
+
print(
|
|
34
|
+
f"[log] establishing conection with ftp_host: {ftp_host} using ftp_username: {ftp_username}"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
session = FTP(host=ftp_host, user=ftp_username, passwd=ftp_password)
|
|
38
|
+
return session
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def upload_build(upload_url: str, build_version: str, the_archive_filepath: str):
|
|
42
|
+
uplaod_url_components = urlparse(upload_url)
|
|
43
|
+
ftp_host = _fix_host_name(uplaod_url_components.hostname)
|
|
44
|
+
|
|
45
|
+
session = connect(ftp_host=ftp_host)
|
|
46
|
+
|
|
47
|
+
ftp_path_components = uplaod_url_components.path.split("/")
|
|
48
|
+
ftp_path_components.remove("")
|
|
49
|
+
ftp_zip_file_name = ftp_path_components.pop()
|
|
50
|
+
for component in ftp_path_components:
|
|
51
|
+
if component == build_version and component in session.nlst():
|
|
52
|
+
print(f"[log] version already exits at {upload_url}")
|
|
53
|
+
try:
|
|
54
|
+
if component in session.nlst():
|
|
55
|
+
print(f"[log] directory: {component} exists. opening.")
|
|
56
|
+
session.cwd(component)
|
|
57
|
+
else:
|
|
58
|
+
print(f"[log] directory: {component} does not exits. creating.")
|
|
59
|
+
session.mkd(component)
|
|
60
|
+
session.cwd(component)
|
|
61
|
+
except Exception as e:
|
|
62
|
+
print(f"[error] ftp error: {e}")
|
|
63
|
+
raise
|
|
64
|
+
|
|
65
|
+
the_archive_file = open(the_archive_filepath, "rb")
|
|
66
|
+
session.storbinary(f"STOR {ftp_zip_file_name}", the_archive_file)
|
|
67
|
+
|
|
68
|
+
session.quit()
|
|
69
|
+
the_archive_file.close()
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _local_build_index_filepath() -> Tuple[str, str]:
|
|
73
|
+
filename = "index.toml"
|
|
74
|
+
this_script_path = os.path.dirname(os.path.realpath(__file__))
|
|
75
|
+
local_filepath = f"{this_script_path}/{filename}"
|
|
76
|
+
return (local_filepath, filename)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _guard_only_local_ftp_host(project_url: str):
|
|
80
|
+
components = urlparse(project_url)
|
|
81
|
+
ftp_host = components.hostname
|
|
82
|
+
if ftp_host != "ftp" and ftp_host != "ftp.regula.local":
|
|
83
|
+
print(
|
|
84
|
+
f"[error] Build index is only supported for private ftp usage. Double check the project_url: {project_url}"
|
|
85
|
+
)
|
|
86
|
+
raise ValueError(
|
|
87
|
+
"Build index is only supported for private ftp usage. Double check the project_url.",
|
|
88
|
+
project_url,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _fix_host_name(host_name: str) -> str:
|
|
93
|
+
fix_name = os.environ.get("LOCAL_FTP_RENAME")
|
|
94
|
+
if fix_name:
|
|
95
|
+
return fix_name
|
|
96
|
+
return host_name
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def fetch_build_index(project_url: str) -> Optional[BuildIndex]:
|
|
100
|
+
_guard_only_local_ftp_host(project_url)
|
|
101
|
+
|
|
102
|
+
components = urlparse(project_url)
|
|
103
|
+
ftp_host = _fix_host_name(components.hostname)
|
|
104
|
+
session = connect(ftp_host=ftp_host)
|
|
105
|
+
|
|
106
|
+
try:
|
|
107
|
+
session.cwd(components.path)
|
|
108
|
+
except Exception as e:
|
|
109
|
+
print(f"[error] ftp error: {e}")
|
|
110
|
+
raise
|
|
111
|
+
|
|
112
|
+
filepath, filename = _local_build_index_filepath()
|
|
113
|
+
if filename not in session.nlst():
|
|
114
|
+
return None
|
|
115
|
+
|
|
116
|
+
with open(filepath, "wb") as file:
|
|
117
|
+
session.retrbinary(f"RETR {filename}", file.write)
|
|
118
|
+
|
|
119
|
+
import toml
|
|
120
|
+
|
|
121
|
+
index_dict = toml.load(filepath)
|
|
122
|
+
index = BuildIndex.from_json(index_dict)
|
|
123
|
+
return index
|
|
124
|
+
|
|
125
|
+
def upload_collection_json(project_url: str):
|
|
126
|
+
components = urlparse(project_url)
|
|
127
|
+
ftp_host = _fix_host_name(components.hostname)
|
|
128
|
+
|
|
129
|
+
session = connect(ftp_host=ftp_host)
|
|
130
|
+
|
|
131
|
+
try:
|
|
132
|
+
session.cwd(components.path)
|
|
133
|
+
except Exception as e:
|
|
134
|
+
print(f"[error] ftp error: {e}")
|
|
135
|
+
raise
|
|
136
|
+
|
|
137
|
+
filepath = "/Users/administratorregula/workspace/iOS_SPM_Upload_Pipeline/iOS_Common/ios-ci/swift-package-collection-generator/PodsCollection-signed.json"
|
|
138
|
+
filename = "PodsCollection-signed.json"
|
|
139
|
+
|
|
140
|
+
the_json_file = open(filepath, "rb")
|
|
141
|
+
session.storbinary(f"STOR {filename}", the_json_file)
|
|
142
|
+
|
|
143
|
+
session.quit()
|
|
144
|
+
the_json_file.close()
|
|
145
|
+
|
|
146
|
+
def upload_build_index(index: BuildIndex, project_url: str):
|
|
147
|
+
_guard_only_local_ftp_host(project_url)
|
|
148
|
+
|
|
149
|
+
components = urlparse(project_url)
|
|
150
|
+
ftp_host = _fix_host_name(components.hostname)
|
|
151
|
+
session = connect(ftp_host=ftp_host)
|
|
152
|
+
try:
|
|
153
|
+
session.cwd(components.path)
|
|
154
|
+
except Exception as e:
|
|
155
|
+
print(f"[error] ftp error: {e}")
|
|
156
|
+
raise
|
|
157
|
+
|
|
158
|
+
import toml
|
|
159
|
+
|
|
160
|
+
filepath, filename = _local_build_index_filepath()
|
|
161
|
+
|
|
162
|
+
prefix = (
|
|
163
|
+
"# This is an autogenerated file created by ios-ci.\n"
|
|
164
|
+
"# The file is used for indexing build versions by branch names.\n"
|
|
165
|
+
"# Please do not modify it manually.\n\n"
|
|
166
|
+
)
|
|
167
|
+
toml_str = toml.dumps(index.to_json())
|
|
168
|
+
toml_str = prefix + toml_str
|
|
169
|
+
|
|
170
|
+
with open(filepath, "wt") as file:
|
|
171
|
+
file.write(toml_str)
|
|
172
|
+
|
|
173
|
+
the_index_file = open(filepath, "rb")
|
|
174
|
+
session.storbinary(f"STOR {filename}", the_index_file)
|
|
175
|
+
|
|
176
|
+
session.quit()
|
|
177
|
+
the_index_file.close()
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def _ftp_url_for_build_type(build_type: DependencyBuildType, is_temp_specs: bool = False) -> str:
|
|
181
|
+
scheme_type_switch = {
|
|
182
|
+
DependencyBuildType.TEMP: "https" if is_temp_specs else "http",
|
|
183
|
+
DependencyBuildType.BETA: "https",
|
|
184
|
+
DependencyBuildType.NIGHTLY: "https",
|
|
185
|
+
DependencyBuildType.STAGE: "https",
|
|
186
|
+
DependencyBuildType.RELEASE: "https",
|
|
187
|
+
}
|
|
188
|
+
scheme = scheme_type_switch.get(build_type)
|
|
189
|
+
host_type_switch = {
|
|
190
|
+
DependencyBuildType.TEMP: "ftp.regula.local",
|
|
191
|
+
DependencyBuildType.BETA: "pods.regulaforensics.com",
|
|
192
|
+
DependencyBuildType.NIGHTLY: "pods.regulaforensics.com/Nightly",
|
|
193
|
+
DependencyBuildType.STAGE: "pods.regulaforensics.com/Stage",
|
|
194
|
+
DependencyBuildType.RELEASE: "pods.regulaforensics.com",
|
|
195
|
+
}
|
|
196
|
+
host_name = host_type_switch.get(build_type)
|
|
197
|
+
host_name = _fix_host_name(host_name)
|
|
198
|
+
return f"{scheme}://{host_name}"
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def make_ftp_build_archive_url(dependency: Dependency, version: str, is_temp_specs: bool = False) -> str:
|
|
202
|
+
build_type = dependency.build_type
|
|
203
|
+
resource_path = dependency.ftp_project_path
|
|
204
|
+
archive_name = dependency.ftp_archive_name(version=version)
|
|
205
|
+
resource_path = f"{resource_path}/{version}/{archive_name}"
|
|
206
|
+
base = _ftp_url_for_build_type(build_type=build_type, is_temp_specs=is_temp_specs)
|
|
207
|
+
return f"{base}/{resource_path}.zip"
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def make_ftp_project_url(dependency: Dependency) -> str:
|
|
211
|
+
build_type = dependency.build_type
|
|
212
|
+
resource_path = dependency.ftp_project_path
|
|
213
|
+
base = _ftp_url_for_build_type(build_type=build_type)
|
|
214
|
+
return f"{base}/{resource_path}"
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def upload_latest_version(version: str, project_url: str):
|
|
218
|
+
components = urlparse(project_url)
|
|
219
|
+
ftp_host = _fix_host_name(components.hostname)
|
|
220
|
+
session = connect(ftp_host=ftp_host)
|
|
221
|
+
ftp_path_components = components.path.split("/")
|
|
222
|
+
ftp_path_components.remove("")
|
|
223
|
+
for component in ftp_path_components:
|
|
224
|
+
try:
|
|
225
|
+
if component in session.nlst():
|
|
226
|
+
print(f"[log] directory: {component} exists. opening.")
|
|
227
|
+
session.cwd(component)
|
|
228
|
+
else:
|
|
229
|
+
print(f"[log] directory: {component} does not exits. creating.")
|
|
230
|
+
session.mkd(component)
|
|
231
|
+
session.cwd(component)
|
|
232
|
+
except Exception as e:
|
|
233
|
+
print(f"[error] ftp error: {e}")
|
|
234
|
+
raise
|
|
235
|
+
|
|
236
|
+
filename = "latest_version.txt"
|
|
237
|
+
this_script_path = os.path.dirname(os.path.realpath(__file__))
|
|
238
|
+
filepath = f"{this_script_path}/{filename}"
|
|
239
|
+
|
|
240
|
+
with open(filepath, "wt") as file:
|
|
241
|
+
file.write(version)
|
|
242
|
+
|
|
243
|
+
the_version_file = open(filepath, "rb")
|
|
244
|
+
session.storbinary(f"STOR {filename}", the_version_file)
|
|
245
|
+
|
|
246
|
+
session.quit()
|
|
247
|
+
the_version_file.close()
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def clean_old_data(url: str):
|
|
251
|
+
url_components = urlparse(url)
|
|
252
|
+
ftp_host = _fix_host_name(url_components.hostname)
|
|
253
|
+
ftp_path_components = url_components.path.split("/")
|
|
254
|
+
ftp_path_components.remove("")
|
|
255
|
+
session = connect(ftp_host=ftp_host)
|
|
256
|
+
session.cwd(ftp_path_components[0])
|
|
257
|
+
lines = session.nlst()
|
|
258
|
+
session.dir("", lines.append)
|
|
259
|
+
|
|
260
|
+
for line in lines:
|
|
261
|
+
tokens = line.split(maxsplit=9)
|
|
262
|
+
if tokens.__len__() > 7:
|
|
263
|
+
time_str = tokens[5] + " " + tokens[6] + " " + tokens[7]
|
|
264
|
+
time = parser.parse(time_str)
|
|
265
|
+
if time < datetime.datetime.now() - datetime.timedelta(days=60):
|
|
266
|
+
delete_dir(f"{url}/{tokens[8]}")
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def delete_dir(dir_url: str):
|
|
270
|
+
upload_url_components = urlparse(dir_url)
|
|
271
|
+
ftp_host = _fix_host_name(upload_url_components.hostname)
|
|
272
|
+
session = connect(ftp_host=ftp_host)
|
|
273
|
+
|
|
274
|
+
ftp_path_components = upload_url_components.path.split("/")
|
|
275
|
+
ftp_path_components.remove("")
|
|
276
|
+
target_dir = ftp_path_components.pop()
|
|
277
|
+
for component in ftp_path_components:
|
|
278
|
+
try:
|
|
279
|
+
if component in session.nlst():
|
|
280
|
+
print(f"[log] directory: {component} exists. opening.")
|
|
281
|
+
session.cwd(component)
|
|
282
|
+
else:
|
|
283
|
+
ValueError(f"[log] delete_dir error: parent directory '{component}' does not exits.")
|
|
284
|
+
except Exception as e:
|
|
285
|
+
print(f"[error] ftp error: {e}")
|
|
286
|
+
raise
|
|
287
|
+
|
|
288
|
+
ftp_rm_tree(session, target_dir)
|
|
289
|
+
session.quit()
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def ftp_rm_tree(ftp, path):
|
|
293
|
+
wd = ftp.pwd()
|
|
294
|
+
|
|
295
|
+
try:
|
|
296
|
+
names = ftp.nlst(path)
|
|
297
|
+
except:
|
|
298
|
+
return
|
|
299
|
+
|
|
300
|
+
for name in names:
|
|
301
|
+
if os.path.split(name)[1] in ('.', '..'): continue
|
|
302
|
+
try:
|
|
303
|
+
ftp.cwd(name) # if we can cwd to it, it's a folder
|
|
304
|
+
ftp.cwd(wd) # don't try a nuke a folder we're in
|
|
305
|
+
ftp_rm_tree(ftp, name)
|
|
306
|
+
except:
|
|
307
|
+
print(f"[ftp_rm_tree] deleting file {name}")
|
|
308
|
+
ftp.delete(name)
|
|
309
|
+
|
|
310
|
+
try:
|
|
311
|
+
print(f"[ftp_rm_tree] deleting directory {path}")
|
|
312
|
+
ftp.rmd(path)
|
|
313
|
+
except Exception as e:
|
|
314
|
+
print(f"[error] ftp_rm_tree: Could not remove {0}: {1}".format(path, e))
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/bash -l
|
|
2
|
+
|
|
3
|
+
PODNAME=$1
|
|
4
|
+
VERSION=$2
|
|
5
|
+
isCocoapodUpdated=0
|
|
6
|
+
|
|
7
|
+
echo "PODNAME: ${PODNAME}"
|
|
8
|
+
echo "VERSION: ${VERSION}"
|
|
9
|
+
|
|
10
|
+
isCocoapodUpdated=0
|
|
11
|
+
while [ ${isCocoapodUpdated} -ne 1 ]
|
|
12
|
+
do
|
|
13
|
+
pod repo update
|
|
14
|
+
RESULT=$(pod search ${PODNAME} --no-pager --simple)
|
|
15
|
+
echo "COCOAPOD VERSION: ${RESULT}"
|
|
16
|
+
if [[ "${RESULT}" == *"- ${VERSION}"* ]]; then
|
|
17
|
+
isCocoapodUpdated=1
|
|
18
|
+
else
|
|
19
|
+
sleep 180
|
|
20
|
+
fi
|
|
21
|
+
done
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import subprocess
|
|
3
|
+
import shutil
|
|
4
|
+
|
|
5
|
+
from ios_ci.common.dependency import DependencyBuildType
|
|
6
|
+
from ios_ci.common.dependency import VersionResolver
|
|
7
|
+
from ios_ci.common.dependency import make_dependency
|
|
8
|
+
from ios_ci.common.dependency import inject_destination_path
|
|
9
|
+
from ios_ci.common import ftp
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def inject_dependency(
|
|
13
|
+
name: str,
|
|
14
|
+
version_selector: str,
|
|
15
|
+
dependency_type: str,
|
|
16
|
+
branch="default",
|
|
17
|
+
destination: str = None,
|
|
18
|
+
):
|
|
19
|
+
branch = branch.replace("/", "_")
|
|
20
|
+
|
|
21
|
+
resolver = VersionResolver()
|
|
22
|
+
build_type = DependencyBuildType(dependency_type)
|
|
23
|
+
dependency = make_dependency(name, build_type)
|
|
24
|
+
resolved_version = resolver.resolve_dependency_version(
|
|
25
|
+
dependency=dependency, version_selector=version_selector, branch=branch
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
destination_dependency = dependency
|
|
29
|
+
source_dependency = dependency
|
|
30
|
+
if resolved_version.build_type is not None:
|
|
31
|
+
if (
|
|
32
|
+
dependency.build_type is DependencyBuildType.BETA
|
|
33
|
+
and resolved_version.build_type is not DependencyBuildType.BETA
|
|
34
|
+
):
|
|
35
|
+
print(
|
|
36
|
+
f"[warning] {dependency.name}: dependency resolved by cocoapods has a different type: {resolved_version.build_type}. Overriding dependency.type: {dependency.build_type} to the cocoapods type: {resolved_version.build_type}"
|
|
37
|
+
)
|
|
38
|
+
destination_dependency = make_dependency(name, resolved_version.build_type)
|
|
39
|
+
|
|
40
|
+
pod_name = dependency.pod_name
|
|
41
|
+
print(f"[log] {pod_name}: {version_selector}, {dependency.build_type}, {branch}")
|
|
42
|
+
|
|
43
|
+
version = resolved_version.version
|
|
44
|
+
if version is None:
|
|
45
|
+
print(
|
|
46
|
+
f"[error] unable to fetch version for {pod_name}, {version_selector}, {dependency.build_type}, {branch}"
|
|
47
|
+
)
|
|
48
|
+
exit(1)
|
|
49
|
+
|
|
50
|
+
if destination is None:
|
|
51
|
+
destination = inject_destination_path(destination_dependency)
|
|
52
|
+
|
|
53
|
+
print(f"[log] {pod_name}: destinaton: {destination}")
|
|
54
|
+
source_url = ftp.make_ftp_build_archive_url(source_dependency, version)
|
|
55
|
+
print(f"[log] {pod_name}: source_url: {source_url}")
|
|
56
|
+
|
|
57
|
+
print(f"[log] {pod_name}: check if folder exists {destination}")
|
|
58
|
+
if not os.path.exists(destination):
|
|
59
|
+
print(f"[warning] {pod_name}: destinaton does not exist. Creating a folder.")
|
|
60
|
+
try:
|
|
61
|
+
os.makedirs(destination)
|
|
62
|
+
except OSError as error:
|
|
63
|
+
print(error)
|
|
64
|
+
print(
|
|
65
|
+
f"[error] {pod_name}: Error: {error}. failed to create a folder at {destination}"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
framework_name = dependency.framework_name
|
|
69
|
+
framework_filepath = f"{destination}/{framework_name}"
|
|
70
|
+
print(f"[log] {pod_name}: framework_filepath: {framework_filepath}")
|
|
71
|
+
if os.path.exists(framework_filepath):
|
|
72
|
+
print(f"[log] {pod_name}: framework already exists. overriding.")
|
|
73
|
+
shutil.rmtree(framework_filepath)
|
|
74
|
+
|
|
75
|
+
download_attempts: int = os.environ.get("IOS_CI_DEPENDENCY_DOWNLOAD_ATTEMPTS", 3)
|
|
76
|
+
|
|
77
|
+
injected = False
|
|
78
|
+
for attempt in range(download_attempts):
|
|
79
|
+
print(
|
|
80
|
+
f"[log] {pod_name}: Attempt {attempt + 1} of {download_attempts} to download and unzip dependency from url: {source_url}"
|
|
81
|
+
)
|
|
82
|
+
success = _attempt_download_and_unzip(
|
|
83
|
+
source_url=source_url,
|
|
84
|
+
destination=destination,
|
|
85
|
+
expected_framework_name=framework_name,
|
|
86
|
+
log_prefix=pod_name,
|
|
87
|
+
)
|
|
88
|
+
if success:
|
|
89
|
+
injected = True
|
|
90
|
+
break
|
|
91
|
+
|
|
92
|
+
if not injected:
|
|
93
|
+
print(
|
|
94
|
+
f"[error] {pod_name}: failed all attempts to download and unzip dependency from url: {source_url}"
|
|
95
|
+
)
|
|
96
|
+
exit(1)
|
|
97
|
+
|
|
98
|
+
print(f"[log] injected dependency successfully")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _attempt_download_and_unzip(
|
|
102
|
+
source_url: str, destination: str, expected_framework_name: str, log_prefix: str
|
|
103
|
+
) -> bool:
|
|
104
|
+
zip_filepath = f"{destination}/_temp_dependency_archive.zip"
|
|
105
|
+
print(f"[log] {log_prefix}: zip_filepath: {zip_filepath}")
|
|
106
|
+
if os.path.exists(zip_filepath):
|
|
107
|
+
print(
|
|
108
|
+
f"[log] {log_prefix}: removing previous download at zip_filepath: {zip_filepath}"
|
|
109
|
+
)
|
|
110
|
+
os.remove(zip_filepath)
|
|
111
|
+
|
|
112
|
+
print(f"[log] {log_prefix}: downloading fresh dependency from url: {source_url}")
|
|
113
|
+
subprocess.run(
|
|
114
|
+
["curl", "-s", source_url, "--output", zip_filepath], check=True, text=True
|
|
115
|
+
)
|
|
116
|
+
if not os.path.exists(zip_filepath):
|
|
117
|
+
print(f"[error] {log_prefix}: download failed. zip does NOT exist.")
|
|
118
|
+
return False
|
|
119
|
+
print(f"[log] {log_prefix}: download is successful")
|
|
120
|
+
|
|
121
|
+
print(
|
|
122
|
+
f"[log] {log_prefix}: unzip zipfile: {zip_filepath} to location: {destination}"
|
|
123
|
+
)
|
|
124
|
+
try:
|
|
125
|
+
subprocess.run(
|
|
126
|
+
["unzip", "-q", "-ao", zip_filepath, "-d", destination],
|
|
127
|
+
check=True,
|
|
128
|
+
text=True,
|
|
129
|
+
)
|
|
130
|
+
except subprocess.CalledProcessError as error:
|
|
131
|
+
print(error)
|
|
132
|
+
return False
|
|
133
|
+
|
|
134
|
+
framework_filepath = f"{destination}/{expected_framework_name}"
|
|
135
|
+
if not os.path.exists(framework_filepath):
|
|
136
|
+
print(f"[error] {log_prefix}: unzip failure. Framework does not exist.")
|
|
137
|
+
return False
|
|
138
|
+
|
|
139
|
+
print(f"[log] {log_prefix}: unzip success.")
|
|
140
|
+
|
|
141
|
+
if os.path.exists(zip_filepath):
|
|
142
|
+
print(f"[log] {log_prefix}: cleanup downloaded archive: {zip_filepath}")
|
|
143
|
+
os.remove(zip_filepath)
|
|
144
|
+
|
|
145
|
+
return True
|
|
File without changes
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
import datetime
|
|
5
|
+
|
|
6
|
+
from ios_ci.common.dependency import Dependency
|
|
7
|
+
from ios_ci.common.dependency import DependencyBuildType
|
|
8
|
+
from ios_ci.common.dependency import CoreDependency
|
|
9
|
+
from ios_ci.common.dependency import make_dependency
|
|
10
|
+
|
|
11
|
+
from ios_ci.common import ftp
|
|
12
|
+
|
|
13
|
+
_this_filepath = Path(os.path.dirname(os.path.abspath(__file__)))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def make_podspec(
|
|
17
|
+
name: str,
|
|
18
|
+
version: str,
|
|
19
|
+
type: str,
|
|
20
|
+
dependency_name: str = None,
|
|
21
|
+
dependency_version: str = None,
|
|
22
|
+
dependency_type: str = None,
|
|
23
|
+
output_location_directory: str = None,
|
|
24
|
+
) -> str:
|
|
25
|
+
build_type = DependencyBuildType(type)
|
|
26
|
+
package = make_dependency(name=name, build_type=build_type)
|
|
27
|
+
|
|
28
|
+
dependency_build_type = None
|
|
29
|
+
dependency = None
|
|
30
|
+
|
|
31
|
+
if dependency_type is not None:
|
|
32
|
+
dependency_build_type = DependencyBuildType(dependency_type)
|
|
33
|
+
if dependency_name is not None and dependency_build_type is not None:
|
|
34
|
+
dependency = make_dependency(
|
|
35
|
+
name=dependency_name, build_type=dependency_build_type
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
output_filepath = _make_podspec(
|
|
39
|
+
package=package,
|
|
40
|
+
package_version=version,
|
|
41
|
+
dependency=dependency,
|
|
42
|
+
dependency_version=dependency_version,
|
|
43
|
+
output_location_directory=output_location_directory,
|
|
44
|
+
)
|
|
45
|
+
return output_filepath
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _make_podspec(
|
|
49
|
+
package: Dependency,
|
|
50
|
+
package_version: str,
|
|
51
|
+
dependency: Dependency = None,
|
|
52
|
+
dependency_version: str = None,
|
|
53
|
+
output_location_directory: str = None,
|
|
54
|
+
) -> str:
|
|
55
|
+
if output_location_directory is None:
|
|
56
|
+
output_location_directory = str(_this_filepath)
|
|
57
|
+
|
|
58
|
+
token_value_map = {
|
|
59
|
+
"<VERSION>": package_version,
|
|
60
|
+
"<POD_NAME>": package.pod_name_temp,
|
|
61
|
+
"<YEAR>": str(datetime.datetime.now().year),
|
|
62
|
+
"<FTP_SOURCE_URL>": ftp.make_ftp_build_archive_url(
|
|
63
|
+
dependency=package, version=package_version, is_temp_specs=True
|
|
64
|
+
),
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if dependency is not None:
|
|
68
|
+
token_value_map.update(
|
|
69
|
+
{
|
|
70
|
+
"<DEPENDENCY_NAME>": dependency.pod_name_temp,
|
|
71
|
+
"<DEPENDENCY_VERSION>": dependency_version,
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
print(f"[log] token_value_map: {json.dumps(token_value_map, indent=4)}")
|
|
75
|
+
|
|
76
|
+
is_core = isinstance(package, CoreDependency)
|
|
77
|
+
package_name = "Core" if is_core else package.name
|
|
78
|
+
package_name = "FaceCore" if package.name[0:8] == "FaceCore" else package_name
|
|
79
|
+
template_filepath = _this_filepath / "templates" / f"{package_name}.podspec"
|
|
80
|
+
output_filepath = f"{output_location_directory}/{package.pod_name_temp}.podspec"
|
|
81
|
+
with open(template_filepath, "rt") as fin, open(output_filepath, "wt") as fout:
|
|
82
|
+
for line in fin:
|
|
83
|
+
for token, value in token_value_map.items():
|
|
84
|
+
line = line.replace(token, value)
|
|
85
|
+
fout.write(line)
|
|
86
|
+
|
|
87
|
+
print(f"[log] {package.pod_name_temp}.podspec created at: {output_filepath}")
|
|
88
|
+
return output_filepath
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Pod::Spec.new do |s|
|
|
2
|
+
s.name = '<POD_NAME>'
|
|
3
|
+
s.version = '<VERSION>'
|
|
4
|
+
s.summary = 'Framework for reading and authenticity verification of identity documents using the Regula mobile document authenticator'
|
|
5
|
+
s.license = {
|
|
6
|
+
type: 'commercial',
|
|
7
|
+
text: <<-LICENSE
|
|
8
|
+
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
+
LICENSE
|
|
10
|
+
}
|
|
11
|
+
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
+
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
+
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
+
s.platform = :ios
|
|
15
|
+
s.ios.deployment_target = '11.0.0'
|
|
16
|
+
s.ios.vendored_frameworks = 'BTDevice.xcframework'
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Pod::Spec.new do |s|
|
|
2
|
+
s.name = '<POD_NAME>'
|
|
3
|
+
s.version = '<VERSION>'
|
|
4
|
+
s.summary = 'Document Reader Core framework for fast and accurate data extraction from identity documents'
|
|
5
|
+
s.license = {
|
|
6
|
+
type: 'commercial',
|
|
7
|
+
text: <<-LICENSE
|
|
8
|
+
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
+
LICENSE
|
|
10
|
+
}
|
|
11
|
+
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
+
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
+
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
+
s.platform = :ios
|
|
15
|
+
s.ios.deployment_target = '11.0.0'
|
|
16
|
+
s.ios.vendored_frameworks = 'DocumentReaderCore.xcframework'
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Pod::Spec.new do |s|
|
|
2
|
+
s.name = '<POD_NAME>'
|
|
3
|
+
s.version = '<VERSION>'
|
|
4
|
+
s.summary = 'Document Reader API framework for fast and accurate data extraction from identity documents'
|
|
5
|
+
s.license = {
|
|
6
|
+
type: 'commercial',
|
|
7
|
+
text: <<-LICENSE
|
|
8
|
+
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
+
LICENSE
|
|
10
|
+
}
|
|
11
|
+
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
+
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
+
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
+
s.platform = :ios
|
|
15
|
+
s.weak_frameworks = 'CoreNFC'
|
|
16
|
+
s.ios.deployment_target = '11.0.0'
|
|
17
|
+
s.ios.vendored_frameworks = 'DocumentReader.xcframework'
|
|
18
|
+
s.dependency '<DEPENDENCY_NAME>', '<DEPENDENCY_VERSION>'
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Pod::Spec.new do |s|
|
|
2
|
+
s.name = '<POD_NAME>'
|
|
3
|
+
s.version = '<VERSION>'
|
|
4
|
+
s.summary = 'Face Core framework for face matching, face recognition, and liveness detection'
|
|
5
|
+
s.license = {
|
|
6
|
+
type: 'commercial',
|
|
7
|
+
text: <<-LICENSE
|
|
8
|
+
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
+
LICENSE
|
|
10
|
+
}
|
|
11
|
+
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
+
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
+
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
+
s.platform = :ios
|
|
15
|
+
s.ios.deployment_target = '11.0.0'
|
|
16
|
+
s.ios.vendored_frameworks = 'Liveness.xcframework'
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Pod::Spec.new do |s|
|
|
2
|
+
s.name = '<POD_NAME>'
|
|
3
|
+
s.version = '<VERSION>'
|
|
4
|
+
s.summary = 'Framework for face matching, face recognition, and liveness detection'
|
|
5
|
+
s.license = {
|
|
6
|
+
type: 'commercial',
|
|
7
|
+
text: <<-LICENSE
|
|
8
|
+
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
+
LICENSE
|
|
10
|
+
}
|
|
11
|
+
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
+
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
+
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
+
s.platform = :ios
|
|
15
|
+
s.ios.deployment_target = '11.0.0'
|
|
16
|
+
s.ios.vendored_frameworks = 'FaceSDK.xcframework'
|
|
17
|
+
s.dependency '<DEPENDENCY_NAME>', '<DEPENDENCY_VERSION>'
|
|
18
|
+
end
|