anyline-ocr-react-native-module 44.1.1 → 46.1.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/android/build.gradle +1 -1
- package/android/src/main/java/com/anyline/reactnative/AnylineSDKPlugin.java +38 -2
- package/android/src/main/java/com/anyline/reactnative/ScanActivity.java +1 -1
- package/android/src/main/res/layout/activity_scan.xml +18 -6
- package/ios/ALJsonUIConfiguration.h +1 -1
- package/ios/ALNFCScanViewController.m +77 -70
- package/ios/ALPluginScanViewController.m +8 -5
- package/ios/AnylineReact.podspec +1 -1
- package/ios/AnylineSDKPlugin.m +80 -41
- package/package.json +8 -7
- package/.idea/modules.xml +0 -8
- package/.idea/plugin.iml +0 -9
- package/.idea/vcs.xml +0 -6
- package/android/.gradle/6.7/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/6.7/fileChanges/last-build.bin +0 -0
- package/android/.gradle/6.7/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.7/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/6.7/gc.properties +0 -0
- package/android/.gradle/7.0/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.0/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.0/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.0/gc.properties +0 -0
- package/android/.gradle/7.3/checksums/checksums.lock +0 -0
- package/android/.gradle/7.3/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.3/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.3/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.3/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.3/gc.properties +0 -0
- package/android/.gradle/7.4/checksums/checksums.lock +0 -0
- package/android/.gradle/7.4/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/7.4/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.4/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.4/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.4/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.4/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.4/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.4/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/7.4/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/configuration-cache/gc.properties +0 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.idea/compiler.xml +0 -6
- package/android/.idea/gradle.xml +0 -19
- package/android/.idea/jarRepositories.xml +0 -40
- package/android/.idea/misc.xml +0 -10
- package/android/.idea/vcs.xml +0 -7
- package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
- package/android/local.properties +0 -8
package/android/build.gradle
CHANGED
|
@@ -69,7 +69,7 @@ repositories {
|
|
|
69
69
|
|
|
70
70
|
dependencies {
|
|
71
71
|
implementation fileTree(dir: "libs", include: ["*.jar"])
|
|
72
|
-
implementation 'io.anyline:anylinesdk:
|
|
72
|
+
implementation 'io.anyline:anylinesdk:46.1.0'
|
|
73
73
|
implementation "com.facebook.react:react-native:+" // from node_modules
|
|
74
74
|
implementation("com.google.android.material:material:1.4.0-rc01")
|
|
75
75
|
implementation 'androidx.multidex:multidex:2.0.1'
|
|
@@ -65,6 +65,16 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
|
|
|
65
65
|
promise.resolve(at.nineyards.anyline.BuildConfig.VERSION_NAME);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
@ReactMethod
|
|
69
|
+
public void licenseKeyExpiryDate(final Promise promise) {
|
|
70
|
+
try {
|
|
71
|
+
promise.resolve(String.valueOf(AnylineSdk.getExpiryDate()));
|
|
72
|
+
} catch (LicenseException e) {
|
|
73
|
+
e.printStackTrace();
|
|
74
|
+
promise.reject(E_ERROR, e.getMessage());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
68
78
|
@ReactMethod
|
|
69
79
|
@Deprecated
|
|
70
80
|
public void setupScanViewWithConfigJson(String config, String scanMode, Callback onResultReact, Callback onErrorReact) {
|
|
@@ -98,6 +108,22 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
|
|
|
98
108
|
}
|
|
99
109
|
}
|
|
100
110
|
|
|
111
|
+
@ReactMethod
|
|
112
|
+
public void setupAnylineSDK(String license, final Promise promise) {
|
|
113
|
+
try {
|
|
114
|
+
AnylineSdk.init(license, reactContext);
|
|
115
|
+
this.license = license;
|
|
116
|
+
if (promise != null) {
|
|
117
|
+
promise.resolve(true);
|
|
118
|
+
}
|
|
119
|
+
} catch (LicenseException e) {
|
|
120
|
+
e.printStackTrace();
|
|
121
|
+
if (promise != null) {
|
|
122
|
+
promise.reject(E_ERROR, e.getMessage());
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
101
127
|
@ReactMethod
|
|
102
128
|
public void initSdk(String license) {
|
|
103
129
|
try {
|
|
@@ -182,7 +208,18 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
|
|
|
182
208
|
|
|
183
209
|
configObject = new JSONObject(this.config);
|
|
184
210
|
|
|
185
|
-
license
|
|
211
|
+
if (this.license == null || this.license.isEmpty()) {
|
|
212
|
+
if (configObject.has("license")) {
|
|
213
|
+
//if there is a license on JSON config then this license will be
|
|
214
|
+
//used to init or re-init the SDK
|
|
215
|
+
AnylineSdk.init(configObject.getString("license"), reactContext);
|
|
216
|
+
license = configObject.get("license").toString();
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw new JSONException("No License in config. Please check your configuration.");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
186
223
|
JSONObject optionsJSONObject = configObject.optJSONObject("options");
|
|
187
224
|
|
|
188
225
|
if (optionsJSONObject != null) {
|
|
@@ -198,7 +235,6 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
|
|
|
198
235
|
ResultReporter.setListener(this);
|
|
199
236
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
200
237
|
|
|
201
|
-
AnylineSdk.init(configObject.getString("license"), reactContext);
|
|
202
238
|
reactContext.startActivityForResult(intent, 1111, intent.getExtras());
|
|
203
239
|
}
|
|
204
240
|
|
|
@@ -288,7 +288,7 @@ public class ScanActivity extends AppCompatActivity {
|
|
|
288
288
|
|
|
289
289
|
if (feedbackConfig != null) {
|
|
290
290
|
CoordinatorLayout.LayoutParams feedbackLayoutParams =
|
|
291
|
-
new CoordinatorLayout.LayoutParams(rect.width(), scanView.getHeight());
|
|
291
|
+
new CoordinatorLayout.LayoutParams(rect.width(), scanView.getHeight() - rect.bottom);
|
|
292
292
|
feedbackLayoutParams.setMargins(rect.left, rect.bottom, rect.right, scanView.getBottom());
|
|
293
293
|
binding.layoutBrightDistanceFeedback.setVisibility(View.VISIBLE);
|
|
294
294
|
binding.layoutBrightDistanceFeedback.setLayoutParams(feedbackLayoutParams);
|
|
@@ -52,21 +52,33 @@
|
|
|
52
52
|
android:layout_height="wrap_content"
|
|
53
53
|
android:visibility="gone"
|
|
54
54
|
android:layout_centerHorizontal="true"
|
|
55
|
-
android:
|
|
56
|
-
android:
|
|
55
|
+
android:layout_gravity="top"
|
|
56
|
+
android:gravity="top|center_horizontal"
|
|
57
|
+
android:paddingTop="20dp"
|
|
58
|
+
android:paddingBottom="5dp"
|
|
57
59
|
android:orientation="vertical">
|
|
58
60
|
<ImageView
|
|
59
61
|
android:id="@+id/imageview_bright_distance_feedback"
|
|
60
|
-
android:layout_width="
|
|
61
|
-
android:layout_height="
|
|
62
|
-
android:
|
|
62
|
+
android:layout_width="wrap_content"
|
|
63
|
+
android:layout_height="wrap_content"
|
|
64
|
+
android:gravity="top|center_horizontal"
|
|
65
|
+
android:scaleType="centerInside"
|
|
66
|
+
android:layout_weight="2"
|
|
67
|
+
android:layout_marginVertical="5dp"/>
|
|
63
68
|
<TextView
|
|
64
69
|
android:id="@+id/textview_bright_distance_feedback"
|
|
65
70
|
android:layout_width="wrap_content"
|
|
66
71
|
android:layout_height="wrap_content"
|
|
72
|
+
android:gravity="top|center_horizontal"
|
|
67
73
|
android:text=""
|
|
68
74
|
android:textColor="@color/white"
|
|
69
|
-
android:textSize="14sp"
|
|
75
|
+
android:textSize="14sp"
|
|
76
|
+
android:layout_weight="0"/>
|
|
77
|
+
<LinearLayout
|
|
78
|
+
android:layout_width="match_parent"
|
|
79
|
+
android:layout_height="wrap_content"
|
|
80
|
+
android:layout_weight="3"
|
|
81
|
+
android:orientation="vertical"/>
|
|
70
82
|
</LinearLayout>
|
|
71
83
|
|
|
72
84
|
<ImageView
|
|
@@ -41,7 +41,7 @@ typedef NS_ENUM(NSUInteger, ALButtonType) {
|
|
|
41
41
|
@property (nonatomic, assign) CGFloat segmentXPositionOffset;
|
|
42
42
|
@property (nonatomic, assign) CGFloat segmentYPositionOffset;
|
|
43
43
|
|
|
44
|
-
@property (nonatomic,
|
|
44
|
+
@property (nonatomic, copy) NSString *labelText;
|
|
45
45
|
@property (nonatomic, assign) CGFloat labelSize;
|
|
46
46
|
@property (nonatomic, strong) UIColor *labelColor;
|
|
47
47
|
@property (nonatomic, assign) CGFloat labelXPositionOffset;
|
|
@@ -69,62 +69,69 @@ API_AVAILABLE(ios(13.0))
|
|
|
69
69
|
|
|
70
70
|
- (void)viewDidLoad {
|
|
71
71
|
[super viewDidLoad];
|
|
72
|
-
|
|
73
|
-
// NOTE: NFCDetector can throw an exception if the AnylineSDK isn't initialized
|
|
74
|
-
// as it will check the scope value of the license
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
|
|
73
|
+
// NOTE: NFCDetector can throw an exception if the AnylineSDK isn't initialized
|
|
74
|
+
// first as it will check the scope value of the license.
|
|
75
|
+
//
|
|
76
|
+
// If already initialized, happily move along. Otherwise, make a license key
|
|
77
|
+
// check here.
|
|
78
|
+
NSError *error;
|
|
79
|
+
BOOL isInitialized = [ALLicenseUtil sharedInstance].isLicenseValid;
|
|
80
|
+
if (!isInitialized) {
|
|
81
|
+
[AnylineSDK setupWithLicenseKey:self.licenseKey error:&error];
|
|
82
|
+
if ([self showErrorAlertIfNeeded:error]) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
79
85
|
}
|
|
80
|
-
|
|
86
|
+
|
|
81
87
|
if (@available(iOS 13.0, *)) {
|
|
82
88
|
self.nfcDetector = [self.class getNFCDetectorWithDelegate:self error:&error];
|
|
83
89
|
} else {
|
|
84
90
|
error = [ALPluginHelper errorWithMessage:@"iOS 13.0 or newer is required to scan with MRZ / NFC."];
|
|
85
91
|
}
|
|
92
|
+
|
|
86
93
|
if ([self showErrorAlertIfNeeded:error]) {
|
|
87
94
|
return;
|
|
88
95
|
}
|
|
89
|
-
|
|
96
|
+
|
|
90
97
|
[self.view addSubview:self.scanView];
|
|
91
|
-
|
|
98
|
+
|
|
92
99
|
self.resultDict = [[NSMutableDictionary alloc] init];
|
|
93
100
|
self.detectedBarcodes = [NSMutableArray array];
|
|
94
|
-
|
|
101
|
+
|
|
95
102
|
self.scanView = [ALScanViewFactory withJSONDictionary:self.config delegate:self error:&error];
|
|
96
103
|
self.scanView.delegate = self;
|
|
97
|
-
|
|
104
|
+
|
|
98
105
|
[self configureMRZPlugin];
|
|
99
|
-
|
|
106
|
+
|
|
100
107
|
if ([self showErrorAlertIfNeeded:error]) {
|
|
101
108
|
return;
|
|
102
109
|
}
|
|
103
|
-
|
|
110
|
+
|
|
104
111
|
self.mrzScanViewPlugin = (ALScanViewPlugin *)self.scanView.scanViewPlugin;
|
|
105
|
-
|
|
112
|
+
|
|
106
113
|
self.scanView.supportedNativeBarcodeFormats = self.uiConfig.nativeBarcodeFormats;
|
|
107
114
|
self.scanView.delegate = self;
|
|
108
115
|
self.detectedBarcodes = [NSMutableArray array];
|
|
109
116
|
|
|
110
117
|
[self.view addSubview:self.scanView];
|
|
111
|
-
|
|
118
|
+
|
|
112
119
|
self.scanView.translatesAutoresizingMaskIntoConstraints = false;
|
|
113
120
|
[self.scanView.leftAnchor constraintEqualToAnchor:self.view.leftAnchor].active = YES;
|
|
114
121
|
[self.scanView.rightAnchor constraintEqualToAnchor:self.view.rightAnchor].active = YES;
|
|
115
122
|
[self.scanView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor].active = YES;
|
|
116
123
|
[self.scanView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor].active = YES;
|
|
117
|
-
|
|
124
|
+
|
|
118
125
|
[self.scanView startCamera];
|
|
119
|
-
|
|
126
|
+
|
|
120
127
|
[self setupHintView];
|
|
121
|
-
|
|
128
|
+
|
|
122
129
|
self.doneButton = [ALPluginHelper createButtonForViewController:self config:self.uiConfig];
|
|
123
130
|
}
|
|
124
131
|
|
|
125
132
|
- (void)viewDidAppear:(BOOL)animated {
|
|
126
133
|
[super viewDidAppear:animated];
|
|
127
|
-
|
|
134
|
+
|
|
128
135
|
NSError *error;
|
|
129
136
|
[self startMRZScanning:&error];
|
|
130
137
|
[self showErrorAlertIfNeeded:error];
|
|
@@ -146,41 +153,41 @@ API_AVAILABLE(ios(13.0))
|
|
|
146
153
|
}
|
|
147
154
|
|
|
148
155
|
- (void)configureMRZPlugin {
|
|
149
|
-
|
|
156
|
+
|
|
150
157
|
ALScanViewPlugin *scanViewPlugin = (ALScanViewPlugin *)self.scanView.scanViewPlugin;
|
|
151
158
|
if (![scanViewPlugin isKindOfClass:ALScanViewPlugin.class]) {
|
|
152
159
|
return;
|
|
153
160
|
}
|
|
154
|
-
|
|
161
|
+
|
|
155
162
|
ALCutoutConfig *cutoutConfig = scanViewPlugin.scanViewPluginConfig.cutoutConfig;
|
|
156
163
|
ALScanFeedbackConfig *scanFeedbackConfig = scanViewPlugin.scanViewPluginConfig.scanFeedbackConfig;
|
|
157
|
-
|
|
164
|
+
|
|
158
165
|
ALPluginConfig *pluginConfig = scanViewPlugin.scanPlugin.scanPluginConfig.pluginConfig;
|
|
159
166
|
ALMrzConfig *mrzConfig = pluginConfig.mrzConfig;
|
|
160
|
-
|
|
167
|
+
|
|
161
168
|
// a bit lengthy but this is how you properly change the config (mrzFieldScanOptions and mrzMinFieldConfidences)
|
|
162
169
|
// taking into account the readonly config fields
|
|
163
170
|
mrzConfig.mrzFieldScanOptions = [[ALMrzFieldScanOptions alloc] init];
|
|
164
|
-
|
|
171
|
+
|
|
165
172
|
mrzConfig.mrzFieldScanOptions.vizAddress = ALMrzScanOption.mrzScanOptionDefault;
|
|
166
173
|
mrzConfig.mrzFieldScanOptions.vizDateOfIssue = ALMrzScanOption.mrzScanOptionDefault;
|
|
167
174
|
mrzConfig.mrzFieldScanOptions.vizSurname = ALMrzScanOption.mrzScanOptionDefault;
|
|
168
175
|
mrzConfig.mrzFieldScanOptions.vizGivenNames = ALMrzScanOption.mrzScanOptionDefault;
|
|
169
176
|
mrzConfig.mrzFieldScanOptions.vizDateOfBirth = ALMrzScanOption.mrzScanOptionDefault;
|
|
170
177
|
mrzConfig.mrzFieldScanOptions.vizDateOfExpiry = ALMrzScanOption.mrzScanOptionDefault;
|
|
171
|
-
|
|
178
|
+
|
|
172
179
|
mrzConfig.mrzMinFieldConfidences = [[ALMrzMinFieldConfidences alloc] init];
|
|
173
180
|
mrzConfig.mrzMinFieldConfidences.documentNumber = @(90);
|
|
174
181
|
mrzConfig.mrzMinFieldConfidences.dateOfBirth = @(90);
|
|
175
182
|
mrzConfig.mrzMinFieldConfidences.dateOfExpiry = @(90);
|
|
176
|
-
|
|
183
|
+
|
|
177
184
|
NSError *error;
|
|
178
185
|
ALScanViewPluginConfig *scanViewPluginConfig = [ALScanViewPluginConfig withScanPluginConfig:[ALScanPluginConfig withPluginConfig:pluginConfig]
|
|
179
186
|
cutoutConfig:cutoutConfig
|
|
180
187
|
scanFeedbackConfig:scanFeedbackConfig];
|
|
181
188
|
ALScanViewPlugin *updatedScanViewPlugin = [[ALScanViewPlugin alloc] initWithConfig:scanViewPluginConfig error:&error];
|
|
182
189
|
[self.scanView setScanViewPlugin:updatedScanViewPlugin error:&error];
|
|
183
|
-
|
|
190
|
+
|
|
184
191
|
// the delegate binding was lost when you recreated the ScanPlugin it so you have to bring it back here
|
|
185
192
|
scanViewPlugin = (ALScanViewPlugin *)self.scanView.scanViewPlugin;
|
|
186
193
|
scanViewPlugin.scanPlugin.delegate = self;
|
|
@@ -189,30 +196,30 @@ API_AVAILABLE(ios(13.0))
|
|
|
189
196
|
// MARK: - ALIDPluginDelegate
|
|
190
197
|
|
|
191
198
|
- (void)scanPlugin:(ALScanPlugin *)scanPlugin resultReceived:(ALScanResult *)scanResult {
|
|
192
|
-
|
|
199
|
+
|
|
193
200
|
CGFloat compressionQuality = self.quality / 100.0f;
|
|
194
|
-
|
|
201
|
+
|
|
195
202
|
// ACO just a failsafe for when cancelOnResult is not true
|
|
196
203
|
[self stopMRZScanning];
|
|
197
|
-
|
|
204
|
+
|
|
198
205
|
self.resultDict = [NSMutableDictionary dictionaryWithDictionary:scanResult.resultDictionary];
|
|
199
|
-
|
|
206
|
+
|
|
200
207
|
NSString *imagePath = [ALPluginHelper saveImageToFileSystem:scanResult.croppedImage
|
|
201
208
|
compressionQuality:compressionQuality];
|
|
202
209
|
self.resultDict[@"imagePath"] = imagePath;
|
|
203
|
-
|
|
210
|
+
|
|
204
211
|
imagePath = [ALPluginHelper saveImageToFileSystem:scanResult.fullSizeImage
|
|
205
212
|
compressionQuality:compressionQuality];
|
|
206
|
-
|
|
213
|
+
|
|
207
214
|
self.resultDict[@"fullImagePath"] = imagePath;
|
|
208
|
-
|
|
215
|
+
|
|
209
216
|
ALMrzResult *MRZResult = scanResult.pluginResult.mrzResult;
|
|
210
217
|
NSString *passportNumber = [MRZResult.documentNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
|
211
|
-
|
|
218
|
+
|
|
212
219
|
self.dateOfBirth = [ALPluginHelper formattedStringToDate:MRZResult.dateOfBirthObject];
|
|
213
|
-
|
|
220
|
+
|
|
214
221
|
self.dateOfExpiry = [ALPluginHelper formattedStringToDate:MRZResult.dateOfExpiryObject];
|
|
215
|
-
|
|
222
|
+
|
|
216
223
|
NSMutableString *passportNumberForNFC = [passportNumber mutableCopy];
|
|
217
224
|
NSRange passportNumberRange = [MRZResult.mrzString rangeOfString:passportNumber];
|
|
218
225
|
if (passportNumberRange.location != NSNotFound) {
|
|
@@ -220,21 +227,21 @@ API_AVAILABLE(ios(13.0))
|
|
|
220
227
|
[passportNumberForNFC appendString:@"<"];
|
|
221
228
|
}
|
|
222
229
|
}
|
|
223
|
-
|
|
230
|
+
|
|
224
231
|
self.passportNumberForNFC = passportNumberForNFC;
|
|
225
|
-
|
|
232
|
+
|
|
226
233
|
[self.nfcDetector startNfcDetectionWithPassportNumber:self.passportNumberForNFC
|
|
227
234
|
dateOfBirth:self.dateOfBirth
|
|
228
235
|
expirationDate:self.dateOfExpiry];
|
|
229
236
|
}
|
|
230
237
|
|
|
231
238
|
- (void)handleResult:(id _Nullable)resultObj {
|
|
232
|
-
|
|
239
|
+
|
|
233
240
|
NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionaryWithDictionary:resultObj];
|
|
234
241
|
if (self.detectedBarcodes.count) {
|
|
235
242
|
resultDictionary[@"nativeBarcodesDetected"] = self.detectedBarcodes;
|
|
236
243
|
}
|
|
237
|
-
|
|
244
|
+
|
|
238
245
|
NSObject<ALScanViewPluginBase> *scanViewPluginBase = self.scanView.scanViewPlugin;
|
|
239
246
|
if ([scanViewPluginBase isKindOfClass:ALScanViewPlugin.class]) {
|
|
240
247
|
ALScanViewPlugin *scanViewPlugin = (ALScanViewPlugin *)scanViewPluginBase;
|
|
@@ -251,7 +258,7 @@ API_AVAILABLE(ios(13.0))
|
|
|
251
258
|
|
|
252
259
|
- (void)doneButtonPressed:(id)sender {
|
|
253
260
|
[self stopMRZScanning];
|
|
254
|
-
|
|
261
|
+
|
|
255
262
|
__weak __block typeof(self) weakSelf = self;
|
|
256
263
|
[self dismissViewControllerAnimated:YES completion:^{
|
|
257
264
|
weakSelf.callback(nil, @"Canceled");
|
|
@@ -261,11 +268,11 @@ API_AVAILABLE(ios(13.0))
|
|
|
261
268
|
// MARK: - ALNFCDetectorDelegate
|
|
262
269
|
|
|
263
270
|
- (void)nfcSucceededWithResult:(ALNFCResult * _Nonnull)nfcResult API_AVAILABLE(ios(13.0)) {
|
|
264
|
-
|
|
271
|
+
|
|
265
272
|
// DataGroup1
|
|
266
273
|
NSMutableDictionary *dictResultDataGroup1 = [[NSMutableDictionary alloc] init];
|
|
267
|
-
|
|
268
|
-
|
|
274
|
+
|
|
275
|
+
|
|
269
276
|
[dictResultDataGroup1 setValue:[ALPluginHelper stringForDate:nfcResult.dataGroup1.dateOfBirth]
|
|
270
277
|
forKey:@"dateOfBirth"];
|
|
271
278
|
[dictResultDataGroup1 setValue:[ALPluginHelper stringForDate:nfcResult.dataGroup1.dateOfExpiry]
|
|
@@ -277,9 +284,9 @@ API_AVAILABLE(ios(13.0))
|
|
|
277
284
|
[dictResultDataGroup1 setValue:nfcResult.dataGroup1.issuingStateCode forKey:@"issuingStateCode"];
|
|
278
285
|
[dictResultDataGroup1 setValue:nfcResult.dataGroup1.lastName forKey:@"lastName"];
|
|
279
286
|
[dictResultDataGroup1 setValue:nfcResult.dataGroup1.nationality forKey:@"nationality"];
|
|
280
|
-
|
|
287
|
+
|
|
281
288
|
[self.resultDict setObject:dictResultDataGroup1 forKey:@"dataGroup1"];
|
|
282
|
-
|
|
289
|
+
|
|
283
290
|
// DataGroup2
|
|
284
291
|
// ACO: we don't put the path into a separate 'dataGroup' category for the wrapper
|
|
285
292
|
NSString *imagePath = [ALPluginHelper saveImageToFileSystem:nfcResult.dataGroup2.faceImage
|
|
@@ -287,25 +294,25 @@ API_AVAILABLE(ios(13.0))
|
|
|
287
294
|
if (imagePath) {
|
|
288
295
|
[self.resultDict setValue:imagePath forKey:@"imagePath"];
|
|
289
296
|
}
|
|
290
|
-
|
|
297
|
+
|
|
291
298
|
// SOD (Passport metadata)
|
|
292
299
|
NSMutableDictionary *dictResultSOD = [[NSMutableDictionary alloc] init];
|
|
293
|
-
|
|
300
|
+
|
|
294
301
|
[dictResultSOD setValue:nfcResult.sod.issuerCertificationAuthority forKey:@"issuerCertificationAuthority"];
|
|
295
302
|
[dictResultSOD setValue:nfcResult.sod.issuerCountry forKey:@"issuerCountry"];
|
|
296
303
|
[dictResultSOD setValue:nfcResult.sod.issuerOrganization forKey:@"issuerOrganization"];
|
|
297
304
|
[dictResultSOD setValue:nfcResult.sod.issuerOrganizationalUnit forKey:@"issuerOrganizationalUnit"];
|
|
298
305
|
[dictResultSOD setValue:nfcResult.sod.ldsHashAlgorithm forKey:@"ldsHashAlgorithm"];
|
|
299
|
-
|
|
306
|
+
|
|
300
307
|
// ACO need to disable this because AppStoreConnect produces a warning with this enabled:
|
|
301
308
|
// https://anyline.atlassian.net/browse/SDKY-1509?focusedCommentId=71554
|
|
302
309
|
// [dictResultSOB setValue:nfcResult.sod.signatureAlgorithm forKey:@"signatureAlgorithm"];
|
|
303
|
-
|
|
310
|
+
|
|
304
311
|
[dictResultSOD setValue:nfcResult.sod.validFromString forKey:@"validFromString"];
|
|
305
312
|
[dictResultSOD setValue:nfcResult.sod.validUntilString forKey:@"validUntilString"];
|
|
306
|
-
|
|
313
|
+
|
|
307
314
|
[self.resultDict setObject:dictResultSOD forKey:@"sod"];
|
|
308
|
-
|
|
315
|
+
|
|
309
316
|
__weak __block typeof(self) weakSelf = self;
|
|
310
317
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
311
318
|
[weakSelf handleResult:weakSelf.resultDict];
|
|
@@ -340,20 +347,20 @@ API_AVAILABLE(ios(13.0))
|
|
|
340
347
|
|
|
341
348
|
- (void)scanView:(ALScanView *)scanView updatedCutoutWithPluginID:(NSString *)pluginID
|
|
342
349
|
frame:(CGRect)frame {
|
|
343
|
-
|
|
350
|
+
|
|
344
351
|
if (CGRectIsEmpty(frame)) {
|
|
345
352
|
return;
|
|
346
353
|
}
|
|
347
|
-
|
|
354
|
+
|
|
348
355
|
self.hintView.hidden = NO;
|
|
349
|
-
|
|
356
|
+
|
|
350
357
|
CGFloat xOffset = self.uiConfig.labelXPositionOffset;
|
|
351
358
|
CGFloat yOffset = self.uiConfig.labelYPositionOffset;
|
|
352
|
-
|
|
359
|
+
|
|
353
360
|
// takes into account that frame reported for a cutout is in relation to
|
|
354
361
|
// its scan view's coordinate system
|
|
355
362
|
yOffset += [self.scanView convertRect:frame toView:self.scanView.superview].origin.y;
|
|
356
|
-
|
|
363
|
+
|
|
357
364
|
self.labelHorizontalOffsetConstraint.constant = xOffset;
|
|
358
365
|
self.labelVerticalOffsetConstraint.constant = yOffset;
|
|
359
366
|
}
|
|
@@ -397,31 +404,31 @@ API_AVAILABLE(ios(13.0))
|
|
|
397
404
|
// MARK: - User Interface
|
|
398
405
|
|
|
399
406
|
- (void)setupHintView {
|
|
400
|
-
|
|
407
|
+
|
|
401
408
|
UIView *hintView = [[UIView alloc] initWithFrame:CGRectZero];
|
|
402
409
|
hintView.layer.cornerRadius = 8;
|
|
403
410
|
hintView.layer.masksToBounds = true;
|
|
404
411
|
hintView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
|
|
405
|
-
|
|
412
|
+
|
|
406
413
|
hintView.translatesAutoresizingMaskIntoConstraints = NO;
|
|
407
414
|
[self.view addSubview:hintView];
|
|
408
|
-
|
|
415
|
+
|
|
409
416
|
self.labelHorizontalOffsetConstraint = [hintView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor constant:0];
|
|
410
|
-
|
|
417
|
+
|
|
411
418
|
// at 0, the bottom of the label (container) should be touching the cutout top when the updatedCutoutRect report
|
|
412
419
|
// is made
|
|
413
420
|
self.labelVerticalOffsetConstraint = [hintView.bottomAnchor constraintEqualToAnchor:self.view.topAnchor constant:0];
|
|
414
|
-
|
|
421
|
+
|
|
415
422
|
self.labelHorizontalOffsetConstraint.active = YES;
|
|
416
423
|
self.labelVerticalOffsetConstraint.active = YES;
|
|
417
|
-
|
|
424
|
+
|
|
418
425
|
UILabel *hintViewLabel = [[UILabel alloc] initWithFrame:CGRectZero];
|
|
419
|
-
|
|
426
|
+
|
|
420
427
|
hintViewLabel.text = @"Scan MRZ";
|
|
421
428
|
if (self.uiConfig.labelText.length) {
|
|
422
429
|
hintViewLabel.text = self.uiConfig.labelText;
|
|
423
430
|
}
|
|
424
|
-
|
|
431
|
+
|
|
425
432
|
hintViewLabel.font = [UIFont fontWithName:@"HelveticaNeue"
|
|
426
433
|
size:self.uiConfig.labelSize];
|
|
427
434
|
hintViewLabel.textColor = self.uiConfig.labelColor;
|
|
@@ -429,16 +436,16 @@ API_AVAILABLE(ios(13.0))
|
|
|
429
436
|
hintViewLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
|
430
437
|
[hintViewLabel sizeToFit];
|
|
431
438
|
[hintView addSubview:hintViewLabel];
|
|
432
|
-
|
|
439
|
+
|
|
433
440
|
[hintViewLabel.centerXAnchor constraintEqualToAnchor:hintView.centerXAnchor].active = YES;
|
|
434
441
|
[hintViewLabel.centerYAnchor constraintEqualToAnchor:hintView.centerYAnchor].active = YES;
|
|
435
|
-
|
|
442
|
+
|
|
436
443
|
NSLayoutConstraint *cnst = [hintView.widthAnchor constraintGreaterThanOrEqualToAnchor:hintViewLabel.widthAnchor
|
|
437
444
|
constant:20];
|
|
438
445
|
cnst.active = YES;
|
|
439
446
|
cnst = [hintView.heightAnchor constraintEqualToAnchor:hintViewLabel.heightAnchor constant:20];
|
|
440
447
|
cnst.active = YES;
|
|
441
|
-
|
|
448
|
+
|
|
442
449
|
self.hintView = hintView;
|
|
443
450
|
self.hintViewLabel = hintViewLabel;
|
|
444
451
|
}
|
|
@@ -66,11 +66,14 @@
|
|
|
66
66
|
|
|
67
67
|
self.view.backgroundColor = [UIColor blackColor];
|
|
68
68
|
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
|
|
69
|
+
// Make an isInitialized check. If already initialized, happily move along.
|
|
70
|
+
// Otherwise, make a license key check here.
|
|
71
|
+
BOOL isInitialized = [ALLicenseUtil sharedInstance].isLicenseValid;
|
|
72
|
+
if (!isInitialized) {
|
|
73
|
+
[AnylineSDK setupWithLicenseKey:self.licenseKey error:&error];
|
|
74
|
+
if ([self showErrorAlertIfNeeded:error]) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
74
77
|
}
|
|
75
78
|
|
|
76
79
|
self.scanView = [ALScanViewFactory withJSONDictionary:self.config
|
package/ios/AnylineReact.podspec
CHANGED
|
@@ -19,7 +19,7 @@ Pod::Spec.new do |s|
|
|
|
19
19
|
s.source = { :git => "https://github.com/Anyline/anyline-ocr-react-native-module.git", :tag => "#{s.version}" }
|
|
20
20
|
|
|
21
21
|
s.source_files = "*.{h,m}"
|
|
22
|
-
s.dependency "Anyline", "~>
|
|
22
|
+
s.dependency "Anyline", "~> 46"
|
|
23
23
|
s.dependency "React"
|
|
24
24
|
|
|
25
25
|
end
|
package/ios/AnylineSDKPlugin.m
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
@property (nonatomic, strong) ALScanViewPluginConfig *conf;
|
|
12
12
|
|
|
13
|
-
@property (nonatomic,
|
|
14
|
-
@property (nonatomic,
|
|
13
|
+
@property (nonatomic, copy) NSString *callbackId;
|
|
14
|
+
@property (nonatomic, copy) NSString *appKey;
|
|
15
15
|
@property (nonatomic, assign) BOOL nativeBarcodeScanning;
|
|
16
16
|
@property (nonatomic, strong) NSDictionary *jsonConfigDictionary;
|
|
17
17
|
@property (nonatomic, strong) NSDictionary *ocrConfigDict;
|
|
@@ -20,8 +20,10 @@
|
|
|
20
20
|
@property (nonatomic, strong) RCTResponseSenderBlock onResultCallback;
|
|
21
21
|
@property (nonatomic, strong) RCTResponseSenderBlock onErrorCallback;
|
|
22
22
|
|
|
23
|
-
@property (nonatomic,
|
|
24
|
-
@property (nonatomic,
|
|
23
|
+
@property (nonatomic, copy) NSString *config;
|
|
24
|
+
@property (nonatomic, copy) NSString *licenseKey;
|
|
25
|
+
|
|
26
|
+
@property (nonatomic, copy) NSString *returnMethod;
|
|
25
27
|
|
|
26
28
|
@end
|
|
27
29
|
|
|
@@ -32,8 +34,7 @@
|
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
RCT_EXPORT_MODULE();
|
|
35
|
-
- (UIView *)view
|
|
36
|
-
{
|
|
37
|
+
- (UIView *)view {
|
|
37
38
|
return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
|
|
38
39
|
}
|
|
39
40
|
|
|
@@ -54,6 +55,32 @@ RCT_EXPORT_METHOD(setup:(NSString *)config scanMode:(NSString *)scanMode onResul
|
|
|
54
55
|
[self initView:scanMode];
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
RCT_EXPORT_METHOD(setupAnylineSDK:(NSString *)licenseKey
|
|
59
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
60
|
+
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
61
|
+
|
|
62
|
+
_resolveBlock = resolve;
|
|
63
|
+
_rejectBlock = reject;
|
|
64
|
+
self.returnMethod = @"promise";
|
|
65
|
+
self.licenseKey = licenseKey;
|
|
66
|
+
|
|
67
|
+
NSError *error;
|
|
68
|
+
BOOL success = [AnylineSDK setupWithLicenseKey:licenseKey error:&error];
|
|
69
|
+
|
|
70
|
+
NSString *errorString = nil;
|
|
71
|
+
NSDictionary *successObj = nil;
|
|
72
|
+
|
|
73
|
+
if (!success) {
|
|
74
|
+
NSLog(@"error: %@", error.localizedDescription);
|
|
75
|
+
errorString = @"Unable to initialize the Anyline SDK. Please check your license key.";
|
|
76
|
+
[self returnError:errorString];
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
successObj = @{ @"success": @(true) };
|
|
81
|
+
[self returnSuccess:@"success"];
|
|
82
|
+
}
|
|
83
|
+
|
|
57
84
|
RCT_EXPORT_METHOD(setupPromise:(NSString *)config scanMode:(NSString *)scanMode resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
58
85
|
_resolveBlock = resolve;
|
|
59
86
|
_rejectBlock = reject;
|
|
@@ -63,25 +90,38 @@ RCT_EXPORT_METHOD(setupPromise:(NSString *)config scanMode:(NSString *)scanMode
|
|
|
63
90
|
}
|
|
64
91
|
|
|
65
92
|
RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
66
|
-
|
|
93
|
+
resolve(AnylineSDK.versionNumber);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
RCT_EXPORT_METHOD(licenseKeyExpiryDate:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
97
|
+
BOOL isInitialized = [[ALLicenseUtil sharedInstance] isLicenseValid];
|
|
98
|
+
if (!isInitialized) {
|
|
99
|
+
// not `reject`, as this will require the method to be used in a try-catch
|
|
100
|
+
resolve(nil);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
resolve([AnylineSDK licenseExpirationDate]);
|
|
67
104
|
}
|
|
68
105
|
|
|
69
106
|
- (void)initView:(NSString *)scanMode {
|
|
70
107
|
NSData *data = [self.config dataUsingEncoding:NSUTF8StringEncoding];
|
|
71
|
-
if(!data) {
|
|
72
|
-
|
|
108
|
+
if (!data) {
|
|
109
|
+
[NSException raise:@"Config could not be loaded from disk" format:@"Config could not be loaded from disk"];
|
|
73
110
|
}
|
|
74
111
|
|
|
75
|
-
NSError *
|
|
112
|
+
NSError *error = nil;
|
|
76
113
|
id dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
|
|
77
|
-
|
|
78
|
-
if(error) {
|
|
79
|
-
|
|
114
|
+
|
|
115
|
+
if (error) {
|
|
116
|
+
[NSException raise:@"Config could not be parsed to JSON" format:@"Config could not be parsed to JSON: %@", error.localizedDescription];
|
|
80
117
|
}
|
|
81
118
|
NSDictionary *optionsDictionary = [dictionary objectForKey:@"options"];
|
|
82
119
|
self.jsonConfigDictionary = dictionary;
|
|
83
120
|
|
|
84
121
|
self.appKey = [dictionary objectForKey:@"license"];
|
|
122
|
+
if (!self.appKey) {
|
|
123
|
+
self.appKey = [dictionary objectForKey:@"licenseKey"];
|
|
124
|
+
}
|
|
85
125
|
|
|
86
126
|
BOOL nativeBarcodeScanning = [[optionsDictionary objectForKey:@"nativeBarcodeEnabled"] boolValue];
|
|
87
127
|
self.nativeBarcodeScanning = nativeBarcodeScanning ? nativeBarcodeScanning : NO;
|
|
@@ -96,25 +136,25 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
|
|
|
96
136
|
if ([[scanMode uppercaseString] isEqualToString:[@"scan" uppercaseString]]) {
|
|
97
137
|
BOOL isNFC = [optionsDictionary objectForKey:@"enableNFCWithMRZ"];
|
|
98
138
|
if (isNFC) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
139
|
+
if (@available(iOS 13.0, *)) {
|
|
140
|
+
if ([ALNFCDetector readingAvailable]) {
|
|
141
|
+
ALNFCScanViewController *nfcScanViewController = [[ALNFCScanViewController alloc] initWithLicensekey:self.appKey
|
|
142
|
+
configuration:dictionary
|
|
143
|
+
uiConfig:self.jsonUIConf
|
|
144
|
+
finished:^(id _Nullable callbackObj, NSString * _Nullable errorString) {
|
|
145
|
+
[self returnCallback:callbackObj andErrorString:errorString];
|
|
146
|
+
}];
|
|
147
|
+
|
|
148
|
+
if (nfcScanViewController != nil){
|
|
149
|
+
[nfcScanViewController setModalPresentationStyle: UIModalPresentationFullScreen];
|
|
150
|
+
[[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:nfcScanViewController animated:YES completion:nil];
|
|
151
|
+
}
|
|
152
|
+
} else {
|
|
153
|
+
[self returnError:@"NFC passport reading is not supported on this device or app."];
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
[self returnError:@"NFC passport reading is only supported on iOS 13 and later."];
|
|
157
|
+
}
|
|
118
158
|
} else {
|
|
119
159
|
ALPluginScanViewController *pluginScanViewController =
|
|
120
160
|
[[ALPluginScanViewController alloc] initWithLicensekey:self.appKey
|
|
@@ -123,7 +163,7 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
|
|
|
123
163
|
[self returnCallback:callbackObj andErrorString:errorString];
|
|
124
164
|
}];
|
|
125
165
|
|
|
126
|
-
if(pluginScanViewController != nil){
|
|
166
|
+
if (pluginScanViewController != nil){
|
|
127
167
|
[pluginScanViewController setModalPresentationStyle: UIModalPresentationFullScreen];
|
|
128
168
|
[[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:pluginScanViewController animated:YES completion:nil];
|
|
129
169
|
}
|
|
@@ -136,7 +176,7 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
|
|
|
136
176
|
[self returnCallback:callbackObj andErrorString:errorString];
|
|
137
177
|
}];
|
|
138
178
|
|
|
139
|
-
if(pluginScanViewController != nil){
|
|
179
|
+
if (pluginScanViewController != nil){
|
|
140
180
|
[pluginScanViewController setModalPresentationStyle: UIModalPresentationFullScreen];
|
|
141
181
|
[[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:pluginScanViewController animated:YES completion:nil];
|
|
142
182
|
}
|
|
@@ -180,7 +220,6 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
|
|
|
180
220
|
|
|
181
221
|
}
|
|
182
222
|
|
|
183
|
-
//(id _Nullable callbackObj, NSString * _Nullable errorString)
|
|
184
223
|
- (void)returnCallback:(id _Nullable)callbackObj andErrorString:(NSString * _Nullable)errorString {
|
|
185
224
|
NSString *resultStr;
|
|
186
225
|
NSError *error;
|
|
@@ -198,18 +237,18 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
|
|
|
198
237
|
}
|
|
199
238
|
}
|
|
200
239
|
|
|
201
|
-
- (void)returnSuccess:(NSString *)result{
|
|
202
|
-
if([self.returnMethod isEqualToString:@"callback"]) {
|
|
240
|
+
- (void)returnSuccess:(NSString *)result {
|
|
241
|
+
if ([self.returnMethod isEqualToString:@"callback"]) {
|
|
203
242
|
self.onResultCallback(@[result]);
|
|
204
|
-
} else if([self.returnMethod isEqualToString:@"promise"]) {
|
|
243
|
+
} else if ([self.returnMethod isEqualToString:@"promise"]) {
|
|
205
244
|
_resolveBlock(result);
|
|
206
245
|
}
|
|
207
246
|
}
|
|
208
247
|
|
|
209
|
-
- (void)returnError:(NSString *)error{
|
|
210
|
-
if([self.returnMethod isEqualToString:@"callback"]) {
|
|
248
|
+
- (void)returnError:(NSString *)error {
|
|
249
|
+
if ([self.returnMethod isEqualToString:@"callback"]) {
|
|
211
250
|
self.onErrorCallback(@[error]);
|
|
212
|
-
} else if([self.returnMethod isEqualToString:@"promise"]) {
|
|
251
|
+
} else if ([self.returnMethod isEqualToString:@"promise"]) {
|
|
213
252
|
_rejectBlock(@"ANYLINE_ERROR", error, nil);
|
|
214
253
|
}
|
|
215
254
|
}
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_from": "anyline-ocr-react-native-module@^
|
|
2
|
+
"_from": "anyline-ocr-react-native-module@^46.1.0",
|
|
3
|
+
"_id": "anyline-ocr-react-native-module@^46.1.0",
|
|
3
4
|
"_inBundle": false,
|
|
4
5
|
"_integrity": "sha512-BGi9zNkSsoxXywDBIqzgBRvKUBniQOJHDKBrozZubKthZNRBAj8Ry5tW0Me0yLXt/fauME//hbC0wsenfPJZqw==",
|
|
5
6
|
"_location": "/anyline-ocr-react-native-module",
|
|
@@ -7,19 +8,19 @@
|
|
|
7
8
|
"_requested": {
|
|
8
9
|
"type": "range",
|
|
9
10
|
"registry": true,
|
|
10
|
-
"raw": "anyline-ocr-react-native-module@^
|
|
11
|
+
"raw": "anyline-ocr-react-native-module@^46.1.0",
|
|
11
12
|
"name": "anyline-ocr-react-native-module",
|
|
12
13
|
"escapedName": "anyline-ocr-react-native-module",
|
|
13
|
-
"rawSpec": "^
|
|
14
|
+
"rawSpec": "^46.1.0",
|
|
14
15
|
"saveSpec": null,
|
|
15
|
-
"fetchSpec": "^
|
|
16
|
+
"fetchSpec": "^46.1.0"
|
|
16
17
|
},
|
|
17
18
|
"_requiredBy": [
|
|
18
19
|
"/"
|
|
19
20
|
],
|
|
20
|
-
"_resolved": "https://registry.npmjs.org/anyline-ocr-react-native-module/-/anyline-ocr-react-native-module-44.1.
|
|
21
|
+
"_resolved": "https://registry.npmjs.org/anyline-ocr-react-native-module/-/anyline-ocr-react-native-module-44.1.2.tgz",
|
|
21
22
|
"_shasum": "bacbcd260cc662244f59393ed81a6edba009b52c",
|
|
22
|
-
"_spec": "anyline-ocr-react-native-module@^
|
|
23
|
+
"_spec": "anyline-ocr-react-native-module@^46.1.0",
|
|
23
24
|
"_where": "/Users/amiransari/Projects/anyline-ocr-react-native-module1/example/RNExampleApp",
|
|
24
25
|
"bugs": {
|
|
25
26
|
"url": "https://github.com/Anyline/anyline-ocr-react-native-module/issues"
|
|
@@ -46,5 +47,5 @@
|
|
|
46
47
|
"type": "git",
|
|
47
48
|
"url": "git+https://github.com/Anyline/anyline-ocr-react-native-module.git"
|
|
48
49
|
},
|
|
49
|
-
"version": "
|
|
50
|
+
"version": "46.1.0"
|
|
50
51
|
}
|
package/.idea/modules.xml
DELETED
package/.idea/plugin.iml
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="JAVA_MODULE" version="4">
|
|
3
|
-
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
4
|
-
<exclude-output />
|
|
5
|
-
<content url="file://$MODULE_DIR$" />
|
|
6
|
-
<orderEntry type="inheritedJdk" />
|
|
7
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
8
|
-
</component>
|
|
9
|
-
</module>
|
package/.idea/vcs.xml
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
package/android/.idea/gradle.xml
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="GradleMigrationSettings" migrationVersion="1" />
|
|
4
|
-
<component name="GradleSettings">
|
|
5
|
-
<option name="linkedExternalProjectsSettings">
|
|
6
|
-
<GradleProjectSettings>
|
|
7
|
-
<option name="testRunner" value="GRADLE" />
|
|
8
|
-
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
|
9
|
-
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
|
10
|
-
<option name="gradleJvm" value="Embedded JDK" />
|
|
11
|
-
<option name="modules">
|
|
12
|
-
<set>
|
|
13
|
-
<option value="$PROJECT_DIR$" />
|
|
14
|
-
</set>
|
|
15
|
-
</option>
|
|
16
|
-
</GradleProjectSettings>
|
|
17
|
-
</option>
|
|
18
|
-
</component>
|
|
19
|
-
</project>
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="RemoteRepositoriesConfiguration">
|
|
4
|
-
<remote-repository>
|
|
5
|
-
<option name="id" value="central" />
|
|
6
|
-
<option name="name" value="Maven Central repository" />
|
|
7
|
-
<option name="url" value="https://repo1.maven.org/maven2" />
|
|
8
|
-
</remote-repository>
|
|
9
|
-
<remote-repository>
|
|
10
|
-
<option name="id" value="jboss.community" />
|
|
11
|
-
<option name="name" value="JBoss Community repository" />
|
|
12
|
-
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
|
13
|
-
</remote-repository>
|
|
14
|
-
<remote-repository>
|
|
15
|
-
<option name="id" value="maven" />
|
|
16
|
-
<option name="name" value="maven" />
|
|
17
|
-
<option name="url" value="https://anylinesdk.blob.core.windows.net/testing/" />
|
|
18
|
-
</remote-repository>
|
|
19
|
-
<remote-repository>
|
|
20
|
-
<option name="id" value="BintrayJCenter" />
|
|
21
|
-
<option name="name" value="BintrayJCenter" />
|
|
22
|
-
<option name="url" value="https://jcenter.bintray.com/" />
|
|
23
|
-
</remote-repository>
|
|
24
|
-
<remote-repository>
|
|
25
|
-
<option name="id" value="Google" />
|
|
26
|
-
<option name="name" value="Google" />
|
|
27
|
-
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
|
|
28
|
-
</remote-repository>
|
|
29
|
-
<remote-repository>
|
|
30
|
-
<option name="id" value="maven" />
|
|
31
|
-
<option name="name" value="maven" />
|
|
32
|
-
<option name="url" value="https://anylinesdk.blob.core.windows.net/maven/" />
|
|
33
|
-
</remote-repository>
|
|
34
|
-
<remote-repository>
|
|
35
|
-
<option name="id" value="MavenRepo" />
|
|
36
|
-
<option name="name" value="MavenRepo" />
|
|
37
|
-
<option name="url" value="https://repo.maven.apache.org/maven2/" />
|
|
38
|
-
</remote-repository>
|
|
39
|
-
</component>
|
|
40
|
-
</project>
|
package/android/.idea/misc.xml
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
|
4
|
-
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
|
|
5
|
-
<output url="file://$PROJECT_DIR$/build/classes" />
|
|
6
|
-
</component>
|
|
7
|
-
<component name="ProjectType">
|
|
8
|
-
<option name="id" value="Android" />
|
|
9
|
-
</component>
|
|
10
|
-
</project>
|
package/android/.idea/vcs.xml
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
arguments=
|
|
2
|
-
auto.sync=false
|
|
3
|
-
build.scans.enabled=false
|
|
4
|
-
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
|
|
5
|
-
connection.project.dir=
|
|
6
|
-
eclipse.preferences.version=1
|
|
7
|
-
gradle.user.home=
|
|
8
|
-
java.home=/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home
|
|
9
|
-
jvm.arguments=
|
|
10
|
-
offline.mode=false
|
|
11
|
-
override.workspace.settings=true
|
|
12
|
-
show.console.view=true
|
|
13
|
-
show.executions.view=true
|
package/android/local.properties
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
## This file must *NOT* be checked into Version Control Systems,
|
|
2
|
-
# as it contains information specific to your local configuration.
|
|
3
|
-
#
|
|
4
|
-
# Location of the SDK. This is only used by Gradle.
|
|
5
|
-
# For customization when using a Version Control System, please read the
|
|
6
|
-
# header note.
|
|
7
|
-
#Wed Nov 16 08:15:22 CET 2022
|
|
8
|
-
sdk.dir=/Users/patrickfekete/Library/Android/sdk
|