MusadoraKit (发音为 'myu' za' 'do' 'ra') 是 MusicKit 的终极伴侣。通过一句话 API 即可轻松实现,让 MusicKit 和 Apple Music API 的使用变得更加简单。
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》 来支持我的开源项目。每天卖出 2 本书,我就能开心地继续开发 MusadoraKit。
我正在开源一个我去年开发的应用,名为 Musadora。(MusadoraKit 最初是为 Musadora 应用开发的 RRMusicKit!)
我正在慢慢地将 MusadoraKit 中使用的所有方法添加到其中,这样你就可以参考 Swift 包的使用有多么容易。
按照以下步骤为你的应用设置 MusicKit
证书、标识符和描述文件
。标识符
。服务
下,确保 MusicKit
已启用。如果未启用,请启用它。为了告知用户你的应用为何需要访问他们的媒体库,请将 NSAppleMusicUsageDescription
添加到你的 Info.plist
文件。
Info.plist
。+
按钮以添加新键。NSAppleMusicUsageDescription
作为键。我们的应用使用音乐访问权限来播放音乐并创造愉悦的体验。
。在你的应用可以与 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
在同一次请求中通过标识符获取多个目录音乐项目。例如
let request = MusicCatalogResourcesRequest(types: [.songs: ["1456313177"], .albums: ["1531125029", "1575203352"]])
let response = try await request.response()
print(response.songs)
print(response.albums)
在同一次请求中通过标识符获取多个资料库音乐项目。例如
let request = MusicLibraryResourcesRequest(types: [.songs: ["i.pmzqzM0S2rl5N4L"], .playlists: ["p.PkxVBgps2zOdV3r"]])
let response = try await request.response()
print(response.songs)
print(response.playlists)
希望你喜欢使用 MusadoraKit!
致未来的自己,以及每一位可能被我的代码触及生活的开发者
我有很多东西要写,并且会一直写到最后,希望能留下一些美好的东西。