Xcodeの基本機能と意外と知られてない機能

# これは何？
[Xcodeの基本（Xcode essentials）](https://developer.apple.com/videos/play/wwdc2024/10181/)というセッションがWWDC24にあり、セッション名を見て「スルーしてもいいかな」と思った方も多いと思います。
しかし実際に見てみると意外にも知らない機能がたくさんありました。

この記事では、そのセッション内で紹介されていた基本的な機能から「そんなことできたのか！？」と思うような機能、さらに調べているうちに見つかった機能までを紹介します。

# Edit
## Project Navigator
Project Navigatorでフィルターすることができる
![スクリーンショット 2024-07-02 3.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/414021f6-b88e-c6e9-e529-127c15eeda39.png)
### フィルターするテキストの条件
入力したテキストの条件を設定できる。
「含める」「含めない」「前方一致」「後方一致」
![スクリーンショット 2024-07-02 3.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/5a0eccf8-2353-7b68-2116-0788bdad4e05.png)

### 過去のフィルターの履歴を表示
左側の「三」ボタンを押すと検索の履歴を表示でき、そこからクエリを選択することができる
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/b737d5de-0a01-2a23-91bc-788569453208.png" alt="スクリーンショット 2024-07-02 3.18.04">


### gitの差分のみを表示
+-ボタンでgitの差分があるもののみに絞ることができる
![スクリーンショット 2024-07-02 3.23.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/ff5e27d6-4c99-dd4a-dd60-e19fc08a14f4.png)

### 最近開いたファイルのみを表示
時計アイコンで、最近開いたファイルのみに絞ることができる
![スクリーンショット 2024-07-02 3.24.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/e78fb2ea-2fdc-db13-0815-a6d7dc61bf0f.png)

## Find Navigator
Find Navigatorを使うとプロジェクト全体を検索できる（`cmd + shift + F`）
Project Navigatorと同様に下部のバーからフィルターすることができ、単語名やファイル名などで検索する
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/28e9c282-3b3d-61c3-f8f9-87a2c3f7a0ca.png" alt="スクリーンショット 2024-07-02 3.39.00">

### 大文字小文字の区別
右側のAaを押すことで、大文字と個別を区別して検索できる。
ON/OFFを切り替えた後、もう一度検索フィールドでEnterしないと適用されないので注意。
|OFF|ON|
|--|--|
|![スクリーンショット 2024-07-03 0.07.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/e4131ae2-4944-c9fc-7e91-1b2ad1c06136.png)|![スクリーンショット 2024-07-03 0.08.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/097a5070-aa03-ae30-d756-8c0f0c1f4671.png)|

### まとめてファイルを折りたたむ
Commandを押しながら開閉矢印をクリックすると、全て折りたたむことができる。これはProject NavigatorなどXcodeの全てのアウトラインビューで使える技
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/a8c1b286-96e5-ded2-60cd-f8c2e5debc82.png" alt="スクリーンショット 2024-07-02 3.40.48">

### 検索結果から削除
Find Navigatorからファイルを選択してDeleteキーを押すことで、対象のファイルをFind Navigator上から削除することができる。実際にファイルが消えるわけではない。
|ファイルを選択して|Delete|
|--|--|
|![スクリーンショット 2024-07-02 3.45.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/7d0e8af4-c47a-ebc1-a19b-f1a086bc7dff.png)|![スクリーンショット 2024-07-02 3.45.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/ff42b07d-4cdd-7e1f-79a9-2895a649f53e.png)|

### Groupの絞り込み
In Projectを選択することでGroupを絞れる
|||
|--|--|
|![スクリーンショット 2024-07-02 3.48.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/a37053a7-83b3-521e-db9c-068163e64162.png)|![スクリーンショット 2024-07-02 3.50.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/0972145b-e7ba-c4df-7e5e-030f05a8bb82.png)|

### Custom Scopes
Custom Scopesを選択すると、別のGroupや複数のGroupを選択できる。
同じScopeを頻繁に使う場合は、「New Saved Scope from Selection」を選択することで、Navigatorのメニューに表示される。
|||
|--|--|
|![スクリーンショット 2024-07-02 3.53.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/e9782ffd-6c77-524a-1027-76ceaa4c5388.png)|![スクリーンショット 2024-07-02 3.54.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/5a607f0f-5faf-b816-d3d9-cac9377a06c5.png)|

New Saved Scope with Ruleを選択すると、より細かいルールでクエリを作成することができる。
![スクリーンショット 2024-07-02 3.57.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/be5c80f9-37f7-1c75-449b-d78e370cdf9c.png)

### 検索方法の変更
Textをクリックすると他の検索メニューが表示される
|||
|--|--|
|![スクリーンショット 2024-07-02 3.59.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/706a267e-eae0-6f05-a822-239331fa0fbd.png)|![スクリーンショット 2024-07-02 3.59.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/a68aa903-e8ae-54bb-069c-00795859065f.png)|
- Text
    - プレーンテキストでの検索
- Regular Expression
    - 正規表現を使用した検索
- Symbols
    - シンボル（特定のクラス、メソッド、関数、変数などの名前付きのもの）で検索
- Ancestor Types
    - 特定のクラスの全ての親クラスを検索
- Descendent Types
    - 特定のクラスから派生するすべての子クラスを検索
- Conforming Types
    - 特定のプロトコルに準拠するすべてのタイプを検索
- Call Hierarchy
    - メソッドが呼び出される場所を検索

### cmd + E で検索フィールドに自動貼り付け
Find Navigatorに何かコピーして貼り付ける時、テキストを選択した状態で `cmd + E`で検索フィールドにそのテキストが入る。クリップボードはそのまま残るので、`cmd + E`しても事前にCopyしたものは上書きされない。（これはどのmacOSアプリでも同様）
![スクリーンショット 2024-07-02 4.02.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/14f07d40-86cd-a850-e8d0-1f45df82ad51.png)

## ファイル間を移動する便利な方法
タブバーを使ってファイル間を移動することができる。
`cmd + shift + { or }`で左右のタブに移動できる。
![スクリーンショット 2024-07-03 0.19.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/d00f3469-503f-ed39-0ada-53e1eab04fa3.png)
### 永続的なタブと非永続的なタブ
![スクリーンショット 2024-07-03 0.25.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/de47bf54-e9bd-d83a-4114-2bf9134d742a.png)
タブバーには2種類ある
- コードの編集などしたファイルは永続的に残るタブ
- 編集など加えず見ただけのファイルに対して作成される非永続的なタブ
    - 他のファイルを開くと消える
    - 斜体になっているので見分けがつく

編集せずに永続的に残したい場合はメニューからKeep Openをするか、直接タブをダブルクリックするといい。
![スクリーンショット 2024-07-03 0.27.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/221cdec6-c99d-94a4-e791-091b51821c42.png)

### タブを一気に閉じる
タブを閉じる場合、必要なタブに対してOptionを押しながら閉じるボタンをクリックすると、そのタブ以外のタブを全て閉じることができる

### 進む戻るの履歴を表示
< >は「進む」「戻る」として使える。
長押しすることで履歴を表示することができるので、何回も押す必要はない。
![スクリーンショット 2024-07-03 0.29.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/706c4501-c921-3529-9f4e-0b586c864e59.png)

### 関連ファイルメニュー
一番左の四角いボタンを押すと以下のメニューなどが表示される
- 最近使用したファイルのリスト
- テキストに基づいて現在のクラスのサブクラス
- 現在の関数の呼び出し元
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/b7d8b498-2480-80a1-1741-6a925658fa6b.png" alt="スクリーンショット 2024-07-03 0.31.19">

### EditorのUIを設定
一番右にあるボタンはEditorのUIを設定するもの。
SwiftUIのPreview, Editor Map, blame(gitのblame)やCode CoverageなどをEditorに追加できる。
![スクリーンショット 2024-07-03 0.34.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/07ea9945-a0a0-b046-26e5-9d6dc554636c.png)

### Pathをインタラクティブに操作
上部のPathは全てインタラクティブに操作できる。
![スクリーンショット 2024-07-03 0.36.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/af557b92-948a-9d7a-7289-8750c20aefcc.png)

![スクリーンショット 2024-07-03 0.42.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/46c9daee-ce84-cbf3-60f5-707327b9c945.png)
キーボードでファイル名を入力すると、そのファイル名でフィルターすることができる
![スクリーンショット 2024-07-03 0.42.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/26d700c6-62f3-7725-1a27-e3a36db4462e.png)

### 現在のファイルの階層を表示
`cmd + shift + J`で現在開いているファイルがProject Navigatorのどこにあるかを示してくれる

### 既存のファイルを複製する
既存のファイルを複製して新しくファイルを作成したい場合、新しいファイルを作成してコピペするのが古典的な方法としてあるが。Project NavigatorでコピーしたいファイルをOptionを押しながらクリックしてドラッグするだけでコピーできる
![ファイルコピー.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/785686f2-fb81-6897-2911-a3f27314f9f1.gif)

### 既存のコードを新規ファイルに移す
（Xcode16からの機能）
既存のコードの一部を別ファイルに分けたい場合、
1. コードをコピー(`cmd + C` or `cmd + X`)
2. Project Navigator上で右クリック
3. Optionを押すことで「New File from Clipborad」が表示されるので選択

→ コピーしたコードが最初からペーストされた状態のファイルが生成される。

![スクリーンショット 2024-07-03 3.05.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/0478b4ca-85a0-18d9-e4ae-b10796766ba4.png)

もしくはコードをコピーして、ProjectNavigator上で直接ペーストするだけで、最初からペーストされた状態のファイルが生成される。


### 独自のwarningを出力
#warninigを使うことで独自のwarningを出すことができる
![スクリーンショット 2024-07-03 1.18.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/89f2c7a7-50fc-cdc7-66ba-f511283c13a5.png)

### BookMarkの追加
Editorの任意の箇所を右クリックしてBookMarkを追加することができる
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/0c191f96-fa6c-c646-bb13-85f23f9bd551.png" alt="スクリーンショット 2024-07-03 1.19.57">

### BookMarkにMarkを追加
Mark as Completeを押すことで
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/092fc42d-e67d-fa07-da76-67f47954ef91.png" alt="スクリーンショット 2024-07-03 1.21.26">
Markをつけることができる。
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/38e343aa-8fff-bbfd-85db-12dfdfac11d7.png" alt="スクリーンショット 2024-07-03 1.22.53">

### Mark: コメント
コード上に`MARK: `をコメントすると、ミニマップやジャンプバーセグメントにも表示される

```Swift
struct ContentView: View {
    // MARK: body
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text("Hello, world!")
        }
        .padding()
    }
}

// MARK: Preview
#Preview {
    ContentView()
}
```
<img width="550" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/806edb4c-a97f-47ac-6f62-0ede92fab1f2.png" alt="スクリーンショット 2024-07-03 1.27.01">

## ショートカット

### ファイル名やシンボル名の検索
`cmd + shift + O`でファイル名やシンボル名を入力するとそれに一致するものを出してくれる
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/5bd1fc97-1af5-ee14-2fd1-f4d83556c331.png" alt="スクリーンショット 2024-07-03 2.02.22">

それ以外にもクエリにスラッシュを含めるとファイルパスで検索できる
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/ef0602eb-2b31-6234-5e30-d4f73ad2f3d1.png" alt="スクリーンショット 2024-07-03 2.03.30">

更にコロンの後に数字を入れることで、その行に移動できる
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/6bc8e027-6322-2701-e815-78d3f3b76229.png" alt="スクリーンショット 2024-07-03 2.04.50">

### 2つのファイルを並べて表示
`option`を押しながらファイルを開くと、2つのファイルを並べて表示できる。
一番右にある+ボタンからもEditorを追加することが可能。
![スクリーンショット 2024-07-03 2.09.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/5d248177-5335-9cf3-b6fc-49f1e3ea31ab.png)

### クイックアクション
`cmd + shift + A`でクイックアクションが開き、自然言語でXcodeのコマンドを検索できる。
何にでも使えるので超便利。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/370a4d7d-da76-1d23-41a5-bd8de668d6ff.png" alt="スクリーンショット 2024-07-03 2.11.24">

### ショートカットは自由に設定可能
XcodeのSettingから可能。
![スクリーンショット 2024-07-03 2.13.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/c1e98d2e-daca-1d87-1638-1410157ef843.png)

### 定義にジャンプ
`cmd + クリック`で関数やクラスの定義に飛ぶことができる

### ドキュメントや型の参照
`option + クリック`で、クリックしたシンボルのドキュメントを参照したり、変数の型を確認できる

### ファイル内の変数名の変更
テキストを選択した状態でcmd + control + E で、現在のファイル内で使用している変数などの名前を一括で変更できる

### 関数の呼び出し元の確認
右クリックで「Show Callers」を押すと、現在の関数などの呼び出し元を全て表示できる
![スクリーンショット 2024-07-03 2.19.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/fe6133f1-2d65-ad4e-e935-58c4a2d7ff1d.png)
![スクリーンショット 2024-07-03 2.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/4b10cddb-a892-c4ec-d35a-7da3f35bd047.png)

### 引数ごとにフォーマット
`control + M`を押すと引数ごとにフォーマットできる
![スクリーンショット 2024-07-03 2.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/8e4d4a50-a70b-e331-175b-b9a920d8d49b.png)
![スクリーンショット 2024-07-03 2.22.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/927926fa-1e0f-34bf-9582-a42f2b0f071b.png)

### 一致する{}を見つける
一致する `{}`がどこにあるかわからない時は、一方の`{`をダブルクリックすることでもう片方にジャンプできる

### テキストカーソルの移動
- `option + 矢印`で単語ごとに移動できる
- `control + 矢印`でサブワードごとに移動できる
    - Macのデフォルトのショートカットキーとして使われてる
    - システム設定→キーボード→キーボードショートカット→Mission Control→Mission Control→「右(左)の操作スペースに移動」のチェックを外す
- `cmd + 矢印`で行の先頭と末尾に移動できる

### 複数行に同時入力
`option`を押しながら複数行にわたって左クリックで縦にドラッグすると、複数行にカーソルを作れる。
同じような記述をするときに便利。
![複数ぎょう.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/c3dd3a2d-5180-e896-08a4-8ff7dece7455.gif)

### VimMode
EditorからVimModeのON/OFFを切り替えれる。Xcode16からはvimのrepeatコマンドをサポート。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/948c6035-71d7-0057-ed27-93b38c5fb41e.png" alt="スクリーンショット 2024-07-03 2.31.46">

### control + A, E, P, N
- `control + A`
    - 行の先頭に移動
- `control + E`
    - 行の末尾に移動
- `control + P`
    - カーソルを一行上に移動
- `control + N`
    - カーソルを一行下に移動

## gitを活用する
### 最後のコミットを確認
Editorの特定の行で右クリックし、「Show Last Change for Line」を選択すると、その行の最後のコミットの概要が表示される
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/d0cabc7c-5853-c7df-383f-2be2d04f1739.png" alt="スクリーンショット 2024-07-03 2.37.33">
![スクリーンショット 2024-07-03 2.38.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/bfb6a3fa-79ee-acee-fe28-adf3347b13d3.png)

### Source Control navigator
Source Control navigatorのChangesタブで変更を確認することができる。
Repositoresタブからブランチをswitchしたりマージしたり、過去のコミットを見たりcherry pickもできる

![スクリーンショット 2024-07-03 2.38.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/50c187db-b675-a7ad-cfc8-72eb86621eb3.png)

# Debug
## Breakpointのトリック
通常だと行番号をクリックするだけでBreackpointが追加できる。

BreackPoint NavigatorからSwift Error Breakpointを追加すると、キャッチではなくthrowで停止できる。これによりエラーがthrowされた時点で停止する。
![スクリーンショット 2024-07-03 2.41.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/9431c7ea-406c-be24-1a7d-d50d19c707d6.png)
![スクリーンショット 2024-07-03 2.41.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/1f728e99-dadf-cddf-74d1-4a86840261b8.png)

## 指定した条件の時のみ止める
BreakPointをダブルクリックで編集し、`Condition`で止める条件を指定することができる。
以下の例ではvalueが0の場合にBreackpointを止める。
![スクリーンショット 2024-07-03 2.47.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/d2cedf02-fbc7-a65c-0f70-e53ff054ce5b.png)

## 止めずにデバッガー式を実行する
Add Actionし、`po`などのデバッガー式を入力することで、停止時に自動的にその式が実行される。
また、「Automatically continue after evaluating actions」にチェックを入れると停止せずにデバッガー式を実行することができる。
![スクリーンショット 2024-07-03 2.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/8dace1bb-69c2-a791-20c3-af8bc0ae33c9.png)

## 1つ前の処理を再実行する
Breakpointで止めて1つずつ確認していたときに誤って進みすぎることがある。
その場合はこの緑の部分をドラッグして前の処理に戻し、以前の式を再実行させることができる。
ただし副作用が起きる場合もあるので注意。
![スクリーンショット 2024-07-03 2.51.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/1d06f216-ac46-fdf5-c956-2bf22956c1f4.png)
![スクリーンショット 2024-07-03 2.52.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/d3482f15-f0c9-3c7f-e135-52780c5166ce.png)

### ビルドなしで再実行
`cmd + control + R`でビルドせずに実行すると、ビルドを省略してすぐに実行できる。

### Backtrace in Editor
Xcode16からは下のタブに追加されるBacktraceを使うことで、呼び出し元を簡単に確認することができる。
![スクリーンショット 2024-07-03 2.53.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/792c6081-84db-2e2a-c6c8-4e2a4ab0ff99.png)

### OSLog
OSLogを使うとより効率的にデバッグできる。

# Test
プロジェクト内の全てのテストを実行する場合は`cmd + U`

## Test Navigator
est Navigator(`cmd + 6`)には全てのテストが表示される
Testが多い場合はフィルターしよう（Swift Testingだとタグでフィルターできる）
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/c093acc6-0258-ea56-e5d7-b2775ce405ac.png" alt="スクリーンショット 2024-07-03 3.00.13">

## まとめてテストを実行
実行したいTestをCommandで選択してまとめて実行できる
![スクリーンショット 2024-07-03 3.01.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/2bd6a9c8-0839-c3ff-880a-be9f9fd6f125.png)


## 失敗したテストだけにフィルター
失敗したテストだけにフィルターすることもできる。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/e7930b71-1a82-0f8d-04a3-4b69eda13ce7.png" alt="スクリーンショット 2024-07-03 3.10.02">


## テスト関連のショートカット
- cmd + control + option + Gで前のTestを再実行できる
- cmd + control + UでビルドせずにTestができる

## テストの繰り返し
通常はpassするが時々失敗する場合、`Run test Repeatedly`を使用する。
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/b3998ea5-1950-78bd-b72b-589d410a9116.png" alt="スクリーンショット 2024-07-02 1.57.53">

テストを一定回数繰り返すことや、失敗するまで繰り返すことができる。
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237700/943c23bc-ba48-eb62-c940-f1f27074f5f5.png" alt="スクリーンショット 2024-07-02 1.58.16">

## Test Plan
どのテストをどういう環境下で実行するかをTest Planで管理することができる。
詳細は過去のセッションとか見た方が良さそう。

## Code Coverage
コードカバレッジは、コードのどの程度がテストで実行されているかを知る方法
Editor → Code Coverageを有効にし、Testを実行する。

テストが実行されると、テスト中にそのコードが何回実行されたかがEditorの右側に表示される。0回の場合はその部分がテストできてないことがわかるためとても便利。

## Test Report
Test Reportはテスト実行後に生成されるレポートで、テスト結果の詳細やカバレッジ、詳細なログなどを確認することができる。


# おわりに
基本的なものから知られてなさそうな機能までまとめてみました。
長年Xcodeを使っている人から、最近触り始めた初学者の方まで、幅広い方の参考になればと思います。
セッションではアプリの配布についても紹介していましたので、気になる方は直接セッションを見てみてください。

# 参考資料
https://developer.apple.com/videos/play/wwdc2024/10181/

https://www.youtube.com/watch?v=EN7-6Oj7cL0