🐦️

【Swift】VSCodeやCursorで快適なSwift開発ライフを送りたい

に公開

「新たに Swift 案件やることになったが Xcode は慣れず使いづらい」
「使い慣れた VSCode で Swift 開発したい」
「Xcode プロジェクトを VSCode で開いても大量のエラーが出て見るに耐えない」


そんな悩みの1つの解決策として、 SweetPad という VSCode 拡張機能があります。
SweetPad を使うことで、VSCode や Cursor で基本的な Swift プロジェクト(Xcode プロジェクト)開発ができるようになります。
https://sweetpad.hyzyla.dev/

※ 以降、VSCodeと記載箇所は(Cursor含む)の前提で記載いたします。


検証時の動作環境

  • Xcode 16.2
  • SweetPad 0.1.66


SweetPad とは

SweetPad とは、VSCode または Cursor を使用して、 Swift プロジェクトを開発できるようにする拡張機能です。
Xcode の代替手段を目指して開発されている拡張機能みたいです。

https://marketplace.visualstudio.com/items?itemName=sweetpad.sweetpad


SweetPad を用いることで実現可能となる機能は以下です。(引用)

  • Autocompletexcode-build-server を使用してオートコンプリートを設定する
  • 🛠️ Build & Runxcodebuild を使用してアプリケーションをビルドして実行します
  • 🪲 DebugCodeLLDB を使用して iOS アプリケーションをデバッグする
  • 💅🏼 Formatswift-format または他の任意のフォーマッタを使用してファイルをフォーマットします
  • 📱 Simulator — iOS シミュレーターを管理する
  • 📱 Devices — iPhone または iPad で iOS アプリケーションを実行する
  • 🛠️ ToolsHomebrew を使用して重要な iOS 開発ツールを管理します
  • Tests — シミュレータとデバイスでテストを実行する

どれも設定が簡単なのも嬉しいポイントです。
使用条件としては、「MacOS であること」と「Xcode がインストールされていること」が必要となります。


基本設定

基本的には、以下2つの拡張機能をインストールするだけで OK です。

SweetPad のインストール後、🍬アイコンを選択すると、3つのメニューが表示されます。

  • BUILD
    • ビルド対象一覧
  • DESTINATIONS
    • 実行可能なデバイス一覧
  • TOOLS
    • 機能実行に必要なツール設定状況
      • 全てを必ず有効にする必要はなく、使いたい機能次第で有効とするでも問題ありません。
      • ここからインストールも可能(右側のコンソールボタンを押下するとインストールコマンドを打ってくれます)

以降、各機能について詳細に見ていきます。

AutoComplete

VSCode でも Xcode のように補完や参照がされるようになります。
こちらを有効化することで、エラーだらけの真っ赤な VSCode 画面が解消されます。

設定はとても簡単で、以下を実行するだけです。

  1. TOOLS からxcode-build-severをインストール
  2. コマンド パレットからコマンド SweetPad: Generate Build Server Config(buildServer.json) を実行し、設定ファイルを作成。(生成された設定ファイルは特にいじらなくて OK)
  3. 一度 build を実行すると、設定ファイルが反映されて補完機能等が有効に

【buildServer.json の運用についての検討】
チーム開発の際は、buildServer.jsonをどのように運用するかの検討が必要です。

buildServer.json の中身は以下のような内容となっています。

workspaceは共通なので、./<***>.xcworkspaceと変更すればよさそうですが、build_rootが悩ましいところです。
build_rootの指定先を変えればチームで共有できますが、そもそも Path を変更しても影響が無いものなのかが微妙なので、ひとまずはメンバー各々にbuildServer.json生成してもらう方向で考えています。(生成はコマンド1つで一瞬なので)
→ 時間がある時にこの辺の検証は、もう少ししてみたいと思います。

buildServer.json
{
	"name": "xcode build server",
	"version": "0.2",
	"bspVersion": "2.0",
	"languages": [
		"c",
		"cpp",
		"objective-c",
		"objective-cpp",
		"swift"
	],
	"argv": [
		"/opt/homebrew/bin/xcode-build-server"
	],
	"workspace": "/<UserPath>/<PJName>/<***>.xcworkspace",
	"build_root": "/<UserPath>/Library/Developer/Xcode/DerivedData/<***>-<hash>",
	"scheme": "<ShemeName>",
	"kind": "xcode"
}

【備考】

  • 内部的な関係性

    • SweetPad ↔️ xcode-build-server ↔️ SourceKit-LSP
  • LSP
    LSP(Language Server Protocol)とは、「コード補完、定義移動、エラーチェック」などのサポート機能(言語サービス)を、エディタや IDE に提供するためのプロトコル
    LSP は Protocol であるため、LSP 自体に言語サービスが備わっているものではありません

  • SourceKit
    Apple が提供する Swift 言語の解析エンジン。Swift の「コード補完、定義移動、エラーチェック」などのサポート機能(言語サービス)を提供
    Xcode をエディタとして使用する場合は、デフォルトで Xcode に組み込まれています。

  • SourceKit-LSP
    SourceKit が持つサポート機能を、共通の通信規格(LSP)で他のエディタや IDE に提供するためのもの。
    SourceKit-LSP を用いることで、Xcode 以外のエディタでも、素の Swift コードに対して SourceKit が有効となります

    ただし、「Xcode プロジェクト」に対しては、 SourceKit-LSP はサポートしていません。
    ※「Xcode プロジェクト」 ≒ 「.xcodeproj や .xcworkspace などを持つ、Xcode 独自のビルドシステム、プロジェクト構造のこと」を、本記事では指します。

  • xcode-build-server

    • SourceKit-LSP に対して、「Xcode プロジェクト」に対してもサポート機能(言語サービス)を機能させるようにするためのもの。


🛠️ Build & Run

xcodebuildを使用して、VSCode から直接ビルドして実行することができます。
また、TOOLS のxcbeautifyを有効化して使用することがオススメされています。

  • 🔽 アイコン:ビルド&実行
  • 🔧 アイコン:ビルド
  • 右クリック:その他タスク
    • テスト実行もここから実行可能

settings.jsontasks.json を設定することで、ビルドや実行の挙動をカスタマイズすることも可能です。詳細はドキュメントを参照ください。

【備考】

  • xcodebuild
    Xcode のビルドシステムをコマンドラインから操作するためのコマンドラインツール。
  • xcbeautify
    xcodebuild の出力を見やすく整形するツール。fastlane でも推奨。


🪲 Debug

VSCode のデバッグ機能を使用して、iOS アプリケーションのデバッグ実行が可能となります。
Flutter などではお馴染みの F5 キー 実行によるデバッグ機能が使えます。

上記の通りlaunch.jsonを生成すると、以下のような設定が生成されます。

launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "sweetpad-lldb",
      "request": "attach",
      "name": "SweetPad: Build and Run (Wait for debugger)",
      "preLaunchTask": "sweetpad: debuging-launch"
    }
  ]
}

このまま実行すると preLaunchTask のsweetpad: debuging-launchが見つかりません。とエラーが出てしまうので、ドキュメントの設定内容をコピペします。(デフォルトで設定しておいて欲しい所ではありますが、、、)

tasks.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "sweetpad-lldb",
      "request": "attach",
      "name": "Attach to running app (SweetPad)", // nameは何でもOKです
      "preLaunchTask": "sweetpad: launch" // ここを変更
    }
  ]
}

ドキュメントの設定内容に差し替え、デバッグ実行を実施すると、正常に動作するようになりました。
実行環境や実行モードを切り替えて実行したい場合などは、適宜ドキュメントを参照にtasks.jsonlaunch.jsonに設定を追記してください。

【追記】

  • ブレークポイントを貼っても変数の中身が見れないのが残念ポイント。。。
    ref: Debug variables not shown #148
  • ただ、実行時間は Xcode から実行するよりもかなり短い印象(体感)。

【備考】

  • LLDB
    OSS の debugger であり、Xcode デフォルトの debugger。
  • CodeLLDB
    LLDB を搭載した VSCode 用の拡張機能。
    SweetPad では、内部的に CodeLLDB を使用している。


💅🏼 Format

settings.json で設定した format を使用して、Swift ファイルを自動フォーマットすることができます。

settings.json
{
  "[swift]": {
    "editor.defaultFormatter": "sweetpad.sweetpad",
    "editor.formatOnSave": true
  }
}

SweetPad では Apple 純正のswift-formatがデフォルト使用されますが、他の format を指定して使用することも可能です。


📱 Simulator & Devices(DESTINATIONS)

SweetPad では、iOS シミュレータや実機デバイスを簡単に管理することができます。
SweetPad では、特定のシミュレータや接続されたデバイスなど、アプリを実行できるデバイスのことを「Destination」と呼ぶようです。


おわり

SweetPad で快適な Swift 開発ライフを。

参考記事

【参考記事】
GitHubで編集を提案
NCDCエンジニアブログ

Discussion

OSZAR »