iCloud の問題。Apple ID がアップデートできない、キーチェーンが挙動不審、secd というプロセスが暴走するといった事象とその解決。
iCloudのトラブル
iCloud の仕様変更後旧macOSで異常事態が続出してイライラマックスですが、特に酷いのが 10.15 Catalina です。システム環境設定に鬱陶しい赤いバッジが付きまとい、iCloud に問題があると示され続けます。
Apple ID のアップデートが必要。みたいな警告が出ますが、続けるをクリックしたところで何も起きません。

何も起きないだけならともかく、いろんな同期が上手くできず、他にも問題を引き起こします。
iCloud の細かい部分を見ていくとキーチェーンのチェックが勝手に外されています。
これにチェックを入れると、iCloud のパスワードやその他のパスワードを延々と尋ねてきます。



何度入力してもループで訊いてきて終わりません。一度、とことん付き合ってやろうじゃないかと覚悟して1週間答え続けましたが根負けしました。


キーチェーンだけの問題なら良いんですが、どうにもiCloud全体さらにMacそのものが珍妙な動きとなって不便極まりないです。
キーチェーン
キーチェーンを開いてみると、iCloud同期のチェックが外されているにも関わらず iCloudタブがありまして、中を見てみると不明な項目がたくさん作られています。

この<不明>項目、始めて見たときは数千行ありました。削除するのも大変時間がかかりました。で、削除してもしばらくするとまた大量に作られます。
secd の暴走で CPU高負荷
iCloud のトラブルはMac全体に影響を及ぼします。キータイプごとに虹色ぐるぐるが発生したりあらゆる操作がワンテンポ遅かったり、挙げ句に Logic や MainStage が高負荷に耐えきれず再生不能に陥り演奏本番中に楽曲が無音になったりしました。これは深刻。
アクティビティモニタを眺めるとsecd というプロセスがCPUを100%以上占有し続け収まる気配がありません。
secd
secdが何なのか検索してみると案の定 iCoudのキーチェーン同期に関するものらしいです。Macのトラブルの9割は iCloud が原因と言っても過言ではありません。
keychain-2.db
キーチェーンのデータベースファイルを確認します。~/Library/Keychains/UUID/keychain-2.db
(UUID名は暗号の羅列みたいな文字列)です。
このファイルは10MB程度が適正サイズらしいのですが、数百メガバイトありました。これは大きすぎるようです。
消極的な解決: OS をダウングレード
この問題、通常のトラブルシューティングは何の役にも立ちません。iCloudからログアウトして再ログイン、キーチェーンを起動してそこからのリセット、PRAMやSなんちゃらのリセット、OSの再インストールに至るまで、すべて無効でした。
複数のボリュームをOS切り替えながら使っているのですが、問題が発生するのは Catalina でした。新しい OS や Mojave では深刻な問題は起きまていせん。
解決策は、OS を 10.14 Mojave にダウングレードすることでした。実はアップルのサポートとこの件についてやり取りしたんですね。その時の結論こそ「可能ならOSを10.14に戻す」でした。iCloud のアップデートによって不具合が生じ、すでに対応を切り捨てたCatalinaでの不出来をAppleが修正する可能性はない、Mojaveで問題が起きないのは単にたまたま、でも問題ないならと。まあ、推測による仕方のない結論かもしれません。しかしそういうことでは本当の解決になりません。
問題を解決
一旦は諦めていましたが気を取り直して解決策を漁ってみます。検索語のチョイスも難しくて良い情報になかなか出会えませんが、いくつか有効なのがありました。その中でも https://nyan.im/p/icloud-bug-troubleshoot-en の記事が、ネタ自体は古いが効果ありました。以下にざっくりまとめます。
まずはいくつか情報の取得とiCloudからのデータを取得するターミナルのコマンド。これらは特に必要ないですが一応。
// CloudKit のステイタスを確認する
/usr/sbin/ckksctl status
// iCloudから最新のデータを取得
/usr/sbin/ckksctl fetch
キーチェーンデータベースをリセット
ターミナルを使用してキーチェーンデータベースをリセットします。
まずローカルのキーチェーンデータベースをリセットし、
// ローカルキーチェーンデータベースをリセット
/usr/sbin/ckksctl reset
次いで iCloudのキーチェーンデータベースをリセットします。
// iCloud キーチェーンデータベースをリセット
/usr/sbin/ckksctl reset-cloudkit
完了したら iCloudからサインアウトして再度サインインします。
~/Library/Keychains/UUID/keychain-2.db
を確認し、数百メガバイトあったサイズが10MB程度まで減少していたら成功です。アクティビティモニタでsecdを観察し、CPUを占有しなくなることを確認できても成功。解決しない場合は次を試します。
自分の場合はしばらく経つとまたdbサイズが膨れあがり、secd のCPU占有も変わらず、解決しませんでした。
問題が解決しない場合
上記の方法で解決しない場合、もう少し込み入った操作を行います。
1 iCloudにログインしているすべてのiOSデバイスを消去します。システム環境設定のiCloudからログイン中のデバイスを確認できますね。iOSデバイスを消去しましょう。
2 macOSのキーチェーンデータベースをフォルダごと削除して、直ちに再起動します。 ~/Library/Keychains/UUID
3 再起動後、iCloud からサインアウトして再度サインインします。
4 ステータスを確認し、すべてのViewでログインしていることを確認したら、iCloudデータベースをリセットします。
// CloudKit のステイタスを確認する
/usr/sbin/ckksctl status
コマンドを実行するとたくさんの文字列が返ってきますが、==== 区切りで View: というタイトルがあります。その最初にアカウントの状態が書かれています。
========================================
View: ○○
CloudKit account: logged in
.
.
.
ログインを確認したら、iCloud のキーチェーンをリセットします。
// iCloud キーチェーンデータベースをリセット
/usr/sbin/ckksctl reset-cloudkit
5 最後に、先ほどMac側からの操作でiCloudログイン状態から消去したiOSデバイスを手に取り、iCloudにサインインします。
~/Library/Keychains/UUID/keychain-2.db
を観察し、ファイルサイズが減少していて時間経過後も増大しないことを確認しましょう。アクティビティモニタで secd を観察するのもいいでしょう。
効果がないようなら、操作を繰り返します。
ということで、自分はこの操作を5回ほど繰り返してようやく問題が解決しました。数回やったあと数日後にまた症状が戻ったので再度繰り返した感じです。
あと、最初の「iOSデバイスを消去」のところで、他のmacOSデバイスも含めてすべて消去しました。さらに、他のmacOSデバイスからも同様の操作を行いました。
以上、iCloud キーチェーンに関するトラブルの解決でした。iCloudの同期もそこそこ動くようになり、secdの暴走も落ち着いた模様です。Catalina や Mojave といった旧システムを常用している以上、再発する可能性もありますがそうなったらまた同じ対処で乗り切るとしましょう。