Xcode with Cursor

cheshire0105·2025년 4월 16일
1

iOS

목록 보기
37/42
post-thumbnail

1. 개요

지난 10년간 iOS 개발 분야에서 Xcode에 국한되지 않은 개발 환경을 구축하는 것은 큰 진전이다. 본 가이드는 Cursor(또는 VSCode 기반 편집기)를 사용하여 iOS 개발 환경을 보다 효율적으로 구성하는 방법을 단계별로 안내한다. Cursor를 활용하면 AI 지원 코드 편집 기능을 누리면서도, Xcode의 빌드, 디버깅, 시뮬레이터 관리 기능을 그대로 사용할 수 있다. 또한, 인젝션 라이브러리의 앱스토어 버전이 샌드박스 연동에서 발생하는 문제점을 GitHub에서 다운로드 받아 해결하는 방법과, Sweetpad 연동 방법도 함께 다룬다.


2. 목차

  1. Cursor 설치
  2. Xcode 빌드 서버 설정
  3. XCBeautify 설치
  4. Swift Format 설치
  5. Swift 언어 지원 확장 설치
  6. Sweetpad 설치 및 설정
  7. 핫 리로딩(Hot Reloading) 설정
  8. Cursor 코드 에디터 UI 개선 (Un-uglify)
  9. 일반적인 문제점 및 참고 사항
  10. 감 사의 말 및 참고 자료

3. Cursor 설치

  • 설명:
    새로운 코딩 경험을 위해 Cursor를 다운로드 및 설치한다. 기본 무료 티어만으로도 충분히 테스트할 수 있다.

  • 단계:

    1. Cursor 공식 웹사이트(cursor.com)에 접속하여 다운로드한다.
    2. 설치 파일을 실행하여 프로그램을 설치한다.
    3. 기본 무료 버전을 통해 Cursor의 기능들을 테스트한다.

4. Xcode 빌드 서버 설정

  • 설명:
    Xcode 빌드 서버를 구성하면, Swift와 C 기반 언어를 위한 SourceKit-LSP를 Xcode 외부에서도 사용할 수 있게 된다. 이로 인해 코드 자동완성, 점프 투 정의 등의 기능을 Cursor에서 원활하게 사용한다.

  • 설치 방법:

    1. 터미널을 열고 아래 명령어를 입력하여 xcode-build-server를 설치한다.
      brew install xcode-build-server
    2. 해당 도구가 설치되면 Cursor가 Xcode 빌드 서버 기능을 통해 SourceKit-LSP와 연동되어 다양한 코드 편집 기능을 제공한다.
  • 참고:


5. XCBeautify 설치

  • 설명:
    XCBeautify는 xcodebuild 명령어의 출력 결과를 보기 쉽게 포매팅해주는 도구이다. 이를 통해 빌드 결과를 Cursor 터미널에서 깔끔하게 확인할 수 있다.

  • 설치 방법:

    1. 터미널에서 다음 명령어를 입력하여 설치한다.
      brew install xcbeautify
  • 참고:


6. Swift Format 설치

  • 설명:
    SwiftFormat은 Swift 코드를 자동으로 포매팅해주는 라이브러리 및 CLI 도구이다.

  • 설치 방법:

    1. 터미널을 열고 아래 명령어를 실행한다.
      brew install swiftformat
  • 참고:


7. Swift 언어 지원 확장 설치

  • 설명:
    Cursor(또는 VSCode)에서 Swift 언어 기능(자동완성, 점프 투 정의 등)을 사용하기 위해 Swift Language Support 확장을 설치한다.

  • 설치 방법:

    1. Cursor 메뉴에서 View → Extensions로 이동한다.
    2. "Swift language support"를 검색하여 확장을 설치하고 활성화한다.
  • 기능:

    • 코드 자동 완성 및 정의 점프
    • 오류 주석 및 자동 수정 제안
    • CodeLLDB를 활용한 디버깅 런치 구성 생성
    • 패키지 의존성 뷰 및 테스트 익스플로러 제공

8. Sweetpad 설치 및 설정

  • 설명:
    Sweetpad는 xcodebuild CLI를 감싸서 Xcode의 타겟, 빌드 스킴, 시뮬레이터 관리, 테스트 실행 등을 Cursor 내에서 수행할 수 있도록 지원한다. 또한 Swift Format, SwiftLint, XcodeGen 등과도 연동된다.

  • 설치 및 설정 방법:

    1. Cursor 메뉴에서 View → Extensions로 이동한 후 "Sweetpad"를 검색하여 설치하고 활성화한다.
    2. 초기 설정을 위해 CMD + SHIFT + P를 눌러 명령 팔레트를 연다.
    3. “Sweetpad: Generate Build Server Config” 명령어를 선택하여 프로젝트 루트에 buildServer.json 파일을 생성한다.
    4. 다시 CMD + SHIFT + P를 눌러 “Sweetpad: Build & Run” 명령어를 선택하여 원하는 타겟을 빌드 및 실행한다.

9. 핫 리로딩 (Hot Reloading) 설정

  • 설명:
    기본적으로 Cursor는 Sweetpad를 통해 xcodebuild를 사용하여 프로젝트를 빌드하고 실행한다. 그러나 빌드 속도가 느려질 수 있으므로 핫 리로딩 설정을 통해 UI 변경사항을 빠르게 반영한다.

  • 설정 방법:

    1. Swift Package Manager(SPM)을 통해 Injection 라이브러리를 설치한다.
    2. 각 타겟의 Debug 설정에서 “Other Linker Flags” 항목에 아래 내용을 추가한다 (따옴표 없이 별도의 줄에 입력한다).
    3. 디버깅과, 릴리즈 두가지 다른 설정을 할 수 있을 텐데 릴리즈는 굳이 필요 없기에 디버깅에만 추가 해도 무방하다.
      -Xlinker
      -interposable
      이는 시뮬레이터 SDK에서 bitcode 문제를 회피하기 위한 설정이다.
    4. 최신 버전의 Injection 도구(InjectionIII)를 앱스토어 버전 대신 GitHub에서 다운로드하여 사용한다.
      • 앱스토어 버전은 샌드박스 연동에서 문제가 발생하였다.
      • GitHub 저장소 johnno1962/InjectionIII을 방문하여 최신 버전의 InjectionIII를 다운로드한다.
    5. 다운로드한 압축 파일의 내용을 풀어 /Applications 폴더에 복사한다.
    6. Xcode가 기본 위치(/Applications/Xcode.app)에 설치되어 있는지 확인한 후, InjectionIII 애플리케이션을 실행한다.
    7. 메뉴에서 “open project” 또는 “open recent”를 선택하여 올바른 workspace 파일을 연다.
    8. 또한 필자는 iCloud 폴더에서 xcode 프로젝트를 열어서 작업 했는데 iCloud 특성상 폴더 경로가 명확하지 않아서 그런지 에러가 났다.


Notes loaded successfully from UserDefaults.
💉 InjectionIII connected /Users/cheshire/Desktop/test/ThanksJet/ThanksJet.xcodeproj
💉 Watching files under the directory /Users/cheshire/Desktop/test/ThanksJet
💉 💉 ⚠️ Your project file seems to be in the Desktop or Documents folder and may prevent InjectionIII working as it has special permissions.
💉 Compiling /Users/cheshire/Desktop/test/ThanksJet/ThanksJet/ContentView.swift
/Users/cheshire/Library/Containers/com.johnholdsworth.InjectionIII/Data/tmp/command.sh: line 1: unexpected EOF while looking for matching "'
/Users/cheshire/Library/Containers/com.johnholdsworth.InjectionIII/Data/tmp/command.sh: line 2: syntax error: unexpected end of file
💉 ⚠️ Re-compilation failed (see: /Users/cheshire/Library/Containers/com.johnholdsworth.InjectionIII/Data/tmp/command.sh)
Could not read log file '/Users/cheshire/Library/Containers/com.johnholdsworth.InjectionIII/Data/tmp/eval101.log'

아마 iCloud 경로를 읽어오지 못해서 생기는 에러가 아닐까... 싶다

  • 핫 리로딩 코드 예시:

    import SwiftUI
    import Inject
    
    extension View {
        func enableHotReloading() -> some View {
            modifier(HotReloading())
        }
    }
    
    struct HotReloading: ViewModifier {
        @ObserveInjection var inject
       
        func body(content: Content) -> some View {
            content
                .enableInjection()
        }
    }
  • 주의:

    • enableHotReloading() 모디파이어를 사용하여 핫 리로딩을 설정할 수 있으나, 실제로는 뷰 내에 직접 @ObserveInjection var inject를 선언하여야 자동 리빌드가 적용된다.
    • 최신 RC 빌드에서만 완벽하게 동작하는 경우가 있으므로, 우선 Xcode에서 정상 작동하는지 확인한 후 Cursor로 전환하여 사용한다.

10. Cursor 코드 에디터 UI 개선 (Un-uglify)

  • 문제:
    기본 Cursor(VSCode) 에디터는 Xcode에서와 같은 세련된 스타일을 적용하지 않아 단순 텍스트 편집기로 보일 수 있다.

  • 폰트 스타일링 및 테마 설정:

    1. CMD + SHIFT + P를 눌러 명령 팔레트를 연 후 “Open User Settings JSON”을 선택한다.
    2. 아래 설정을 복사하여 붙여넣어 수직 들여쓰기 가이드 제거 및 특정 코드 정의에 볼드 스타일을 적용한다.
      "editor.guides.indentation": false,
      "editor.tokenColorCustomizations": {
          "textMateRules": [
              {
                  "scope": [
                      "entity.name.type.struct.swift",
                      "entity.name.type.class.swift",
                      "entity.name.type.actor.swift",
                      "entity.name.type.protocol.swift",
                      "entity.name.type.enum.swift",
                      "entity.name.type.swift"
                  ],
                  "settings": {
                      "fontStyle": "bold"
                  }
              },
              {
                  "scope": "meta.import.swift entity.name.type.swift",
                  "settings": {
                      "fontStyle": ""
                  }
              }
          ]
      }
    3. Xcode와 유사한 UI를 원한다면, Extensions → 검색("Xcode Theme")를 통해 적절한 테마를 설치하여 적용한다.

11. 일반적인 문제점 및 참고 사항

  • 문제점:
    Cursor는 XCAssets, 로컬라이즈 파일, .xcodeproj 등 Xcode 전용 파일이나 카탈로그를 관리하지 못한다.
    Instruments나 Organizer와 같은 도구도 지원하지 않는다.

  • 해결책:
    Cursor는 단순히 텍스트 파일 편집용으로 사용하고, Xcode는 빌드, 에셋 관리 등 Xcode 전용 작업을 계속 사용한다.
    파일 동기화나 신규 파일 추가 문제 발생 시, 수동 조정 방법을 고려할 필요가 있다.


12. 참고 자료

  • 감 사의 말:
    Xcode 독점 체제를 벗어나 더 자유로운 개발 환경을 구성할 수 있도록 도움을 주신 여러 기여자 분들께 감사를 표한다.

    • SolaWing: Xcode Build Server 제공
    • Charles Pisciotta, Thi Doan, Pedro Piñera Buendía, William Lyu: XCBeautify 기여
    • Nick Lockwood: SwiftFormat 개발
    • Adam Fowler, Tim Condon, Paul LeMarquand: VSCode-Swift 관련
    • Yevhenii Hyzyla: Sweetpad 개발
    • John Holdsworth: InjectionIII 개발
    • Krzysztof Zablocki: Injection 연동 지원
    • Thomas Ricouard, Rudrank Riyam 및 기타 많은 기여자에게 감사를 표한다.
  • 참고 자료:


13. 마무리

본 가이드의 각 단계를 차근차근 따라 설정하면, Cursor와 Xcode를 효과적으로 연동하여 AI 지원 코드 편집과 빠른 개발 사이클을 구축할 수 있다.
앱스토어 버전 인젝션 라이브러리의 샌드박스 문제는 GitHub에서 제공하는 최신 버전으로 해결 가능하며, Sweetpad와의 연동으로 빌드 및 실행 과정에서 큰 편의를 누릴 수 있다.
문제 발생 시 우선 Xcode에서 정상 동작하는지 확인한 후 Cursor로 전환하여 사용하고, 파일 동기화나 신규 파일 추가 문제는 수동으로 조정하는 방법을 고려한다.
또한 커서에서는 command + s 키를 눌러 저장 해야 엑스코드와 연동 되면서 핫 리로드가 된다.
행복한 코딩 되시길 바란다.

1개의 댓글

comment-user-thumbnail
2025년 4월 21일

CBL 하라니까 Cursor Based Learning 하시네요

답글 달기