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

SwiftUI按钮控制音频播放/暂停报错:音频文件未找到

解决音频文件找不到的问题

先排查最容易踩的几个坑:

  • 文件名必须完全匹配:检查你的音频文件名是不是严格叫thesound.mp3,iOS的Bundle路径区分大小写,比如TheSound.mp3和thesound.mp3会被当成不同文件。
  • 别把音频放进Assets.xcassets:Xcode的Assets.xcassets是用来管理图片、颜色、矢量图的,音频文件要作为普通文件添加到项目中,不能放进xcassets目录里——否则Bundle根本找不到它。
  • 确认文件已加入Target:选中音频文件,打开右侧的File Inspector,确保Target Membership里你的App target是勾选状态。没勾选的话,编译时文件不会被打包进App的Bundle,自然找不到。
  • 区分Group和Folder Reference:如果你的音频放在名为Assets的文件夹里:
    • 如果是黄色的Group(逻辑分组):Bundle里不会生成Assets目录,文件直接在根目录,不需要加inDirectory参数。
    • 如果是蓝色的Folder Reference(实际目录):才需要用inDirectory: "Assets"或者subdirectory: "Assets"来指定路径。

修正后的代码示例

推荐直接用Bundle.main.url()方法获取URL(比path更可靠),分两种情况:

情况1:音频在项目根目录

init() {
    if let soundURL = Bundle.main.url(forResource: "thesound", withExtension: "mp3") {
        do {
            self.audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
            // 可选:预加载音频,提升播放响应速度
            audioPlayer?.prepareToPlay()
        } catch {
            print("AVAudioPlayer初始化失败: \(error.localizedDescription)")
        }
    } else {
        print("音频文件找不到")
    }
}

情况2:音频在蓝色Folder Reference的Assets目录下

init() {
    if let soundURL = Bundle.main.url(forResource: "thesound", withExtension: "mp3", subdirectory: "Assets") {
        do {
            self.audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
            audioPlayer?.prepareToPlay()
        } catch {
            print("AVAudioPlayer初始化失败: \(error.localizedDescription)")
        }
    } else {
        print("音频文件找不到")
    }
}

额外检查步骤

如果还是找不到,可以手动验证Bundle里是否包含音频文件:

  1. 运行App后,在Xcode的Window > Devices and Simulators里找到你的App,点击Download Container。
  2. 把下载的.xcappcontainer文件右键显示包内容,查看里面的文件结构,确认音频文件是否在预期的路径下。

内容的提问来源于stack exchange,提问作者Filip Pokłosiewicz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:27:15