How to resolve (com.apple.ShazamKit error 202.) when using ShazamKit

Viewed 241

I've been trying to add Shazam matching to my app using the new ShazamKit. I've used Apple's sample code found here and adapted it slightly.

import ShazamKit
import AVFAudio
import Combine

@available(iOS 15.0, *)
class ShazamMatcher: NSObject, ObservableObject, SHSessionDelegate {

    // MARK: - Properties

    @Published var result: SHMatch?
    @Published var isRecording = false

    private var isInitialSetupDone = false
    private var session: SHSession?
    private let audioEngine = AVAudioEngine()

    // MARK: - Actions

    func match() throws {
        result = nil

        session = SHSession()
        session?.delegate = self

        try doInitialSetupIfNeeded()

        AVAudioSession.sharedInstance().requestRecordPermission { [weak self] success in
            guard success, let self = self else {
                return
            }
            try? self.audioEngine.start()
            self.isRecording = true
        }
    }

    func stopMatching() {
        audioEngine.stop()
        isRecording = false
    }

    // MARK: - Setup

    private func doInitialSetupIfNeeded() throws {
        guard !isInitialSetupDone else {
            return
        }

        let audioFormat = AVAudioFormat(
            standardFormatWithSampleRate: audioEngine.inputNode.outputFormat(forBus: 0).sampleRate,
            channels: 1
        )
        audioEngine.inputNode.installTap(onBus: 0, bufferSize: 2048, format: audioFormat) { [weak session] buffer, audioTime in
            session?.matchStreamingBuffer(buffer, at: audioTime)
        }

        try AVAudioSession.sharedInstance().setCategory(.record)
        isInitialSetupDone = true
    }

    // MARK: - SHSessionDelegate

    func session(_ session: SHSession, didFind match: SHMatch) {
        // Handle match here
    }

    func session(_ session: SHSession, didNotFindMatchFor signature: SHSignature, error: Error?) {
        // Handle error here
    }

}

However, when calling match(), the delegate eventually reports an error The operation couldn’t be completed. (com.apple.ShazamKit error 202.)

I've added a new key using my bundle identifier for the ShazamKit services and downloaded the .p8 file. Do I need this file and if so, how?

Has anybody been able to resolve this error?

1 Answers
Related