Frequently Asked Questions
- How to hide the powered by Regula watermark?
- Where can I find the list of documents presented in the database?
- How to perform a hologram check?
- How to Submit a Code-Level Incident
- How do I collect logs?
- Where can I find the list of documents presented in the database?
- How to get logs from the iOS device?
- Code signing "DocumentReader.framework" failed: Troubleshooting
- How to calculate the final app size?
- What are the bundle ID and application ID?
How to hide the "powered by Regula" watermark?
Trial license keys have the powered by Regula watermark by default. Please reach out to our Sales Team to discuss the presence of the watermark on the scanning screen.
Where can I find the list of documents presented in the database?
How to perform a hologram check?
First of all, turn on the holograms check setting:
DocumentReader.Instance().processParams().checkHologram = true;
For more information, see the Hologram Detection page.
DocReader.shared.processParams.checkHologram = true
For more information, see the Hologram Detection page.
DocumentReader.Instance().ProcessParams().CheckHologram = (Java.Lang.Boolean)true;
For more information, see the Hologram Detection page.
RGLDocReader.Shared.ProcessParams.CheckHologram = true;
For more information, see the Hologram Detection page.
DocumentReader.setConfig({
processParams: {
checkHologram: true
},
}, (str) => { console.log(str) }, (error) => { console.log(error) });
For more information, see the Hologram Detection page.
DocumentReader.setConfig({
processParams: {
checkHologram: true
},
}, function (m) { }, function (e) { console.log(e); });
For more information, see the Hologram Detection page.
DocumentReader.setConfig({
processParams: {
checkHologram: true
}
});
For more information, see the Hologram Detection page.
DocumentReader.setConfig({
"processParams": {"checkHologram": true}
});
For more information, see the Hologram Detection page.
Then, after the initialization of the SDK is successfully finished but before starting the camera, choose the processing scenario that supports Document Type recognition, for example:
DocumentReader.Instance().processParams().scenario = Scenario.SCENARIO_FULL_PROCESS;
See the Scenarios page for more details.
DocReader.shared.processParams.scenario = RGL_SCENARIO_FULL_PROCESS
See the Scenarios page for more details.
DocumentReader.Instance().ProcessParams().Scenario = Scenario.ScenarioFullProcess;
See the Scenarios page for more details.
RGLDocReader.Shared.ProcessParams.Scenario = Constants.RGL_SCENARIO_FULL_PROCESS;
See the Scenarios page for more details.
DocumentReader.setConfig({
processParams: {
scenario: "FullProcess"
},
}, (str) => { console.log(str) }, (error) => { console.log(error) });
See the Scenarios page for more details.
DocumentReader.setConfig({
processParams: {
scenario: "FullProcess"
}
}, function (m) { }, function (e) { console.log(e); });
See the Scenarios page for more details.
DocumentReader.setConfig({
processParams: {
scenario: "FullProcess"
}
});
See the Scenarios page for more details.
DocumentReader.setConfig({
"processParams": {"scenario": ScenarioIdentifier.SCENARIO_FULL_PROCESS}
});
See the Scenarios page for more details.
During the document processing, the flashlight on your device will be turned on by the SDK, you do not need to turn it on yourself. Follow the animation instructions.
When the processing is finished, you will receive the results of the hologram check in the Authenticity Results.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
Pick the platform of interest above and navigate to the Authenticity Result section for more details.
How to Submit a Code-Level Incident
If you are having a problem with some code while implementing our products or have other questions about your code implementation, preparing a short example is very useful. Our Technical Support Team can help troubleshoot your code or investigate possible workarounds to fast-track your development.
Before Submitting an Incident, be sure to
- Read and follow the guides described in this documentation.
- Update to the latest stable version.
- Search for your issue in the existing GitHub issues.
When Submitting an Incident, follow these guidelines
- Provide a clear and detailed description with as much information as possible. Include steps you’ve taken to solve the problem and conditions we should consider (such as failing on specific hardware or OS version).
- Avoid using acronyms, jargon, and nonstandard abbreviations.
Include the following items to your Incident
- Crash reports and logs that you have in regards to your question, if applicable.
- Any console output containing errors or exceptions when building or running your app, if applicable.
- Screenshots, if applicable.
- Isolate the issue into a sample project with a minimum possible code and attach it.
Tricks for trimming a sample project
- If the GUI has 30 buttons not related to the problem, remove them. If they are related to the problem (you remove them and the problem disappears) put one or two back in, if the problem reappears, include only those one or two buttons.
- The array or table that is causing a problem may have a hundred entries, but again, if the problem can be seen with two or three entries, trim the example to that alone.
- If the project contains 30 frameworks, except ours, remove them. If they are related to the problem (you remove them and the problem disappears) put one or two back in, if the problem reappears, include only those one or two frameworks.
Can I submit an Incident to get help with beta version of our products?
Yes. First, test and confirm that the issue reproduces on the latest beta. If it does, submit the results of your testing to us.
How do I collect logs?
Logging can be helpful when you run into any issues. They contain information on how you use our products that helps us analyze, troubleshoot, and debug any issues you may experience.
Collect logs from your application
1. Enable parameters listed below in your code in addition to those you already use:
Warning
These parameters should be set before starting the recognition process, e.g. after the initialization process is passed.
- If you are experiencing the issue with ID documents recognition or verification, choose the following settings:
DocumentReader.Instance().processParams().debugSaveLogs = true;
DocumentReader.Instance().processParams().debugSaveCroppedImages = true;
DocumentReader.Instance().processParams().debugSaveLogs = true
DocumentReader.Instance().processParams().debugSaveCroppedImages = true
DocReader.shared.processParams.debugSaveLogs = true
DocReader.shared.processParams.debugSaveCroppedImages = true
[RGLDocReader shared].processParams.debugSaveLogs = @YES;
[RGLDocReader shared].processParams.debugSaveCroppedImages = @YES;
// Xamarin.Android
DocumentReader.Instance().ProcessParams().DebugSaveLogs = (Java.Lang.Boolean)true;
DocumentReader.Instance().ProcessParams().DebugSaveCroppedImages = (Java.Lang.Boolean)true;
// Xamarin.iOS
RGLDocReader.Shared.ProcessParams.DebugSaveLogs = true;
RGLDocReader.Shared.ProcessParams.DebugSaveCroppedImages = true;
DocumentReader.setConfig({
processParams: {
debugSaveLogs: true,
debugSaveCroppedImages: true
},
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setConfig({
processParams: {
debugSaveLogs: true,
debugSaveCroppedImages: true
},
}, function (m) { }, function (e) { console.log(e); });
DocumentReader.setConfig({
processParams: {
debugSaveLogs: true,
debugSaveCroppedImages: true
}
});
DocumentReader.setConfig({
"processParams": {
"debugSaveLogs": true,
"debugSaveCroppedImages": true
}
});
- If you are experiencing the issue with RFID chip reading, choose the following settings:
DocumentReader.Instance().processParams().debugSaveLogs = true;
DocumentReader.Instance().processParams().debugSaveCroppedImages = true;
DocumentReader.Instance().processParams().debugSaveRFIDSession = true;
DocumentReader.Instance().processParams().debugSaveLogs = true
DocumentReader.Instance().processParams().debugSaveCroppedImages = true
DocumentReader.Instance().processParams().debugSaveRFIDSession = true
DocReader.shared.processParams.debugSaveLogs = true
DocReader.shared.processParams.debugSaveCroppedImages = true
DocReader.shared.processParams.debugSaveRFIDSession = true
[RGLDocReader shared].processParams.debugSaveLogs = @YES;
[RGLDocReader shared].processParams.debugSaveCroppedImages = @YES;
[RGLDocReader shared].processParams.debugSaveRFIDSession = @YES;
// Xamarin.Android
DocumentReader.Instance().ProcessParams().DebugSaveLogs = (Java.Lang.Boolean)true;
DocumentReader.Instance().ProcessParams().DebugSaveCroppedImages = (Java.Lang.Boolean)true;
DocumentReader.Instance().ProcessParams().DebugSaveRFIDSession = (Java.Lang.Boolean)true;
// Xamarin.iOS
RGLDocReader.Shared.ProcessParams.DebugSaveLogs = true;
RGLDocReader.Shared.ProcessParams.DebugSaveCroppedImages = true;
RGLDocReader.Shared.ProcessParams.DebugSaveRFIDSession = true;
DocumentReader.setConfig({
processParams: {
debugSaveLogs: true,
debugSaveCroppedImages: true,
debugSaveRFIDSession: true
},
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setConfig({
processParams: {
debugSaveLogs: true,
debugSaveCroppedImages: true,
debugSaveRFIDSession: true
},
}, function (m) { }, function (e) { console.log(e); });
DocumentReader.setConfig({
processParams: {
debugSaveLogs: true,
debugSaveCroppedImages: true,
debugSaveRFIDSession: true
}
});
DocumentReader.setConfig({
"processParams": {
"debugSaveLogs": true,
"debugSaveCroppedImages": true,
"debugSaveRFIDSession": true
}
});
2. Now you can build and run your application and take the steps needed to reproduce the issue.
3. After the step 2 is performed, logs can be found in the app folder - you can print the path to it in the console like that:
Warning
Insert these lines of code after all the needed steps are completed.
String path = DocumentReader.Instance().processParams().sessionLogFolder;
Log.d("Regula" , "Path: " + path);
val path = DocumentReader.Instance().processParams().sessionLogFolder
Log.d("Regula" , "Path: $path")
let path = DocReader.shared.processParams.sessionLogFolder
print("Path: \(path ?? "nil")")
NSString *path = [RGLDocReader shared].processParams.sessionLogFolder;
NSLog(@"Path: %@", path);
// Xamarin.Android
string path = DocumentReader.Instance().ProcessParams().SessionLogFolder;
Console.WriteLine("Path: " + path);
// Xamarin.iOS
var path = RGLDocReader.Shared.ProcessParams.SessionLogFolder;
Console.WriteLine("Path: " + path);
DocumentReader.getSessionLogFolder((path) => {
console.log("Path: " + path);
},
(error) => {
console.log(error);
});
DocumentReader.getSessionLogFolder(
function (path) { console.log("Path: " + path) },
);
DocumentReader.getSessionLogFolder().then(path => {
console.log("Path: " + path);
});
DocumentReader.getSessionLogFolder().then((path) {
print("Path: " + path);
}).catchError(
(Object error) => print((error as PlatformException).message));
Collect logs from our application
Our apps are available on App Store and Google Play.
- Open the app and wait until the app launches.
- Open Menu.
- Open Settings.
- Navigate to the Advanced section.
- Then to the Debug section.
-
Enable settings according to the issue you experience:
- If you are experiencing the issue with ID documents recognition or verification, choose the following settings:
- Save event logs
- Save cropped images
- If you are experiencing the issue with RFID chip reading, choose the following settings:
- Save event logs
- Save cropped images
- Save RFID session
- If you are experiencing the issue with ID documents recognition or verification, choose the following settings:
-
Perform other steps needed to reproduce the issue.
You can see logs on the results screen after the document recognition is finished or find them in the logs table: Home -> Menu -> Settings -> Advanced -> Debug -> Report event logs. Save logs and fill in the requested form with a clear and detailed description with as much information as possible including steps you’ve taken to solve the problem and conditions we should consider (such as failing on specific hardware or OS version).
How to get logs from the iOS device?
-
In Xcode, go to Window -> Devices and Simulators.
-
Select the device.
- Select the app name under Installed Apps.
- Click the settings gearbox.
-
Select Download container.
-
In Finder, double finger tap the package and select Show package contents.
-
Go to AppData -> tmp -> Regula.
Code signing "DocumentReader.framework" failed: Troubleshooting
If the frameworks are integrated to the project manually, you may encounter the issue App Store Connect Operation Error. ERROR ITMS-90087: "Unsupported Architectures" / Code signing failed:
Our frameworks support two architectures for device deployment:
arm7
, an older variation of the 32-bit ARM CPU, as used in the A5 and earlier.arm64
is the current 64-bit ARM CPU architecture, as used since the iPhone 5S and later, the iPad Air, Air 2 and Pro, with the A7 and later chips.
i386
and x86_64
are used in Simulators.
Although all architectures are useful in some situations, when submitting an app to the App Store, you can only have arm7
, and arm64
architectures. If you encounter the error "ERROR ITMS-90087: Unsupported Architectures" or "Code signing failed", it means that you're trying to submit a binary to the App Store, and that this binary has unsupported architectures inside. You have to remove the unsupported architectures (i386
and x86_64
) from the binary you're submitting. There are several approaches which are listed below.
The first approach is to remove them manually. Open Terminal inside the framework directory and run the following commands:
lipo -remove i386 -output DocumentReader.framework/DocumentReader DocumentReader.framework/DocumentReader
lipo -remove x86_64 -output DocumentReader.framework/DocumentReader DocumentReader.framework/DocumentReader
The second approach is to run the embedded script (strip-unused-architectures-from-target.sh
).
You can verify that the architectures are removed via lipo
:
lipo -info DocumentReader.framework/DocumentReader
How to calculate the final app size?
When you add the Document Reader SDK to your application, you may see that the size of the app has increased a lot. For example, it was 20 MB and then became 170 MB. This may be confusing but please do not rush to conclusions :)
In fact, the size that you are seeing is not the size that your end users will get — the end user's app will occupy significantly less space.
The point is that the size that you can see includes support for four architectures (arm64-v8a
, armeabi-v7a
, x86
, and x86_64
) plus the database. Each architecture size is about 25 MB, so they all together take about 100 MB.
But the thing is that one device has one architecture, not four.
See for yourself. Let's find out the size the application will have on the Android device with the arm64-v8a
architecture after adding the fullrfid
Core and the Full
database.
First of all, add the abiFilters
option that is used to restrict the set of ABIs.
android {
buildTypes {
ndk {
abiFilters "arm64-v8a"
}
}
}
In the Menu of Android Studio: Build -> Generate Signed Bundle / APK. Then choose the Android App Bundle option.
As you can see, the Document Reader SDK will take around 26 MB in the application plus the size of the database. In our case, we've added the Full
one with the size around 55 MB. All in all, 26 + 55 = 81 MB.
The most significant part of the Core library takes the libAndroidSdk.so
that is presented in the library for each supported architecture (arm64-v8a
, armeabi-v7a
, x86
, and x86_64
). The other part, but not significant, takes the resource.dat
.
Warning
The numbers above are applicable for the version 6.5.*.
To optimize the app size, have a look at the corresponding section of your platform:
What are the bundle ID and application ID?
A bundle ID and application ID have quite the same meaning but a bundle ID is used for an iOS application and an app ID refers to an Android application.
A bundle ID for iOS and an application ID for Android are unique identifiers of an app. They are used by the operating systems and app stores to distinguish between different applications. Both the bundle ID and application ID typically follow a reverse domain name-style format such as "com.example.appname" and are used in various parts of the app's code and configuration files.
How to find out the bundle ID
To find out the bundle ID, you can use Xcode:
- Open your project in Xcode.
- In the "TARGETS" section, select the target for which you want to find the bundle ID.
- In the "General" tab, scroll down to the "Identity" section.
- The bundle identifier for your project will be displayed in the "Bundle Identifier" field.
Note that a bundle ID is case-sensitive.
Find more information about a bundle ID in the official Apple documentation.
How to find out the application ID
In Android development, the application ID is also known as the "package name" and can be found in the build.gradle
file of your app module. build.gradle
contains the applicationId
property. Here are the steps to find it:
- Open the Android Studio and select your app project.
- In the left pane, navigate to the app folder and expand it.
- Open the
build.gradle
file. - Look for the line that starts with
applicationId
. - The value after
applicationId
is the application ID for your Android app.
Alternatively, you can check the AndroidManifest.xml
file, which is located in the src/main
directory of your app. The package
attribute in the manifest
tag is the Application ID. The merged manifest's package
attribute is where the Google Play Store and the Android platform look to identify your app.
For more information, refer to the official Android documentation.