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

Swift开发macOS应用AVPlayerView导出打包后运行崩溃怎么办?

问题诱因
  • 代码中调用Bundle.main.path(forResource:ofType:)时,ofType参数错误传入了带点前缀的.mp4,该参数要求传入不带点的文件后缀,错误写法会导致系统实际查找名为one..mp4的资源。Debug运行时依赖Xcode本地构建缓存的特殊路径可能偶然匹配成功,Archive后App的资源路径规则更严格,会直接匹配失败。
  • 视频文件未被正确加入App目标的资源复制队列。从你提供的添加操作截图来看,拖拽文件时未勾选对应App目标的成员资格,也没有手动将文件加入「Copy Bundle Resources」构建阶段。Xcode直接运行时可以读取项目本地路径下的文件,所以播放正常;Archive打包时只会将纳入「Copy Bundle Resources」的文件复制到App包的Contents/Resources目录下,未纳入的文件不会被打包进最终的App产物,运行时自然无法读取。
  • 若代码其他位置存在对avView.player的强制解包逻辑,当资源加载失败player为nil时,就会触发强制解包崩溃。

附视频添加操作截图:
视频文件添加操作截图

解决方案
  • 修正资源读取代码的参数错误,更推荐直接使用url(forResource:withExtension:)方法获取资源URL,同时添加空值兜底逻辑,避免后续调用崩溃,参考代码如下:
import Cocoa
import AVKit

class IntroVC: NSViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        avViewConfig()
    }
    @IBOutlet weak var avView: AVPlayerView!
    
    func avViewConfig(){
        // 修正后缀参数,去掉前缀的点,直接使用url读取更稳定
        guard let videoURL = Bundle.main.url(forResource: "one", withExtension: "mp4") else {
            debugPrint("视频资源未找到,请检查资源配置")
            return
        }
        let player = AVPlayer(url: videoURL)
        avView.player = player
        avView.player?.play()
    }
}
  • 配置资源的目标成员资格,确保文件被打包进App产物:
    1. 选中项目导航栏中的one.mp4文件,打开右侧「文件检查器」,在「Target Membership」板块勾选你的App主目标的复选框
    2. 选中项目根目录→选择App主目标→切换到「Build Phases」标签→展开「Copy Bundle Resources」,确认one.mp4在列表中,若不存在则点击列表下方的+号,选中one.mp4添加即可
  • 全局排查所有调用avView.player的代码,删除对该属性的强制解包操作,所有使用位置添加空值判断,避免极端场景下的崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:04