Tutorials

Wie man Cursor AI und Swift XCode-Projekte (xcodeproj) synchronisiert

Erstelle ein Boilerplate für dein nächstes Swift-Projekt mit Cursor AI und XcodeGen

Einführung

Xcode verwendet .xcodeproj-Dateien, um alles zu verwalten. Es verfolgt Dateireferenzen, Gruppen und Build-Einstellungen an einem zentralen Ort.

Das Problem ist jedoch, dass Änderungen außerhalb von Xcode, wie zum Beispiel in VSCode oder mit Cursor AI, nicht automatisch im Xcode-Projekt angezeigt werden.

Du fügst eine neue Swift-Datei in VSCode hinzu, und Xcode scheint keine Ahnung zu haben, dass sie existiert. Wenn du nicht vorsichtig bist, kannst du mit nicht übereinstimmenden Dateien, fehlenden Referenzen oder doppelten Ordnern enden.

Lass uns Schritt für Schritt durchgehen, wie du alles in Harmonie halten kannst.

1. Deine Swift-Umgebung in Cursor AI einrichten

Swift-Erweiterungen in Cursor installieren

Swift-Erweiterung

Stelle zunächst sicher, dass die Swift-Unterstützung in Cursor AI vollständig eingerichtet ist:

  • Syntax-Hervorhebung und Code-Vervollständigung
  • Code-Navigationsfunktionen
  • Refactoring und schnelle Fehlerbehebung
  • Unterstützung für Paketverwaltung
  • Debugging-Integration

Installiere Swift Extension

SwiftLint

Obwohl es nicht unbedingt notwendig ist, hilft dir dieses Tool, Swift-Stile und Konventionen durchzusetzen.

brew install swiftlint
Installiere Swiftlint VS Code Extension{target=_blank rel=nofollow}

Swiftlint-Dokumentation{target=_blank rel=nofollow}

CodeLLDB
Diese Erweiterung dient zum Debuggen von Swift-Code. Sie integriert sich mit LLDB, um ein umfangreiches Debugging-Erlebnis zu bieten.

Installiere CodeLLDB{target=_blank rel=nofollow}

Eine cursorrule-Datei hinzufügen
Mit .cursorrules können wir dem KI Anweisungen geben.

Dies hilft der KI, zu verstehen, wie wir unseren Code und unsere Beschreibungen geschrieben haben möchten.

Beginne damit, eine .cursorrules-Datei im Hauptverzeichnis deines Projekts hinzuzufügen.

Hier ein Beispiel, was du hinzufügen kannst:

mathematica
Code kopieren
du bist ein Experte in Swift und SwiftUI. Du schreibst immer wartbaren und sauberen Code.

Fokussiere dich auf die neuesten Versionen der Dokumentation und Funktionen vom September 2024.

Deine Beschreibungen sollten kurz und prägnant sein.
Entferne keine Kommentare.

SwiftUIProjekt Struktur: Der Hauptordner enthält einen "Sources"-Ordner mit "App" für Hauptdateien, "Views" unterteilt in "Home" und "Profile" mit ihren ViewModels und "Shared" für wiederverwendbare Komponenten und Modifikatoren. Es gibt "Models" für Datenmodelle, "ViewModels" für view-spezifische Logik, "Services" mit "Network" für Netzwerkanfragen und "Persistence" für Datenspeicherung, und "Utilities" für Erweiterungen, Konstanten und Helferfunktionen. Der "Resources"-Ordner enthält "Assets" für Bilder und Farben, "Localization" für lokalisierten Text und "Fonts" für benutzerdefinierte Schriftarten. Schließlich enthält der "Tests"-Ordner "UnitTests" für Unit-Tests und "UITests" für UI-Tests.

SwiftUI UI-Design-Regeln:

Verwende eingebaute Komponenten: Nutze die nativen UI-Elemente von SwiftUI wie List, NavigationView, TabView und SF-Symbole für ein poliertes, iOS-konsistentes Aussehen.
Meistere Layout-Tools: Verwende VStack, HStack, ZStack, Spacer und Padding für responsive Designs; nutze LazyVGrid und LazyHGrid für Gitter; GeometryReader für dynamische Layouts.
Füge visuelle Akzente hinzu: Verbessere UIs mit Schatten, Verläufen, Unschärfen, benutzerdefinierten Formen und Animationen unter Verwendung des .animation() Modifikators für sanfte Übergänge.
Gestalte für Interaktion: Integriere Gesten (Wisch- und Langdrückgesten), haptisches Feedback, klare Navigation und reaktionsfähige Elemente zur Verbesserung der Benutzerbindung und Zufriedenheit.
Swift-Dokumentation hinzufügen
Überlege, benutzerdefinierte Swift-Dokumentationen zu deinem Projekt hinzuzufügen. Du kannst beliebige Dokumente unter folgenden Pfad hinzufügen:

Cursor > Präferenzen > Cursor-Einstellungen > Funktionen.

2. Sync- und Code-Generierungsbibliotheken installieren
Wie wir im vorherigen Abschnitt gesehen haben, hat Xcode seine Eigenheiten. Eine Datei in Cursor hinzufügen? Etwas umbenennen? Xcode ignoriert dich.

XcodeGen einführen
XcodeGen stellt sicher, dass deine Projektdateien mit deiner tatsächlichen Ordnerstruktur übereinstimmen. Es spart Zeit und sorgt für einen reibungslosen Workflow.

XcodeGen installieren
Zunächst installieren wir XcodeGen. Wenn du Homebrew hast, bist du bereits vorbereitet:

bash
Code kopieren
brew install xcodegen
Erstelle dein project.yml
Diese Datei ist das Herzstück von XcodeGen. Sie definiert die Struktur deines Projekts, die Ziele und die Einstellungen. Hier ist ein einfaches Beispiel, um loszulegen:

yaml[project.yml]
Code kopieren
name: MyZunderApp
options:
  bundleIdPrefix: com.zunderai
  deploymentTarget:
    iOS: 17.0
  xcodeVersion: "15.3"
  generateEmptyDirectories: true
  createIntermediateGroups: true

targets:
  MyZunderApp:
    type: application
    platform: iOS
    sources: [MyZunderApp]
    settings:
      base:
        SWIFT_VERSION: 5.10.1
        ENABLE_TESTABILITY: YES
    info:
      path: Sources/Info.plist
      properties:
        CFBundleShortVersionString: "1.0.0"
        CFBundleVersion: "1"
        UILaunchStoryboardName: LaunchScreen
        UIApplicationSceneManifest:
          UIApplicationSupportsMultipleScenes: true

schemes:
  MyZunderApp:
    build:
      targets:
        MyZunderApp: all
    run:
      config: Debug

configs:
  Debug: debug
  Release: release
Stelle sicher, dass du MyZunderApp mit dem Namen deines Projekts ersetzt. ::

Erstelle das Projektverzeichnis
Wenn die project.yml wie folgt aussieht:

yaml[project.yml]
Code kopieren
name: MyZunderApp
Dann sollte das Projektverzeichnis so aussehen:

Code kopieren
MyZunderApp/
Wenn du diesen Ordner nicht erstellst, funktioniert der Befehl xcodegen generate nicht.

bash
Code kopieren
mkdir MyZunderApp
Generiere dein XCode-Projekt
bash
Code kopieren
xcodegen generate
3. Automatisiere Befehle für einen besseren Workflow
Im nächsten Schritt möchten wir den Workflow verbessern, um manuelle Schritte zu reduzieren.

Wir erstellen eine tasks.json-Datei und automatisieren wesentliche Befehle.

Wie das Generieren des XCode-Projekts, das Bauen des Projekts oder das Ausführen von Swiftlint.

Mit dieser Konfiguration behalten wir die Konsistenz bei und halten alles synchron, ohne deine Entwicklungsumgebung zu verlassen.

Erstelle eine neue Datei in .vscode/tasks.json und füge folgendes hinzu:

json[tasks.json]
Code kopieren
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Generiere Xcode-Projekt mit XcodeGen",
            "type": "shell",
            "command": "xcodegen",
            "args": [
                "generate"
            ],
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            },
            "runOptions": {
                "runOn": "folderOpen"
            }
        },
        {
            "label": "Baue Swift-Projekt",
            "type": "shell",
            "command": "xcodebuild",
            "args": [
            "-project",
                "todoapp.xcodeproj",
                "-scheme",
                "MyZunderApp",
                "-configuration",
                "Debug",
                "clean",
                "build"
            ],
            "problemMatcher": [
                "$xcodebuild"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            },
            "runOptions": {
                "runOn": "default"
            }
        }
    ]
}
Stelle sicher, dass du die -project und -scheme Argumente mit dem Namen deines Projekts und Schemas ersetzt. Sieh dir die project.yml-Datei an, um herauszufinden, was dein Projekt- und Schemaname ist.

bash
Code kopieren
  "-project",
  "todoapp.xcodeproj", # <-- ersetze dies mit dem Namen deines Projekts
  "-scheme",
  "MyZunderApp", # <-- ersetze dies mit deinem Schemanamen
::

Aufgaben mit Cursor AI ausführen
Nun kannst du die Aufgaben mit Cursor AI ausführen.

Drücke (Cmd+Shift+B oder Ctrl+Shift+B) und wähle die Aufgabe aus, die du ausführen möchtest.

Bonus: Verwende Swiftlint, um deinen Code sauber zu halten
Installiere Swiftlint
Falls du Swiftlint noch nicht installiert hast.

bash
Code kopieren
brew install swiftlint
Füge eine Swiftlint-Konfigurationsdatei hinzu
Erstelle im Verzeichnis deines Projekts eine .swiftlint.yml-Datei, um die SwiftLint-Regeln nach deinen Bedürfnissen anzupassen:

yaml[.swiftlint.yml]
Code kopieren
disabled_rules:
  - line_length              # Deaktiviere, wenn lange Zeilen häufig unvermeidbar sind
  - trailing_whitespace      # Verwalte diese Regel basierend auf den Teampräferenzen
  - file_length              # Deaktiviere für größere Dateien wie Datenmodelle
  - cyclomatic_complexity    # Deaktiviere, wenn komplexe Funktionen unvermeidbar sind
  - force_cast               # Sei vorsichtig, aber erlaube Force-Casting, wenn notwendig
  - force_unwrapping         # Erlaube Force-Unwrapping für Einfachheit in einigen Fällen
  - large_tuple              # Verwalte die Tuple-Größe basierend auf spezifischen Bedürfnissen
  - function_body_length     # Deaktiviere, wenn längere Funktionen notwendig sind
  - type_body_length         # Deaktiviere, wenn Typen natürlicherweise groß werden

opt_in_rules:
  - empty_count              # Bevorzuge `.isEmpty` statt `.count`
  - closure_end_indentation  # Richte schließende Klammern für bessere Lesbarkeit aus
  - sorted_first_last        # Verwende `.first` und `.last` statt `.sorted()`
  - strict_fileprivate       # Erzwinge `fileprivate` wo angebracht
  - redundant_nil_coalescing # Vermeide unnötiges Nil-Coalescing

included:
  - Sources
  - Tests

excluded:
  - Carthage
  - Pods
  - .build
  - Generated

reporter: "xcode"
Integriere Swiftlint in Cursor AI
Füge dies zu deiner .vscode/tasks.json-Datei hinzu:

json[tasks.json]
Code kopieren
{
  "label": "Führe SwiftLint aus",
  "type": "shell",
  "command": "swiftlint",
  "args": [],
  "problemMatcher": [
      "$swiftlint"
  ],
  "group": {
      "kind": "build",
      "isDefault": true
  },
  "presentation": {
      "echo": true,
      "reveal": "always",
      "focus": false,
      "panel": "shared",
      "showReuseMessage": true,
      "clear": false
  },
  "runOptions": {
      "runOn": "folderOpen"
  }
}
Nun kannst du den Swiftlint-Befehl aus dem Befehlsmenü in Cursor ausführen.

Drücke (Cmd+Shift+B oder Ctrl+Shift+B) und wähle "Run Task" > "Run SwiftLint".

Weitere Ressourcen
Swiftenv
swiftenv{target=_blank rel=nofollow} ist ein Tool, um mehrere Swift-Versionen auf deinem System einfach zu verwalten und zwischen ihnen zu wechseln.

Viel Spaß beim Programmieren! 🎉

Der Ultimate Cursor AI Kurs ist jetzt verfügbar!

Schaue dir kostenlose Lektionen an und sichere dir deinen Early-Bird-Platz.

Jetzt ansehen