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

iOS端RN0.66.4使用azure-blob-storage报_Bool与数组越界错误

React Native iOS端react-native-azure-blob-storage报错修复方案

运行环境

  • 平台:iOS
  • React Native版本:0.66.4
  • 依赖版本:react-native-azure-blob-storage@^2.0.3

报错信息

  1. 方法-[EAzureBlobStorageFile configure:key:container:token:]存在未知参数类型_Bool,提示需扩展RCTConvert以支持该类型
  2. 调用EAzureBlobStorageFile的configure方法传递参数时,抛出异常:*** -[__NSArrayM objectAtIndexedSubscript:]: index 3 beyond bounds [0 .. 2]

已验证通用修复方案(新增RCTReadString(input, "__attribute__((__unused__))") ||逻辑)无效,当前使用的依赖版本已合入该修复。

问题原因

React Native 0.66及以上版本调整了原生模块方法参数的宏解析规则,react-native-azure-blob-storage 2.0.3版本的原生代码存在两处兼容问题:

  • 方法中声明的BOOL类型参数在编译时被识别为底层类型_Bool,RN内置的RCTConvert类型解析逻辑没有覆盖_Bool别名,导致参数解析顺序错位
  • 参数解析错位后,框架实际识别到的方法参数总数比真实参数少1个,调用时读取索引为3的第4个参数就会触发数组越界异常

修复步骤

  1. 定位依赖的iOS原生文件:如果使用CocoaPods管理依赖,打开路径ios/Pods/Development Pods/react-native-azure-blob-storage/ios/EAzureBlobStorageFile.m;如果是手动link依赖,直接打开node_modules/react-native-azure-blob-storage/ios/EAzureBlobStorageFile.m
  2. 找到configure方法对应的RCT_EXPORT_METHOD导出声明,显式标注所有参数的类型,避免编译器自动类型推导,参考写法:
RCT_EXPORT_METHOD(configure:(NSString *)sasToken
                  key:(NSString *)accessKey
                  container:(NSString *)containerName
                  refreshToken:(BOOL)shouldRefreshToken
                  resolver:(RCTPromiseResolveBlock)resolve
                  rejecter:(RCTPromiseRejectBlock)reject)
  1. 在同文件的RN类型解析逻辑中,新增_Bool类型的匹配分支,让_Bool和BOOL走相同的转换逻辑:
// 找到RCTConvert的类型判断代码块,添加以下分支
if (RCTReadString(input, "_Bool")) {
    return RCTBlock("BOOL", "bool");
}
  1. 清理编译缓存后重新编译:
    • 执行cd ios && xcodebuild clean清理Xcode编译缓存
    • 若修改的是Pods下的文件,建议删除Podfile.lock和Pods目录后重新执行pod install
    • 重新运行项目即可验证修复

直接修改node_modules或Pods目录的内容会在重新安装依赖时丢失,建议使用patch-package将修改内容生成持久化补丁,团队其他成员拉取代码后安装依赖即可自动应用修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:42:09