top of page
Di Nerd

Mastering MusicKit with SwiftUI: A Swift Symphony in the Making 🎵

Updated: Mar 25, 2023

Hit the right notes with Apple’s MusicKit framework using SwiftUI


Welcome, dear programmers and music enthusiasts, to a fantastic journey where music meets the magic of Swift! Today, we’re diving into the wonderful world of Apple’s MusicKit framework while using SwiftUI as our conductor’s baton.


Don’t worry, this article is not just about code; it’s also sprinkled with light, funny, and friendly jokes to keep you humming along as we compose a masterpiece. 🎼


Prelude: A Brief Introduction to MusicKit 🎻


MusicKit is a framework by Apple that allows developers to integrate Apple Music and their user’s local music library into their apps. With MusicKit, your apps can seamlessly interact with Apple Music’s vast catalog, create and manage playlists, and even control user’s music playback. It’s like having a backstage pass to the world’s greatest concert, all within your app!

Now that we know what MusicKit is, let’s warm up our fingers and get ready to create a beautiful Swift symphony!


Act 1: Setting the Stage 🎭


Before we start, make sure you have the following ingredients:

  1. A Mac running macOS Monterey or later

  2. Xcode 13 or later

  3. An Apple Developer account (to access MusicKit)

  4. A sense of humor and love for music! 🎶

Step 1: Creating a New SwiftUI Project


Launch Xcode and create a new project using the “App” template under “Multiplatform” or “iOS.” Name the project “SwiftMusicKit” and make sure “Interface” is set to “SwiftUI” and “Life Cycle” to “SwiftUI App.”


Step 2: Importing MusicKit and Configuring Capabilities


In your project’s “Signing & Capabilities” tab, click on “+ Capability” and add “MusicKit” to your app. You’ll need to sign in with your Apple Developer account to access MusicKit features.

You know what they say, “with great power comes great responsibility” — and now, you have the power of MusicKit!


Act 2: A Beautiful Duet — MusicKit & SwiftUI 🎹


To begin our duet, we’ll create a simple app that allows users to search for songs, display the results, and play the selected song.


Step 1: The SwiftUI Interface

First, let’s create a simple SwiftUI interface with a search bar and a list to display the search results.

import SwiftUI
import MusicKit

struct ContentView: View {
    @State private var searchText = ""
    @State private var searchResults: [Song] = []

    var body: some View {
        NavigationView {
            VStack {
                SearchBar(text: $searchText, onSearchButtonChanged: searchMusic)
                List(searchResults, id: \.id) { song in
                    SongRow(song: song)
                }
            }
            .navigationTitle("SwiftMusicKit")
        }
    }
}

We’ll also need to create a SearchBar and a SongRow view. You can find the code for these components


Step 2: Searching for Music 🎤


Now, let’s integrate MusicKit to search for songs. To do this, we’ll create a function called searchMusic() that takes the search text and fetches the results.

private func searchMusic() {
    Task {
        do {
            searchResults = try await MusicKit.search(for: searchText)
        } catch {
            print("Error searching for music: \(error.localizedDescription)")
        }
    }
}

This function uses the new Swift concurrency feature, which is music to our ears! It makes our code easier to read and understand, just like a beautifully written sheet of music.


Step 3: Playing the Selected Song 🎧

Now that we can search and display songs let’s add the ability to play the selected song. First, create a MusicPlayer class to manage playback.

import MusicKit

class MusicPlayer: ObservableObject {
    private let musicPlayer = SystemMusicPlayer.shared

    func play(song: Song) {
        do {
            try musicPlayer.setQueue(with: [song.id])
            musicPlayer.play()
        } catch {
            print("Error playing the song: \(error.localizedDescription)")
        }
    }
}

Then, in your SongRow view, add a playButtonTapped function that calls the play(song:) function from the MusicPlayer class.

@EnvironmentObject var musicPlayer: MusicPlayer

private func playButtonTapped() {
    musicPlayer.play(song: song)
}

Finally, in the ContentView, make sure to inject the MusicPlayer as an environment object.

@StateObject private var musicPlayer = MusicPlayer()

var body: some View {
    // ...
}
.environmentObject(musicPlayer)

And just like that, we’ve composed a beautiful symphony of MusicKit and SwiftUI! 🎉




Encore: Conclusion 🥁


Congratulations! You’ve successfully integrated MusicKit into a SwiftUI app, allowing users to search, display, and play songs from Apple Music. It’s like we’ve created a magical Swift symphony that enchants everyone who listens. 🎼


We hope you enjoyed this article as much as we enjoyed composing it. Remember, the world of SwiftUI and MusicKit is vast, so don’t stop here! Keep exploring, and maybe one day, you’ll create an app that hits the high note in the App Store charts. 🎶


“Coding in SwiftUI is like playing a beautiful instrument, and MusicKit is the sheet music that guides our melody.” — Some Swift Maestro, probably.


Give Support or Tip👋🏿


Give a Tip with CashApp: https://cash.app/$DiAlcatic

90 views0 comments

Comments


bottom of page