用途
本技能面向 Swift 6.2 / iOS 26+ 的 iOS 应用开发,帮助开发者在应用中集成 Apple Music 播放、Apple Music 目录搜索以及正在播放(Now Playing)元数据展示。它结合 MusicKit 与 MediaPlayer 两个框架,覆盖从项目配置、授权、搜索、订阅检查到播放控制与锁屏控制的完整流程。
主要能力
- 项目配置:在 Xcode 中启用 MusicKit 能力(添加 com.apple.developer.musickit 权限),在 Info.plist 中添加 NSAppleMusicUsageDescription,并在需要后台播放时向 UIBackgroundModes 添加音频后台模式。
- 授权:通过 MusicAuthorization.request() 请求访问用户音乐数据或播放 Apple Music 内容的权限,授权为每次安装一次性的提示;也可用 MusicAuthorization.currentStatus 在不弹窗的情况下检查当前状态。
- 目录搜索:使用 MusicCatalogSearchRequest 搜索 Apple Music 目录,可设置 limit,返回 MusicItemCollection<Song>;完整目录访问需要用户拥有 Apple Music 订阅。
- 订阅检查:通过 MusicSubscription.current 检查 canPlayCatalogContent,并可通过 MusicSubscription.subscriptionUpdates 观察订阅变化;未订阅时可用 musicSubscriptionOffer(isPresented:) 展示 Apple Music 订阅引导页。
- 播放:使用 ApplicationMusicPlayer.shared 播放 Apple Music 内容,它与 Music app 相互独立,不影响系统播放器状态;支持播放、暂停、跳到下一项,并可通过 player.state 观察播放状态。
- 队列管理:通过 ApplicationMusicPlayer.Queue 初始化队列、向队尾追加歌曲、将歌曲插入到当前项之后播放。
- 正在播放信息:通过 MPNowPlayingInfoCenter 更新锁屏、控制中心与 CarPlay 显示的曲目元数据(标题、艺术家、时长、已播放时间、播放速率、媒体类型、封面),ApplicationMusicPlayer 对 Apple Music 内容会自动处理这些信息,自定义音频源则需要手动更新。
- 远程控制:通过 MPRemoteCommandCenter 注册播放、暂停、下一首、上一首等命令的处理程序,响应锁屏控件、AirPods 点按手势与 CarPlay 按钮;支持通过 changePlaybackPositionCommand 实现拖动进度。
使用方式
导入 MusicKit(目录、授权、播放)与 MediaPlayer(MPRemoteCommandCenter、MPNowPlayingInfoCenter)。典型流程为:先在 Xcode 启用 MusicKit 能力并配置 Info.plist,再请求授权,随后检查订阅状态,之后进行目录搜索与播放,并在曲目变化时更新正在播放信息、注册远程控制命令。
适用场景
适用于需要在 iOS 应用中添加 Apple Music 搜索、Apple Music 订阅检查与引导、应用内 Apple Music 播放、队列管理,以及锁屏/控制中心/CarPlay 正在播放信息与远程控制的开发场景。
限制与注意事项
- 未配置 MusicKit 权限时授权会崩溃;缺少 NSAppleMusicUsageDescription 会导致 App Review 拒绝。
- 播放目录内容前必须检查订阅,否则会静默失败或抛出错误。
- 应使用 ApplicationMusicPlayer 而非 SystemMusicPlayer,后者会修改用户的 Music app 队列状态。
- 曲目变化时需更新正在播放信息,否则锁屏元数据会过期。
- 注册的远程命令应返回 .success,不支持的命令应通过 isEnabled = false 禁用,而不是返回 .commandFailed。
- 自定义音频需周期性更新已播放时间以保证进度条准确,并在正在播放信息中提供封面。
- 后台播放需启用音频后台模式。
参考资料
技能内提供扩展模式文档 references/musickit-patterns.md(SwiftUI 集成、流派浏览、播放列表管理),以及 MusicKit framework、MusicAuthorization、ApplicationMusicPlayer、MusicCatalogSearchRequest、MusicSubscription、MPRemoteCommandCenter、MPNowPlayingInfoCenter、NSAppleMusicUsageDescription 等参考链接。