升级Xcode至15.3后调用AWSS3Manager认证方法时App触发SIGABRT崩溃
你好,看了你的问题,升级Xcode到15.3后,原本在14.3上运行正常的AWS认证代码突然触发SIGABRT崩溃,而且问题刚好出在调用fetchCurrentAuthSession()的异步任务里。结合Xcode版本升级的背景,我整理了几个实用的排查和解决方向,你可以一步步试试:
优先检查AWS SDK版本兼容性
Xcode 15.x对Swift语法、系统框架都做了不少更新,旧版本的AWS SDK很可能存在适配漏洞。建议你先确认当前用的AWSCore、AWSS3这类依赖包,是否明确支持Xcode 15.3。最好直接升级到官方最新的稳定版本,一般新版本都会修复这类跨Xcode版本的兼容性问题。排查异步任务的线程与队列问题
SIGABRT崩溃经常和线程不安全、队列使用不当有关。你可以先检查fetchCurrentAuthSession()的内部实现,有没有在后台线程里调用UI相关操作?或者存在未正确处理的可选值解包?另外,也可以尝试把这个异步任务放到合适的队列执行,比如:DispatchQueue.global(qos: .background).async { Task { let isUserSigned = await AWSS3Manager.shared.fetchCurrentAuthSession() print("auth session value =", isUserSigned) } }换个上下文执行,看看能不能避开崩溃。
核对Info.plist的配置与权限
Xcode 15对配置项的校验更严格了,比如网络权限、AWS的核心配置有没有出错。你可以检查Info.plist里是否正确填了AWS区域、身份池ID这些必要信息,同时确认网络权限(比如NSAppTransportSecurity)是否符合当前AWS服务的要求。开启详细日志定位根因
建议打开AWS SDK的详细日志,看看崩溃前有没有关键错误信息输出。可以在App启动时添加这段配置:AWSDDLog.sharedInstance.logLevel = .verbose AWSDDLog.add(AWSDDTTYLogger.sharedInstance)这样能拿到认证过程的完整细节,比如是请求构造错误、会话过期,还是SDK内部处理响应时出了未捕获的异常。
测试传统闭包调用方式
Xcode 15对Swift Concurrency的实现有更新,如果你的SDK是较早支持async/await的版本,可能存在适配问题。可以试试把调用改成传统的闭包形式,看看还会不会崩溃:AWSS3Manager.shared.fetchCurrentAuthSession { isUserSigned, error in if let error = error { print("Auth error:", error) return } print("auth session value =", isUserSigned) }如果闭包方式正常,那基本可以确定是async/await的适配问题,要么升级SDK,要么调整调用逻辑。
另外从你给出的崩溃栈来看,崩溃发生在NSURLSession的工作队列里,说明问题大概率和网络请求相关——比如认证请求的URL、请求头有问题,或者SDK处理响应时出现了未捕获的错误。
备注:内容来源于stack exchange,提问作者Gypsa

