表題のことが発生したので、その対応をしたメモをこの記事として残しておきます。
同じ症状であっても、別の原因であることも有り得ますので、検索等でこの記事に辿り着いた皆さんは、そのことを念頭に置いた上で読んで頂ければと思います。
MacアプリのUIデザインをする際の注意点も学べます💁♀️
↓の多重録音の動画を収録している時に遭遇した症状でした。
youtu.be
発症の直前の操作および症状
※後述しますが、ここの節で書いてある操作は、正しい再現手順ではありません。
Macにカメラ(というかHDMIキャプチャ)や audio interface 等のUSB機器を接続した状態で、QuickTime Player の「新規ムービー収録」機能を用いて録画をしていました。
最初は、映像はHDMIキャプチャから、音声は audio interface から取っており、途中で必要があって音声をHDMIキャプチャのものに変更しようとしました。すると、レインボーカーソルが回り始めて、しばらくすると「操作を完了できませんでした」というダイアログが表示されました。このダイアログは「OK」をクリックするとwindow丸ごと閉じられてしまいました。
改めて「新規ムービー収録」をやり直そうとすると、今度はwindowを開いただけでレインボーカーソルが回り始めて、同じ症状に陥りました。

最初に試したこと:再起動など
QuickTime Player を再起動したり、OS再起動したりしましたが、「新規ムービー収録」をメニューから選択すると、やはり同じ症状に陥りました。
次に試したこと:設定ファイルを探す
OS再起動でも治らないことから、何か設定ファイルが壊れてしまったのでは?と疑って find
コマンドで ~/Library/Application Support/
内を探したりしましたが、それっぽいファイルは見当たりませんでした(見過ごしているだけの可能性あり)。
その次に試したこと:defaultsコマンド(当たり)
じゃあ壊れてるのは、defaults
コマンドで操作できる部分かな?と思って、調べてみました。defaults
コマンドの使い方は defaults
って叩くだけで簡単な説明が得られますし、ネット上にもさまざまな解説があることでしょうから、そちらをご参照下さい。
defaults find
で調べたところ、どうやら QuickTime Player の設定は、ドメイン com.apple.QuickTimePlayerX
に格納されているようでした。
% defaults read com.apple.QuickTimePlayerX { AVDesktopPlaybackControlsControllerShowsDurationInsteadOfTimeRemainingDefaultsKey = 1; MGDeviceRecordingDocumentViewControllerAudioDeviceSelectionUniqueID = "{UUIDっぽい見た目のID}"; MGDeviceRecordingDocumentViewControllerVideoDeviceSelectionUniqueID = 0x{16進数のID}; MGInspectorWindowControllerShowWindowAtLaunch = 0; MGInspectorWindowControllerWindowTopLeftPoint = "{65, 295}"; MGMovieRecordingWindowFrameTopLeftPoint = "{100, 844}"; MGRecentDocumentURLBookmarks = ( {length = 780, bytes = 0x626f6f6b 0c030000 00000410 30000000 ... 04000000 00000000 }, {length = 780, bytes = 0x626f6f6b 0c030000 00000410 30000000 ... 04000000 00000000 }, (中略) {length = 832, bytes = 0x626f6f6b 40030000 00000410 30000000 ... 04000000 00000000 } ); MGRecentDocumentsSharedFileListIsValid = 1; MGRecordingCompressionPresetIdentifier = MGCompressionPresetHighQuality; NSNavLastRootDirectory = "~/Documents/work"; NSNavPanelExpandedSizeForOpenMode = "{800, 448}"; NSNavPanelExpandedSizeForSaveMode = "{800, 448}"; NSNavPanelExpandedStateForSaveMode = 1; "NSWindow Frame NSNavPanelAutosaveName" = "384 372 800 448 0 0 1512 944 "; }
トラブルに見舞われた直前の操作から察するに、マイクの設定、つまり MGDeviceRecordingDocumentViewControllerAudioDeviceSelectionUniqueID
が壊れているのではないか?と推測しました。それで defaults delete com.apple.QuickTimePlayerX MGDeviceRecordingDocumentViewControllerVideoDeviceSelectionUniqueID
を実行したところ、無事に QuickTme Player で「新規ムービー収録」が実行できるように復旧しました。
よっ、さすが defaults コマンド!👏
治った後に気付いたこと
このブログ記事を書くべく再現手順を探っていたところ、マイク入力を audio interface から HDMIキャプチャ に変更しただけでは再現せず、頭を抱えておりました。
しかし、プルダウンメニューの中には自分のiPhoneが存在しており、そのiPhoneを選択すると、再現しました。どうやら今回の問題は、マイク入力としてiPhoneを選択すると起こるようでした。つまり、最初にこの問題に遭遇したときは、私は誤操作(いわゆる「ガバエイム」)をしていた、ということになります😇
それにしても、MacとiPhoneとはUSBで接続している訳でもないのに、どうしてマイクとして使えるのだろう?と思ったら、いつの間にかこんな機能が追加されていました。
MacでiPhoneをWebカメラとして使用する
以下の条件を満たす時、iPhoneをMacのカメラ等として利用できるそうです。
知らなかった…。。
そして、Macの QuickTime Player 側でレインボーカーソルがぐるぐる回っている間、よく見るとiPhone側では以下のような画面になっておりました。

ここで「Disconnect」をタップするとQuickTime Player のレインボーカーソルは停止して処理が続行した……ような気がします*1。おそらくこの操作が、レインボーカーソル地獄を抜け出すための最善の策なのでしょう。
それにしても、QuickTime Player 側は「iPhoneに接続を試みています」とかのダイアログを出せば良いのに、main thread でiPhoneに接続しに行ってるんでしょうか…? 今後の改善に期待です。(と言いつつ、自分のMacアプリも main thread の中で AVCaptureDeviceInput の初期化をしたりとかしてたので、近いうちに改善したいと思います)
ちなみに、iPhone側でロック解除して何かの操作をすればMacのカメラやマイクとして動作するのかな?と思って色々試しておりましたが、いずれも上手く行きませんでした。
まとめ
環境情報
- MacBook Pro (M1)
- macOS Ventura 13.0.1
- QuickTime Player バージョン10.5 (1148.4.1)
*1:これを試していたのは深夜だったので記憶が曖昧です。