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

Mac版Swift Playgrounds 4.1中AsyncImage无法加载远程图片预览

Mac端Swift Playgrounds加载失败截图

问题表现

同一份SwiftUI代码在不同端Swift Playgrounds的运行表现不一致:

  • iPad版Swift Playgrounds中AsyncImage组件可正常加载远程图片
  • Mac版Swift Playgrounds 4.1中AsyncImage始终加载失败,仅展示占位视图
  • 加载项目内本地资源图片的功能不受影响,全端运行正常

可稳定复现问题的代码如下:

import SwiftUI

struct ContentView: View {
    
    var body: some View {
        Section {
            VStack {
                AsyncImage(url: URL(string: "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Image_created_with_a_mobile_phone.png/1200px-Image_created_with_a_mobile_phone.png")) { image in
                    image
                        .resizable()
                        .scaledToFit()
                } placeholder: {
                    Color.red.opacity(1)
                }
                .frame(width: 200, height: 200)
                .cornerRadius(6)
            }
        }
    }
}
触发原因

核心原因是Mac端Swift Playgrounds 4.1的默认沙盒权限配置和iPad端存在差异:
Mac端新建的Playground App项目默认关闭了沙盒的出站客户端网络连接权限,AsyncImage底层依赖URLSession发起的网络请求会被系统直接拦截,根本无法发出,自然无法拉取到远程图片资源。本地图片不需要走网络请求,因此不受该权限限制。
另外代码中Section组件未被List/Form等容器包裹会触发UI层级警告,但该问题不会阻断图片加载,不是故障诱因。

修复方法
  • 优先调整权限配置:打开Playground项目的设置面板,找到App Sandbox配置组,勾选「Outgoing Connections (Client)」(出站客户端连接)选项,重新运行项目即可正常加载远程图片,不需要修改任何业务代码。
  • 若调整权限后仍存在加载失败的情况,可以给AsyncImage传入自定义的URLSession实例,显式设置缓存策略和超时时间,规避4.1版本中AsyncImage默认会话的已知缓存bug:
// 自定义网络会话配置
let customSession: URLSession = {
    let config = URLSessionConfiguration.default
    config.requestCachePolicy = .returnCacheDataElseLoad
    config.timeoutIntervalForRequest = 15
    return URLSession(configuration: config)
}()

// 调用时传入自定义会话
AsyncImage(url: imageURL, session: customSession) { phase in
    // 对应加载状态的UI逻辑
}

内容的提问来源于stack exchange,提问作者Liam Rogers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:09:29