You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native iOS端OCR集成编译报错求助,Android端运行正常

React Native OCR功能iOS端编译失败排查方案

问题背景

React Native项目中集成OCR功能,Android端运行正常,但iOS端编译报错,使用的OCR库为rn-text-detector。

编译错误详情

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 });
      })
    });
  }
};

解决步骤

  • 清理并重新安装Pod依赖
    进入项目iOS目录,依次执行:

    pod deintegrate
    pod install
    

    完成后重启Xcode再尝试编译。

  • 验证库链接与iOS版本兼容性

    1. 打开Xcode项目,检查Build Phases -> Link Binary With Libraries中是否已添加RNTextDetector.framework,未添加则手动引入。
    2. 确认项目部署目标不低于iOS 11.0(该库依赖的Vision框架最低支持iOS 11)。
  • 排查库源码语法问题
    打开node_modules/rn-text-detector/ios/RNTextDetector.m文件,检查:

    • 是否导入#import <Vision/Vision.h>头文件
    • Objective-C代码是否存在语法错误(如未定义变量、API调用过时)
      若发现问题,可临时修改源码后重新编译,或切换到库的稳定版本。
  • 完善iOS权限配置
    在Info.plist中添加必要权限描述:

    <key>NSCameraUsageDescription</key>
    <string>需要使用相机拍摄图片进行文字识别</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>需要访问照片库以处理识别图片</string>
    
  • 切换到真机测试
    部分OCR功能在iOS模拟器上存在限制,直接在真机上编译运行,排除模拟器环境问题。

内容的提问来源于stack exchange,提问作者Mac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:01:44