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来读取资源,步骤如下:
- 在xcassets中创建一个Data Set(注意不是Image Set),把MP4文件拖进这个Data Set里
- 用
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
相关产品推荐
相关产品推荐

