iOS 工程配置

iOS 应用接入 IMLib 前需要完成一组工程配置:网络访问(ATS / 本地网络)、后台模式(长连接保活)、媒体权限(图片 / 文件 / 语音 / 位置)与推送能力(可选)。漏配的典型表现是“能连上但收不到推送 / 断线后不重连 / 选图片闪退”。

Info.plist 关键项​

Key值用途
`NSAppTransportSecurity` → `NSAllowsArbitraryLoads`开发环境 `YES`;生产按域名配置例外允许 HTTP / 自签证书联调;生产建议全量 HTTPS
`NSLocalNetworkUsageDescription`“用于连接本地开发服务器”iOS 14+ 访问局域网服务端时的权限说明
`UIBackgroundModes``fetch`、`remote-notification`(按需)后台同步与推送唤醒;长连接保活以系统策略为准
`NSCameraUsageDescription`“拍摄照片发送”拍照发图
`NSPhotoLibraryUsageDescription`“从相册选择图片发送”相册选图
`NSMicrophoneUsageDescription`“录制语音消息”语音消息
`NSLocationWhenInUseUsageDescription`“发送位置消息”位置消息
`NSUserTrackingUsageDescription`按业务需要如涉及归因追踪才需要
Text
<!-- Info.plist 片段 -->
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>
<key>NSLocalNetworkUsageDescription</key>
<string>用于连接本地开发服务器</string>
<key>UIBackgroundModes</key>
<array>
  <string>fetch</string>
  <string>remote-notification</string>
</array>
<key>NSCameraUsageDescription</key>
<string>拍摄照片发送</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>从相册选择图片发送</string>
<key>NSMicrophoneUsageDescription</key>
<string>录制语音消息</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>发送位置消息</string>

网络权限​

  • 生产环境使用 HTTPS 与 wss;ATS 默认阻止明文 HTTP,联调期才临时放开,上线前删除 `NSAllowsArbitraryLoads`。
  • 自签证书:把根证书加入 App 的 trust store(或在 ATS 中对该域名配置例外),并在业务层固定证书指纹。
  • 本地网络:访问 `192.168.*` / `10.*` 等内网地址时,iOS 14+ 会弹「本地网络」权限;用户拒绝后需在系统设置中重新开启。
  • 代理 / VPN:企业网络下确认允许 WebSocket 升级(`Upgrade: websocket`)与长连接保活。

后台模式与保活​

场景配置说明
切后台短时间保活无需额外配置系统给约 30 秒后台执行时间;期间可完成一次收发与本地落库
后台消息唤醒`remote-notification` + 推送通道通过 APNs 通知唤醒;消息正文由 IMLib 在下次前台连接补收
后台同步`fetch`(BGTaskScheduler)定期拉取会话 / 未读;具体频率由系统调度
VoIP / 通话不适用IMLib 不含音视频能力;通话能力见音视频产品线
不要依赖“永久后台长连接”

iOS 会在切后台一段时间后挂起 socket。正确做法是:把连接状态、未读与草稿持久化,回到前台后重连并补收离线消息;推送负责提醒,不负责传消息正文。

推送能力(可选)​

  1. Xcode → Signing & Capabilities → 添加 Push Notifications。
  2. 在 Apple Developer 后台创建 APNs Key(.p8),配置到服务端推送通道。
  3. App 启动时请求通知权限(`UNUserNotificationCenter.requestAuthorization`),拿到 deviceToken 后登记到 IMLib 推送令牌接口。
  4. 前台收到通知时自行决定是否展示(避免与 IMKit 会话页重复提示)。

Objective-C 工程注意点​

  • 在 Build Settings 中设置 `Defines Module = YES`,否则 `@import ImpIaaSIM;` 不可用;也可用 `#import `。
  • `.m` 文件中混用 Swift 时,确认已生成 `YourApp-Swift.h` 并在需要处导入。
  • 关闭 Bitcode(Apple 已废弃);确保 `Other Linker Flags` 不含冲突的 `-all_load`(会与静态库符号冲突)。

相关:集成方式、快速开始、IMKit 快速开始。