React Native实现图片OCR提取阀门序列号遇iOS编译错误求助
React Native iOS端OCR库编译失败问题
问题描述
在React Native项目中做OCR提取图片里的阀门序列号,测试了两个文本检测库,Android端运行正常,但iOS端编译时失败,报错信息如下:
CompileC /Users/Macbook/Library/Developer/Xcode/DerivedData/CRANE-ciqqhizauxjmlaevomkjkiypelyu/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RNTextDetector.build/Objects-normal/x86_64/RNTextDetector.o /Users/Macbook/Documents/GitHub/crane-app/CRANE/node_modules/rn-text-detector/ios/RNTextDetector.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'RNTextDetector' from project 'Pods') (1 failure)
使用代码
import RNTextDetector from "rn-text-detector"; const captureImage = async type => { let options = { mediaType: type, maxWidth: 300, maxHeight: 550, quality: 1, videoQuality: 'low', durationLimit: 30, //视频最长录制时长(秒) saveToPhotos: true, }; let isCameraPermitted = await requestCameraPermission(); let isStoragePermitted = await requestExternalWritePermission(); if (isCameraPermitted && isStoragePermitted) { launchCamera(options, response => { console.log('Response = ', response); if (response.didCancel) { alert('用户取消了相机选择'); return; } else if (response.errorCode == 'camera_unavailable') { alert('设备相机不可用'); return; } else if (response.errorCode == 'permission') { alert('权限未获取'); return; } else if (response.errorCode == 'others') { alert(response.errorMessage); return; } console.log('base64 -> ', response.assets[0].base64); console.log('uri -> ', response.assets[0].uri); console.log('width -> ', response.assets[0].width); console.log('height -> ', response.assets[0].height); console.log('fileSize -> ', response.assets[0].fileSize); console.log('type -> ', response.assets[0].type); console.log('fileName -> ', response.assets[0].fileName); setFilePath(response.assets[0].uri); (async () => { const textRecognition = await RNTextDetector.detectFromUri(response.assets[0].uri); console.log('识别结果', textRecognition); setSerialNumber(textRecognition[0].text) })(); RNFS.readFile(response.assets[0].uri, "base64").then(result => { setImage('data:/' + response.assets[0].type + ';' + 'base64,' + result) setScreenData({ ...screenData, image1: 'data:/' + response.assets[0].type + ';' + 'base64,' + result }); }) }); } };
目标识别图片

解决建议
1. 清理iOS依赖并重新安装
进入项目的ios目录,执行以下命令:
pod deintegrate rm -rf Podfile.lock pod install
之后重启Xcode,清理项目(Command + Shift + K)再重新编译。
2. 检查Xcode编译配置
- 打开Xcode,找到Pods项目下的RNTextDetector target,查看Build Settings中的Deployment Target,确保设置为iOS 11.0或更高(苹果Vision框架最低要求iOS 11)。
- 检查Build Phases -> Link Binary With Libraries,确认已添加
Vision.framework(若未添加,点击+手动添加)。
3. 验证库版本兼容性
确认使用的rn-text-detector库版本与当前React Native版本、Xcode版本兼容。如果使用的是旧版本库,尝试升级到最新版,或者降级到适配当前环境的版本。
4. 替换为维护更活跃的OCR库
如果上述方法无效,可以考虑替换为更稳定的OCR方案:
- 使用
react-native-vision-camera配合vision-camera-ocr插件,基于苹果Vision框架实现,兼容性更好。 - 若项目基于Expo,可使用
expo-image-picker配合expo-ocr,配置更简单。
内容的提问来源于stack exchange,提问作者Mac
相关产品推荐
相关产品推荐

