iOS 升级与兼容

iOS SDK 的版本策略是 additive-only:只新增可选字段、枚举值与操作,不破坏既有语义。升级时按“契约变更 → 依赖升级 → 回归主链路 → 发版”的顺序执行。

升级步骤​

  1. 阅读更新日志,确认新增 / 变更的语义操作与错误码。
  2. 按集成方式升级依赖(CocoaPods `pod update` / SPM 更新版本 / 替换 XCFramework)。
  3. 清理构建缓存(`DerivedData`)后全量编译,确认无符号冲突。
  4. 回归主链路:初始化 → 连接 → 收发文本 / 图片 → 会话列表 → 历史消息 → 撤回 / 已读。
  5. 回归 Objective-C 侧:确认 ObjC 声明仍可用(`IMP*` 符号无改名)。
  6. 更新 App 版本号并发版;灰度观察连接成功率与崩溃率。

兼容矩阵​

升级项兼容性注意事项
1.0.x → 1.x向后兼容(additive-only)新增操作可直接使用;旧代码无需改动
Xcode 15 → 16源码兼容重新编译并回归签名 / 归档流程
iOS 最低版本上调影响用户覆盖发布说明标注;旧系统用户停留在上一版本
IMKit 组件扩展props / events 只增不改自定义渲染器需检查新增可选属性
Objective-C 声明选择器保持稳定升级后跑一次 ObjC 集成用例

常见升级问题​

现象原因处理
`Multiple commands produce ...`同时用 CocoaPods 与 SPM 引入同名模块只保留一种集成方式
`Undefined symbols: IMP...`XCFramework 未 Embed & SignTarget → General 设为 Embed & Sign
启动崩溃 `dyld: Library not loaded`Framework 未随包嵌入检查 Embed 阶段与 Runpath Search Paths
收不到离线消息升级后 deviceId / 游标被清重装或清缓存会生成新 deviceId,首次会补收未 ack 消息;确认服务端补发正常
ObjC 编译告警 `@objc` 名称冲突宿主自定义类与 SDK 前缀冲突避免使用 `IMP` 前缀命名自有类
回滚

保留上一版本的 Podfile.lock / Package.resolved 与 XCFramework 包;回滚后清理 DerivedData,避免残留旧模块。