このエントリでできること
- タイトル通りです。
おことわり
- このTipsは、2021年12月時点のXcodeの最新版(13.1)を使用するときを対象としています。iOSシミュレータのバージョンは15.0です。
- この後のXcodeでは必要がなくなっているかもしれません。
- 上記以外のバージョンでは動作を確認していません。
TL;DR;
筆者の場合は、ターミナルで以下を実行してからXcode再起動でCPU使用率が低くなりました。
cd ~/Library/Developer/Xcode/UserData/Previews/Simulator\ Devices/
find . -name com.apple.suggestions.plist -exec plutil -replace SuggestionsAppLibraryEnabled -bool NO {} ";"
対象
-
Xcode 13.1
-
筆者はM1なMacBook Airで確認しましたが、IntelなMacでもおそらく同様では。
-
iOS SimulatorのOSのバージョンは15.0
対象とする事象
XcodeでSwiftUIを使用するとき、Previewモードを使うと、画面の様子を即座に確認できて便利です(下図)。
なのですが、筆者の環境(Xcodeの最新版をAppStoreから入れたばかり)では、プレビューモードをONにしたとき、CPU使用率が高くなり、気になりました。ドックにあるActivity Monitorは下図のような見た目です。これはちょっといただけないと思いました。
調べたことと回避方法
ActivityMonitorを見ると、SpotlightのCPU使用率が高くなっています。
このSotlightのプロセスがどこで動いているのかを調べてみるため、brewでインストールできる pstreeコマンドを使います。
hiroki@MBA % pstree -p 1258
-+= 00001 root /sbin/launchd
\-+= 01103 hiroki launchd_sim /Users/hiroki/Library/Developer/Xcode/UserData/Previews/Simulator Devices/6AB14855-C5D2-4312-9AB9-262FBBED342F/data/var/run/launchd_bootstrap.plist
\--= 01258 hiroki /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Applications/Spotlight.app/Spotli
このあたりのヒントでWebで検索してみると、Appleの開発者フォーラムに、同じ状況にあっている人と、回避方法が載っていました。
iOS 15 Simulator's Spotlight process consistently uses ~100% of CPU. Any ideas for mitigation?
以下が、Preview用のデバイスでSpotlight動かさないようにするためのスクリプトです。
(引用)
cd ~/Library/Developer/Xcode/UserData/Previews/Simulator\ Devices/
find . -name com.apple.suggestions.plist -exec plutil -replace SuggestionsAppLibraryEnabled -bool NO {} ";"
上のスクリプトで何をやっているのか調べるため、対象のディレクトリに移動してみました。
cd ~/Library/Developer/Xcode/UserData/Previews/Simulator\ Devices/
筆者の状態では、ここに1つのディレクトリがあり、Preview用のデバイスに関する情報が約1.1GB格納されていました。デバイス種類をふやすと、こちらにディレクトリが増えます。
スクリプトの2行目で、このディレクトリ内に格納された、設定ファイルの内容を書き換えています。(こちらは、MacでSpotlightを止めたいときにも同じようなことをするなぁなるほど、と思いました。)
ということで、スクリプトを実行して、Xcodeを再起動、SwiftUIのpreviewモードを有効にしてみます。
Activity Monitorで確認すると、CPU使用率が減っており、狙った効果が得られました。
おわりに
このエントリでは、Xcode13.1のSwiftUI previewでCPU使用率が高くなるのをSpotlightを止めて回避するというTIpsについて紹介しました。
引用した記事にもありますが、iOSのシミュレータでもSpotlightが走りCPU使用率が高くなる状況も、筆者の環境では止めることができました。
(引用)
cd ~/Library/Developer/CoreSimulator/Devices
find . -name com.apple.suggestions.plist -exec plutil -replace SuggestionsAppLibraryEnabled -bool NO {} ";"
Preview動かしながらSimulatorを1つ動かしても下図程度で、いい感じです。