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

iOS模拟器「Now Playing」锁屏界面失效问题求助(Xcode9.3+部署目标10.0)

解决iOS 10+ 下 MPNowPlayingInfoCenter 锁屏不显示的问题

嘿,我之前也碰到过iOS 10升级后MPNowPlayingInfoCenter突然失效的情况,结合你的场景(升级Xcode、调整部署目标到10.0),大概率是iOS 10开始对媒体控制的权限和配置要求变严格了,给你几个靠谱的排查和修复方向:

1. 必须先激活音频会话

iOS 10之后,不管你是播放音频还是带音频的视频,都得先激活AVAudioSession,不然MPNowPlayingInfoCenter根本不会工作。把这段代码放在你设置nowPlayingInfo之前:

import AVFoundation

do {
    // 设置为playback模式,确保后台也能播放
    try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
    try AVAudioSession.sharedInstance().activate(options: [])
} catch let error {
    print("激活音频会话失败:\(error.localizedDescription)")
}

另外,如果你的应用需要后台播放,一定要在Info.plist里开启音频后台模式——也就是给UIBackgroundModes数组添加audio项。

2. 注册至少一个远程媒体命令

iOS 10起,系统要求你至少注册一个远程控制命令(比如播放/暂停),才会在锁屏上显示媒体信息。不用写复杂逻辑,哪怕只是返回成功状态就行:

import MediaPlayer

let commandCenter = MPRemoteCommandCenter.shared()
// 注册播放命令
commandCenter.playCommand.addTarget { [weak self] _ in
    guard let self = self else { return .commandFailed }
    if !self.player.isPlaying {
        self.player.play()
    }
    return .success
}
// 注册暂停命令
commandCenter.pauseCommand.addTarget { [weak self] _ in
    guard let self = self else { return .commandFailed }
    if self.player.isPlaying {
        self.player.pause()
    }
    return .success
}

3. 检查nowPlayingInfo的有效性

确保你设置的nowPlayingInfo里有必填的字段,比如MPMediaItemPropertyTitle、MPMediaItemPropertyArtist,空值或者缺少关键字段会导致系统不显示。另外,检查下self.playerItem.title.br2Sp.stripTags是不是真的返回了非空的字符串,万一处理后是空的也会出问题。

4. 统一部署目标配置

你提到因为Pods更新调整了部署目标,记得在Podfile里也明确指定platform :ios, '10.0',保证所有依赖库的部署目标和你的项目一致,避免兼容性问题。

最后验证小技巧

  • 优先用真机测试!模拟器的锁屏媒体信息有时候会有延迟或者莫名的bug;
  • 确保你的播放器处于正在播放的状态,锁屏信息只有在媒体播放时才会显示;
  • 重启设备或模拟器,有时候缓存会导致配置不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:54