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

Swift代码获取assets中MP4文件路径失败,请求技术排查

问题根源与解决方案

这个坑我刚学Swift的时候也踩过!你之所以拿不到路径,核心原因是:assets.xcassets里的资源不是以独立文件的形式存在于App Bundle中的!

Xcode会把xcassets里的所有资源打包成一个编译后的.car格式文件(Asset Catalog),而不是保留单个MP4文件的独立路径。所以Bundle.main.path(forResource:ofType:)这种查找单个文件路径的方法,自然找不到藏在asset catalog里的视频。

给你两种解决思路,按需选择:

方案一:把视频移出xcassets(推荐)

这是最省心的做法,视频这类大资源本来就不适合放在xcassets里:

  • 把MP4文件从xcassets中拖出来,直接拖到Xcode的项目导航栏里(比如项目根目录)
  • 拖入时一定要勾选两个选项:
    • Copy items if needed
    • 你的App Target(确保资源会被打包进App Bundle)
  • 之后你的原代码就能正常输出"all good"了:
if let path = Bundle.main.path(forResource: "Pow", ofType: "mp4") {
    print("all good")
} else {
    print("no good")
}

方案二:如果一定要放在xcassets里

那得用NSDataAsset来读取资源,步骤如下:

  1. 在xcassets中创建一个Data Set(注意不是Image Set),把MP4文件拖进这个Data Set里
  2. 用NSDataAsset获取视频的二进制数据,如果需要URL的话可以写入临时文件:
if let dataAsset = NSDataAsset(name: "Pow") {
    print("all good, got video data")
    // 如果需要可播放的URL,写入临时文件
    let tempURL = FileManager.default.temporaryDirectory.appendingPathComponent("Pow.mp4")
    do {
        try dataAsset.data.write(to: tempURL)
        // 现在tempURL就是可以给AVPlayer使用的URL了
    } catch {
        print("Failed to create temp URL: \(error.localizedDescription)")
    }
} else {
    print("no good")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:33:26