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

React Native升级Xcode14.1后调用iOS库函数报unrecognized selector错误

解决React Native 0.66.4升级Xcode14.1后iOS端unrecognized selector sent to instance错误

针对你遇到的问题,核心原因是运行时某个对象收到了无法识别的方法调用,结合代码和环境变化,从以下几个方向排查解决:

1. 修正React Native Promise桥接的参数命名错误

你的OC桥接方法里,Promise的拒绝回调参数用了rejecter,但React Native的标准桥接命名是reject,这个命名不匹配会导致JS端调用时找不到正确的方法选择器,是最可能的问题。

修改代码中的参数名:

RCT_EXPORT_METHOD(getCardToken:(NSString *)cardNumber expirationDate:(NSString *)expirationDate CVV:(NSString *)CVV resolve: (RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject)
{
    BMSCardInfo *card = [BMSCardInfo new];
    card.cardNumber = cardNumber;
    card.expirationDate = expirationDate;
    card.CVV = CVV;

    [[BMSAPI instance] generateAccountForCard:card completion:^(BMSAccount *account, NSError *error){
        if (account) {
            resolve(account.token);
        } else {
            reject(@"error", error.localizedDescription, error);
        }
    }];
}

2. 检查第三方SDK的API兼容性

升级iOS16后,第三方SDK可能存在API变更:

  • 确认BMSCardInfo的属性名是否正确,比如CVV是否在新版本中改为小写cvv,iOS16对KVC的属性匹配更严格;
  • 验证[BMSAPI instance]单例获取方式是否有效,部分SDK会将单例方法从instance改为sharedInstance;
  • 核对generateAccountForCard:completion:的方法签名,包括block的参数类型、数量是否与SDK文档一致。

3. 适配Xcode14的编译架构要求

Xcode14默认移除了对32位架构的支持:

  • 检查第三方SDK是否包含arm64(真机)和x86_64(模拟器)架构,若SDK仅提供32位版本,需更换为适配64位的SDK;
  • 调整项目Build Settings:
    • 将Architectures设置为$(ARCHS_STANDARD);
    • 确保Valid Architectures只保留64位架构(arm64、x86_64)。

4. 排查链接与符号剥离问题

  • 确认项目Link Binary With Libraries中已正确添加第三方SDK的库文件;
  • 临时关闭Build Settings中的Dead Code Stripping选项,避免SDK中的方法符号被错误剥离;
  • 检查OC文件是否正确导入了SDK的头文件(#import "BMSCardInfo.h"、#import "BMSAPI.h")。

最后执行清理操作:删除Xcode的DerivedData文件夹,Command+Shift+K清理项目,重新编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:30:41