StarPlayrX が帰ってきた:ネイティブ Mac メニューバーアプリ、Xtra チャンネル、そしてバージョン 1.1.1
今日、Agent! は古いコードを Mac 向けのネイティブ SwiftUI メニューバーアプリに作り変え、追加しないままだった Xtra 音楽チャンネルのリバースエンジニアリングを仕上げ、署名・公証済みの 1.1.1 を半日もかからずにリリースしました。
ダウンロードはこちら:StarPlayrX for Mac 1.1.1(署名・公証済み、Apple シリコンと Intel に対応、macOS 13 Ventura 以降)。ウェブサイトは starplayrx.com、ソースは GitHub にあります。
今日、Agent! に Mac 用のメニューバー版を作ってもらったら、2 分で動くバージョンができました。
2 分、ただし下地あり
公平に言うと、Agent! はゼロから始めたわけではありません。SiriusXM と直接やり取りする私のライブラリ StarPlayrRadioKit を再利用しました。API レイヤーと小さなローカル HLS ストリーミングサーバーを含む Swift パッケージです。どうやらまだ動くようです。
というわけで、仕事は古いエンジンに新しいアプリをかぶせることでした。Dock アイコンなしの SwiftUI メニューバーアプリで、チャンネルリスト、再生中の情報があり、パスワードは macOS のキーチェーンに保存します。StarPlayrXMac の最初のコミットは今日の午後 12:45 でした。
やり残していた 100 の Xtra チャンネル
Xtra チャンネルは SiriusXM の追加音楽チャンネルで、番号は 1000 以上です。リバースエンジニアリングを始めてはいたものの、アプリに追加するのは面倒で放置していました。Agent! は私が手をつけていたのを見つけて、さらに数分で仕上げてしまいました。
Xtra チャンネルは通常のチャンネルとは挙動が違うので、やり取りの大半はここで起きました。再生されていないチャンネルには、次に何が流れるかが表示されませんでした。アルバムアートは新しいアルバムの前に、ひとつ前のアルバムが一瞬表示されました。チャンネルに合わせると、リストに表示されている曲ではなく、新しく選ばれた曲が流れました。どれも短いチェックポイントでした。私が見たことを説明し、Agent! が直し、私がもう一度試す、の繰り返しです。
30 分の UI テスト
そのあと 30 分ほどアプリをあちこちクリックして修正を確認しました。ほとんどはアプリ自身の API の中の話です。スクロールバーがコンテンツに近すぎた、リストを遅延読み込みにするまでスクロールがカクついていた、そして "xtra" や "music" で検索したときに Xtra チャンネルが出てくる必要があった、といったところです。
いちばん時間がかかったのは、ただ音楽を聴いていたことと、新しいウェブサイトを作っていたことでした。
1.1.1 の内容
- メニューバーに常駐(📻)、Dock アイコンなし
- チャンネル、アーティスト、曲を検索
- 現在のチャンネルとリスト内のすべてのチャンネルで再生中の曲を表示
- Xtra チャンネル(1000 以上)、"xtra" や "music" で検索可能。チャンネルに合わせるとリストに表示されている曲が流れる
- 1.1.1 では Xtra チャンネルに戻ったときの不具合を修正し、そこでもリストに表示されている曲が流れるように
- キーボードのメディアキーとコントロールセンターから再生・一時停止
- 米国とカナダのチャンネルラインナップ
- VoiceOver を前提に設計
- ユニバーサルビルド、Developer ID で署名し Apple が公証済み
利用には引き続き有効な SiriusXM のサブスクリプションが必要です。
半日もかからずに
12:45 の最初のコミットから 15:41 の 1.1.1 のコミットまで、git ログ上は 3 時間弱です。リリース、公証、新しいウェブサイトを足しても、ネイティブの Mac 版を Mac に届けるまで半日かかっていません。Catalyst なし、新機能ひとつ、そしてリリースまで。
どこかの創業者の目に留まればいいのにと思いますが、エージェントを作れる人は地球上の誰もが今まさに同じことをしているんでしょうね。それでも、私のツールはかなり成熟していると感じていますし、その CLI 版もいずれ追いつくはずです。
リバースエンジニアリングしてくれない唯一のもの
おもしろいことに、今の私はほとんど何でもリバースエンジニアリングできるのに、Justin Bieber の「Baby」の歌詞だけは、生きるか死ぬかの状況でも教えてくれません。それは自分でチャンネルを合わせて聴いてください。