给 28 首老歌建 Apple Music 歌单:从 AppleScript 卡死到 web API 绕过

手头有一份《音乐天堂》老合辑《穿过骨头抚摸你》的 28 首歌单,想原样搬进 Apple Music。听起来是个小事:建个歌单、逐首加歌、搞定。结果这一路踩的坑,值得单独写一篇。 第一回合:AppleScript 全线超时 macOS 上操作 Music.app 最正统的方式是 AppleScript: tell application "Music" to make new playlist with properties {name:"穿过骨头抚摸你"} 结果等来的是: execution error: Music got an error: AppleEvent timed out. (-1712) 不只是建歌单——get count of playlists、get name of every window,所有需要读写库的操作全部超时,而 GUI 完全正常:主页加载完整、账号已登录、还能正常播放。这是典型的"引擎活着、库通道死了"。 排查:真凶是 AMPLibraryAgent 用 lsof 顺着打开的文件摸,发现 AMPLibraryAgent(Apple Music 云库引擎)正锁着 Library.musicdb,进程状态 sleeping、0% CPU,已经挂机 30+ 小时。它持有写锁不释放,Music.app 的任何库写入都在等它——等不到,就超时。 试过的手段: # 1. 重启 Music.app killall Music && open -a Music # 2. 杀 AMPLibraryAgent(launchd 会自动拉起新的) kill 89124 # 3. 连辅助进程一起清 + 清缓存 killall -9 Music AMPLibraryAgent MediaLibraryService AMPArtworkAgent rm -rf ~/Library/Caches/com.apple.AMP* # 4. sudo 清系统级守护域 sudo launchctl kill -9 gui/$(id -u)/com.apple.AMPLibraryAgent 全都不解。新拉起的 AMPLibraryAgent 继续锁库,AppleScript 继续超时。Gemini 的建议也只是确认了这是 macOS 14/15 上 AMPLibraryAgent 与本地 SQLite 死锁的已知问题,常规 kill 无效是因为 IPC 通道没释放。 ...

2026-10-01 · 2 min · 340 words · camac