[Tips]Xcode13.1のSwiftUIのpreviewでCPU使用率が高くなるのをSpotlightを止めて回避する(iOS15)

## このエントリでできること

- タイトル通りです。
 
## おことわり

- このTipsは、2021年12月時点のXcodeの最新版(13.1)を使用するときを対象としています。iOSシミュレータのバージョンは15.0です。
- この後のXcodeでは必要がなくなっているかもしれません。
- 上記以外のバージョンでは動作を確認していません。

## TL;DR;

筆者の場合は、ターミナルで以下を実行してからXcode再起動でCPU使用率が低くなりました。

```shell
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モードを使うと、画面の様子を即座に確認できて便利です（下図）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/81a0d653-7d0f-2a52-467a-e203959553c9.png)

なのですが、筆者の環境(Xcodeの最新版をAppStoreから入れたばかり)では、プレビューモードをONにしたとき、CPU使用率が高くなり、気になりました。ドックにあるActivity Monitorは下図のような見た目です。これはちょっといただけないと思いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/81b3508b-4622-4fd9-9470-4af0d1b14deb.png)

## 調べたことと回避方法

ActivityMonitorを見ると、SpotlightのCPU使用率が高くなっています。

![スクリーンショット 2021-12-04 5.58.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/39716dcf-c64d-9459-7aa5-ea231aeb31ea.png)

このSotlightのプロセスがどこで動いているのかを調べてみるため、[brew](https://brew.sh)でインストールできる pstreeコマンドを使います。


```shell
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?](https://developer.apple.com/forums/thread/683277)

以下が、Preview用のデバイスでSpotlight動かさないようにするためのスクリプトです。

(引用)

```shell
cd ~/Library/Developer/Xcode/UserData/Previews/Simulator\ Devices/
find . -name com.apple.suggestions.plist -exec plutil -replace SuggestionsAppLibraryEnabled -bool NO {} ";"
```

上のスクリプトで何をやっているのか調べるため、対象のディレクトリに移動してみました。

```shell
cd ~/Library/Developer/Xcode/UserData/Previews/Simulator\ Devices/
```

筆者の状態では、ここに1つのディレクトリがあり、Preview用のデバイスに関する情報が約1.1GB格納されていました。デバイス種類をふやすと、こちらにディレクトリが増えます。

スクリプトの2行目で、このディレクトリ内に格納された、設定ファイルの内容を書き換えています。(こちらは、MacでSpotlightを止めたいときにも同じようなことをするなぁなるほど、と思いました。)

ということで、スクリプトを実行して、Xcodeを再起動、SwiftUIのpreviewモードを有効にしてみます。

Activity Monitorで確認すると、CPU使用率が減っており、狙った効果が得られました。

![スクリーンショット 2021-12-04 6.15.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/13038531-0b3f-2a20-fc53-536cae5fd255.png)

## おわりに

このエントリでは、Xcode13.1のSwiftUI previewでCPU使用率が高くなるのをSpotlightを止めて回避するというTIpsについて紹介しました。

引用した記事にもありますが、iOSのシミュレータでもSpotlightが走りCPU使用率が高くなる状況も、筆者の環境では止めることができました。

(引用)

```shell
cd ~/Library/Developer/CoreSimulator/Devices 

find . -name com.apple.suggestions.plist -exec plutil -replace SuggestionsAppLibraryEnabled -bool NO {} ";" 
```

Preview動かしながらSimulatorを1つ動かしても下図程度で、いい感じです。

![スクリーンショット 2021-12-04 6.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/dbd79ea3-bedd-ac8a-b45f-bf0fe5c57345.png)


## 引用した記事（再掲）

- [iOS 15 Simulator's Spotlight process consistently uses ~100% of CPU. Any ideas for mitigation?](https://developer.apple.com/forums/thread/683277)