これは何?
Xcodeの基本(Xcode essentials)というセッションがWWDC24にあり、セッション名を見て「スルーしてもいいかな」と思った方も多いと思います。
しかし実際に見てみると意外にも知らない機能がたくさんありました。
この記事では、そのセッション内で紹介されていた基本的な機能から「そんなことできたのか!?」と思うような機能、さらに調べているうちに見つかった機能までを紹介します。
Edit
Project Navigator
Project Navigatorでフィルターすることができる
フィルターするテキストの条件
入力したテキストの条件を設定できる。
「含める」「含めない」「前方一致」「後方一致」
過去のフィルターの履歴を表示
左側の「三」ボタンを押すと検索の履歴を表示でき、そこからクエリを選択することができる
gitの差分のみを表示
最近開いたファイルのみを表示
Find Navigator
Find Navigatorを使うとプロジェクト全体を検索できる(cmd + shift + F
)
Project Navigatorと同様に下部のバーからフィルターすることができ、単語名やファイル名などで検索する
大文字小文字の区別
右側のAaを押すことで、大文字と個別を区別して検索できる。
ON/OFFを切り替えた後、もう一度検索フィールドでEnterしないと適用されないので注意。
OFF | ON |
---|---|
まとめてファイルを折りたたむ
Commandを押しながら開閉矢印をクリックすると、全て折りたたむことができる。これはProject NavigatorなどXcodeの全てのアウトラインビューで使える技
検索結果から削除
Find Navigatorからファイルを選択してDeleteキーを押すことで、対象のファイルをFind Navigator上から削除することができる。実際にファイルが消えるわけではない。
ファイルを選択して | Delete |
---|---|
Groupの絞り込み
In Projectを選択することでGroupを絞れる
Custom Scopes
Custom Scopesを選択すると、別のGroupや複数のGroupを選択できる。
同じScopeを頻繁に使う場合は、「New Saved Scope from Selection」を選択することで、Navigatorのメニューに表示される。
New Saved Scope with Ruleを選択すると、より細かいルールでクエリを作成することができる。
検索方法の変更
Textをクリックすると他の検索メニューが表示される
- Text
- プレーンテキストでの検索
- Regular Expression
- 正規表現を使用した検索
- Symbols
- シンボル(特定のクラス、メソッド、関数、変数などの名前付きのもの)で検索
- Ancestor Types
- 特定のクラスの全ての親クラスを検索
- Descendent Types
- 特定のクラスから派生するすべての子クラスを検索
- Conforming Types
- 特定のプロトコルに準拠するすべてのタイプを検索
- Call Hierarchy
- メソッドが呼び出される場所を検索
cmd + E で検索フィールドに自動貼り付け
Find Navigatorに何かコピーして貼り付ける時、テキストを選択した状態で cmd + E
で検索フィールドにそのテキストが入る。クリップボードはそのまま残るので、cmd + E
しても事前にCopyしたものは上書きされない。(これはどのmacOSアプリでも同様)
ファイル間を移動する便利な方法
タブバーを使ってファイル間を移動することができる。
cmd + shift + { or }
で左右のタブに移動できる。
永続的なタブと非永続的なタブ
- コードの編集などしたファイルは永続的に残るタブ
- 編集など加えず見ただけのファイルに対して作成される非永続的なタブ
- 他のファイルを開くと消える
- 斜体になっているので見分けがつく
編集せずに永続的に残したい場合はメニューからKeep Openをするか、直接タブをダブルクリックするといい。
タブを一気に閉じる
タブを閉じる場合、必要なタブに対してOptionを押しながら閉じるボタンをクリックすると、そのタブ以外のタブを全て閉じることができる
進む戻るの履歴を表示
< >は「進む」「戻る」として使える。
長押しすることで履歴を表示することができるので、何回も押す必要はない。
関連ファイルメニュー
一番左の四角いボタンを押すと以下のメニューなどが表示される
- 最近使用したファイルのリスト
- テキストに基づいて現在のクラスのサブクラス
- 現在の関数の呼び出し元
EditorのUIを設定
一番右にあるボタンはEditorのUIを設定するもの。
SwiftUIのPreview, Editor Map, blame(gitのblame)やCode CoverageなどをEditorに追加できる。
Pathをインタラクティブに操作
キーボードでファイル名を入力すると、そのファイル名でフィルターすることができる
現在のファイルの階層を表示
cmd + shift + J
で現在開いているファイルがProject Navigatorのどこにあるかを示してくれる
既存のファイルを複製する
既存のファイルを複製して新しくファイルを作成したい場合、新しいファイルを作成してコピペするのが古典的な方法としてあるが。Project NavigatorでコピーしたいファイルをOptionを押しながらクリックしてドラッグするだけでコピーできる
既存のコードを新規ファイルに移す
(Xcode16からの機能)
既存のコードの一部を別ファイルに分けたい場合、
- コードをコピー(
cmd + C
orcmd + X
) - Project Navigator上で右クリック
- Optionを押すことで「New File from Clipborad」が表示されるので選択
→ コピーしたコードが最初からペーストされた状態のファイルが生成される。
もしくはコードをコピーして、ProjectNavigator上で直接ペーストするだけで、最初からペーストされた状態のファイルが生成される。
独自のwarningを出力
#warninigを使うことで独自のwarningを出すことができる
BookMarkの追加
Editorの任意の箇所を右クリックしてBookMarkを追加することができる
BookMarkにMarkを追加
Mark as Completeを押すことで
Markをつけることができる。
Mark: コメント
コード上にMARK:
をコメントすると、ミニマップやジャンプバーセグメントにも表示される
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()
}
ショートカット
ファイル名やシンボル名の検索
cmd + shift + O
でファイル名やシンボル名を入力するとそれに一致するものを出してくれる
それ以外にもクエリにスラッシュを含めるとファイルパスで検索できる
2つのファイルを並べて表示
option
を押しながらファイルを開くと、2つのファイルを並べて表示できる。
一番右にある+ボタンからもEditorを追加することが可能。
クイックアクション
cmd + shift + A
でクイックアクションが開き、自然言語でXcodeのコマンドを検索できる。
何にでも使えるので超便利。
ショートカットは自由に設定可能
定義にジャンプ
cmd + クリック
で関数やクラスの定義に飛ぶことができる
ドキュメントや型の参照
option + クリック
で、クリックしたシンボルのドキュメントを参照したり、変数の型を確認できる
ファイル内の変数名の変更
テキストを選択した状態でcmd + control + E で、現在のファイル内で使用している変数などの名前を一括で変更できる
関数の呼び出し元の確認
右クリックで「Show Callers」を押すと、現在の関数などの呼び出し元を全て表示できる
引数ごとにフォーマット
一致する{}を見つける
一致する {}
がどこにあるかわからない時は、一方の{
をダブルクリックすることでもう片方にジャンプできる
テキストカーソルの移動
-
option + 矢印
で単語ごとに移動できる -
control + 矢印
でサブワードごとに移動できる- Macのデフォルトのショートカットキーとして使われてる
- システム設定→キーボード→キーボードショートカット→Mission Control→Mission Control→「右(左)の操作スペースに移動」のチェックを外す
-
cmd + 矢印
で行の先頭と末尾に移動できる
複数行に同時入力
option
を押しながら複数行にわたって左クリックで縦にドラッグすると、複数行にカーソルを作れる。
同じような記述をするときに便利。
VimMode
EditorからVimModeのON/OFFを切り替えれる。Xcode16からはvimのrepeatコマンドをサポート。
control + A, E, P, N
-
control + A
- 行の先頭に移動
-
control + E
- 行の末尾に移動
-
control + P
- カーソルを一行上に移動
-
control + N
- カーソルを一行下に移動
gitを活用する
最後のコミットを確認
Editorの特定の行で右クリックし、「Show Last Change for Line」を選択すると、その行の最後のコミットの概要が表示される
Source Control navigator
Source Control navigatorのChangesタブで変更を確認することができる。
Repositoresタブからブランチをswitchしたりマージしたり、過去のコミットを見たりcherry pickもできる
Debug
Breakpointのトリック
通常だと行番号をクリックするだけでBreackpointが追加できる。
BreackPoint NavigatorからSwift Error Breakpointを追加すると、キャッチではなくthrowで停止できる。これによりエラーがthrowされた時点で停止する。
指定した条件の時のみ止める
BreakPointをダブルクリックで編集し、Condition
で止める条件を指定することができる。
以下の例ではvalueが0の場合にBreackpointを止める。
止めずにデバッガー式を実行する
Add Actionし、po
などのデバッガー式を入力することで、停止時に自動的にその式が実行される。
また、「Automatically continue after evaluating actions」にチェックを入れると停止せずにデバッガー式を実行することができる。
1つ前の処理を再実行する
Breakpointで止めて1つずつ確認していたときに誤って進みすぎることがある。
その場合はこの緑の部分をドラッグして前の処理に戻し、以前の式を再実行させることができる。
ただし副作用が起きる場合もあるので注意。
ビルドなしで再実行
cmd + control + R
でビルドせずに実行すると、ビルドを省略してすぐに実行できる。
Backtrace in Editor
Xcode16からは下のタブに追加されるBacktraceを使うことで、呼び出し元を簡単に確認することができる。
OSLog
OSLogを使うとより効率的にデバッグできる。
Test
プロジェクト内の全てのテストを実行する場合はcmd + U
Test Navigator
est Navigator(cmd + 6
)には全てのテストが表示される
Testが多い場合はフィルターしよう(Swift Testingだとタグでフィルターできる)
まとめてテストを実行
実行したいTestをCommandで選択してまとめて実行できる
失敗したテストだけにフィルター
テスト関連のショートカット
- cmd + control + option + Gで前のTestを再実行できる
- cmd + control + UでビルドせずにTestができる
テストの繰り返し
通常はpassするが時々失敗する場合、Run test Repeatedly
を使用する。
テストを一定回数繰り返すことや、失敗するまで繰り返すことができる。
Test Plan
どのテストをどういう環境下で実行するかをTest Planで管理することができる。
詳細は過去のセッションとか見た方が良さそう。
Code Coverage
コードカバレッジは、コードのどの程度がテストで実行されているかを知る方法
Editor → Code Coverageを有効にし、Testを実行する。
テストが実行されると、テスト中にそのコードが何回実行されたかがEditorの右側に表示される。0回の場合はその部分がテストできてないことがわかるためとても便利。
Test Report
Test Reportはテスト実行後に生成されるレポートで、テスト結果の詳細やカバレッジ、詳細なログなどを確認することができる。
おわりに
基本的なものから知られてなさそうな機能までまとめてみました。
長年Xcodeを使っている人から、最近触り始めた初学者の方まで、幅広い方の参考になればと思います。
セッションではアプリの配布についても紹介していましたので、気になる方は直接セッションを見てみてください。
参考資料