Я приступил к мини-проекту, чтобы попытаться научиться писать Swift. Я подумал, что было бы полезно написать приложение MacOS , которое отображало бы название воспроизводимой дорожки и информацию об исполнителе в строке меню. На данный момент я должен открыть рассматриваемое приложение, будь то Spotify, Apple Musi c или Tidal, что нарушает рабочий процесс.
Учитывая, что виджет уведомлений new-i sh «Сейчас исполняется» отображает это уже (независимо от источника звука), я подумал, что было бы довольно просто сделать что-то подобное для строки меню.
Я тщательно изучил и прочитал связанные еще очень устаревшие вопросы, которые предполагают, что единственная доступная сейчас информация / данные доступны из iTunes, однако, похоже, что развивался с тех пор, особенно после того, как iTunes должен быть убит, поэтому я переспрашиваю и надеюсь, что в 2020 году ситуация станет более глобальной.
Что касается кода, который я обнаружил nowPlayingInfo что говорит о том, что это может сделать то, что я хочу, но я потратил 4 часа, пытаясь заставить его работать безуспешно. Я также посмотрел на MPNowPlayingCenter , но, похоже, не дал результата.
Похоже, что есть большая помощь относительно настройки Сейчас играет информация, но очень мало относительно получения / get информации.
Пока мне удалось написать код для добавления текста в строку меню:
func applicationDidFinishLaunching(_ aNotification: Notification) {
let statusBar = NSStatusBar.system
statusBarItem = statusBar.statusItem(
withLength: NSStatusItem.variableLength)
statusBarItem.button?.title = "This should be a string of the track name and artist"
}
Я также собрал фрагменты потенциально полезного кода:
// var nowPlayingInfo: [String : Any](? {})
// let MPMediaItemPropertyTitle: String
// let MPMediaItemPropertyArtist: String
// static let MPMusicPlayerControllerNowPlayingItemDidChange: NSNotification.Name
// MPNowPlayingPlaybackState
// class var applicationMusicPlayer: MPMusicPlayerController { get }
// class MPNowPlayingInfoCenter : NSObject
// let nowPlaying = MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo
// let trackName = nowPlaying.valueForProperty(MPMediaItemPropertyTitle) as String
После полдня проб и ошибок, когда Xcode предупреждает меня об ошибках и много исследований, я обращаюсь к экспертам по переполнению стека за некоторыми рекомендациями.