◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/アプリ開発
◇ アプリ開発/2026-07-02中級

Rork Max のネイティブ Swift で MusicKit を使う — Apple Music の認可・検索・再生を最小構成で通す

Rork Max で生成した Swift アプリに MusicKit を組み込む手順。MusicAuthorization の認可、MusicCatalogSearchRequest での検索、ApplicationMusicPlayer と SystemMusicPlayer の使い分け、未加入ユーザーへのオファー表示までを実装コードで解説します。

rork-max41musickitapple-musicswift8media-api

✦ プレミアム記事

作業用 BGM を流すユーティリティの企画を練っていたとき、音楽ソースをどこから持ってくるかで手が止まりました。ストリーミングサービスの SDK は魅力的ですが、外部依存の審査リスクと保守の重さが個人開発には見合わない。そう考えて Apple 純正の MusicKit を選びました。

結論から言うと、MusicKit は「サーバーを1台も持たずに音楽カタログへアクセスできる」という点で、個人開発との相性が飛び抜けて良い API です。開発者トークンの発行・更新すらフレームワークが自動で処理してくれます。

Rork Max はネイティブ Swift を出力するため、React Native では回り道が必要だったこの領域に直接踏み込めます。認可から再生までの最小構成を、実装の順番どおりに追っていきます。

事前設定 — コードを書く前に2箇所

MusicKit はコードより先に、プロジェクト外の設定でつまずきやすい API です。必要なのは次の2つです。

  1. App ID の App Services で MusicKit を有効化する。Apple Developer サイトの Identifiers から対象 App ID を開き、App Services タブで MusicKit にチェックを入れます。ここが開発者トークン自動発行の根拠になります。
  2. Info.plist に NSAppleMusicUsageDescription を追加する。ユーザーのライブラリへアクセスする理由を書きます。これが無いと認可ダイアログの表示時にクラッシュします。

かつての MusicKit(Apple Music API 直叩き)では JWT の開発者トークンを自前のサーバーで署名・更新する必要がありました。現在の Swift 版 MusicKit はこの設定さえ済んでいれば、トークンの発行・キャッシュ・更新をすべて自動処理します。サーバーレスで完結する理由がここにあります。

認可 — MusicAuthorization.request()

最初のコードは認可リクエストです。async 一発で書けます。

import MusicKit
 
@MainActor
final class MusicAccessModel: ObservableObject {
    @Published var status: MusicAuthorization.Status = .notDetermined
 
    func requestAccess() async {
        // 初回はダイアログが出る。2回目以降は保存済みの判定が即座に返る
        status = await MusicAuthorization.request()
    }
}

status は .authorized .denied .restricted .notDetermined の4値です。.denied の後にアプリ内から再度ダイアログを出すことはできないため、設定アプリへの導線(UIApplication.openSettingsURLString)を用意しておきます。

認可を求めるタイミングは、起動直後のオンボーディングではなく音楽機能に最初に触れた瞬間に寄せることを推奨します。BGM 機能がアプリの主目的でない限り、起動直後の権限ダイアログは離脱要因にしかなりません。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦MusicKit の開発者トークンを自前管理せずに済ませる設定手順と、MusicAuthorization・カタログ検索・再生までの動くコード一式
✦ApplicationMusicPlayer と SystemMusicPlayer の挙動差の比較表 — どちらを選ぶかで変わるユーザー体験の具体像
✦Apple Music 未加入ユーザーとシミュレータ実行で詰まるポイントの回避策と、Rork Max への指示で欠落しやすい設定の補い方
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◇ アプリ開発2026-10-15
購読が切れても広告が戻りませんでした。「いま ad-free でなければ false」と書いていた、判定の向きを直した記録
購読が失効しても広告非表示のままになる不具合の原因は、判定の向きの逆転でした。二系統の購入確認を待って合成し、失敗した回は前回を保つ部品を、手元で動かして確かめた記録です。
◇ アプリ開発2026-10-15
adjustsFontSizeToFit で特定の1行だけ極小になるとき、疑うのは文字列ではなく枠の高さです
一覧の10行目だけ文字が4ptまで縮む。データも文字列も正常なのに起きる iOS の症状を、Yoga の丸めと縮小判定のソースで確かめ、Node で再現率を数えた記録です。
◇ アプリ開発2026-10-15
EAS Build だけ「No matching variant」で落ちるとき、まず疑う手元の android/build
手元の Gradle は通るのに、EAS Build の Android だけが「No matching variant of project」で止まる。GitHub の報告を読み比べ、Windows で生成した autolinking のキャッシュが Linux のビルド機へ渡っていた経路と、ビルドを投げる前に確かめる診断スクリプトをまとめました。