@unif/react-native-hms-scan 0.2.0 → 0.2.2

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.
@@ -202,32 +202,60 @@ using namespace facebook::react;
202
202
  [self emitTorchStatusAvailable:available on:torchOn];
203
203
  }
204
204
 
205
+ // 优先取「带手电的后置广角相机」(这通常就是华为扫码用的那颗);取不到再退回
206
+ // 默认 video 设备。比已弃用的 defaultDeviceWithMediaType 更可能命中正确设备。
207
+ - (AVCaptureDevice *)torchCaptureDevice {
208
+ AVCaptureDeviceDiscoverySession *session =
209
+ [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ AVCaptureDeviceTypeBuiltInWideAngleCamera ]
210
+ mediaType:AVMediaTypeVideo
211
+ position:AVCaptureDevicePositionBack];
212
+ for (AVCaptureDevice *d in session.devices) {
213
+ if (d.hasTorch) {
214
+ return d;
215
+ }
216
+ }
217
+ return [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
218
+ }
219
+
205
220
  // Mutates the capture device's torch. Returns the resulting on-state and writes
206
221
  // hardware availability into `available`. Does NOT emit any event (so it can be
207
222
  // reused on teardown/recycle without firing onTorchStatus on a stale emitter).
223
+ //
224
+ // best-effort:华为独占相机会话且无手电 API,这里直接操作设备硬件。可能因华为
225
+ // 持有配置锁(lockForConfiguration 失败)或用了别的设备而不生效。DEBUG 日志会
226
+ // 打印到底卡在哪一步,真机调试时看 Xcode console。
208
227
  - (BOOL)setTorchHardwareOn:(BOOL)on available:(BOOL *)available {
209
- AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
210
- BOOL isAvailable = (device != nil && device.hasTorch && device.isTorchAvailable);
228
+ AVCaptureDevice *device = [self torchCaptureDevice];
229
+ BOOL hasTorch = (device != nil && device.hasTorch);
211
230
  if (available != NULL) {
212
- *available = isAvailable;
231
+ *available = hasTorch;
213
232
  }
214
- if (!isAvailable) {
233
+ if (!hasTorch) {
234
+ #if DEBUG
235
+ NSLog(@"[HmsScanView] torch: 无带手电的相机设备 (device=%@)", device);
236
+ #endif
215
237
  return NO;
216
238
  }
217
239
 
218
240
  BOOL torchOn = NO;
219
241
  NSError *error = nil;
220
242
  if ([device lockForConfiguration:&error]) {
221
- if (on && [device isTorchModeSupported:AVCaptureTorchModeOn]) {
243
+ if (on && device.isTorchAvailable && [device isTorchModeSupported:AVCaptureTorchModeOn]) {
222
244
  device.torchMode = AVCaptureTorchModeOn;
223
- torchOn = YES;
224
245
  } else {
225
246
  device.torchMode = AVCaptureTorchModeOff;
226
- torchOn = NO;
227
247
  }
248
+ torchOn = device.isTorchActive; // 反映硬件真实状态,而非乐观假设
228
249
  [device unlockForConfiguration];
250
+ #if DEBUG
251
+ NSLog(@"[HmsScanView] torch 请求 on=%d -> isTorchActive=%d isTorchAvailable=%d", on, device.isTorchActive,
252
+ device.isTorchAvailable);
253
+ #endif
254
+ } else {
255
+ #if DEBUG
256
+ NSLog(@"[HmsScanView] torch lockForConfiguration 失败(华为可能占用了设备配置锁): %@", error);
257
+ #endif
229
258
  }
230
- // On lock failure we silently ignore (best-effort) and report torchOn = NO.
231
259
  return torchOn;
232
260
  }
233
261
 
@@ -303,3 +331,9 @@ using namespace facebook::react;
303
331
  }
304
332
 
305
333
  @end
334
+
335
+ // Fabric 组件注册钩子。RN codegen 生成的 RCTThirdPartyFabricComponentsProvider 用
336
+ // {"HmsScanView", HmsScanViewCls} 建表并调用本函数拿到视图类(见
337
+ // @react-native/codegen 的 GenerateThirdPartyFabricComponentsProviderObjCpp)。
338
+ // 缺这个函数 → 组件注册不上 → JS 端报 "Unimplemented component: <HmsScanView>"。
339
+ Class<RCTComponentViewProtocol> HmsScanViewCls(void) { return HmsScanView.class; }
@@ -17,12 +17,12 @@ export function ScanToolbar({
17
17
  bottom: bottomInset + r(50)
18
18
  }],
19
19
  pointerEvents: "box-none",
20
- children: [/*#__PURE__*/_jsx(ToolbarItem, {
20
+ children: [onFlash && /*#__PURE__*/_jsx(ToolbarItem, {
21
21
  icon: flash ? 'flash-on' : 'flash-off',
22
22
  label: flash ? '已开灯' : '手电筒',
23
23
  activeColor: flash ? c.primary : undefined,
24
24
  onPress: onFlash
25
- }), /*#__PURE__*/_jsx(ToolbarItem, {
25
+ }), onAlbum && /*#__PURE__*/_jsx(ToolbarItem, {
26
26
  icon: "image",
27
27
  label: "\u76F8\u518C",
28
28
  onPress: onAlbum
@@ -1 +1 @@
1
- {"version":3,"names":["Pressable","StyleSheet","Text","View","Icon","useColors","r","rf","fw","scanChrome","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ScanToolbar","flash","bottomInset","onFlash","onAlbum","c","style","styles","bar","bottom","pointerEvents","children","ToolbarItem","icon","label","activeColor","primary","undefined","onPress","item","accessibilityRole","accessibilityLabel","pressed","circle","backgroundColor","borderColor","glassBorderActive","glassDisc2","glassBorder","opacity","name","size","color","white","create","position","left","right","zIndex","flexDirection","justifyContent","columnGap","width","alignItems","rowGap","height","borderRadius","borderWidth","hairlineWidth","fontSize","fontWeight","medium","toolbarLabel","textShadowColor","textShadowOffset","textShadowRadius"],"sourceRoot":"../../../src","sources":["Scanner/ScanToolbar.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Pressable","StyleSheet","Text","View","Icon","useColors","r","rf","fw","scanChrome","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ScanToolbar","flash","bottomInset","onFlash","onAlbum","c","style","styles","bar","bottom","pointerEvents","children","ToolbarItem","icon","label","activeColor","primary","undefined","onPress","item","accessibilityRole","accessibilityLabel","pressed","circle","backgroundColor","borderColor","glassBorderActive","glassDisc2","glassBorder","opacity","name","size","color","white","create","position","left","right","zIndex","flexDirection","justifyContent","columnGap","width","alignItems","rowGap","height","borderRadius","borderWidth","hairlineWidth","fontSize","fontWeight","medium","toolbarLabel","textShadowColor","textShadowOffset","textShadowRadius"],"sourceRoot":"../../../src","sources":["Scanner/ScanToolbar.tsx"],"mappings":"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","ignoreList":[]}
@@ -34,6 +34,7 @@ function ScannerInner({
34
34
  hintText = DEFAULT_HINT,
35
35
  topInset = 54,
36
36
  bottomInset = 34,
37
+ showTorch = true,
37
38
  onClose,
38
39
  resolveProduct,
39
40
  onConfirm,
@@ -155,11 +156,11 @@ function ScannerInner({
155
156
  title: title,
156
157
  topInset: topInset,
157
158
  onClose: onClose
158
- }), showChrome && /*#__PURE__*/_jsx(ScanToolbar, {
159
+ }), showChrome && (showTorch || !!pickImage) && /*#__PURE__*/_jsx(ScanToolbar, {
159
160
  flash: torch,
160
161
  bottomInset: bottomInset,
161
- onFlash: () => setTorch(t => !t),
162
- onAlbum: onAlbum
162
+ onFlash: showTorch ? () => setTorch(t => !t) : undefined,
163
+ onAlbum: pickImage ? onAlbum : undefined
163
164
  }), phase === 'success' && product && /*#__PURE__*/_jsx(ResultFocus, {
164
165
  product: product,
165
166
  detectMs: detectMs,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useState","Linking","StyleSheet","View","ThemeProvider","ToastHost","toast","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","scanChrome","Viewfinder","ScanTopBar","ScanToolbar","ResultFocus","ResultFail","DeniedOverlay","jsx","_jsx","jsxs","_jsxs","VF_SIZE","DEFAULT_HINT","Scanner","props","children","ScannerInner","title","formats","hintText","topInset","bottomInset","onClose","resolveProduct","onConfirm","pickImage","phase","setPhase","torch","setTorch","product","setProduct","detectMs","setDetectMs","handlingRef","detectStartRef","lastResultRef","mountedRef","current","status","reset","finalize","result","resolved","name","value","barcode","Date","now","onCameraResult","results","first","onScanError","error","code","onAlbum","uri","undefined","onConfirmPress","r","p","success","showChrome","style","styles","root","absoluteFill","paused","onScanResult","size","detecting","flash","onFlash","t","onContinue","onRetry","onSettings","openSettings","create","flex","backgroundColor","cameraBg"],"sourceRoot":"../../../src","sources":["Scanner/Scanner.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","Linking","StyleSheet","View","ThemeProvider","ToastHost","toast","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","scanChrome","Viewfinder","ScanTopBar","ScanToolbar","ResultFocus","ResultFail","DeniedOverlay","jsx","_jsx","jsxs","_jsxs","VF_SIZE","DEFAULT_HINT","Scanner","props","children","ScannerInner","title","formats","hintText","topInset","bottomInset","showTorch","onClose","resolveProduct","onConfirm","pickImage","phase","setPhase","torch","setTorch","product","setProduct","detectMs","setDetectMs","handlingRef","detectStartRef","lastResultRef","mountedRef","current","status","reset","finalize","result","resolved","name","value","barcode","Date","now","onCameraResult","results","first","onScanError","error","code","onAlbum","uri","undefined","onConfirmPress","r","p","success","showChrome","style","styles","root","absoluteFill","paused","onScanResult","size","detecting","flash","onFlash","t","onContinue","onRetry","onSettings","openSettings","create","flex","backgroundColor","cameraBg"],"sourceRoot":"../../../src","sources":["Scanner/Scanner.tsx"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
 
3
3
  // @unif/react-native-hms-scan —— 华为 HMS 统一扫码服务 RN bridge(Fabric 新架构)
4
4
  // 能力:定制视图扫码(底层 <HmsScanView> + 成品 <Scanner> 扫一扫页)+ 图片识别(decodeImage)+ 相机权限。
5
+ // 0.2.1:package.json#files 补 scripts/,修 pod install 缺 prepare-scankit-xcframework.sh(podspec prepare_command 调用)。
5
6
 
6
7
  // ── 类型与常量 ──
7
8
  export { ALL_BARCODE_FORMATS, HmsScanError } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"names":["ALL_BARCODE_FORMATS","HmsScanError","coerceFormat","coerceContentType","formatsToCsv","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","Scanner"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;;AAEA;AACA,SACEA,mBAAmB,EACnBC,YAAY,QACP,YAAS;AAYhB;AACA,SAASC,YAAY,EAAEC,iBAAiB,EAAEC,YAAY,QAAQ,aAAU;;AAExE;AACA,SAASC,WAAW,QAAQ,kBAAe;AAG3C;AACA,SAASC,WAAW,QAAQ,kBAAe;;AAE3C;AACA,SAASC,yBAAyB,EAAEC,uBAAuB,QAAQ,kBAAe;;AAElF;AACA,SAASC,OAAO,QAAQ,sBAAmB","ignoreList":[]}
1
+ {"version":3,"names":["ALL_BARCODE_FORMATS","HmsScanError","coerceFormat","coerceContentType","formatsToCsv","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","Scanner"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;;AAEA;AACA,SACEA,mBAAmB,EACnBC,YAAY,QACP,YAAS;AAYhB;AACA,SAASC,YAAY,EAAEC,iBAAiB,EAAEC,YAAY,QAAQ,aAAU;;AAExE;AACA,SAASC,WAAW,QAAQ,kBAAe;AAG3C;AACA,SAASC,WAAW,QAAQ,kBAAe;;AAE3C;AACA,SAASC,yBAAyB,EAAEC,uBAAuB,QAAQ,kBAAe;;AAElF;AACA,SAASC,OAAO,QAAQ,sBAAmB","ignoreList":[]}
@@ -1,8 +1,10 @@
1
1
  interface ScanToolbarProps {
2
2
  flash: boolean;
3
3
  bottomInset: number;
4
- onFlash: () => void;
5
- onAlbum: () => void;
4
+ /** 不传则不显示手电筒按钮。 */
5
+ onFlash?: () => void;
6
+ /** 不传则不显示相册按钮(库不内置图片选择器,需宿主提供 pickImage)。 */
7
+ onAlbum?: () => void;
6
8
  }
7
9
  export declare function ScanToolbar({ flash, bottomInset, onFlash, onAlbum }: ScanToolbarProps): import("react/jsx-runtime").JSX.Element;
8
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ScanToolbar.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/ScanToolbar.tsx"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAGD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,gBAAgB,2CAarF"}
1
+ {"version":3,"file":"ScanToolbar.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/ScanToolbar.tsx"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAGD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,gBAAgB,2CAerF"}
@@ -10,6 +10,8 @@ export interface ScannerProps {
10
10
  topInset?: number;
11
11
  /** 底部安全区(默认 34)。 */
12
12
  bottomInset?: number;
13
+ /** 是否显示手电筒按钮,默认 true。手电由库内自管(Android 可用;iOS 为 best-effort,可在 iOS 上关掉)。 */
14
+ showTorch?: boolean;
13
15
  /** 左上角关闭。 */
14
16
  onClose?: () => void;
15
17
  /**
@@ -21,7 +23,7 @@ export interface ScannerProps {
21
23
  onConfirm?: (product: ScanProduct, result: ScanResult) => void;
22
24
  /**
23
25
  * 点"相册":宿主用自己的图片选择器选图并返回本地 uri(取消则返回 null)。
24
- * 不传则相册按钮不可用。
26
+ * 库不内置图片选择器(遵循 RN 惯例):**传了才显示相册按钮**,不传则隐藏。
25
27
  */
26
28
  pickImage?: () => Promise<string | null>;
27
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Scanner.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/Scanner.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAcvE,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,UAAU,KACf,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9E,oCAAoC;IACpC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/D;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CAO1C"}
1
+ {"version":3,"file":"Scanner.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/Scanner.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAcvE,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,UAAU,KACf,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9E,oCAAoC;IACpC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/D;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CAO1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGnF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGnF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unif/react-native-hms-scan",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "华为 HMS 统一扫码服务 React Native bridge:定制视图扫码 + 图片识别 (Scan SDK-Plus / ScanKitFrameWork,@unif 私有)",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -24,6 +24,7 @@
24
24
  "ios",
25
25
  "*.podspec",
26
26
  "react-native.config.js",
27
+ "scripts",
27
28
  "!ios/build",
28
29
  "!android/build",
29
30
  "!android/gradle",
@@ -81,7 +82,7 @@
81
82
  "@types/jest": "^29.5.0",
82
83
  "@types/react": "^19.2.0",
83
84
  "@types/react-test-renderer": "^19",
84
- "@unif/react-native-design": "^0.4.35",
85
+ "@unif/react-native-design": "0.5.1",
85
86
  "commitlint": "^20.5.0",
86
87
  "del-cli": "^7.0.0",
87
88
  "eslint": "^9.39.4",
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # 生成含 arm64-simulator 切片的 ScanKitFrameWork.xcframework(+ 资源 bundle)。
4
+ #
5
+ # 背景:华为官方 ScanKitFrameWork 1.1.2 是 2020 年前的老式 fat framework
6
+ # (arm64 = 真机 / x86_64 = Intel 模拟器,LC_VERSION_MIN_IPHONEOS 标记),
7
+ # 不含 arm64-simulator 切片。Apple Silicon(M 芯片)的 iOS 模拟器是 arm64-sim,
8
+ # 会因缺这一片而链接失败(旧 podspec 只能 EXCLUDED_ARCHS 排掉、导致模拟器编不过)。
9
+ #
10
+ # 这里用 Apple 官方 vtool 把真机 arm64 改写成 simulator 平台、补出 arm64-sim,
11
+ # 再 lipo 合并 x86_64,最后 xcodebuild -create-xcframework 打成 xcframework
12
+ # (device 片 / simulator 片分目录,fat binary 不允许同 arch 共存)。
13
+ #
14
+ # vtool 转出来的 sim 片仅用于编译/链接(CI、模拟器跑通);真机仍走 device 片。
15
+ # 模拟器上真去调摄像头硬件会崩,但模拟器本无扫码硬件场景,不影响。
16
+ #
17
+ # 由 ReactNativeHmsScan.podspec 的 prepare_command 在 pod install 时调用。
18
+ # 产物 ios/vendor/ 不入 git —— 按需生成(已生成则跳过)。
19
+ #
20
+ set -euo pipefail
21
+
22
+ OUT_DIR="ios/vendor"
23
+ XCFW="$OUT_DIR/ScanKitFrameWork.xcframework"
24
+ BUNDLE="$OUT_DIR/ScanKitFrameWorkBundle.bundle"
25
+
26
+ # 华为官方 Scan SDK-Plus iOS 工具包(scansdk-ios-tool 1.1.0.305)。
27
+ # URL 取自 ScanKitFrameWork 的 CocoaPods spec(source.http),带 10 年签名有效期。
28
+ ZIP_URL="https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_package_901_9/eb/v3/FoQltlwsS0Ge-TitlHPL3A/scansdk-ios-tool-1.1.0.305.zip?HW-CC-KV=V1&HW-CC-Date=20230321T064901Z&HW-CC-Expire=315360000&HW-CC-Sign=C23A0122B070535FDFA38C56BA62E25E6BE66582D963B8C7F5DDF4FCA5C34CFF"
29
+
30
+ # 只在 macOS 生成(需 lipo / vtool / xcodebuild);Android 等平台的 pod install 直接跳过。
31
+ if [ "$(uname)" != "Darwin" ]; then
32
+ echo "[scankit] 非 macOS,跳过 xcframework 生成"
33
+ exit 0
34
+ fi
35
+
36
+ # 已生成且两个平台切片齐全 → 跳过(避免每次 pod install 重复下载几十 MB)。
37
+ if [ -d "$XCFW/ios-arm64" ] && [ -d "$XCFW/ios-arm64_x86_64-simulator" ] && [ -d "$BUNDLE" ]; then
38
+ echo "[scankit] xcframework 已存在,跳过"
39
+ exit 0
40
+ fi
41
+
42
+ echo "[scankit] 下载华为 Scan SDK ..."
43
+ TMP="$(mktemp -d)"
44
+ trap 'rm -rf "$TMP"' EXIT
45
+ curl -fsSL "$ZIP_URL" -o "$TMP/sdk.zip"
46
+ unzip -q "$TMP/sdk.zip" -d "$TMP/sdk"
47
+
48
+ SRC_FW="$(find "$TMP/sdk" -type d -name 'ScanKitFrameWork.framework' | head -1)"
49
+ SRC_BUNDLE="$(find "$TMP/sdk" -type d -name 'ScanKitFrameWorkBundle.bundle' | head -1)"
50
+ if [ -z "$SRC_FW" ]; then
51
+ echo "[scankit] ✗ 解压后未找到 ScanKitFrameWork.framework" >&2
52
+ exit 1
53
+ fi
54
+ BIN="$SRC_FW/ScanKitFrameWork"
55
+
56
+ echo "[scankit] 拆片 + vtool 补 arm64-simulator + 组 xcframework ..."
57
+ mkdir -p "$TMP/device" "$TMP/sim"
58
+
59
+ # device:真机 arm64
60
+ cp -R "$SRC_FW" "$TMP/device/ScanKitFrameWork.framework"
61
+ lipo "$BIN" -thin arm64 -output "$TMP/device/ScanKitFrameWork.framework/ScanKitFrameWork"
62
+
63
+ # simulator:arm64(真机片经 vtool 改写成 simulator 平台 7)+ x86_64(原 Intel 模拟器片)
64
+ cp -R "$SRC_FW" "$TMP/sim/ScanKitFrameWork.framework"
65
+ lipo "$BIN" -thin arm64 -output "$TMP/a64d"
66
+ vtool -arch arm64 -set-build-version 7 13.5 13.5 -replace -output "$TMP/a64s" "$TMP/a64d"
67
+ lipo "$BIN" -thin x86_64 -output "$TMP/x86"
68
+ lipo -create "$TMP/a64s" "$TMP/x86" -output "$TMP/sim/ScanKitFrameWork.framework/ScanKitFrameWork"
69
+
70
+ mkdir -p "$OUT_DIR"
71
+ rm -rf "$XCFW"
72
+ xcodebuild -create-xcframework \
73
+ -framework "$TMP/device/ScanKitFrameWork.framework" \
74
+ -framework "$TMP/sim/ScanKitFrameWork.framework" \
75
+ -output "$XCFW"
76
+
77
+ # 资源 bundle(扫码 UI 资源),原由 ScanKitFrameWork pod 带,现随 vendored 一起放。
78
+ if [ -n "$SRC_BUNDLE" ]; then
79
+ rm -rf "$BUNDLE"
80
+ cp -R "$SRC_BUNDLE" "$BUNDLE"
81
+ fi
82
+
83
+ echo "[scankit] ✓ 生成 $XCFW(+ bundle)"
@@ -5,8 +5,10 @@ import { scanChrome } from './scanChrome';
5
5
  interface ScanToolbarProps {
6
6
  flash: boolean;
7
7
  bottomInset: number;
8
- onFlash: () => void;
9
- onAlbum: () => void;
8
+ /** 不传则不显示手电筒按钮。 */
9
+ onFlash?: () => void;
10
+ /** 不传则不显示相册按钮(库不内置图片选择器,需宿主提供 pickImage)。 */
11
+ onAlbum?: () => void;
10
12
  }
11
13
 
12
14
  // 底部工具栏:手电筒 · 相册(按定稿,去掉了搜索 / 输入码)。点亮态用主题主色。
@@ -14,13 +16,15 @@ export function ScanToolbar({ flash, bottomInset, onFlash, onAlbum }: ScanToolba
14
16
  const c = useColors();
15
17
  return (
16
18
  <View style={[styles.bar, { bottom: bottomInset + r(50) }]} pointerEvents="box-none">
17
- <ToolbarItem
18
- icon={flash ? 'flash-on' : 'flash-off'}
19
- label={flash ? '已开灯' : '手电筒'}
20
- activeColor={flash ? c.primary : undefined}
21
- onPress={onFlash}
22
- />
23
- <ToolbarItem icon="image" label="相册" onPress={onAlbum} />
19
+ {onFlash && (
20
+ <ToolbarItem
21
+ icon={flash ? 'flash-on' : 'flash-off'}
22
+ label={flash ? '已开灯' : '手电筒'}
23
+ activeColor={flash ? c.primary : undefined}
24
+ onPress={onFlash}
25
+ />
26
+ )}
27
+ {onAlbum && <ToolbarItem icon="image" label="相册" onPress={onAlbum} />}
24
28
  </View>
25
29
  );
26
30
  }
@@ -32,6 +32,8 @@ export interface ScannerProps {
32
32
  topInset?: number;
33
33
  /** 底部安全区(默认 34)。 */
34
34
  bottomInset?: number;
35
+ /** 是否显示手电筒按钮,默认 true。手电由库内自管(Android 可用;iOS 为 best-effort,可在 iOS 上关掉)。 */
36
+ showTorch?: boolean;
35
37
  /** 左上角关闭。 */
36
38
  onClose?: () => void;
37
39
  /**
@@ -45,7 +47,7 @@ export interface ScannerProps {
45
47
  onConfirm?: (product: ScanProduct, result: ScanResult) => void;
46
48
  /**
47
49
  * 点"相册":宿主用自己的图片选择器选图并返回本地 uri(取消则返回 null)。
48
- * 不传则相册按钮不可用。
50
+ * 库不内置图片选择器(遵循 RN 惯例):**传了才显示相册按钮**,不传则隐藏。
49
51
  */
50
52
  pickImage?: () => Promise<string | null>;
51
53
  }
@@ -70,6 +72,7 @@ function ScannerInner({
70
72
  hintText = DEFAULT_HINT,
71
73
  topInset = 54,
72
74
  bottomInset = 34,
75
+ showTorch = true,
73
76
  onClose,
74
77
  resolveProduct,
75
78
  onConfirm,
@@ -205,12 +208,12 @@ function ScannerInner({
205
208
  <ScanTopBar title={title} topInset={topInset} onClose={onClose} />
206
209
  )}
207
210
 
208
- {showChrome && (
211
+ {showChrome && (showTorch || !!pickImage) && (
209
212
  <ScanToolbar
210
213
  flash={torch}
211
214
  bottomInset={bottomInset}
212
- onFlash={() => setTorch((t) => !t)}
213
- onAlbum={onAlbum}
215
+ onFlash={showTorch ? () => setTorch((t) => !t) : undefined}
216
+ onAlbum={pickImage ? onAlbum : undefined}
214
217
  />
215
218
  )}
216
219
 
package/src/index.tsx CHANGED
@@ -1,5 +1,6 @@
1
1
  // @unif/react-native-hms-scan —— 华为 HMS 统一扫码服务 RN bridge(Fabric 新架构)
2
2
  // 能力:定制视图扫码(底层 <HmsScanView> + 成品 <Scanner> 扫一扫页)+ 图片识别(decodeImage)+ 相机权限。
3
+ // 0.2.1:package.json#files 补 scripts/,修 pod install 缺 prepare-scankit-xcframework.sh(podspec prepare_command 调用)。
3
4
 
4
5
  // ── 类型与常量 ──
5
6
  export {