MusadoraKit

MusadoraKit (发音为 'myu' za' 'do' 'ra') 是 MusicKit 的终极伴侣。通过一句话 API 即可轻松实现,让 MusicKit 和 Apple Music API 的使用变得更加简单。

MusadoraKit Logo

MusadoraKit 是一个 Swift 框架,它使用了最新的 MusicKit 和 Apple Music API,可以轻松地将 Apple Music 集成到你的应用中。它使用了 Swift 5.5 中引入的新的 async/await 模式。目前,它适用于 iOS 15.0+、macOS 12.0+、watchOS 8.0+ 和 tvOS 15.0+。每个月都会有新的方法推出,以支持 iOS 16、macOS 13、watchOS 9 和 tvOS 16 的功能。该框架现在还支持 iOS 17、macOS 14、watchOS 10、tvOS 17 和 visionOS 1.0。

它与我的关于 《探索 MusicKit 和 Apple Music API》 的书非常相配,因为书中提到了所有的文档和参考资料。此外,代码本身也有很好的文档。

另外,加入 Discord 社区,讨论关于 MusadoraKit、“探索 MusicKit”这本书、MusicKit 或你最喜欢的音乐的任何内容!

《探索 MusicKit 和 Apple Music API》书籍

你可以通过购买我的书 《探索 MusicKit 和 Apple Music API》 来支持我的开源项目。每天卖出 2 本书,我就能开心地继续开发 MusadoraKit。

赞助商

PlaylistAI Logo

PlaylistAI by Brett Bauman

使用 DocC 的文档

Musadora 示例应用

我正在开源一个我去年开发的应用,名为 Musadora。(MusadoraKit 最初是为 Musadora 应用开发的 RRMusicKit!)

我正在慢慢地将 MusadoraKit 中使用的所有方法添加到其中,这样你就可以参考 Swift 包的使用有多么容易。

使用 MusadoraKit 的应用

开始使用 MusicKit

按照以下步骤为你的应用设置 MusicKit

步骤 1:为你的 Bundle Identifier 启用 MusicKit

  1. 访问 Apple Developer Portal
  2. 导航到 证书、标识符和描述文件
  3. 从左侧面板中选择 标识符
  4. 从列表中找到你的应用的 Bundle Identifier 并选择它。
  5. 服务 下,确保 MusicKit 已启用。如果未启用,请启用它。

步骤 2:将 NSAppleMusicUsageDescription 添加到 Info.plist

为了告知用户你的应用为何需要访问他们的媒体库,请将 NSAppleMusicUsageDescription 添加到你的 Info.plist 文件。

  1. 在 Xcode 中打开你的项目。
  2. 从项目导航器中选择 Info.plist
  3. 点击 + 按钮以添加新键。
  4. 添加 NSAppleMusicUsageDescription 作为键。
  5. 将其值设置为你的应用需要访问 Apple Music 的原因,例如:我们的应用使用音乐访问权限来播放音乐并创造愉悦的体验。

步骤 3:请求 Apple Music 的授权

在你的应用可以与 Apple Music 交互之前,它需要请求用户的授权。这可以使用 MusicAuthorization.request() 完成。

这是一个 Swift 代码示例

import MusicKit

class MusicAuthorizationManager: ObservableObject {
    @Published var isAuthorizedForMusicKit = false
    @Published var musicKitError: MusicKitError?

    func requestMusicAuthorization() async {
        let status = await MusicAuthorization.request()

        switch status {
        case .authorized:
            isAuthorizedForMusicKit = true
        case .restricted:
            musicKitError = .restricted
        case .notDetermined:
            musicKitError = .notDetermined
        case .denied:
            musicKitError = .denied
        @unknown default:
            musicKitError = .notDetermined
        }
    }
}

这个 MusicAuthorizationManager 类检查 MusicKit 的授权状态。如果用户授予授权,则 isAuthorizedForMusicKit 设置为 true。如果访问被拒绝或受限,或者如果状态未确定,则会设置相应的 MusicKitError

记住在你的应用流程的适当时间调用 requestMusicAuthorization() 以请求用户的授权。

目录

为了轻松访问 Apple Music 目录,你可以使用 MusadoraKit 中预定义的方法。这些方法在不同的音乐项目之间是相似的。

使用标识符获取目录歌曲的示例

let song = try await MCatalog.song(id: "1613834314", with: [.albums])

搜索目录

搜索目录的示例

let searchResponse = try await MCatalog.search(for: "the weeknd", types: [.songs, .stations, .albums, .playlists, .artists], limit: 10)

print(searchResponse.songs)
print(searchResponse.artists)

资料库

虽然 MusicKit 本身不提供此功能,但你可以使用 MusadoraKit 获取资料库资源,它在底层使用了 Apple Music API。这些方法在不同的音乐项目之间是相似的。

按字母顺序获取所有资料库歌曲的示例

let songs = try await MLibrary.songs()

搜索用户资料库的示例

let searchResponse = try await MLibrary.search(for: "hello", types: [Song.self])

print(searchResponse.songs)

推荐

你可以利用 Apple 的音乐推荐系统并在你的应用中使用它。例如,获取默认推荐

let recommendations = try await MRecommendation.default()

guard let recommendation = recommendations.first else { return }

print(recommendation.albums)
print(recommendation.playlists)
print(recommendation.stations)

历史记录

你还可以从用户的资料库中获取历史数据。例如,获取最近播放的资源

let recentlyPlayedItems = try await MLibrary.recentlyPlayed()

let recentlyPlayedAlbums = try await MLibrary.recentlyPlayedAlbums()
}

引用不同地理区域的内容

在以下示例中,目标商店区域是“jp”,代表日本

let album = MCatalog.album(id: "1223618217")
let equivalentAlbum = try await album.equivalent(for: "jp")

let albums = MCatalog.albums(ids: ["1223618217", "1603171516"])
let equivalentAlbums = try await albums.equivalents(for: "jp")

显式到等效的清洁内容

let song = MCatalog.song(id: "1603171970")
let cleanSong = try await song.clean

let songs = MCatalog.songs(ids: ["1603171970", "1531327246"])
let cleanSongs = try await songs.clean

MusicCatalogResourcesRequest

在同一次请求中通过标识符获取多个目录音乐项目。例如

let request = MusicCatalogResourcesRequest(types: [.songs: ["1456313177"], .albums: ["1531125029", "1575203352"]])
let response = try await request.response()

print(response.songs)
print(response.albums)

MusicLibraryResourcesRequest

在同一次请求中通过标识符获取多个资料库音乐项目。例如

let request = MusicLibraryResourcesRequest(types: [.songs: ["i.pmzqzM0S2rl5N4L"], .playlists: ["p.PkxVBgps2zOdV3r"]])
let response = try await request.response()

print(response.songs)
print(response.playlists)

希望你喜欢使用 MusadoraKit!

致未来的自己,以及每一位可能被我的代码触及生活的开发者
我有很多东西要写,并且会一直写到最后,希望能留下一些美好的东西。