# Maguyva의 Swift 지원: iOS와 macOS를 위한 코드 그래프

Canonical source: https://maguyva.ai/ko/languages/swift

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva는 AST, 심볼, 그래프로 Swift를 지원하여, AI 에이전트가 iOS와 macOS 코드의 프로토콜, 익스텐션, 이니셜라이저, 옵저버를 따라갈 수 있게 합니다.

## 지원 현황 요약

- 등급: AST 및 심볼 지원
- 프로그래밍
- 확장자: .swift
- 구문 인식 검색과 구조적 컨텍스트를 위한 실제 AST 파싱을 제공합니다.
- 이름이 지정된 심볼은 시맨틱 조회와 상호 참조에 활용됩니다. 관계 추출이 활성화된 경우 그래프 내비게이션을 사용할 수 있습니다.
- 이 언어는 그래프 인식 검색에 심볼과 관계를 제공합니다. 지원되는 에지 유형은 언어 고유의 구문 구조에 따라 다릅니다.
- AST 파싱과 심볼 추출을 모두 지원합니다.

## 가장 적합한 경우

- 큰 앱 타깃과 공유 Swift 패키지를 가진 iOS 및 macOS 팀.
- 프로토콜과 익스텐션을 중심으로 만들어져 한 타입의 동작이 여러 파일에 흩어진 코드베이스.
- 공유 모델, 서비스, 프로토콜을 바꾸기 전에 영향 분석이 필요한 에이전트 워크플로.

## 에이전트 워크플로

- 프로토콜 요구 사항을 바꾸기 전에 그 프로토콜을 준수하는 모든 타입을 찾습니다.
- ViewModel, 코디네이터, 패키지를 넘나들며 서비스 메서드의 호출자를 추적합니다.
- 어떤 상태를 건드리는 이니셜라이저, 계산 프로퍼티, `didSet` 옵저버를 찾아냅니다.

## Swift에 파일 검색 이상의 것이 필요한 이유

Swift는 한 타입을 여러 곳에 펼쳐 놓습니다. 구조체는 한 파일에서 선언되고, 다른 세 파일의 익스텐션에서 동작을 얻으며, 패키지에 정의된 프로토콜을 준수합니다. 상태 변화는 계산 프로퍼티와 `willSet` / `didSet` 옵저버 속에 숨어 있습니다. 파일을 하나씩 읽는 에이전트는 그 대부분을 놓칩니다.

Maguyva는 그 구조를 인덱싱하므로, 에이전트는 한 타입의 멤버, 준수 관계, 호출자를 함께 볼 수 있습니다.

## Maguyva가 Swift에서 추출하는 것

Maguyva는 `.swift`를 지원합니다. 호출 가능한 심볼에는 함수, `init`과 `deinit`, 서브스크립트, 계산 프로퍼티의 getter와 setter, `willSet` / `didSet` 옵저버가 포함되므로, 상태를 바꾸는 코드가 프로퍼티 본문에 묻히지 않고 심볼로 검색됩니다.

구조체, 열거형, 프로토콜, 익스텐션 안에 선언된 멤버는 소유 타입으로 한정되며(예: `CartStore.add`), 익스텐션에서 추가된 멤버는 확장된 타입에 귀속됩니다. 정의 이름에서는 제네릭 매개변수, 프로토콜 준수 목록, `?` / `!` 접미사가 제거되므로 조회는 순수한 이름으로 이루어집니다. 호출은 `self.`와 클래스 한정을 유지하고, 후행 클로저도 호출 인자 수에 포함됩니다.

그래프는 호출, 프로토콜 준수, 상속, 오버라이드, 인스턴스화, 속성(attribute), 타입 참조, 읽기와 쓰기, `throw` 엣지를 기록합니다.

## 에이전트 프롬프트 예시

- "`PaymentProvider`를 준수하는 타입은 무엇이고, 각각 어디서 생성되나요?" (`dependency_search`)
- "`CartStore.add`를 누가 호출하고, 어떤 뷰에서 호출하나요?" (`find_symbol`, 그다음 `dependency_search` incoming)
- "푸시 알림이 받은 편지함 화면에 어떻게 도달하는지 설명해 줘." (`get_task_context`)

## 알려진 한계

- 매핑되는 것은 `.swift` 소스뿐입니다. Storyboard와 XIB 파일은 확장자 목록에 없으므로, Interface Builder의 연결은 그래프 밖에 있습니다.
- `print`, `debugPrint`, `NSLog`, 어서션 같은 표준 라이브러리와 Foundation 호출은 관계에서 걸러지므로 그래프 엣지가 아닙니다. 이런 호출에는 `text_pattern_search`를 사용하세요.

## 다음 단계

[빠른 시작](/ko/docs/quickstart)으로 저장소를 연결한 다음, [호환성 페이지](/ko/docs/compatibility)에서 지원 매트릭스를 확인하세요. 같은 제품을 Android에도 출시한다면 [Kotlin 가이드](/ko/languages/kotlin)를 읽어 보세요.

## 엔진 세부 정보

- 호출 가능한 심볼에는 함수, `init`, `deinit`, 서브스크립트, 계산 프로퍼티의 getter와 setter, `willSet` / `didSet` 옵저버가 포함됩니다.
- 구조체, 열거형, 프로토콜, 익스텐션의 멤버는 `CartStore.add`처럼 소유 타입으로 한정됩니다.
- 정의 이름에서 제네릭 매개변수, 프로토콜 준수 목록, `?` / `!` 접미사가 제거되며, 호출은 `self.`와 클래스 한정을 유지합니다.

## 유용한 MCP 진입점

- `find_symbol`: 정의와 참조가 필요할 때 타입, 프로토콜, 메서드 이름으로 쓰세요.
- `dependency_search`: 프로토콜에 쓰면 준수하는 타입을, 메서드에 incoming으로 쓰면 호출자를 찾을 수 있습니다.
- `get_task_context`: “푸시 알림이 받은 편지함 화면에 어떻게 도달하는지 설명해 줘” 같은 프롬프트에 쓰세요.
