Swift MusicKitプログラミング その3

MusicKitプログラミング その3

認証

https://developer.apple.com/documentation/musickit
このURLのページのImportant以降を先ずやらなければいけません。

  • Info.plistファイルにNSAppleMusicUsageDescriptionキーを追加、ユーザーのメディアをどのように使用するかの説明。
  • MusicAuthorizationを使用して、アプリがMusicKitを使用するための許可を要求。

Xcode上に、Info.plistファイルがない!!という場合。

  • プロジェクトファイルを選択。
  • TARGETSのアプリを選択。
  • InfoのCustom iOS Target PropertiesでNSAppleMusicUsageDescriptionを追加して下さい。
    NSAppleMusicUsageDescriptionは「Privacy – Media Library Usage Description」の事です。

全体像と認証状態によるアクション

認証状態
authorized:認証済み、MusicKitでやりたい事をやる。
denied:拒否中、設定画面に誘いONにして貰う。
notDetermined:未決定、認証依頼。
restricted:何もするな!by ドキュメントより。

Example Code

import SwiftUI
import MusicKit

@main
struct ExampleStudyMusicKitApp: App {
    @UIApplicationDelegateAdaptor private var appDelegate: AppDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(Music())
        }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate {
    /// Opens a URL using the appropriate system service.
    @Environment(\.openURL) private var openURL
    
    var status = MusicAuthorization.Status.notDetermined

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        self.status = MusicAuthorization.currentStatus
        print("MusicAuthorization.Status:\(status)")
        switch status {
        case .notDetermined:
            Task {
                let status = await MusicAuthorization.request()
                self.status = status
            }
        case .denied:
            if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
                openURL(settingsURL)
            }
        case .restricted:
            print("No request!!")
        case .authorized:
            print("Authorized!!")
        @unknown default:
            print("Future status!!")
        }
        print("MusicAuthorization.Status:\(self.status)")

        return true
    }
}

Swift

Posted by shi-n