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

无需MusicKit访问用户音乐库的可行性及跨平台API咨询

嘿,这个问题我刚好有过研究,给你整理几个可行的方向:

可行方案梳理

1. 无需MusicKit的iOS实现方案

完全可以不用MusicKit来获取用户的歌曲/专辑列表,iOS原生的Media Player框架就能搞定,而且是正式版系统支持的,不用依赖测试版的MusicKit。核心是用MPMediaQuery这个类来查询本地媒体库:

举个简单的代码示例:

import MediaPlayer

// 先请求媒体库访问权限
MPMediaLibrary.requestAuthorization { authStatus in
    guard authStatus == .authorized else {
        print("用户未授权访问媒体库")
        return
    }
    
    // 查询所有歌曲
    let songsQuery = MPMediaQuery.songs()
    if let songItems = songsQuery.items {
        songItems.forEach { song in
            let title = song.title ?? "未知歌曲"
            let album = song.albumTitle ?? "未知专辑"
            print("\(title) - \(album)")
        }
    }
    
    // 查询所有专辑
    let albumsQuery = MPMediaQuery.albums()
    if let albumCollections = albumsQuery.collections {
        albumCollections.forEach { album in
            let albumTitle = album.value(forProperty: MPMediaItemPropertyAlbumTitle) as? String ?? "未知专辑"
            print(albumTitle)
        }
    }
}

需要注意的是,你得在项目的Info.plist里添加NSMediaLibraryUsageDescription键,填写一段说明文字(比如“需要访问您的媒体库以获取歌曲列表”),这样系统才会向用户弹出权限请求弹窗。

2. macOS API的复用性

你提到macOS能实现这个功能,其实**MPMediaQuery在iOS和macOS上是通用的**,所以你可以把macOS上基于这个类的代码逻辑直接复用过来。不过两者的权限配置有一点小区别:

  • macOS端需要在项目的Signing & Capabilities里开启“媒体库访问”权限,同时在Info.plist里添加对应的权限描述键;
  • iOS端只需要配置好Info.plist的权限描述即可,逻辑代码基本一致。

不过macOS上还有iTunesLibrary框架可以用,但这个框架iOS是没有的,所以如果你的macOS代码用的是这个,那没法直接搬到iOS上,还是得换成MPMediaQuery。

3. 补充说明

你之前见过的无需MusicKit的方法,大概率就是上面说的Media Player框架方案。MusicKit主要是针对Apple Music云端内容、播放控制等更复杂的场景,而你只需要读取本地歌曲/专辑列表的话,MPMediaQuery完全够用,而且稳定性更好,不需要依赖测试版API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:58:53