
지난 10년간 iOS 개발 분야에서 Xcode에 국한되지 않은 개발 환경을 구축하는 것은 큰 진전이다. 본 가이드는 Cursor(또는 VSCode 기반 편집기)를 사용하여 iOS 개발 환경을 보다 효율적으로 구성하는 방법을 단계별로 안내한다. Cursor를 활용하면 AI 지원 코드 편집 기능을 누리면서도, Xcode의 빌드, 디버깅, 시뮬레이터 관리 기능을 그대로 사용할 수 있다. 또한, 인젝션 라이브러리의 앱스토어 버전이 샌드박스 연동에서 발생하는 문제점을 GitHub에서 다운로드 받아 해결하는 방법과, Sweetpad 연동 방법도 함께 다룬다.
설명:
새로운 코딩 경험을 위해 Cursor를 다운로드 및 설치한다. 기본 무료 티어만으로도 충분히 테스트할 수 있다.
단계:
설명:
Xcode 빌드 서버를 구성하면, Swift와 C 기반 언어를 위한 SourceKit-LSP를 Xcode 외부에서도 사용할 수 있게 된다. 이로 인해 코드 자동완성, 점프 투 정의 등의 기능을 Cursor에서 원활하게 사용한다.
설치 방법:
xcode-build-server를 설치한다. brew install xcode-build-server참고:
설명:
XCBeautify는 xcodebuild 명령어의 출력 결과를 보기 쉽게 포매팅해주는 도구이다. 이를 통해 빌드 결과를 Cursor 터미널에서 깔끔하게 확인할 수 있다.
설치 방법:
brew install xcbeautify참고:
설명:
SwiftFormat은 Swift 코드를 자동으로 포매팅해주는 라이브러리 및 CLI 도구이다.
설치 방법:
brew install swiftformat참고:
설명:
Cursor(또는 VSCode)에서 Swift 언어 기능(자동완성, 점프 투 정의 등)을 사용하기 위해 Swift Language Support 확장을 설치한다.
설치 방법:
기능:
설명:
Sweetpad는 xcodebuild CLI를 감싸서 Xcode의 타겟, 빌드 스킴, 시뮬레이터 관리, 테스트 실행 등을 Cursor 내에서 수행할 수 있도록 지원한다. 또한 Swift Format, SwiftLint, XcodeGen 등과도 연동된다.
설치 및 설정 방법:
buildServer.json 파일을 생성한다. 설명:
기본적으로 Cursor는 Sweetpad를 통해 xcodebuild를 사용하여 프로젝트를 빌드하고 실행한다. 그러나 빌드 속도가 느려질 수 있으므로 핫 리로딩 설정을 통해 UI 변경사항을 빠르게 반영한다.
설정 방법:
-Xlinker
-interposable이는 시뮬레이터 SDK에서 bitcode 문제를 회피하기 위한 설정이다./Applications 폴더에 복사한다./Applications/Xcode.app)에 설치되어 있는지 확인한 후, InjectionIII 애플리케이션을 실행한다.
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를 선언하여야 자동 리빌드가 적용된다. 문제:
기본 Cursor(VSCode) 에디터는 Xcode에서와 같은 세련된 스타일을 적용하지 않아 단순 텍스트 편집기로 보일 수 있다.
폰트 스타일링 및 테마 설정:
"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": ""
}
}
]
}문제점:
Cursor는 XCAssets, 로컬라이즈 파일, .xcodeproj 등 Xcode 전용 파일이나 카탈로그를 관리하지 못한다.
Instruments나 Organizer와 같은 도구도 지원하지 않는다.
해결책:
Cursor는 단순히 텍스트 파일 편집용으로 사용하고, Xcode는 빌드, 에셋 관리 등 Xcode 전용 작업을 계속 사용한다.
파일 동기화나 신규 파일 추가 문제 발생 시, 수동 조정 방법을 고려할 필요가 있다.
감 사의 말:
Xcode 독점 체제를 벗어나 더 자유로운 개발 환경을 구성할 수 있도록 도움을 주신 여러 기여자 분들께 감사를 표한다.
참고 자료:
본 가이드의 각 단계를 차근차근 따라 설정하면, Cursor와 Xcode를 효과적으로 연동하여 AI 지원 코드 편집과 빠른 개발 사이클을 구축할 수 있다.
앱스토어 버전 인젝션 라이브러리의 샌드박스 문제는 GitHub에서 제공하는 최신 버전으로 해결 가능하며, Sweetpad와의 연동으로 빌드 및 실행 과정에서 큰 편의를 누릴 수 있다.
문제 발생 시 우선 Xcode에서 정상 동작하는지 확인한 후 Cursor로 전환하여 사용하고, 파일 동기화나 신규 파일 추가 문제는 수동으로 조정하는 방법을 고려한다.
또한 커서에서는 command + s 키를 눌러 저장 해야 엑스코드와 연동 되면서 핫 리로드가 된다.
행복한 코딩 되시길 바란다.
CBL 하라니까 Cursor Based Learning 하시네요