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

SwiftUI集成StreamChat点击添加附件图标触发libsystem_kernel崩溃

问题现象

使用GetStream Chat SwiftUI SDK开发聊天功能时,直接调用内置组件ChatChannelListView()搭建聊天流,频道加载、消息收发等前期功能运行正常,点击输入栏的附件回形针图标时应用直接崩溃,报错为libsystem_kernel.dylib\__abort_with_payload`。
相关代码如下:

import SwiftUI
import StreamChat
import StreamChatSwiftUI

struct MessagesView: View {
    var body: some View {
        ChatChannelListView()
    }
}

struct MessagesView_Previews: PreviewProvider {
    static var previews: some View {
        MessagesView()
    }
}
崩溃根因

这是iOS系统隐私权限校验触发的强制终止。
ChatChannelListView进入聊天页后,默认附件按钮点击后会弹出包含拍照、相册选图、本地文件选择三类入口的选择面板,面板初始化阶段会触发对应硬件/资源的权限检查逻辑。如果项目Info.plist未配置对应隐私权限的用途说明,iOS会直接强杀App,抛出的就是你看到的__abort_with_payload错误,这类系统级权限拦截不会输出明确的业务层崩溃栈。

修复方法
  • 方案1(直接适配默认配置):打开项目Info.plist,右键选择Open As -> Source Code,在根节点<dict>下添加以下隐私权限配置,value的描述可根据自身业务场景调整:
<!-- 相机权限,用于拍摄发送的照片/视频 -->
<key>NSCameraUsageDescription</key>
<string>App需要访问相机拍摄你要发送的照片、视频内容</string>
<!-- 相册权限,用于选择本地相册的图片/视频 -->
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要访问相册选择你要发送的图片、视频内容</string>
<!-- 麦克风权限,用于录制带音频的视频、语音消息 -->
<key>NSMicrophoneUsageDescription</key>
<string>App需要访问麦克风录制你要发送的语音、视频音频内容</string>

添加完成后重新编译运行即可正常打开附件面板。

  • 方案2(自定义附件入口):如果你不需要相机、相册类附件能力,可以通过StreamChatSwiftUI的外观配置自定义附件支持的类型,隐藏不需要的入口,即可跳过对应权限检查,无需配置上述权限键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:24:16