-
Notifications
You must be signed in to change notification settings - Fork 10
Frequently Asked Questions
This new error is not for general use cases but only for iProov internal use. Integrators will never see it on their SPs.
Please consult our dedicated Localization Guide.
The size impact on the downloadable (compressed) size of your app by adding the iProov iOS Biometrics SDK is approximately 1.77MB.
These calculations were performed in October 2024 using Xcode 15.3 with iProov Biometrics SDK 12.2.0.
Module stability is a feature introduced with Swift 5.1 which means that frameworks can be consumed by any version of the Swift compiler.
Prior to the introduction of module stability, the version of Xcode/Swift used to compile iProov (or any other binary framework) was version-locked to the exact version of Xcode/Swift used to consume the framework (i.e. the version that you, the developer, use to build your app).
You would typically see a compiler error such as:
Module compiled with Swift 5.0 cannot be imported by the Swift 5.1 compiler
The only way to resolve this error would be for the framework vendor to provide a new version of their framework, compiled against the new compiler version.
With module stability, this is no longer necessary, as frameworks can be consumed by Swift 5.1 and above, regardless of compiler version.
Yes, in SDK v7.2.0 and above.
To enable module stability for a specific framework, one must enable the "Build Libraries for Distribution" option in Xcode at compile-time. This ensures that Xcode enables the necessary settings for module stability, including generation of the .swiftinterface
files.
Since iProov SDK v7.2.0, this option is enabled at compile-time on our build machines.
However, iProov's framework dependencies (Starscream & SwiftProtobuf) are all built from source on your machine, this option must be enabled when compiling your app.
Unfortunately neither Cocoapods nor Carthage currently support this behaviour, therefore it must be enabled manually via workarounds.
You can track the development of this feature for Cocoapods here and for Carthage here.
If you are using Cocoapods or Carthage, check you have applied the required workarounds to ensure that iProov's dependencies are built with the correct settings for modular stability.
If you are managing iProov's dependencies manually (not recommended), you must ensure they were built with the "Build Libraries for Distribution" option enabled.
If you continue to encounter issues, please contact iProov.
Whilst the iProov SDK is distributed with the i386 and x86_64 architectures to allow your app to continue to be built to run on the simulator, it is not possible to actually run an iProov claim in the simulator.
The simple reason for this is because the iProov SDK requires access to the camera in order to capture imagery, and the iOS Simulator has no access to the camera.
Yes
If attempting to use the latest iProov SDK versions in Xcode 11.3 or earlier, you will get compiler errors such as:
Unknown attribute '_inheritsConvenienceInitializers
Unknown attribute '_hasMissingDesignatedInitializers
This is due to these being new attributes which are not supported in older Xcode versions.
We strongly advise upgrading to the latest version of Xcode, however if that is not possible for whatever reason, the following workaround can be applied to strip the offending attributes from the SDK at build-time:
-
Edit the Scheme(s) used to build your app.
-
Under the "Build" section, select "Pre-actions".
-
Press the + button at the bottom left of the pane and select "New Run Script Action".
-
Next to "Provide build settings from", select your app target.
-
Add the following script:
# Cocoapods if [ -d "${PROJECT_DIR}/Pods/iProov" ]; then find ${PROJECT_DIR}/Pods/iProov/iProov.xcframework -type f -name '*.swiftinterface' -exec sed -i '' s/'@_inheritsConvenienceInitializers '// {} + find ${PROJECT_DIR}/Pods/iProov/iProov.xcframework -type f -name '*.swiftinterface' -exec sed -i '' s/'@_hasMissingDesignatedInitializers '// {} + fi # Carthage if [ -d "${PROJECT_DIR}/Carthage/Build/iOS/iProov.framework" ]; then find ${PROJECT_DIR}/Carthage/Build/iOS/iProov.framework -type f -name '*.swiftinterface' -exec sed -i '' s/'@_inheritsConvenienceInitializers '// {} + find ${PROJECT_DIR}/Carthage/Build/iOS/iProov.framework -type f -name '*.swiftinterface' -exec sed -i '' s/'@_hasMissingDesignatedInitializers '// {} + fi
-
You should now be able to build your app successfully.
The iProov SDK is distributed as a "fat" framework which includes both simulator & device architectures within a single framework.
When you distribute your app you must remove the simulator architectures. Cocoapods will automatically do this for you (one of the reasons we recommend Cocoapods!) but you can also do this manually by adding a "Run Script" build phase in Xcode after the "Embed Frameworks" step, with the following code:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
Check the box entitled "Run script only when installing" which means this script will only be executed when archiving.
If iProov's dependencies are not built with the "Build Libraries for Distribution" option enabled, you will get dyld
errors when running your app.
A typical error in this case is as follows:
dyld: Symbol not found: _$s8SocketIO0A11ClientEventO10disconnectyA2CmFWC
Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/117048E7-4BE7-418B-AE3F-49C833078BF7/data/Containers/Bundle/Application/3BE3039D-3F9C-4249-9F17-4896DE96D7CA/MyApp.app/Frameworks/iProov.framework/iProov
Expected in: /Users/me/Library/Developer/CoreSimulator/Devices/117048E7-4BE7-418B-AE3F-49C833078BF7/data/Containers/Bundle/Application/3BE3039D-3F9C-4249-9F17-4896DE96D7CA/MyApp.app/Frameworks/SocketIO.framework/SocketIO
in /Users/me/Library/Developer/CoreSimulator/Devices/117048E7-4BE7-418B-AE3F-49C833078BF7/data/Containers/Bundle/Application/3BE3039D-3F9C-4249-9F17-4896DE96D7CA/MyApp.app/Frameworks/iProov.framework/iProov
The solution for this is to ensure that "Build Libraries for Distribution" is enabled when building iProov's dependencies (including SocketIO).
If you are using Cocoapods or Carthage you should make sure you have applied the module stability workarounds to your Podfile, or the carthage build
command. See the installation instructions for further details.
We currently support Xamarin, Flutter and React Native. Follow the links to learn more.
If you wish to express an interest in iProov being made available on other platforms, we'd love to hear from you! Please contact [email protected].
Yes, the SDK has support for bitcode. However, as bitcode is deprecated in Xcode 14, support for bitcode will be removed in a future version.
The iProov SDK will work in landscape orientation, but the user will be prompted to rotate their iPad to portrait orientation before the scan will commence.
Yes, but the user needs to be in portrait mode, and not using multitasking as iProov requires full screen. If necessary, the user will be prompted to exit multitasking and/or rotate their iPad to portrait orientation before the iProov scan will commence.