uni-app iOS运行报错

uni-app iOS运行报错

操作步骤:

  • 在build Phases->link Binary With Libraries中添加libtxim-ios.a文件
  • 在build Phases->Embed Frameworks中添加imSDK.framework

预期结果:

  • 运行通过,不会报错,中断运行

实际结果:

  • 中断运行,报下面的错误
    First throw call stack:
    (0x1ca9db180 0x1c9bb39f8 0x1ca8f79bc 0x1ca9e09c8 0x1ca9e265c 0x101a7ecf4 0x101a02f24 0x10196ee98 0x101a4cb3c 0x1ca9e2800 0x1ca8c43c0 0x1d1da6870 0x1d1da62b0 0x1d1da5c6c 0x1d1d9bce8 0x1d1d9a064 0x1d1d859ac 0x1d22b71bc 0x1d2513b48 0x1d1d9ba4c 0x1d1d9a064 0x1d1d99fc4 0x1d1d9a064 0x1d1d9a064 0x1d1d9a064 0x1d1d99fc4 0x1d1d99fc4 0x1d1d99fc4 0x1d1d9aa58 0x1d1d9a064 0x1d1d9a064 0x1d1d9a064 0x1d1d859ac 0x1d22b5de0 0x1d24bf26c 0x1d1dbd39c 0x1d1b79f24 0x101a4aaa0 0x101971328 0x1019739ac 0x101970500 0x101a5fba4 0x101a5f26c 0x1cb462690 0x1ca96cf1c 0x1ca96ce9c 0x1ca96c784 0x1ca9676c0 0x1ca966fb4 0x1cb33595c 0x101a5ef44 0x1cb4624a0 0x1ca5f92c0 0x1ca5f9220 0x1ca5fccdc)
    libc++abi.dylib: terminating with uncaught exception of type NSException
    
    Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[__NSCFConstantString unsignedLongLongValue]: unrecognized selector sent to instance 0x1fb88d388’ terminating with uncaught exception of type NSException

bug描述:

  • 添加了.a文件和framework文件后,在先从的中运行报下面的错误
    First throw call stack:
    (0x1ca9db180 0x1c9bb39f8 0x1ca8f79bc 0x1ca9e09c8 0x1ca9e265c 0x101a7ecf4 0x101a02f24 0x10196ee98 0x101a4cb3c 0x1ca9e2800 0x1ca8c43c0 0x1d1da6870 0x1d1da62b0 0x1d1da5c6c 0x1d1d9bce8 0x1d1d9a064 0x1d1d859ac 0x1d22b71bc 0x1d2513b48 0x1d1d9ba4c 0x1d1d9a064 0x1d1d99fc4 0x1d1d9a064 0x1d1d9a064 0x1d1d9a064 0x1d1d99fc4 0x1d1d99fc4 0x1d1d99fc4 0x1d1d9aa58 0x1d1d9a064 0x1d1d9a064 0x1d1d9a064 0x1d1d859ac 0x1d22b5de0 0x1d24bf26c 0x1d1dbd39c 0x1d1b79f24 0x101a4aaa0 0x101971328 0x1019739ac 0x101970500 0x101a5fba4 0x101a5f26c 0x1cb462690 0x1ca96cf1c 0x1ca96ce9c 0x1ca96c784 0x1ca9676c0 0x1ca966fb4 0x1cb33595c 0x101a5ef44 0x1cb4624a0 0x1ca5f92c0 0x1ca5f9220 0x1ca5fccdc)
    libc++abi.dylib: terminating with uncaught exception of type NSException
    
    Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[__NSCFConstantString unsignedLongLongValue]: unrecognized selector sent to instance 0x1fb88d388’ terminating with uncaught exception of type NSException

更多关于uni-app iOS运行报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app iOS运行报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个错误是典型的 Objective-C 运行时异常,核心问题是:一个字符串对象被错误地调用了 unsignedLongLongValue 方法

错误分析:

  1. 关键错误信息

    • -[__NSCFConstantString unsignedLongLongValue]: unrecognized selector sent to instance
    • 这表示代码试图将一个 NSString__NSCFConstantString)当作 NSNumber 来使用,调用了 unsignedLongLongValue 这个数值转换方法。
  2. 根本原因: 通常发生在原生插件(Native Plugin)或第三方 SDK(如您添加的 imSDK.framework)与 uni-app 桥接时,数据类型不匹配。可能的情况包括:

    • 插件/SDK 期望接收一个数值型参数(如 NSNumber),但 uni-app 框架传递了一个字符串(NSString)。
    • 插件/SDK 返回了一个字符串,但 uni-app 桥接代码错误地尝试将其作为数值处理。
  3. 结合您的操作: 您在项目中集成了 libtxim-ios.aimSDK.framework,这很可能是腾讯云 IM 的 SDK。该 SDK 在与 uni-app 的原生模块通信时,某个方法的参数或返回值类型定义与实际情况不符,导致运行时类型错误。

解决方案:

  1. 检查 uni-app 原生插件配置

    • 如果您是通过 uni-app 原生插件的方式集成该 SDK,请检查插件的 package.json 中的 methods 配置。确保每个方法的参数类型(如 "type": "Number")与 SDK 实际要求的类型严格一致。
    • 重点检查可能涉及长整型(unsigned long long)参数或返回值的方法。
  2. 检查原生插件实现代码

    • 检查插件 iOS 目录下的 .m.mm 实现文件。找到调用 imSDK 相关 API 的地方。
    • 确认在将 uni-app 端传递的参数(通常是 NSDictionary *NSArray *)转换为 SDK 所需参数时,数值类型的转换是否正确。例如,从 NSDictionary 中取出一个值,如果 SDK 需要 unsigned long long,应使用 [param[@"key"] unsignedLongLongValue],但前提是 param[@"key"] 必须是 NSNumber 类型。如果 uni-app 端传递的是字符串,这里就会崩溃。
    • 修正方法:在原生代码中,对传入的参数进行严格的类型判断和转换。例如:
      // 假设 param 是从 uni-app 端传来的字典
      id value = param[@"userId"]; // 可能是一个 NSString 或 NSNumber
      unsigned long long uid = 0;
      if ([value isKindOfClass:[NSNumber class]]) {
          uid = [value unsignedLongLongValue];
      } else if ([value isKindOfClass:[NSString class]]) {
          // 如果 uni-app 端传的是字符串,但 SDK 需要数值,则进行转换
          uid = strtoull([value UTF8String], NULL, 10);
      }
      // 再将 uid 传递给 SDK
回到顶部