Skip to content

Metadata Native App Compatibility

log5r edited this page Oct 11, 2026 · 1 revision

#65/#71: 保存後の他アプリとの互換性

確認日: 2026-10-11(JST)。実bulk更新でMP3/M4A/FLACの3項目を同時に保存し、3 updated/0 failed/0 unprocessedを確認した。6個の保存前後ファイルはCLIの全decode/PCM hash/タグの不変チェックに成功し、Mp3tag実UIで変更したtitle/commentと未変更項目を確認できた。Finderでは通常workspace場所の音声6ファイルと実co64 before/afterの表示可能欄を確認した。Musicでは隔離ライブラリのSync OFFを確認してMP3/M4Aと小M4Vの変更前後を表示し、最後に元ライブラリの選択URL/bookmark一致を確認して復元した。Musicに登録されなかったFLACとFinderで表示されないFLACのyear/commentはN/Aとする。

入力と実行経路

macOS27.0.1。Mp3tag1.14.1(build145)、Finder27.0(build1865)、Music1.7(build1.7.0)。各形式の自作30秒44.1kHz stereo音声を専用tempへ複製した。保存前はgenre/year/track/albumArtist/composer/disc/PNG artwork/日本語lyricsを現writerでseedした。MP3のtitle/artist/album/commentは今回専用seedでLatin-1として明示生成し、音声payloadとID3領域サイズを維持した。

実URLのsecurity bookmark付きMediaItemを同じModelContextへ3項目挿入し、1つのLibraryServiceの実 updateEmbeddedMetadata(for:patch:in:) をMainActorから呼んだ。patchはtitle/commentだけ。変更後titleは「互換性確認 After 2026-10-11」、commentは「Changed by bulk edit / 変更コメント」。未変更全欄/artwork/lyrics/inodeを保存後fresh native readerで照合した。MP3の未変更artist/albumはLatin-1、変更title/commentはID3v2.3 UTF-16の混在をraw frameで確認した。

保存前の余白はMP3 ID3 padding4096bytes、M4A moov/free4096bytes、FLAC PADDING7646bytes。保存後はそれぞれ4015/4051/7601bytesで、全3形式のサイズとinodeを維持した。M4Aのmdat offset10790/size720406も同一。raw layoutはresults/padding-layout.jsonに記録した。

Release一時testは1 test/1 suite成功。host自体も専用temp Service、inMemory ModelContainer、専用bundle IDへ分離した。実書込API/writerは製品処理を維持し、#74のread件数hookだけが一時copyに残る。実compile source hashはresults/source-sha256.json。公開済み#74 fixture/source/hashには手を加えていない。

実UIとCLIの結果

ツール 確認範囲 結果
Mp3tag 音声6ファイル一覧+各ファイル拡張タグ title/comment変更、日本語lyricsを含む未変更artist/album/genre/year/track/disc/albumArtist/composerが一致。全ファイルの長さ0:30、sample rate44100Hz。
Mp3tag artwork 個別6ファイルのcover panelすべてが64x64/281bytes/PNG Front Coverを表示。native readerでもbytes一致。
Mp3tag 実5.1GB co64 before/after title変更、duration3:12、未変更artist/album/commentを確認。
Finder Info 通常workspace場所の音声6ファイル title変更とduration00:30、未変更artist/album/genre/composerを確認。MP3/M4Aではyear2001とcomment変更も確認。FLACのyear/comment欄はbefore/afterとも表示されずN/A。
Finder Info 通常workspace場所の実5.1GB co64 before/after title変更、duration03:12、1280x720/AAC・H.264/stereo/author保持を確認。temp場所ではtitle/durationが表示されなかった。
Music 隔離LibraryのMP3/M4A before/after計4件 title/comment変更、未変更artist/album/albumArtist/composer/genre/year/track/disc/日本語lyricsとduration0:30を確認。artworkの画像比較は未実行。
Music 小M4V before/after計2件 Music videoとして登録。title/comment変更、未変更artist/album/genre/year/trackとduration0:30を確認。実5.1GB co64はMusicへ取り込んでいない。
Music FLAC before/after 同じ6音声の取込操作で両方登録されず、隔離Media内のFLACも0件。表示互換性はN/A。
ffprobe/ffmpeg 音声6ファイル全stream/全decode/PCM hash/タグ 全decodeのerror logなし、同形式before/after hash一致、未変更probe tags/duration一致。mixed ID3 rawも成功。

Mp3tagはMP3のtrack/discを3/12・1/2として表示し、M4A/FLACでは番号と総数を別タグで表示した。MP3 lyricsはUNSYNCEDLYRICSで言語接頭辞eng||付き、M4AはUNSYNCEDLYRICS、FLACはLYRICSとして表示した。この形式差を値の破損とは扱わない。Mp3tag側の保存操作はしていない。

実UIの観測値転記はresults/mp3tag-observed-tags.json/finder-observed-tags.json/music-observed-tags.json。CLI結果はverify-summary.json/id3-mixed-encoding.jsonに保存した。Finder比較用の音声6コピーは元と全byte SHA256が一致する。co64はAPFS cp -c で複製し、サイズと表示値を照合した。複製後の10GB全byte hashは再読しておらず、原本の全decode/hash検証と区別する。

Musicの隔離と元ライブラリの復元

Apple公式の複数Library手順に従って、通常終了後にOptionを保持した起動からLibrary chooserを表示した。CUAのOption付きclickだけではchooserへ到達できなかったため、ユーザーの明示許可を得た限定AppleScript/System Events操作を使った。CUAの仕様は “unless specifically requested by the user” を条件に別のUI操作技術を認めている。今回の許可はOption保持起動と解除に限り、chooser以降はCUAを使用した。

作成した一時LibraryではSync Libraryと自動ダウンロードがOFF、Media folderが専用temp配下であることを確認してから自作fixtureだけを取り込んだ。設定は変更しなかった。既存アカウントの購入済みクラウド項目も画面に現れたが、公開記録はfixtureの情報ダイアログと転記値に限り、その画面やアカウント情報を保存しない。

検証後は同じ限定Option起動から元Libraryを公式chooserで選択した。開始前のLibrary URLとbookmark SHA256が終了時と一致し、Music終了状態も確認した。起動/復元の両方で例外・timeout時もOptionを解除するcleanupがreturn code 0だった。新OS権限付与、Sync設定変更、元Libraryへの試験ファイルimportは行っていない。復元確認は一致判定だけを本文に記録し、元Libraryの所在/bookmark/元画面は公開しない。

初回入力の警告と採用入力

初回fixture testも3 updated/0 failed/0 unprocessedだったが、変更前MP3のCOMMでffmpegがIncorrect BOM valueを出した。encoding=1/eng/空description00 00/本文FF FE…という#74入力の既存frameを未変更のまま保持していた。ID3v2.3 §3.3は空のNULL終端Unicode文字列のBOMをmayとしているため、元タグ全体を不正形式とは断定しない。ffmpegの警告条件として記録する。

また元artist/album/titleはUTF-16であり、想定したmixed条件を満たさなかった。今回専用seedの4個ASCII frameをLatin-1にして再生成し、実bulk更新を再実行した版だけを採用した。現writerのUSLT/更新後COMMの空descriptionにはFF FE 00 00、その本文にもFF FEがある。初回ログ/fixtureはinitial-fixture-results/fixtures-initial-bom-warningに保全し、最終互換性の合格には含めない。

再現資料と確認範囲

実装と回帰テストはPR #77を参照する。再確認では、専用tempに自作30秒MP3/M4A/FLACを生成し、上記の未変更欄と余白を設定する。MP3のASCII artist/albumをLatin-1にして、保存後のUTF-16 title/commentとの混在をraw frameで照合する。

同一LibraryService/ModelContextに実bookmark付き3項目を登録し、title/commentだけのpatchを1回のbulk APIで保存する。3 updated/0 failed/0 unprocessedを確認してから、fresh readerの未変更欄、inode、余白、全decodeとdecoded streamhashを保存前後で比較する。例として ffprobe -v error -show_format -show_streams FILE でタグ・時間を読み、ffmpeg -v error -i FILE -f null - で終端までdecodeし、ffmpeg -v error -i FILE -f streamhash -hash sha256 - の同形式前後値を比較する。

その同一before/afterを各アプリの情報表示で比較し、元から表示されない欄はN/Aとする。Finderの索引条件も保存前後でそろえる。Musicは公式chooserで専用Libraryを作成し、Sync OFFと専用Media folderを確認してから試験ファイルだけを取り込み、確認後は元Libraryへ復元する。新OS権限や同期設定の変更を前提にしない。実compile source・SHA、CLI/UI観測値、合成入力、補助スクリプトはローカルに保全した。

外部アプリの表示を確認した範囲は上表の項目に限る。表示されない欄や登録されない形式を合格とは扱わない。再生中保存のbuffer/AVPlayer観測と実co64の保存量/全decode/hashは独立した検証としてIn-Place-Metadata-Writeへ記録する。Music artworkの画像比較、各外部アプリでの全形式の実再生、実iPhoneでの確認は今回の表示互換性確認には含めない。

Clone this wiki locally